feat(工作票): 实现工作票签发审核功能

添加工作票API接口文件,包含列表和详情查询
修改路由配置和页面标题为"工作票签发审核"
完善列表页、详情页和弹窗的数据获取和展示逻辑
This commit is contained in:
liangbin 2026-01-29 18:00:22 +08:00
parent 0767228b64
commit f56c7923df
5 changed files with 102 additions and 44 deletions

18
src/api/workTicket.js Normal file
View File

@ -0,0 +1,18 @@
import request from '@/utils/request'
// 查询工作票列表
export function FetchWorkTicketList(params) {
return request({
url: '/manage/contractor/workTicket/list',
method: 'get',
params
})
}
// 查询工作票详情
export function FetchWorkTicketDetail(id) {
return request({
url: '/manage/contractor/workTicket/' + id,
method: 'get',
})
}

View File

@ -223,7 +223,7 @@ export const constantRoutes = [
component: () => component: () =>
import("@/views/proprietor/TicketIssueAudit/index.vue"), import("@/views/proprietor/TicketIssueAudit/index.vue"),
name: "TicketIssueAudit", name: "TicketIssueAudit",
meta: { title: "签发审核", icon: "table" }, meta: { title: "工作票签发审核", icon: "table" },
}, },
{ {
path: "/proprietor/TicketIssueAudit/Detail", path: "/proprietor/TicketIssueAudit/Detail",
@ -231,7 +231,7 @@ export const constantRoutes = [
import("@/views/proprietor/TicketIssueAudit/Detail.vue"), import("@/views/proprietor/TicketIssueAudit/Detail.vue"),
name: "TicketIssueAuditDetail", name: "TicketIssueAuditDetail",
hidden: true, hidden: true,
meta: { title: "签发审核详情", icon: "table" }, meta: { title: "工作票签发审核详情", icon: "table" },
}, },
], ],
}, },

View File

@ -1,4 +1,4 @@
<!-- 业主模块-票证签发审核-列表--> <!-- 业主模块-工作票签发审核-详情-->
<template> <template>
<div class="MainBox"> <div class="MainBox">
<div class="ticket-detail-container"> <div class="ticket-detail-container">
@ -158,7 +158,8 @@
</div> </div>
</template> </template>
<script setup> <script setup>
import { ref } from 'vue' import { ref, onMounted } from 'vue'
import { FetchWorkTicketDetail } from '@/api/workTicket'
const formData = ref({ const formData = ref({
necessary: null, necessary: null,

View File

@ -63,11 +63,16 @@
</template> </template>
<script setup> <script setup>
import { ref } from 'vue' import { ref,onBeforeMount } from 'vue'
import { UploadFilled } from '@element-plus/icons-vue' import { UploadFilled } from '@element-plus/icons-vue'
import { FetchWorkTicketDetail } from '@/api/workTicket'
const auditResult = ref('') const auditResult = ref('')
const props = defineProps({ const props = defineProps({
Tid: {
type: Number || String,
default: ''
},
show: { show: {
type: Boolean, type: Boolean,
default: false default: false
@ -78,6 +83,21 @@ const props = defineProps({
} }
}) })
onBeforeMount(() => {
if (props.Tid) {
getDetail();
}
})
//
const getDetail = async () => {
let res = await FetchWorkTicketDetail(props.Tid);
if (res.code == 200) {
formData.value = res.data;
}
}
// //

View File

@ -1,4 +1,4 @@
<!-- 业主模块-签发审核-列表页 --> <!-- 业主模块-工作票签发审核-列表页 -->
<template> <template>
<div class="MainBox"> <div class="MainBox">
<el-tabs v-model="activeTab" class="mb-4"> <el-tabs v-model="activeTab" class="mb-4">
@ -12,7 +12,7 @@
<el-form :model="queryForm" inline class="card-box mb-4" label-position="top"> <el-form :model="queryForm" inline class="card-box mb-4" label-position="top">
<el-form-item label="项目名称/编号"> <el-form-item label="项目名称/编号">
<el-input v-model="queryForm.name" placeholder="请输入项目名称/编号"></el-input> <el-input v-model="queryForm.keyword" placeholder="请输入项目名称/编号"></el-input>
</el-form-item> </el-form-item>
<el-form-item label="提交时间"> <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"
@ -43,17 +43,17 @@
</el-form> </el-form>
<div class="card-box"> <div class="card-box">
<el-table :data="tableData"> <el-table :data="tableData" :loading="loading">
<el-table-column prop="ticketNumber" label="票证编号"></el-table-column> <el-table-column prop="ticketNumber" label="票证编号"></el-table-column>
<el-table-column prop="ticketType" label="票证类型"></el-table-column> <el-table-column prop="riskType" label="票证类型"></el-table-column>
<el-table-column prop="projectName" label="项目名称"></el-table-column> <el-table-column prop="projectName" label="项目名称"></el-table-column>
<el-table-column prop="enterpriseName" label="施工单位"></el-table-column> <el-table-column prop="enterpriseName" label="施工单位"></el-table-column>
<el-table-column prop="submitterName" label="提交人"></el-table-column> <el-table-column prop="updateBy" label="提交人"></el-table-column>
<el-table-column prop="submitTime" label="提交时间"></el-table-column> <el-table-column prop="updateTime" label="提交时间"></el-table-column>
<el-table-column prop="status" label="当前状态"> <el-table-column prop="status" label="当前状态">
<template #default="scope"> <template #default="scope">
<el-tag :type="scope.row.status === '待审核' ? 'primary' : 'danger'"> <el-tag :type="scope.row.status === '1' ? 'primary' : 'danger'">
{{ scope.row.status }} {{ statusCodeMap[scope.row.status] }}
</el-tag> </el-tag>
</template> </template>
</el-table-column> </el-table-column>
@ -72,70 +72,88 @@
total }} total }}
</span> </span>
<el-pagination v-model:current-page="pageNum" v-model:page-size="pageSize" :page-sizes="[5, 10, 20]" <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="handlePageChange"></el-pagination>
</div> </div>
</div> </div>
<!-- 审核签发票证-弹窗详情 --> <!-- 审核签发票证-弹窗详情 -->
<DialogBox v-if="dialogShow" ref="dialogRef" :show="dialogShow" :CloseDialog="handleCancel" /> <DialogBox v-if="dialogShow" ref="dialogRef" :show="dialogShow" :CloseDialog="handleCancel" :Tid="Tid" />
</div> </div>
</template> </template>
<script setup name="Index"> <script setup name="Index">
import { FetchWorkTicketList } from '@/api/workTicket.js'
import DialogBox from "./DialogBox.vue"; import DialogBox from "./DialogBox.vue";
import { ref } from "vue"; import { ref, onBeforeMount } from "vue";
import { useRouter } from "vue-router"; import { useRouter } from "vue-router";
const router = useRouter(); const router = useRouter();
//
const statusCodeMap = {
"0": "草稿",
"1": "待审核",
"2": "已签发",
"3": "已驳回",
"4": "已作废"
}
const activeTab = ref("1"); // tab const activeTab = ref("1"); // tab
// //
const queryForm = ref({ const queryForm = ref({
name: "", name: "", //
status: ""
}); });
const Tid = ref(''); // ID
const dialogShow = ref(false); const loading = ref(false); //
const dialogShow = ref(false); //
// //
const tableData = ref([ const tableData = ref([]);
{
id: 1,
ticketNumber: "123456",
ticketType: "工作票",
projectName: "项目A",
enterpriseName: "中建一局",
submitterName: "张三",
submitTime: "2023-05-12 14:30",
status: "待审核"
},
{
id: 2,
ticketNumber: "123457",
ticketType: "微信作业票",
projectName: "项目B",
enterpriseName: "中铁建工",
submitterName: "李四",
submitTime: "2023-05-13 09:45",
status: "已驳回"
}
]);
const pageNum = ref(1); // const pageNum = ref(1); //
const pageSize = ref(5); // const pageSize = ref(5); //
const total = ref(20); // const total = ref(20); //
onBeforeMount(() => {
getInit();
})
// //
const handleAuditClick = (row) => { const handleAuditClick = (row) => {
console.log("审核签发", row); console.log("审核签发", row);
Tid.value = row.id;
dialogShow.value = true; dialogShow.value = true;
} }
//
const getInit = async () => {
let params = {
pageNum: pageNum.value,
pageSize: pageSize.value,
name: queryForm.value.name,
status: activeTab.value,
}
let res = await FetchWorkTicketList(params);
console.log("数据列表", res);
if (res.code === 200) {
tableData.value = res.rows;
total.value = res.total;
}
}
//
const handlePageChange = (page) => {
pageNum.value = page;
getInit();
};
// //
const handleDetailClick = (row) => { const handleDetailClick = (row) => {
console.log("查看详情", row); console.log("查看详情", row);
router.push({ router.push({
path: "/proprietor/TicketIssueAudit/Detail", path: "/proprietor/TicketIssueAudit/Detail",
query: { query: {
id: row.id Tid: row.id
} }
}); });
} }
@ -143,7 +161,8 @@ const handleDetailClick = (row) => {
// //
const handleCancel = () => { const handleCancel = () => {
console.log('关闭弹窗') console.log('关闭弹窗')
dialogShow.value = false dialogShow.value = false;
Tid.value = '';
} }