禅道bug修复

This commit is contained in:
BianLzhaoMin 2025-08-28 13:03:08 +08:00
parent 526f87d0dd
commit 7fc7bbed00
28 changed files with 365 additions and 73 deletions

View File

@ -5,4 +5,4 @@ VUE_APP_TITLE = 实名制管理系统
ENV = 'production'
# 实名制管理系统/生产环境
VUE_APP_BASE_API = '/prod-api'
VUE_APP_BASE_API = '/hd-realname/prod-api'

View File

@ -424,8 +424,8 @@ export default {
//
onHandleClear(tag) {
this.filterQueryList.forEach((item) => {
if (item.label === tag.label) {
item.value = '全部'
if (item.label === tag.pLabel) {
item.value = ''
}
})
this.onHandleQuery()
@ -517,6 +517,7 @@ export default {
(j) => j.value === item.value,
).label,
value: item.value,
pLabel: item.label,
}
})
},

View File

@ -68,6 +68,10 @@
type="danger"
icon="el-icon-delete"
v-hasPermi="['main:project:delete']"
v-if="
data.pmProjectVoList &&
data.pmProjectVoList.length === 0
"
@click="onHandleDeleteAllProject(data)"
>
删除
@ -93,6 +97,8 @@
<el-form-item label="总工程名称" prop="mainProName">
<el-input
clearable
maxlength="60"
show-word-limit
placeholder="请输入总工程名称"
v-model="addOrEditForm.mainProName"
/>
@ -225,6 +231,10 @@ export default {
trigger: 'blur',
message: '请输入总工程名称',
},
{
max: 60,
message: '最大长度为60个字符',
},
],
volLevel: [
{

View File

@ -68,6 +68,10 @@
type="danger"
icon="el-icon-delete"
v-hasPermi="['dept:project:delete']"
v-if="
data.pmProjectVoList &&
data.pmProjectVoList.length === 0
"
@click="onHandleDeleteDeptProject(data)"
>
删除
@ -113,6 +117,8 @@
<el-form-item label="项目部名称" prop="orgName">
<el-input
clearable
maxlength="60"
show-word-limit
placeholder="请输入项目部名称"
v-model="addOrEditForm.orgName"
/>
@ -252,6 +258,10 @@ export default {
trigger: 'blur',
message: '请输入项目部名称',
},
{
max: 60,
message: '最大长度为60个字符',
},
],
isEnable: [
{

View File

@ -51,6 +51,8 @@
<el-form-item label="标段工程名称" prop="proName">
<el-input
clearable
maxlength="60"
show-word-limit
placeholder="请输入标段工程名称"
v-model="addOrEditForm.proName"
/>
@ -60,6 +62,8 @@
<el-form-item label="标段工程简称" prop="simpleName">
<el-input
clearable
maxlength="60"
show-word-limit
placeholder="请输入标段工程简称"
v-model="addOrEditForm.simpleName"
/>
@ -138,6 +142,8 @@
<el-form-item label="工程地址" prop="proAddress">
<el-input
clearable
maxlength="60"
show-word-limit
placeholder="请输入总工程名称"
v-model="addOrEditForm.proAddress"
/>
@ -219,14 +225,14 @@ export default {
data() {
//
const validatePlanEndTime = (rule, value, callback) => {
if (value <= this.addOrEditForm.planStartTime) {
if (value <= this.addOrEditForm.startTime) {
callback(new Error('竣工时间不能小于开工时间'))
}
callback()
}
const validatePlanStartTime = (rule, value, callback) => {
if (value >= this.addOrEditForm.planEndTime) {
if (value >= this.addOrEditForm.endTime) {
callback(new Error('开工时间不能大于竣工时间'))
}
callback()
@ -272,6 +278,10 @@ export default {
trigger: 'blur',
message: '请输入标段工程名称',
},
{
max: 60,
message: '最大长度为60个字符',
},
],
simpleName: [
{
@ -279,6 +289,10 @@ export default {
trigger: 'blur',
message: '请输入标段工程简称',
},
{
max: 60,
message: '最大长度为60个字符',
},
],
proType: [
{
@ -310,6 +324,10 @@ export default {
trigger: 'blur',
message: '请输入工程地址',
},
{
max: 60,
message: '最大长度为60个字符',
},
],
startTime: [
{

View File

@ -135,6 +135,10 @@ export default {
type: Object,
default: () => {},
},
formType: {
type: Number,
default: () => 1,
},
},
data() {
return {

View File

@ -80,6 +80,7 @@
>
<template slot="outerContent">
<AddOrEditForm
:formType="formType"
:editFormData="editFormData"
ref="addOrEditSubBaseInfoRef"
/>
@ -144,6 +145,7 @@ export default {
name: 'corporateSeal',
},
],
formType: 1,
}
},
methods: {
@ -161,6 +163,7 @@ export default {
//
onHandleAddOrEditSubBaseInfo(type, data, title) {
this.dialogConfig.outerTitle = `${title}分包商`
this.formType = type
if (type === 2) {
Object.assign(this.editFormData, data)
@ -172,7 +175,7 @@ export default {
//
onHandleDeleteSubBaseInfo(data) {
this.$confirm('确定删除该工程吗?', '温馨提示', {
this.$confirm('确定删除该分包商吗?', '温馨提示', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning',

View File

@ -18,8 +18,8 @@ export const formLabel = [
f_model: 'subName',
},
{
f_type: 'sel',
f_selList: [],
f_type: 'ipt',
// f_selList: [],
isShow: false, // 是否展示label
f_model: 'proName',
f_label: '工程名称',

View File

@ -91,13 +91,33 @@
:file-list.sync="addOrEditForm.fileList_1"
/> -->
<el-tag
<!-- <el-tag
type="primary"
:key="item.id"
v-for="item in addOrEditForm.fileList_1"
>
{{ item.name }}
</el-tag>
</el-tag> -->
<div
:key="item.id"
class="files-content"
v-for="item in addOrEditForm.fileList_1"
>
<el-tag
@click="onHandlePreviewFile(item)"
style="cursor: pointer"
>
{{ item.name }}
</el-tag>
<span
class="cursor-blue"
@click="onHandleDownloadFile(item)"
>
下载
</span>
</div>
</el-form-item>
</el-col>
</el-row>
@ -122,13 +142,33 @@
prop="businessLicense"
label="农民工工资已支付完成承诺书"
>
<el-tag
<!-- <el-tag
type="primary"
:key="item.id"
v-for="item in addOrEditForm.fileList_2"
>
{{ item.name }}
</el-tag>
</el-tag> -->
<div
:key="item.id"
class="files-content"
v-for="item in addOrEditForm.fileList_2"
>
<el-tag
@click="onHandlePreviewFile(item)"
style="cursor: pointer"
>
{{ item.name }}
</el-tag>
<span
class="cursor-blue"
@click="onHandleDownloadFile(item)"
>
下载
</span>
</div>
</el-form-item>
</el-col>
</el-row>
@ -322,6 +362,16 @@ export default {
})
}
},
//
onHandlePreviewFile(item) {
window.open(item.url, '_blank')
},
//
onHandleDownloadFile(item) {
window.open(item.url, '_blank')
},
},
async created() {
@ -355,3 +405,12 @@ export default {
},
}
</script>
<style lang="scss" scoped>
.files-content {
width: 100%;
display: flex;
align-items: center;
justify-content: space-between;
}
</style>

View File

@ -12,6 +12,8 @@
<el-form-item label="分包商合同编码" prop="subContractCode">
<el-input
clearable
maxlength="60"
show-word-limit
placeholder="请输入分包商合同编码"
v-model="addOrEditForm.subContractCode"
/>
@ -23,6 +25,8 @@
<el-form-item label="分包商合同名称" prop="subContractName">
<el-input
clearable
maxlength="60"
show-word-limit
placeholder="请输入分包商合同名称"
v-model="addOrEditForm.subContractName"
/>
@ -140,6 +144,10 @@ export default {
trigger: 'blur',
message: '请输入分包商合同编码',
},
{
max: 60,
message: '最大长度为60个字符',
},
],
subContractName: [
{
@ -147,6 +155,10 @@ export default {
trigger: 'blur',
message: '请输入分包商合同名称',
},
{
max: 60,
message: '最大长度为60个字符',
},
],
subId: [
{

View File

@ -88,7 +88,7 @@
>
修改
</el-button>
<el-button
<!-- <el-button
size="mini"
type="danger"
icon="el-icon-delete"
@ -97,7 +97,7 @@
@click="onHandleDeleteSubEntry(data)"
>
删除
</el-button>
</el-button> -->
<el-button
size="mini"
type="primary"

View File

@ -114,7 +114,7 @@
:limit="3"
:file-size="20"
:multiple="true"
:is-detail="formType === 3"
v-if="formType === 2"
:uploadTip="
formType === 3
? ''
@ -130,6 +130,28 @@
'docx',
]"
/>
<template v-if="formType === 3">
<div
:key="item.url"
class="files-content"
v-for="item in addOrEditForm.businessLicense"
>
<el-tag
@click="onHandlePreviewFile(item)"
style="cursor: pointer"
>
{{ item.name }}
</el-tag>
<span
class="cursor-blue"
@click="onHandleDownloadFile(item)"
>
下载
</span>
</div>
</template>
</el-form-item>
</el-col>
</el-row>
@ -308,9 +330,42 @@ export default {
(item) => item.value === val,
).label
const team = await getTeamSelectListAPI({ subId: val })
this.getTeamAndProject(val)
// const team = await getTeamSelectListAPI({ subId: val })
// const lotProject = await getLotProjectSelectListBySubIdAPI({
// subId: val,
// })
// this.teamSelectList = team.rows.map((item) => {
// return {
// value: item.id,
// label: item.teamName,
// }
// })
// this.lotProjectSelectList = lotProject.rows.map((item) => {
// return {
// value: item.id,
// label: item.proName,
// }
// })
},
onChangeTeamIdFun(val) {
this.addOrEditForm.teamName = this.teamSelectList.find(
(item) => item.value === val,
).label
},
onChangeProIdFun(val) {
this.addOrEditForm.proName = this.lotProjectSelectList.find(
(item) => item.value === val,
).label
},
//
async getTeamAndProject(subId) {
const team = await getTeamSelectListAPI({ subId })
const lotProject = await getLotProjectSelectListBySubIdAPI({
subId: val,
subId,
})
this.teamSelectList = team.rows.map((item) => {
@ -326,15 +381,15 @@ export default {
}
})
},
onChangeTeamIdFun(val) {
this.addOrEditForm.teamName = this.teamSelectList.find(
(item) => item.value === val,
).label
//
onHandlePreviewFile(item) {
window.open(item.url, '_blank')
},
onChangeProIdFun(val) {
this.addOrEditForm.proName = this.lotProjectSelectList.find(
(item) => item.value === val,
).label
//
onHandleDownloadFile(item) {
window.open(item.url, '_blank')
},
},
@ -369,6 +424,7 @@ export default {
editFormData: {
handler(newVal) {
if (Object.keys(newVal).length > 0) {
this.getTeamAndProject(newVal.subId)
Object.assign(this.addOrEditForm, newVal)
if (newVal.contractFile && newVal.contractFile.length > 0) {
this.addOrEditForm.businessLicense =
@ -379,6 +435,8 @@ export default {
}
})
}
//
}
},
deep: true,
@ -387,3 +445,12 @@ export default {
},
}
</script>
<style lang="scss" scoped>
.files-content {
width: 100%;
display: flex;
align-items: center;
justify-content: space-between;
}
</style>

View File

@ -117,16 +117,16 @@ export const personFormLabel = [
f_type: 'ipt',
isShow: false, // 是否展示label
},
{
f_label: '状态',
f_model: 'status',
f_type: 'sel',
isShow: false, // 是否展示label
f_selList: [
{ value: 1, label: '正常' },
{ value: 2, label: '异常' },
],
},
// {
// f_label: '状态',
// f_model: 'status',
// f_type: 'sel',
// isShow: false, // 是否展示label
// f_selList: [
// { value: 1, label: '正常' },
// { value: 2, label: '异常' },
// ],
// },
{
f_label: '日期',
f_model: 'time',

View File

@ -195,10 +195,13 @@ export default {
editRow: {}, //
editUploadFileList: [], //
isAdd: true,
}
},
methods: {
handleSelectPerson() {
this.editRow = {}
this.dialogConfig.outerTitle = '新增补卡人员以及补卡日期'
this.dialogConfig.outerVisible = true
},
handleCloseDialogOuter() {

View File

@ -38,6 +38,7 @@
size="mini"
type="primary"
icon="el-icon-edit"
v-if="data.checkStatus === 2"
v-hasPermi="['attendance:machine:unbind']"
@click="onHandleEditCardReplacementApply(data)"
>
@ -196,8 +197,8 @@ export default {
this.selectProjectName = data.proName
this.dialogConfig.outerTitle = '修改补卡申请'
this.dialogConfig.outerWidth = '80%'
this.dialogConfig.minHeight = '80vh'
this.dialogConfig.maxHeight = '80h'
this.dialogConfig.minHeight = '96vh'
this.dialogConfig.maxHeight = '96vh'
this.dialogConfig.outerVisible = true
},

View File

@ -1658,7 +1658,9 @@ export default {
//
onHandleDownloadDriver() {
window.open(window.origin + '/ZKIDROnline-Driven.zip')
window.open(
window.origin + '/hd-realname' + '/ZKIDROnline-Driven.zip',
)
},
// websocket
@ -1668,15 +1670,17 @@ export default {
//
async onUploadChangeFaceImg(fileList) {
console.log('人脸照片验证', fileList)
if (fileList.length > 0) {
//
const formData = new FormData()
formData.append('file', fileList[0].raw)
const res = await checkFaceImageAPI(formData)
console.log(res, 'res人脸照片验证结果')
if (res.code !== 200) {
this.$modal.msgError(res.msg)
this.idCardInfoForm.faceImg = []
}
}
},
},

View File

@ -254,7 +254,7 @@ export default {
//
handleCloseDialogOuter() {
this.$refs.addOrEditFormContentRef.resetForm()
// this.$refs.addOrEditFormContentRef.resetForm()
this.dialogConfig.outerVisible = false
},
@ -269,7 +269,7 @@ export default {
//
async onHandleDownloadTemplate() {
window.open(window.origin + '/人员入场-模版.xlsx')
window.open(window.origin + '/hd-realname' + '/人员入场-模版.xlsx')
// this.download(
// '/bmw/download/workerEinTemplate',
// {},
@ -285,16 +285,34 @@ export default {
//
async onHandleConfirmImport() {
const formData = new FormData()
formData.append('file', this.importFileList[0].raw)
const res = await importEntryPersonAPI(formData)
if (res.code === 200) {
this.$modal.msgSuccess('导入成功')
this.importFileList = []
this.dialogConfig.outerVisible = false
this.$refs.dishonestyPersonTableRef.getTableList()
if (this.importFileList.length > 0) {
const formData = new FormData()
formData.append('file', this.importFileList[0].raw)
const res = await importEntryPersonAPI(formData)
if (res.code === 200) {
this.$modal.msgSuccess('导入成功')
this.importFileList = []
this.dialogConfig.outerVisible = false
this.$refs.dishonestyPersonTableRef.getTableList()
} else {
this.$modal.msgError(res.msg)
}
} else {
this.$modal.msgError(res.msg)
this.$confirm(
'当前未选择文件,确定后将关闭上传页面?',
'温馨提示',
{
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning',
},
)
.then(async () => {
this.dialogConfig.outerVisible = false
})
.catch(() => {
// console.log('')
})
}
},
},

View File

@ -52,6 +52,7 @@
show-overflow-tooltip
/>
<el-table-column
width="200"
align="center"
show-overflow-tooltip
label="离场人员工资结算确认单"

View File

@ -212,8 +212,9 @@ export default {
}
})
const res = await batchExitPersonAPI(params)
if (res.code === 200) {
this.$modal.msgSuccess('批量出场成功')
this.$modal.msgWarning(res.msg)
this.$refs.personExitTableRef.getTableList()
} else {
this.$modal.msgError(res.msg)

View File

@ -411,7 +411,7 @@ export default {
//
async onHandleDownloadTemplate() {
window.open(window.origin + '/失信人员-模板.xlsx')
window.open(window.origin + '/hd-realname' + '/失信人员-模板.xlsx')
// this.download(
// '/bmw/download/workerEinTemplate',
// {},
@ -479,16 +479,34 @@ export default {
//
async onHandleConfirmImport() {
const formData = new FormData()
formData.append('file', this.importFileList[0].raw)
const res = await importDishonestyPersonAPI(formData)
if (res.code === 200) {
this.$modal.msgSuccess('导入成功')
this.importFileList = []
this.dialogConfig.outerVisible = false
this.$refs.dishonestyPersonTableRef.getTableList()
if (this.importFileList.length > 0) {
const formData = new FormData()
formData.append('file', this.importFileList[0].raw)
const res = await importDishonestyPersonAPI(formData)
if (res.code === 200) {
this.$modal.msgSuccess('导入成功')
this.importFileList = []
this.dialogConfig.outerVisible = false
this.$refs.dishonestyPersonTableRef.getTableList()
} else {
this.$modal.msgError(res.msg)
}
} else {
this.$modal.msgError(res.msg)
this.$confirm(
'当前未选择文件,确定后将关闭上传页面?',
'温馨提示',
{
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning',
},
)
.then(async () => {
this.dialogConfig.outerVisible = false
})
.catch(() => {
// console.log('')
})
}
},
},

View File

@ -11,6 +11,17 @@
}"
:request-api="getRedAndGreenCountProjectListAPI"
>
<template slot="btn" slot-scope="{ queryParams }">
<el-button
plain
size="mini"
type="success"
icon="el-icon-download"
@click="onHandleExportProject(queryParams)"
>
导出
</el-button>
</template>
<template slot="proName" slot-scope="{ data }">
<span
class="cursor-blue"
@ -37,6 +48,17 @@
}"
:request-api="getRedAndGreenCountPersonListAPI"
>
<template slot="btn" slot-scope="{ queryParams }">
<el-button
plain
size="mini"
type="success"
icon="el-icon-download"
@click="onHandleExportPerson(queryParams)"
>
导出
</el-button>
</template>
<template slot="lightStatus" slot-scope="{ data }">
<el-tag
size="mini"
@ -167,6 +189,28 @@ export default {
}
},
methods: {
//
onHandleExportProject(queryParams) {
// this.download(
// '/bmw/',
// {
// ...queryParams,
// },
// `.xlsx`,
// )
},
//
onHandleExportPerson(queryParams) {
// this.download(
// '/bmw/',
// {
// ...queryParams,
// },
// `.xlsx`,
// )
},
//
onHandleClickProName(proId) {
this.proId = proId

View File

@ -25,8 +25,8 @@ const commonColumnsList = [
]
// 总工程列表和分包信息列表公共字段
const commonColumnsListTwo = [
{ t_props: 'projectCount', t_label: '所在工程' },
{ t_props: 'projectCount', t_label: '所属分公司' },
{ t_props: 'proName', t_label: '所在工程' },
{ t_props: 'subCompanyName', t_label: '所属分公司' },
]
export const allProjectFormLabel = [

View File

@ -109,7 +109,7 @@ export default {
color: '#fcaf03',
dataKey: 'attNum',
name: '固定人员考勤率',
rateKey: 'tempWorkerAttPercentage',
rateKey: 'workerAttPercentage',
},
{
color: '#fb4150',

View File

@ -48,7 +48,7 @@
"
@click="onHandleOpenDialog('temp')"
>
{{ personAttendanceData.einAttPercentage }}
{{ personAttendanceData.tempWorkerPercentage }}
</div>
</div>
</div>
@ -90,12 +90,13 @@ export default {
const { data: res } = await getPersonAttendanceAPI({
subComId: this.selectCompany,
})
const { einNum, tempNum, workerPercentage, einAttPercentage } = res
const { einNum, tempNum, workerPercentage, tempWorkerPercentage } =
res
this.personAttendanceData = {
einNum,
tempNum,
workerPercentage,
einAttPercentage,
tempWorkerPercentage,
}
this.percentage = workerPercentage.replace('%', '') * 1

View File

@ -69,7 +69,7 @@ export default {
{
type: 'bar',
barWidth: 12,
silent: false,
silent: true,
itemStyle: { color: '#e9eef4' },
barGap: '-100%', //
data: new Array(xAxisData.length).fill(

View File

@ -83,6 +83,8 @@
<el-form-item label="公司名称" prop="companyName">
<el-input
clearable
maxlength="60"
show-word-limit
placeholder="请输入公司名称"
v-model="addOrEditForm.companyName"
/>
@ -156,6 +158,10 @@ export default {
message: '请输入公司名称',
trigger: 'blur',
},
{
max: 60,
message: '最大长度为60个字符',
},
],
isEnable: [
{ required: true, message: '请选择状态', trigger: 'blur' },

View File

@ -89,6 +89,8 @@
<el-form-item label="分公司名称" prop="subCompanyName">
<el-input
clearable
maxlength="60"
show-word-limit
placeholder="请输入分公司名称"
v-model="addOrEditForm.subCompanyName"
/>
@ -167,6 +169,10 @@ export default {
message: '请输入分公司名称',
trigger: 'blur',
},
{
max: 60,
message: '最大长度为60个字符',
},
],
isEnable: [
{ required: true, message: '请选择状态', trigger: 'blur' },
@ -249,10 +255,9 @@ export default {
//
async onHandleAddOrEditJobTypeConfirm(data) {
const res = await addAndEditDivideCompanyManageAPI(data)
if (res.code === 200) {
this.$modal.msgSuccess(
this.dialogConfig.outerTitle === '修改' + '成功',
)
this.$modal.msgSuccess(this.dialogConfig.outerTitle + '成功')
this.handleCloseDialogOuter()
this.$refs.divideCompanyManageTableRef.getTableList()
this.$store.dispatch('getSubCompanySelectList') // store

View File

@ -83,6 +83,8 @@
<el-form-item label="工种名称" prop="postName">
<el-input
clearable
maxlength="30"
show-word-limit
placeholder="请输入工种名称"
v-model="addOrEditForm.postName"
/>
@ -169,6 +171,10 @@ export default {
message: '请输入工种名称',
trigger: 'blur',
},
{
max: 30,
message: '最大长度为60个字符',
},
],
isSpecial: [
{