feat: 添加入住证签发和工作票审核功能
refactor(EnterpriseManagement): 优化企业管理和账号管理逻辑 fix(EntryExitPermitIssue): 修正出入证签发状态显示和查询功能 style: 调整部分页面样式和布局 perf(TicketIssueAudit): 提升工作票审核性能和用户体验
This commit is contained in:
parent
c3698c515a
commit
4db148f33a
|
|
@ -0,0 +1,37 @@
|
|||
import request from "@/utils/request";
|
||||
|
||||
// 获取出入证列表
|
||||
export const FetchPassagewayList = (query) => {
|
||||
return request({
|
||||
url: "/manage/owner/accessPermitIssuance/list",
|
||||
method: "get",
|
||||
params: query,
|
||||
});
|
||||
};
|
||||
|
||||
|
||||
// 查询出入证详情
|
||||
export const FetchPassagewayDetail = (id) => {
|
||||
return request({
|
||||
url: `/manage/owner/accessPermitIssuance/${id}`,
|
||||
method: "get",
|
||||
});
|
||||
};
|
||||
|
||||
// 签发出入证
|
||||
export const SignPassageway = (data) => {
|
||||
return request({
|
||||
url: `/manage/owner/accessPermitIssuance/issue`,
|
||||
method: "post",
|
||||
data,
|
||||
});
|
||||
};
|
||||
|
||||
|
||||
// 查看关联票证
|
||||
export const FetchAssociatedTicket = (id) => {
|
||||
return request({
|
||||
url: `/manage/owner/accessPermitIssuance/${id}/relatedTicket`,
|
||||
method: "get",
|
||||
});
|
||||
};
|
||||
|
|
@ -16,3 +16,21 @@ export function FetchWorkTicketDetail(id) {
|
|||
method: 'get',
|
||||
})
|
||||
}
|
||||
|
||||
// 工作票审核通过
|
||||
export function AuditWorkTicketPass(params) {
|
||||
return request({
|
||||
url: '/manage/contractor/workTicket/approve/' + params.ticketId,
|
||||
method: 'put',
|
||||
params
|
||||
})
|
||||
}
|
||||
|
||||
// 工作票审核驳回
|
||||
export function AuditWorkTicketRefuse(params) {
|
||||
return request({
|
||||
url: '/manage/contractor/workTicket/reject/' + params.ticketId,
|
||||
method: 'put',
|
||||
params
|
||||
})
|
||||
}
|
||||
|
|
@ -97,7 +97,8 @@
|
|||
</el-table-column>
|
||||
<el-table-column label="操作">
|
||||
<template #default="{ row }">
|
||||
<el-button type="text" icon="Edit" @click="handleEditUser(row)">编辑</el-button>
|
||||
<el-button v-if="row.status === '2'" type="text" icon="Edit"
|
||||
@click="handleEditUser(row)">编辑</el-button>
|
||||
<el-button type="text" icon="Delete" @click="handleDeleteUser(row)">删除</el-button>
|
||||
</template>
|
||||
</el-table-column>
|
||||
|
|
|
|||
|
|
@ -8,37 +8,37 @@
|
|||
<el-col :span="12">
|
||||
<div class="info-item">
|
||||
<label>项目名称:</label>
|
||||
<span>XX新能源电池建设项目</span>
|
||||
<span>{{ detailData.projectName }}</span>
|
||||
</div>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<div class="info-item">
|
||||
<label>票证编号:</label>
|
||||
<span>ZY-20250405-001</span>
|
||||
<span>{{ detailData.permitNumber }}</span>
|
||||
</div>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<div class="info-item">
|
||||
<label>作业地点:</label>
|
||||
<span>1号厂房东侧区域</span>
|
||||
<span>{{ detailData.workLocation }}</span>
|
||||
</div>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<div class="info-item">
|
||||
<label>作业单位:</label>
|
||||
<span>江苏建工集团有限公司</span>
|
||||
<span>{{ detailData.enterpriseName }}</span>
|
||||
</div>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<div class="info-item">
|
||||
<label>工作负责人:</label>
|
||||
<span>刘建国</span>
|
||||
<span>{{ detailData.proprietorName }}</span>
|
||||
</div>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<div class="info-item">
|
||||
<label>联系方式:</label>
|
||||
<span>138****8821</span>
|
||||
<span>{{ detailData.contactPhone }}</span>
|
||||
</div>
|
||||
</el-col>
|
||||
</el-row>
|
||||
|
|
@ -46,19 +46,19 @@
|
|||
<!-- 出入证有效期 -->
|
||||
<el-form label-width="120px" label-position="top" :model="formData">
|
||||
<el-form-item label="出入证有效期">
|
||||
<el-date-picker v-model="formData.dateRange" type="daterange" value-format="yyyy-MM-dd"
|
||||
range-separator="至" start-placeholder="开始日期" end-placeholder="结束日期" style="width: 300px;" />
|
||||
<div style="width: 200px;">
|
||||
<el-date-picker v-model="formData.dateRange" type="daterange" value-format="yyyy-MM-dd"
|
||||
range-separator="至" start-placeholder="开始日期" end-placeholder="结束日期" />
|
||||
</div>
|
||||
|
||||
</el-form-item>
|
||||
<div class="tip-text">默认与作业时间一致,最长不超过票证有效期</div>
|
||||
|
||||
<!-- 作业组成员清单 -->
|
||||
<el-form-item label="作业组成员清单">
|
||||
<el-checkbox-group v-model="formData.selectedMembers">
|
||||
<el-checkbox label="张伟(320**********1234)" />
|
||||
<el-checkbox label="李娜(320**********5678)" />
|
||||
<el-checkbox label="王强(320**********9012)" />
|
||||
<el-checkbox label="赵敏(320**********3456)" />
|
||||
<el-checkbox label="孙浩(320**********7890)" />
|
||||
<el-checkbox v-for="member in detailData.sysUserList" :label="member.userId"
|
||||
:key="member.userId">{{ member.nickName }}({{ member.phonenumber }})</el-checkbox>
|
||||
</el-checkbox-group>
|
||||
</el-form-item>
|
||||
|
||||
|
|
@ -67,10 +67,11 @@
|
|||
<div style="margin-bottom: 15px;">
|
||||
<el-button type="primary" size="small" @click="addVehicle">+ 添加车辆</el-button>
|
||||
</div>
|
||||
<div v-for="(vehicle, index) in vehicles" :key="index" class="vehicle-item">
|
||||
<el-input v-model="vehicle.plateNumber" placeholder="请输入车牌号"
|
||||
<div v-for="(vehicle, index) in vehicleList" :key="index" class="vehicle-item">
|
||||
<el-input v-model="vehicle.licensePlate" placeholder="请输入车牌号"
|
||||
style="width: 200px; margin-right: 20px;" />
|
||||
<el-input v-model="vehicle.vehicleType" placeholder="请输入车型"
|
||||
style="width: 200px; margin-right: 20px;" />
|
||||
<el-input v-model="vehicle.type" placeholder="请输入车型" style="width: 200px; margin-right: 20px;" />
|
||||
<el-button type="danger" size="small" @click="removeVehicle(index)">
|
||||
<el-icon>
|
||||
<Delete />
|
||||
|
|
@ -95,31 +96,16 @@
|
|||
</template>
|
||||
|
||||
<script setup>
|
||||
import { ref } from 'vue'
|
||||
import { ref, onMounted } from 'vue'
|
||||
import { Delete } from '@element-plus/icons-vue'
|
||||
|
||||
const formData = ref({
|
||||
dateRange: [],
|
||||
selectedMembers: [],
|
||||
remark: ''
|
||||
})
|
||||
|
||||
const vehicles = ref([{ plateNumber: '', type: '' }])
|
||||
|
||||
|
||||
|
||||
// 添加随行车辆
|
||||
const addVehicle = () => {
|
||||
vehicles.value.push({ plateNumber: '', type: '' })
|
||||
}
|
||||
|
||||
// 删除随行车辆
|
||||
const removeVehicle = (index) => {
|
||||
vehicles.value.splice(index, 1)
|
||||
}
|
||||
|
||||
import { ElMessage } from 'element-plus'
|
||||
import { FetchPassagewayDetail, SignPassageway } from '@/api/Pass'
|
||||
|
||||
const props = defineProps({
|
||||
Rid: {
|
||||
type: Object,
|
||||
default: () => { }
|
||||
},
|
||||
show: {
|
||||
type: Boolean,
|
||||
default: false
|
||||
|
|
@ -130,16 +116,66 @@ const props = defineProps({
|
|||
}
|
||||
})
|
||||
|
||||
// 详情数据
|
||||
const detailData = ref({})
|
||||
|
||||
// 表单数据
|
||||
const formData = ref({
|
||||
dateRange: [],
|
||||
selectedMembers: [],
|
||||
remark: ''
|
||||
})
|
||||
|
||||
// 随行车辆列表
|
||||
const vehicleList = ref([{ licensePlate: '', vehicleType: '' }])
|
||||
|
||||
onMounted(() => {
|
||||
if (props.Rid) {
|
||||
getDetail()
|
||||
}
|
||||
})
|
||||
|
||||
// 查询详情
|
||||
const getDetail = async () => {
|
||||
const res = await FetchPassagewayDetail(props.Rid)
|
||||
if (res.code === 200) {
|
||||
detailData.value = res.data,
|
||||
vehicleList.value = res.data.vehicleList || []
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// 添加随行车辆
|
||||
const addVehicle = () => {
|
||||
vehicleList.value.push({ plateNumber: '', type: '' })
|
||||
}
|
||||
|
||||
// 删除随行车辆
|
||||
const removeVehicle = (index) => {
|
||||
vehicleList.value.splice(index, 1)
|
||||
}
|
||||
|
||||
|
||||
// 关闭弹窗
|
||||
const handleClose = () => {
|
||||
props.CloseDialog()
|
||||
}
|
||||
|
||||
const handleSubmit = () => {
|
||||
const handleSubmit = async () => {
|
||||
// 提交逻辑
|
||||
console.log('提交分配信息', formData.value)
|
||||
props.CloseDialog()
|
||||
let pamams = {
|
||||
...detailData.value,
|
||||
vehicleList: vehicleList.value
|
||||
}
|
||||
let res = await SignPassageway(pamams)
|
||||
if (res.code === 200) {
|
||||
ElMessage.success('签发成功')
|
||||
props.CloseDialog()
|
||||
} else {
|
||||
ElMessage.error(res.msg)
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
</script>
|
||||
|
|
|
|||
|
|
@ -2,45 +2,50 @@
|
|||
<template>
|
||||
<el-dialog title="关联票证详情" v-model="props.show" @close="handleClose" width="900px">
|
||||
<div class="Cneter-box">
|
||||
<el-form :model="formData" label-width="120px" class="demo-form" label-position="top">
|
||||
<el-form label-width="120px" class="demo-form" label-position="top">
|
||||
<el-row :gutter="20">
|
||||
<el-col :span="12">
|
||||
<el-form-item label="项目名称">
|
||||
<el-input v-model="formData.projectName" disabled />
|
||||
<div>{{ associatedTicket.projectName }}</div>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-form-item label="票证编号">
|
||||
<el-input v-model="formData.permitNumber" disabled />
|
||||
<div>{{ associatedTicket.ticketNumber }}</div>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
<el-row :gutter="20">
|
||||
<el-col :span="12">
|
||||
<el-form-item label="施工单位">
|
||||
<el-input v-model="formData.constructionUnit" disabled />
|
||||
<div>{{ associatedTicket.workContent }}</div>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-form-item label="作业类型">
|
||||
<el-input v-model="formData.workType" disabled />
|
||||
<div>{{ associatedTicket.riskType }}</div>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
<el-row :gutter="20">
|
||||
<el-col :span="12">
|
||||
<el-form-item label="作业时间">
|
||||
<el-input v-model="formData.workTime" disabled />
|
||||
<div>{{ associatedTicket.workStartTime }} - {{ associatedTicket.workEndTime }}</div>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-form-item label="工作负责人">
|
||||
<el-input v-model="formData.responsiblePerson" disabled />
|
||||
<div>{{ associatedTicket.supervisorName }}</div>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
<el-form-item label="安全措施">
|
||||
<el-input type="textarea" v-model="formData.safetyMeasures" disabled :rows="4" />
|
||||
<div style="display: flex; flex-wrap: wrap;flex-direction: column;">
|
||||
<div v-for="(item, index) in associatedTicket.generalSafetyMeasures" :key="index">
|
||||
{{ index + 1 }}. {{ item }}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
</div>
|
||||
|
|
@ -53,10 +58,15 @@
|
|||
</template>
|
||||
|
||||
<script setup>
|
||||
import { ref } from 'vue'
|
||||
import { ref, onMounted } from 'vue'
|
||||
import { FetchAssociatedTicket } from '@/api/Pass'
|
||||
|
||||
|
||||
const props = defineProps({
|
||||
Rid: {
|
||||
type: Number,
|
||||
default: 0
|
||||
},
|
||||
show: {
|
||||
type: Boolean,
|
||||
default: false
|
||||
|
|
@ -68,18 +78,23 @@ const props = defineProps({
|
|||
})
|
||||
|
||||
|
||||
// 关联票证详情
|
||||
const associatedTicket = ref({})
|
||||
|
||||
|
||||
|
||||
// 表单数据
|
||||
const formData = ref({
|
||||
projectName: '滨海新区LNG 接收站项目',
|
||||
permitNumber: 'WZ202312001',
|
||||
constructionUnit: '中国化学工程第三建设有限公司',
|
||||
workType: '高空作业',
|
||||
workTime: '2023-12-01 至 2023-12-05',
|
||||
responsiblePerson: '李建国',
|
||||
safetyMeasures: '1. 佩戴安全帽和安全带\n2. 设置安全警戒线\n3. 安排专职安全员监护'
|
||||
// 弹窗打开时获取关联票证详情
|
||||
onMounted(() => {
|
||||
if (props.Rid) {
|
||||
FetchAssociatedTicket(props.Rid).then(res => {
|
||||
if (res.code === 200) {
|
||||
associatedTicket.value = res.data || {}
|
||||
associatedTicket.value.generalSafetyMeasures = JSON.parse(associatedTicket.value.generalSafetyMeasures || '[]')
|
||||
} else {
|
||||
ElMessage.error(res.msg)
|
||||
}
|
||||
})
|
||||
}
|
||||
})
|
||||
|
||||
|
||||
|
|
@ -88,12 +103,6 @@ const handleClose = () => {
|
|||
props.CloseDialog()
|
||||
}
|
||||
|
||||
const handleSubmit = () => {
|
||||
// 提交逻辑
|
||||
console.log('提交分配信息', formData.value)
|
||||
props.CloseDialog()
|
||||
}
|
||||
|
||||
</script>
|
||||
|
||||
<style scoped lang="scss">
|
||||
|
|
|
|||
|
|
@ -1,35 +1,36 @@
|
|||
<!-- 业主模块-出入证签发-列表页 -->
|
||||
<template>
|
||||
<div class="MainBox">
|
||||
<el-tabs v-model="activeTab" class="mb-4">
|
||||
<!-- <el-tabs v-model="activeTab" class="mb-4">
|
||||
<el-tab-pane label="签发列表" name="1"></el-tab-pane>
|
||||
<el-tab-pane label="历史记录" name="2"></el-tab-pane>
|
||||
<el-tab-pane label="统计报表" name="3"></el-tab-pane>
|
||||
</el-tabs>
|
||||
</el-tabs> -->
|
||||
<el-form :model="queryForm" inline class="card-box mb-4" label-position="top">
|
||||
<el-form-item label="项目名称/编号">
|
||||
<el-input v-model="queryForm.name" placeholder="请输入项目名称/编号"></el-input>
|
||||
<el-input v-model="queryForm.projectName" placeholder="请输入项目名称/编号"></el-input>
|
||||
</el-form-item>
|
||||
<el-form-item label="时间范围">
|
||||
<el-date-picker v-model="queryForm.dateRange" type="daterange" value-format="yyyy-MM-dd"
|
||||
<el-date-picker v-model="queryForm.dateRange" type="daterange" value-format="YYYY-MM-DD"
|
||||
range-separator="至" start-placeholder="开始日期" end-placeholder="结束日期"></el-date-picker>
|
||||
</el-form-item>
|
||||
<el-form-item label="票证编号">
|
||||
<el-input v-model="queryForm.ticketNumber" placeholder="请输入票证编号"></el-input>
|
||||
<el-input v-model="queryForm.permitNumber" placeholder="请输入票证编号"></el-input>
|
||||
</el-form-item>
|
||||
<el-form-item label="施工单位">
|
||||
<el-input v-model="queryForm.enterpriseName" placeholder="请输入施工单位"></el-input>
|
||||
</el-form-item>
|
||||
<el-form-item label="出入证状态">
|
||||
<el-select v-model="queryForm.status" placeholder="请选择出入证状态">
|
||||
<el-option label="待签发" value="1"></el-option>
|
||||
<el-option label="已签发" value="2"></el-option>
|
||||
<el-option label="待审核" value="0"></el-option>
|
||||
<el-option label="已签发" value="1"></el-option>
|
||||
<el-option label="已驳回" value="2"></el-option>
|
||||
<el-option label="已作废" value="3"></el-option>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item style="margin-top: 28px;">
|
||||
<el-button size="default">重置</el-button>
|
||||
<el-button type="primary" size="default">查询</el-button>
|
||||
<el-button size="default" @click="handleReset">重置</el-button>
|
||||
<el-button type="primary" size="default" @click="handleSearch">查询</el-button>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
|
||||
|
|
@ -37,31 +38,33 @@
|
|||
<div class="button-group" style="margin-bottom: 20px;">
|
||||
<h2 style="font-size: 16px;">签发列表</h2>
|
||||
<div class="button-group">
|
||||
<el-button type="primary" size="default">导出Excel</el-button>
|
||||
<el-button type="primary" size="default" @click="handleExportExcel">导出Excel</el-button>
|
||||
<el-button type="info" size="default">打印</el-button>
|
||||
</div>
|
||||
</div>
|
||||
<el-table :data="tableData">
|
||||
<el-table :data="tableData" :loading="loading">
|
||||
<el-table-column prop="projectName" label="项目名称"></el-table-column>
|
||||
<el-table-column prop="ticketNumber" label="票证编号"></el-table-column>
|
||||
<el-table-column prop="permitNumber" label="票证编号"></el-table-column>
|
||||
<el-table-column prop="projectName" label="施工单位"></el-table-column>
|
||||
<el-table-column prop="workTime" label="作业时间"></el-table-column>
|
||||
<el-table-column prop="proprietorName" label="工作负责人"></el-table-column>
|
||||
<el-table-column prop="memberCount" label="成员数量"></el-table-column>
|
||||
<el-table-column prop="validityStartTime;" label="作业时间"></el-table-column>
|
||||
<el-table-column prop="sysUserListLength" label="成员数量">
|
||||
<template #default="scope">
|
||||
{{ scope.row.sysUserList?.length }}
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column prop="status" label="状态">
|
||||
<template #default="scope">
|
||||
<el-tag
|
||||
:type="scope.row.status === '待签发' ? 'primary' : (scope.row.status === '已签发' ? 'success' : 'danger')">
|
||||
{{ scope.row.status }}
|
||||
<el-tag :type="getStatusType(scope.row.status)">
|
||||
{{ statusMap[scope.row.status] || '-' }}
|
||||
</el-tag>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="操作" width="210">
|
||||
<template #default="scope">
|
||||
<el-button size="small" type="primary" link
|
||||
<el-button size="small" type="primary" link v-if="scope.row.status === '0'"
|
||||
@click="handleIssueClick(scope.row)">签发出入证</el-button>
|
||||
<el-button size="small" type="info" link
|
||||
@click="handleDetailClick(scope.row)">查看管理票证</el-button>
|
||||
@click="handleDetailClick(scope.row)">查看关联票证</el-button>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
|
|
@ -71,79 +74,149 @@
|
|||
total }}
|
||||
条</span>
|
||||
<el-pagination v-model:current-page="pageNum" v-model:page-size="pageSize" :page-sizes="[5, 10, 20]"
|
||||
:total="total" layout="prev, pager, next"></el-pagination>
|
||||
:total="total" layout="prev, pager, next" @current-change="handleCurrentChange"></el-pagination>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- 出入证签发-弹窗详情 -->
|
||||
<DialogBox v-if="dialogShow" ref="dialogRef" :show="dialogShow" :CloseDialog="handleCancel" />
|
||||
<DialogBox v-if="dialogShow" :Rid="rowInfo.permitId" ref="dialogRef" :show="dialogShow"
|
||||
:CloseDialog="handleCancel" />
|
||||
<!-- 关联票证-弹窗详情 -->
|
||||
<DialogBox2 v-if="dialogShow2" ref="dialogRef2" :show="dialogShow2" :CloseDialog="handleCancel" />
|
||||
<DialogBox2 v-if="dialogShow2" :Rid="rowInfo.permitId" ref="dialogRef2" :show="dialogShow2"
|
||||
:CloseDialog="handleCancel" />
|
||||
|
||||
</div>
|
||||
</template>
|
||||
<script setup name="Index">
|
||||
import dayjs from 'dayjs';
|
||||
import { ElMessage } from 'element-plus';
|
||||
import { FetchPassagewayList } from "@/api/Pass";
|
||||
import DialogBox from "./DialogBox.vue";
|
||||
import DialogBox2 from "./DialogBox2.vue";
|
||||
import { ref } from "vue";
|
||||
import { ref, onMounted } from "vue";
|
||||
// 出入证状态
|
||||
const statusMap = {
|
||||
'0': "待审核",
|
||||
'1': "已签发",
|
||||
'2': "已驳回",
|
||||
'3': "已作废"
|
||||
}
|
||||
|
||||
|
||||
const activeTab = ref("1"); // 当前选中的tab
|
||||
|
||||
// 查询表单数据
|
||||
const queryForm = ref({
|
||||
name: "",
|
||||
status: ""
|
||||
projectName: "", // 项目名称
|
||||
dateRange: "", // 时间范围
|
||||
permitNumber: "", // 出入证编号
|
||||
enterpriseName: "", // 施工单位
|
||||
status: "" // 状态
|
||||
});
|
||||
|
||||
// 选中的行数据
|
||||
const rowInfo = ref({});
|
||||
|
||||
const dialogShow = ref(false); // 审核签发票证弹窗显示状态
|
||||
const dialogShow2 = ref(false); // 关联票证弹窗显示状态
|
||||
|
||||
|
||||
const loading = ref(false); // 加载状态
|
||||
// 表格数据
|
||||
const tableData = ref([
|
||||
{
|
||||
id: 1,
|
||||
ticketNumber: "123456",
|
||||
projectName: "项目A",
|
||||
enterpriseName: "中建一局",
|
||||
proprietorName: "张三",
|
||||
memberCount: 3,
|
||||
workTime: "2023-05-12 14:30",
|
||||
status: "待签发"
|
||||
},
|
||||
{
|
||||
id: 2,
|
||||
ticketNumber: "123457",
|
||||
projectName: "项目B",
|
||||
enterpriseName: "中铁建工",
|
||||
proprietorName: "李四",
|
||||
memberCount: 2,
|
||||
workTime: "2023-05-13 09:45",
|
||||
status: "已签发"
|
||||
},
|
||||
{
|
||||
id: 3,
|
||||
ticketNumber: "123457",
|
||||
projectName: "项目B",
|
||||
enterpriseName: "中铁建工",
|
||||
proprietorName: "李四",
|
||||
memberCount: 2,
|
||||
workTime: "2023-05-13 09:45",
|
||||
status: "已作废"
|
||||
}
|
||||
]);
|
||||
const tableData = ref();
|
||||
const pageNum = ref(1); // 当前页码
|
||||
const pageSize = ref(5); // 每页显示条数
|
||||
const total = ref(20); // 总记录数
|
||||
const pageSize = ref(10); // 每页显示条数
|
||||
const total = ref(0); // 总记录数
|
||||
|
||||
onMounted(() => {
|
||||
getList();
|
||||
});
|
||||
|
||||
// 获取出入证状态类型
|
||||
const getStatusType = (status) => {
|
||||
if (status === null || status === undefined) {
|
||||
return 'info';
|
||||
}
|
||||
switch (status) {
|
||||
case '0':
|
||||
return 'primary';
|
||||
case '1':
|
||||
return 'success';
|
||||
case '2':
|
||||
return 'danger';
|
||||
case '3':
|
||||
return 'info';
|
||||
default:
|
||||
return 'info';
|
||||
}
|
||||
}
|
||||
|
||||
// 搜索
|
||||
const handleSearch = () => {
|
||||
pageNum.value = 1;
|
||||
getList();
|
||||
}
|
||||
|
||||
// 重置
|
||||
const handleReset = () => {
|
||||
queryForm.value = {
|
||||
projectName: "",
|
||||
dateRange: "",
|
||||
permitNumber: "",
|
||||
enterpriseName: "",
|
||||
status: ""
|
||||
}
|
||||
getList();
|
||||
}
|
||||
|
||||
// 分页切换
|
||||
const handleCurrentChange = (val) => {
|
||||
pageNum.value = val;
|
||||
getList();
|
||||
}
|
||||
|
||||
|
||||
// 查询列表
|
||||
const getList = async () => {
|
||||
let params = {
|
||||
pageNum: pageNum.value,
|
||||
pageSize: pageSize.value,
|
||||
projectName: queryForm.value.projectName,
|
||||
permitNumber: queryForm.value.permitNumber,
|
||||
enterpriseName: queryForm.value.enterpriseName,
|
||||
status: queryForm.value.status
|
||||
}
|
||||
if (queryForm.value.dateRange) {
|
||||
params.validityStartTime = dayjs(queryForm.value.dateRange[0]).format('YYYY-MM-DD');
|
||||
params.validityEndTime = dayjs(queryForm.value.dateRange[1]).format('YYYY-MM-DD');
|
||||
}
|
||||
loading.value = true;
|
||||
const res = await FetchPassagewayList(params);
|
||||
loading.value = false;
|
||||
if (res.code === 200) {
|
||||
tableData.value = res.rows;
|
||||
total.value = res.total;
|
||||
}
|
||||
}
|
||||
|
||||
// 导出Excel
|
||||
const handleExportExcel = async () => {
|
||||
ElMessage({
|
||||
message: '导出Excel成功',
|
||||
type: 'success'
|
||||
})
|
||||
}
|
||||
|
||||
// 处理签发点击事件
|
||||
const handleIssueClick = (row) => {
|
||||
console.log("签发", row);
|
||||
rowInfo.value = row;
|
||||
dialogShow.value = true;
|
||||
}
|
||||
|
||||
// 处理关联票证点击事件
|
||||
const handleDetailClick = (row) => {
|
||||
console.log("关联票证", row);
|
||||
rowInfo.value = row;
|
||||
dialogShow2.value = true;
|
||||
}
|
||||
|
||||
|
|
@ -152,6 +225,8 @@ const handleCancel = () => {
|
|||
console.log('关闭弹窗')
|
||||
dialogShow.value = false
|
||||
dialogShow2.value = false
|
||||
rowInfo.value = {}
|
||||
getList();
|
||||
}
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -8,19 +8,23 @@
|
|||
<div class="ticket-detail">
|
||||
<h3>票证详情</h3>
|
||||
<el-descriptions :column="1" border :size="small">
|
||||
<el-descriptions-item label="票证编号">PT20250405-001</el-descriptions-item>
|
||||
<el-descriptions-item label="票证编号">{{ detailData.ticketNumber }}</el-descriptions-item>
|
||||
<el-descriptions-item label="票证类型">
|
||||
<span class="high-risk">危险作业票(高风险)</span>
|
||||
<span class="high-risk">{{ detailData.riskType }}</span>
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="项目名称">{{ detailData.projectName }}</el-descriptions-item>
|
||||
<el-descriptions-item label="施工单位">{{ detailData.supervisorDeptName
|
||||
}}</el-descriptions-item>
|
||||
<el-descriptions-item label="提交人">{{ detailData.supervisorName }}</el-descriptions-item>
|
||||
<el-descriptions-item label="提交时间">{{ detailData.submitTime }}</el-descriptions-item>
|
||||
<el-descriptions-item label="施工地点">{{ detailData.workLocation }}</el-descriptions-item>
|
||||
<el-descriptions-item label="施工内容">{{ detailData.workContent }}</el-descriptions-item>
|
||||
<el-descriptions-item label="安全措施">
|
||||
<div v-for="(item, index) in detailData.safetyMeasuresList" :key="index">{{ index + 1
|
||||
}}. {{ item }}</div>
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="项目名称">新建厂房项目一期</el-descriptions-item>
|
||||
<el-descriptions-item label="施工单位">中建一局</el-descriptions-item>
|
||||
<el-descriptions-item label="提交人">李建国</el-descriptions-item>
|
||||
<el-descriptions-item label="提交时间">2025-04-05 09:30</el-descriptions-item>
|
||||
<el-descriptions-item label="施工地点">A栋西侧脚手架区域</el-descriptions-item>
|
||||
<el-descriptions-item label="施工内容">高空拆除旧管道作业</el-descriptions-item>
|
||||
<el-descriptions-item label="安全措施">系好安全绳、设置警戒线、配备灭火器材</el-descriptions-item>
|
||||
<el-descriptions-item label="注意事项">
|
||||
<span class="warning">风力超过五级严禁作业!</span>
|
||||
<span class="warning">{{ detailData.attention }}</span>
|
||||
</el-descriptions-item>
|
||||
</el-descriptions>
|
||||
</div>
|
||||
|
|
@ -29,25 +33,18 @@
|
|||
<el-col :span="11">
|
||||
<div class="audit-operation">
|
||||
<h3>审核操作</h3>
|
||||
<el-form label-width="100px" :model="formData" label-position="top">
|
||||
<el-form label-width="100px" v-model="formData" label-position="top">
|
||||
<el-form-item label="审核结果">
|
||||
<el-radio-group v-model="auditResult">
|
||||
<el-radio label="通过">通过</el-radio>
|
||||
<el-radio label="驳回">驳回</el-radio>
|
||||
<el-radio-group v-model="formData.auditResult">
|
||||
<el-radio label="1">通过</el-radio>
|
||||
<el-radio label="2">驳回</el-radio>
|
||||
</el-radio-group>
|
||||
</el-form-item>
|
||||
<el-form-item label="审核意见">
|
||||
<el-input type="textarea" placeholder="请输入审核意见..." :rows="4"></el-input>
|
||||
</el-form-item>
|
||||
<el-form-item label="附件上传">
|
||||
<el-upload style="width: 100%;" class="upload-demo" drag
|
||||
action="https://jsonplaceholder.typicode.com/posts/" multiple>
|
||||
<el-icon class="el-icon--upload"><upload-filled /></el-icon>
|
||||
<div class="el-upload__text">
|
||||
点击上传文件或拖拽至此处
|
||||
</div>
|
||||
</el-upload>
|
||||
<el-input v-model="formData.reviewComment" type="textarea" placeholder="请输入审核意见..."
|
||||
:rows="4"></el-input>
|
||||
</el-form-item>
|
||||
|
||||
</el-form>
|
||||
</div>
|
||||
</el-col>
|
||||
|
|
@ -63,11 +60,10 @@
|
|||
</template>
|
||||
|
||||
<script setup>
|
||||
import { ref,onBeforeMount } from 'vue'
|
||||
import { UploadFilled } from '@element-plus/icons-vue'
|
||||
import { FetchWorkTicketDetail } from '@/api/workTicket'
|
||||
import { ref, onBeforeMount } from 'vue'
|
||||
import { ElMessage } from 'element-plus'
|
||||
import { FetchWorkTicketDetail, AuditWorkTicketPass, AuditWorkTicketRefuse } from '@/api/workTicket'
|
||||
|
||||
const auditResult = ref('')
|
||||
const props = defineProps({
|
||||
Tid: {
|
||||
type: Number || String,
|
||||
|
|
@ -83,9 +79,21 @@ const props = defineProps({
|
|||
}
|
||||
})
|
||||
|
||||
// 详情数据
|
||||
const detailData = ref({})
|
||||
|
||||
// 审核表单
|
||||
const formData = ref({
|
||||
ticketId: props.Tid,
|
||||
auditResult: '1',
|
||||
reviewComment: ''
|
||||
})
|
||||
|
||||
|
||||
onBeforeMount(() => {
|
||||
console.log('props.Tid', props.Tid)
|
||||
if (props.Tid) {
|
||||
getDetail();
|
||||
getDetail();
|
||||
}
|
||||
|
||||
})
|
||||
|
|
@ -94,64 +102,33 @@ onBeforeMount(() => {
|
|||
const getDetail = async () => {
|
||||
let res = await FetchWorkTicketDetail(props.Tid);
|
||||
if (res.code == 200) {
|
||||
formData.value = res.data;
|
||||
detailData.value = res.data;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
// 项目树形结构数据
|
||||
const projectTreeData = ref([
|
||||
{
|
||||
id: 1,
|
||||
label: '北京市',
|
||||
children: [
|
||||
{
|
||||
id: 2,
|
||||
label: '朝阳区',
|
||||
children: [
|
||||
{ id: 3, label: 'CBD大厦项目' },
|
||||
{ id: 4, label: '国贸三期项目' }
|
||||
]
|
||||
},
|
||||
{ id: 5, label: '海淀区' }
|
||||
]
|
||||
}
|
||||
])
|
||||
|
||||
// 树形结构配置
|
||||
const treeProps = ref({
|
||||
children: 'children',
|
||||
label: 'label'
|
||||
})
|
||||
|
||||
// 表单数据
|
||||
const formData = ref({
|
||||
name: '',
|
||||
account: '',
|
||||
department: '',
|
||||
roles: [],
|
||||
selectedProjects: [],
|
||||
phone: '',
|
||||
expireDate: null,
|
||||
forever: false,
|
||||
remark: ''
|
||||
})
|
||||
|
||||
// 处理项目选择变化
|
||||
const handleCheckChange = (checkedNodes) => {
|
||||
console.log('选中的项目节点:', checkedNodes)
|
||||
}
|
||||
|
||||
// 关闭弹窗
|
||||
const handleClose = () => {
|
||||
props.CloseDialog()
|
||||
}
|
||||
|
||||
const handleSubmit = () => {
|
||||
// 提交逻辑
|
||||
console.log('提交分配信息', formData.value)
|
||||
props.CloseDialog()
|
||||
const handleSubmit = async () => {
|
||||
let FUN = formData.value.auditResult == '1' ? AuditWorkTicketPass : AuditWorkTicketRefuse;
|
||||
let params = {
|
||||
ticketId: props.Tid,
|
||||
reviewComment: formData.value.reviewComment
|
||||
}
|
||||
let res = await FUN(params);
|
||||
if (res.code == 200) {
|
||||
ElMessage.success('操作成功');
|
||||
props.CloseDialog();
|
||||
} else {
|
||||
ElMessage.error(res.msg || '操作失败');
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
</script>
|
||||
|
|
@ -161,14 +138,15 @@ const handleSubmit = () => {
|
|||
padding: 20px;
|
||||
}
|
||||
|
||||
.ticket-detail, .audit-operation {
|
||||
background: #fff;
|
||||
border-radius: 8px;
|
||||
padding: 20px;
|
||||
box-shadow: 0 2px 12px 0 rgba(0, 0, 0, 0.1);
|
||||
height: 100%;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
.ticket-detail,
|
||||
.audit-operation {
|
||||
background: #fff;
|
||||
border-radius: 8px;
|
||||
padding: 20px;
|
||||
box-shadow: 0 2px 12px 0 rgba(0, 0, 0, 0.1);
|
||||
height: 100%;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
}
|
||||
|
||||
.ticket-detail h3,
|
||||
|
|
@ -194,18 +172,18 @@ const handleSubmit = () => {
|
|||
}
|
||||
|
||||
.el-form-item {
|
||||
margin-bottom: 20px;
|
||||
margin-bottom: 20px;
|
||||
}
|
||||
|
||||
.el-form {
|
||||
flex: 1;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
flex: 1;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
}
|
||||
|
||||
.el-form-item:last-child {
|
||||
margin-bottom: 0;
|
||||
flex: 1;
|
||||
margin-bottom: 0;
|
||||
flex: 1;
|
||||
}
|
||||
|
||||
.el-upload {
|
||||
|
|
|
|||
|
|
@ -9,8 +9,6 @@
|
|||
<el-tab-pane label="已作废" name="4"></el-tab-pane>
|
||||
</el-tabs>
|
||||
|
||||
|
||||
|
||||
<el-form :model="queryForm" inline class="card-box mb-4" label-position="top">
|
||||
<el-form-item label="项目名称/编号">
|
||||
<el-input v-model="queryForm.keyword" placeholder="请输入项目名称/编号"></el-input>
|
||||
|
|
@ -42,7 +40,7 @@
|
|||
<el-table-column prop="updateTime" label="提交时间"></el-table-column>
|
||||
<el-table-column prop="status" label="当前状态">
|
||||
<template #default="scope">
|
||||
<el-tag :type="scope.row.status === '1' ? 'primary' : 'danger'">
|
||||
<el-tag :type="getStatusType(scope.row.status)">
|
||||
{{ statusCodeMap[scope.row.status] }}
|
||||
</el-tag>
|
||||
</template>
|
||||
|
|
@ -52,7 +50,6 @@
|
|||
<el-button size="small" type="primary" link
|
||||
@click="handleAuditClick(scope.row)">审核签发</el-button>
|
||||
<el-button size="small" type="info" link @click="handleDetailClick(scope.row)">查看详情</el-button>
|
||||
<el-button size="small" type="danger" link>退回重提</el-button>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
|
|
@ -113,10 +110,28 @@ onBeforeMount(() => {
|
|||
getInit();
|
||||
})
|
||||
|
||||
// 获取状态类型
|
||||
const getStatusType = (status) => {
|
||||
switch (status) {
|
||||
case '0':
|
||||
return 'info';
|
||||
case '1':
|
||||
return 'primary';
|
||||
case '2':
|
||||
return 'success';
|
||||
case '3':
|
||||
return 'danger';
|
||||
case '4':
|
||||
return 'info';
|
||||
default:
|
||||
return 'info';
|
||||
}
|
||||
}
|
||||
|
||||
// 处理审核签发点击事件
|
||||
const handleAuditClick = (row) => {
|
||||
console.log("审核签发", row);
|
||||
Tid.value = row.id;
|
||||
Tid.value = row.ticketId;
|
||||
dialogShow.value = true;
|
||||
}
|
||||
|
||||
|
|
@ -161,8 +176,9 @@ const getInit = async () => {
|
|||
params.startTime = dayjs(queryForm.value.dateRange[0]).format('YYYY-MM-DD');
|
||||
params.endTime = dayjs(queryForm.value.dateRange[1]).format('YYYY-MM-DD');
|
||||
}
|
||||
|
||||
loading.value = true;
|
||||
let res = await FetchWorkTicketList(params);
|
||||
loading.value = false;
|
||||
console.log("数据列表", res);
|
||||
if (res.code === 200) {
|
||||
tableData.value = res.rows;
|
||||
|
|
@ -192,6 +208,7 @@ const handleCancel = () => {
|
|||
console.log('关闭弹窗')
|
||||
dialogShow.value = false;
|
||||
Tid.value = '';
|
||||
getInit();
|
||||
}
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -176,7 +176,7 @@
|
|||
</div>
|
||||
</template>
|
||||
<script setup name="Index">
|
||||
import { ref, computed, onMounted, getCurrentInstance } from "vue";
|
||||
import { ref, onBeforeMount, computed, onMounted, getCurrentInstance } from "vue";
|
||||
import { useRouter } from "vue-router";
|
||||
import { listUser, addUser, getUser, updateUser, delUser, changeUserStatus, resetUserPwd, deptTreeSelect } from "@/api/system/user";
|
||||
import { ElMessage, ElMessageBox } from "element-plus";
|
||||
|
|
@ -221,6 +221,10 @@ const pageNum = ref(1); // 当前页码
|
|||
const pageSize = ref(10); // 每页显示条数
|
||||
const total = ref(0); // 总记录数
|
||||
|
||||
onBeforeMount(() => {
|
||||
getDeptTree();
|
||||
});
|
||||
|
||||
// 获取用户列表
|
||||
const getList = async () => {
|
||||
if (!unitId.value) {
|
||||
|
|
@ -596,7 +600,7 @@ const handleBack = () => {
|
|||
onMounted(() => {
|
||||
const route = router.currentRoute.value;
|
||||
// 从路由参数中获取单位ID、部门ID和单位名称
|
||||
const id = route.query.unitId;
|
||||
const id = route.query.deptId;
|
||||
const deptIdParam = route.query.deptId;
|
||||
const enterpriseName = route.query.enterpriseName;
|
||||
|
||||
|
|
@ -608,8 +612,6 @@ onMounted(() => {
|
|||
if (enterpriseName) {
|
||||
enterpriseData.value.enterpriseName = enterpriseName;
|
||||
}
|
||||
// 获取部门树
|
||||
getDeptTree();
|
||||
// 获取用户列表
|
||||
getList();
|
||||
} else {
|
||||
|
|
|
|||
|
|
@ -10,12 +10,10 @@
|
|||
<div class="button-group mg-2">
|
||||
<div class="button-group">
|
||||
<el-button type="primary" size="default" @click="handleAddEnterprise">新增单位建档</el-button>
|
||||
<el-button type="warning" size="default">批量创建账号</el-button>
|
||||
<!-- <el-button type="warning" size="default">批量创建账号</el-button> -->
|
||||
<el-button size="default">导入账号</el-button>
|
||||
<el-button size="default">导出账号</el-button>
|
||||
</div>
|
||||
|
||||
<el-button size="default" class="float-right" icon="Refresh" @click="handleRefresh">刷新</el-button>
|
||||
</div>
|
||||
|
||||
<el-form :model="queryForm" inline class="card-box mb-4">
|
||||
|
|
@ -92,7 +90,6 @@ const queryForm = ref({
|
|||
areaName: "",
|
||||
status: ""
|
||||
});
|
||||
|
||||
// 表格数据
|
||||
const tableData = ref([]);
|
||||
const pageNum = ref(1); // 当前页码
|
||||
|
|
@ -190,7 +187,7 @@ const handleAccountManagement = (row) => {
|
|||
|
||||
// 跳转到编辑单位建档
|
||||
const handleEdit = (row) => {
|
||||
router.push(`/Tenement/newEnterprise?unitId=${row.unitId || row.id}`);
|
||||
router.push(`/Tenement/newEnterprise?unitId=${row.deptId}`);
|
||||
};
|
||||
|
||||
// 修改单位档案状态
|
||||
|
|
|
|||
Loading…
Reference in New Issue