代码提交
This commit is contained in:
parent
476b9f79cb
commit
7959a0bd7d
|
|
@ -1,3 +1,4 @@
|
|||
export * from './modules/auth'
|
||||
export * from './modules/user'
|
||||
export * from './modules/workTicket'
|
||||
export * from './modules/projectImplementation'
|
||||
|
|
@ -0,0 +1,33 @@
|
|||
import { get } from '../request'
|
||||
|
||||
/**
|
||||
* 查询项目实施列表
|
||||
* @param {Object} params - 查询参数
|
||||
* @param {Number} params.pageNum - 页码(可选)
|
||||
* @param {Number} params.pageSize - 每页数量(可选)
|
||||
* @param {String} params.status - 状态(可选)
|
||||
* @param {String} params.projectName - 项目名称(可选,模糊查询)
|
||||
* @param {Number} params.projectId - 项目ID(可选)
|
||||
* @returns {Promise} 返回项目实施列表 { total: number, rows: array }
|
||||
*/
|
||||
export function getProjectImplementationList(params = {}) {
|
||||
return get('/manage/contractor/projectImplementation/list', params)
|
||||
}
|
||||
|
||||
/**
|
||||
* 查询项目详情
|
||||
* @param {Number} projectId - 项目ID
|
||||
* @returns {Promise} 返回项目详情数据
|
||||
*/
|
||||
export function getProjectImplementationDetail(projectId) {
|
||||
return get(`/manage/contractor/projectImplementation/${projectId}`)
|
||||
}
|
||||
|
||||
/**
|
||||
* 查询当天合格数量和检查项总数
|
||||
* @param {Number} projectId - 项目ID
|
||||
* @returns {Promise} 返回当天检查项汇总数据 { qualifiedCount: number, totalCount: number, submissionDate: string, submitted: boolean }
|
||||
*/
|
||||
export function getTodayInspectionSummary(projectId) {
|
||||
return get('/manage/contractor/dailyInspection/todaySummary', { projectId })
|
||||
}
|
||||
|
|
@ -92,6 +92,15 @@ export function submitWorkPlan(projectId) {
|
|||
return put(`/manage/contractor/workPlan/submit/${projectId}`)
|
||||
}
|
||||
|
||||
/**
|
||||
* 撤回工作计划
|
||||
* @param {Number|String} projectId - 项目ID(必填)
|
||||
* @returns {Promise}
|
||||
*/
|
||||
export function withdrawWorkPlan(projectId) {
|
||||
return put(`/manage/contractor/workPlan/withdraw/${projectId}`)
|
||||
}
|
||||
|
||||
/**
|
||||
* 上传文件
|
||||
* @param {String} filePath - 文件路径(本地临时文件路径)
|
||||
|
|
@ -196,4 +205,56 @@ export function submitImplementation(projectId) {
|
|||
return put(`/manage/contractor/projectImplementation/submitImplementation?projectId=${projectId}`)
|
||||
}
|
||||
|
||||
/**
|
||||
* 修改工作计划
|
||||
* @param {Object} data - 工作计划数据
|
||||
* @param {Number|String} data.id - 工作计划ID(必填)
|
||||
* @returns {Promise}
|
||||
*/
|
||||
export function updateWorkPlan(data) {
|
||||
return put('/manage/contractor/workPlan', data)
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取出入证详情(根据项目ID)
|
||||
* @param {Number|String} projectId - 项目ID(必填)
|
||||
* @returns {Promise} 返回出入证详情
|
||||
*/
|
||||
export function getAccessPermitDetail(projectId) {
|
||||
return get(`/manage/contractor/accessPermit/project/${projectId}`)
|
||||
}
|
||||
|
||||
/**
|
||||
* 修改出入证申请
|
||||
* @param {Object} data - 出入证申请数据
|
||||
* @param {Number|String} data.id - 出入证申请ID(必填)
|
||||
* @returns {Promise}
|
||||
*/
|
||||
export function updateAccessPermit(data) {
|
||||
return put('/manage/contractor/accessPermit', data)
|
||||
}
|
||||
|
||||
/**
|
||||
* 修改工作票申请
|
||||
* @param {Object} data - 工作票数据
|
||||
* @param {Number|String} data.id - 工作票ID(必填)
|
||||
* @param {Number} data.projectId - 所属项目ID(必填)
|
||||
* @param {String} data.workLocation - 作业地点
|
||||
* @param {Number} data.supervisorId - 作业负责人ID
|
||||
* @param {String} data.supervisorName - 作业负责人姓名
|
||||
* @param {String} data.supervisorPosition - 作业负责人职位
|
||||
* @param {String} data.workContent - 作业内容
|
||||
* @param {String} data.riskType - 风险类型(如:高风险、中风险、低风险)
|
||||
* @param {String} data.workStartTime - 作业开始时间(格式:yyyy-MM-dd HH:mm:ss)
|
||||
* @param {String} data.workEndTime - 作业结束时间(格式:yyyy-MM-dd HH:mm:ss)
|
||||
* @param {Array<String>} data.safetyMeasuresList - 安全措施列表
|
||||
* @param {Array<Object>} data.qualificationList - 作业班成员资质列表
|
||||
* @param {String} data.needMonitoringCamera - 是否需申领移动监控球机("0"否,"1"是)
|
||||
* @param {Number} data.cameraApplicationId - 监控球机申请ID(如果需要监控球机时填写)
|
||||
* @param {String} data.remark - 备注
|
||||
* @returns {Promise}
|
||||
*/
|
||||
export function updateWorkTicket(data) {
|
||||
return put('/manage/contractor/workTicket', data)
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -2,14 +2,14 @@
|
|||
<template>
|
||||
<view class="MainBox">
|
||||
<view class="labebBox">申请单位:</view>
|
||||
<view class="fw-600">{{ progectInfo.applyUnit }}</view>
|
||||
<view class="fw-600">{{ applyUnit }}</view>
|
||||
<view class="labebBox">施工单位:</view>
|
||||
<view class="fw-600">{{ progectInfo.constructUnit }}</view>
|
||||
<view class="fw-600">{{ constructUnit }}</view>
|
||||
<view class="labebBox">施工地点:</view>
|
||||
<view class="fw-600">{{ progectInfo.site }}</view>
|
||||
<view class="fw-600">{{ site }}</view>
|
||||
<view class="labebBox">附件资料:</view>
|
||||
<view class="ListBox">
|
||||
<u-virtual-list :list-data="dataSource" :item-height="80" height="100%">
|
||||
<u-virtual-list v-if="dataSource.length > 0" :list-data="dataSource" :item-height="80" height="100%">
|
||||
<template #default="{ item, index }">
|
||||
<view class="CardBox" :key="item.id">
|
||||
<view class="FlexBox">
|
||||
|
|
@ -22,45 +22,78 @@
|
|||
</view>
|
||||
</template>
|
||||
</u-virtual-list>
|
||||
<view v-else class="empty-tip">暂无附件资料</view>
|
||||
</view>
|
||||
</view>
|
||||
</template>
|
||||
<script setup>
|
||||
import { ref } from 'vue'
|
||||
const progectInfo = ref({
|
||||
Id: 1,
|
||||
applyUnit: '北京CBD改造项目管理有限公司',
|
||||
constructUnit: '北京CBD改造项目施工有限公司',
|
||||
site: '北京市海淀区',
|
||||
})
|
||||
const dataSource = ref([
|
||||
{
|
||||
id: 1,
|
||||
name: '项目合同.pdf'
|
||||
},
|
||||
{
|
||||
id: 2,
|
||||
name: '项目进度表.xlsx'
|
||||
},
|
||||
{
|
||||
id: 3,
|
||||
name: '项目成本表.xlsx'
|
||||
},
|
||||
{
|
||||
id: 4,
|
||||
name: '项目风险卡.xlsx'
|
||||
},
|
||||
{
|
||||
id: 5,
|
||||
name: '项目整改记录.xlsx'
|
||||
},
|
||||
{
|
||||
id: 6,
|
||||
name: '项目风险管控类型.xlsx'
|
||||
import { ref, computed } from 'vue'
|
||||
|
||||
const props = defineProps({
|
||||
projectData: {
|
||||
type: Object,
|
||||
default: () => null
|
||||
}
|
||||
})
|
||||
|
||||
// 计算属性:申请单位
|
||||
const applyUnit = computed(() => {
|
||||
return props.projectData?.constructionUnitName || '未设置'
|
||||
})
|
||||
|
||||
// 计算属性:施工单位
|
||||
const constructUnit = computed(() => {
|
||||
return props.projectData?.constructionUnitName || '未设置'
|
||||
})
|
||||
|
||||
// 计算属性:施工地点
|
||||
const site = computed(() => {
|
||||
const location = props.projectData?.workLocation || ''
|
||||
const detail = props.projectData?.workLocationDetail || ''
|
||||
if (location && detail) {
|
||||
return `${location} ${detail}`
|
||||
}
|
||||
return location || detail || '未设置'
|
||||
})
|
||||
|
||||
// 附件资料列表(如果有附件数据,可以从projectData中获取)
|
||||
const dataSource = ref([
|
||||
// 这里可以根据实际接口返回的附件数据来填充
|
||||
// 目前先保持空数组,如果有附件接口可以后续添加
|
||||
])
|
||||
|
||||
// 获取项目状态文本
|
||||
const getProjectStatusText = (status) => {
|
||||
const statusMap = {
|
||||
'0': '未开始',
|
||||
'1': '进行中',
|
||||
'2': '已完成',
|
||||
'3': '已暂停',
|
||||
'4': '已取消'
|
||||
}
|
||||
return statusMap[status] || '未知状态'
|
||||
}
|
||||
|
||||
// 获取实施状态文本
|
||||
const getImplementationStatusText = (status) => {
|
||||
const statusMap = {
|
||||
'1': '实施中',
|
||||
'2': '已完工',
|
||||
'3': '整改中',
|
||||
'4': '待完工确认'
|
||||
}
|
||||
return statusMap[status] || '未知状态'
|
||||
}
|
||||
|
||||
// 获取审批状态文本
|
||||
const getApprovalStatusText = (status) => {
|
||||
const statusMap = {
|
||||
'0': '待审批',
|
||||
'1': '已审批',
|
||||
'2': '已拒绝'
|
||||
}
|
||||
return statusMap[status] || '未知状态'
|
||||
}
|
||||
</script>
|
||||
<style lang="scss" scoped>
|
||||
.labebBox {
|
||||
|
|
@ -98,6 +131,13 @@ const dataSource = ref([
|
|||
height: calc(100% - 384rpx);
|
||||
padding: 20rpx;
|
||||
|
||||
.empty-tip {
|
||||
text-align: center;
|
||||
color: #999;
|
||||
font-size: 28rpx;
|
||||
padding: 40rpx 0;
|
||||
}
|
||||
|
||||
.CardBox {
|
||||
width: 100%;
|
||||
height: 100rpx;
|
||||
|
|
|
|||
|
|
@ -5,7 +5,7 @@
|
|||
<u-row>
|
||||
<u-col :span="6">
|
||||
<view>今日检查项完成度</view>
|
||||
<view class="blcakFont">5/6</view>
|
||||
<view class="blcakFont">{{ completedCount }}/{{ totalCheckItems }}</view>
|
||||
</u-col>
|
||||
<u-col :span="6">
|
||||
<view>待整改问题数</view>
|
||||
|
|
@ -43,7 +43,34 @@
|
|||
</view>
|
||||
</template>
|
||||
<script setup>
|
||||
import { ref } from 'vue'
|
||||
import { ref, computed } from 'vue'
|
||||
|
||||
const props = defineProps({
|
||||
projectData: {
|
||||
type: Object,
|
||||
default: () => null
|
||||
},
|
||||
todaySummary: {
|
||||
type: Object,
|
||||
default: () => ({
|
||||
qualifiedCount: 0,
|
||||
totalCount: 0,
|
||||
submissionDate: '',
|
||||
submitted: false
|
||||
})
|
||||
}
|
||||
})
|
||||
|
||||
// 使用接口返回的今日检查项数据
|
||||
const totalCheckItems = computed(() => {
|
||||
return props.todaySummary?.totalCount || 0
|
||||
})
|
||||
|
||||
// 使用接口返回的合格数量
|
||||
const completedCount = computed(() => {
|
||||
return props.todaySummary?.qualifiedCount || 0
|
||||
})
|
||||
|
||||
const dataSource = ref([
|
||||
{ id: 1, name: 'AI返现安全帽佩戴不规范', time: '2023-08-01 10:00:00' },
|
||||
{ id: 2, name: 'AI返现安全帽佩戴不规范', time: '2023-08-02 10:00:00' },
|
||||
|
|
@ -55,8 +82,17 @@ const dataSource = ref([
|
|||
])
|
||||
// 提交今日风险检查项
|
||||
const submitCheck = () => {
|
||||
// 从项目数据中获取项目ID
|
||||
const projectId = props.projectData?.projectId
|
||||
if (!projectId) {
|
||||
uni.showToast({
|
||||
title: '项目ID不存在',
|
||||
icon: 'none'
|
||||
})
|
||||
return
|
||||
}
|
||||
uni.navigateTo({
|
||||
url: '/pages/TodayExamine/index',
|
||||
url: `/pages/TodayExamine/index?projectId=${projectId}`,
|
||||
})
|
||||
}
|
||||
// 整改反馈
|
||||
|
|
|
|||
|
|
@ -44,16 +44,16 @@
|
|||
<up-tabs :list="list1" @click="click"></up-tabs>
|
||||
</view>
|
||||
<view class="displayCase">
|
||||
<ControlView v-if="currentTab === 1"></ControlView>
|
||||
<BasicView v-if="currentTab === 2" ></BasicView>
|
||||
<RecordView v-if="currentTab === 3"></RecordView>
|
||||
<ControlView v-if="currentTab === 1" :project-data="progectInfo.detailData" :today-summary="todayInspectionSummary"></ControlView>
|
||||
<BasicView v-if="currentTab === 2" :project-data="progectInfo.detailData"></BasicView>
|
||||
<RecordView v-if="currentTab === 3" :project-data="progectInfo.detailData"></RecordView>
|
||||
</view>
|
||||
</view>
|
||||
<view class="FootBox">
|
||||
<u-button type="primary">项目完工确认</u-button>
|
||||
<u-button type="primary" :disabled="progectInfo.detailData?.implementationStatus !== '4'">项目完工确认</u-button>
|
||||
<view class="FootTxt">
|
||||
<view>复核进度:</view>
|
||||
<view class="yellow">监理复核中</view>
|
||||
<view class="yellow">{{ getReviewStatusText() }}</view>
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
|
|
@ -62,16 +62,29 @@
|
|||
import ControlView from './components/ControlView.vue'
|
||||
import BasicView from './components/BasicView.vue'
|
||||
import RecordView from './components/RecordView.vue'
|
||||
import { ref } from 'vue'
|
||||
import { ref, onMounted } from 'vue'
|
||||
import { getProjectImplementationDetail, getTodayInspectionSummary } from '@/api'
|
||||
|
||||
const progectInfo = ref({
|
||||
Id: 1,
|
||||
name: '北京CBD改造项目',
|
||||
code: '20230801001',
|
||||
leader: '张三',
|
||||
period: '2023.8.1-2023.12.31',
|
||||
riskControlType: '动火作业风险卡',
|
||||
percentage: 30
|
||||
Id: null,
|
||||
name: '',
|
||||
code: '',
|
||||
leader: '',
|
||||
period: '',
|
||||
riskControlType: '',
|
||||
percentage: 0,
|
||||
// 详情数据
|
||||
detailData: null
|
||||
})
|
||||
|
||||
// 今日检查项汇总数据
|
||||
const todayInspectionSummary = ref({
|
||||
qualifiedCount: 0,
|
||||
totalCount: 0,
|
||||
submissionDate: '',
|
||||
submitted: false
|
||||
})
|
||||
|
||||
// tabs 切换
|
||||
const currentTab = ref(1)
|
||||
// tabs 列表
|
||||
|
|
@ -95,10 +108,127 @@ const click = (e) => {
|
|||
}
|
||||
// 返回列表页
|
||||
const goBack = () => {
|
||||
uni.switchTab({
|
||||
url: '/pages/ProgectList/index'
|
||||
})
|
||||
uni.navigateBack()
|
||||
}
|
||||
|
||||
// 格式化日期
|
||||
const formatDate = (dateStr) => {
|
||||
if (!dateStr) return ''
|
||||
const date = new Date(dateStr)
|
||||
const year = date.getFullYear()
|
||||
const month = String(date.getMonth() + 1).padStart(2, '0')
|
||||
const day = String(date.getDate()).padStart(2, '0')
|
||||
return `${year}.${month}.${day}`
|
||||
}
|
||||
|
||||
// 获取项目详情
|
||||
const fetchProjectDetail = async (projectId) => {
|
||||
try {
|
||||
const data = await getProjectImplementationDetail(projectId)
|
||||
if (data) {
|
||||
// 保存完整数据
|
||||
progectInfo.value.detailData = data
|
||||
|
||||
// 映射基本信息
|
||||
progectInfo.value.Id = data.projectId
|
||||
progectInfo.value.name = data.projectName || '未命名项目'
|
||||
progectInfo.value.code = data.projectCode || ''
|
||||
|
||||
// 作业负责人(监理人)
|
||||
progectInfo.value.leader = data.supervisorName || '未设置'
|
||||
|
||||
// 作业周期
|
||||
const startTime = formatDate(data.workStartTime)
|
||||
const endTime = formatDate(data.workEndTime)
|
||||
progectInfo.value.period = startTime && endTime ? `${startTime}-${endTime}` : '未设置'
|
||||
|
||||
// 当前进度
|
||||
progectInfo.value.percentage = data.currentProgress || 0
|
||||
|
||||
// 风险管控类型(从riskControlCard.templateName获取)
|
||||
progectInfo.value.riskControlType = data.riskControlCard?.templateName || '未设置'
|
||||
}
|
||||
} catch (error) {
|
||||
console.error('获取项目详情失败:', error)
|
||||
uni.showToast({
|
||||
title: '获取项目详情失败',
|
||||
icon: 'none'
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
// 获取今日检查项汇总
|
||||
const fetchTodayInspectionSummary = async (projectId) => {
|
||||
try {
|
||||
const data = await getTodayInspectionSummary(projectId)
|
||||
if (data) {
|
||||
todayInspectionSummary.value = {
|
||||
qualifiedCount: data.qualifiedCount || 0,
|
||||
totalCount: data.totalCount || 0,
|
||||
submissionDate: data.submissionDate || '',
|
||||
submitted: data.submitted || false
|
||||
}
|
||||
}
|
||||
} catch (error) {
|
||||
console.error('获取今日检查项汇总失败:', error)
|
||||
// 不显示错误提示,使用默认值
|
||||
todayInspectionSummary.value = {
|
||||
qualifiedCount: 0,
|
||||
totalCount: 0,
|
||||
submissionDate: '',
|
||||
submitted: false
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// 获取复核状态文本
|
||||
const getReviewStatusText = () => {
|
||||
const data = progectInfo.value.detailData
|
||||
if (!data) return '未知状态'
|
||||
|
||||
// 优先显示监理复核状态
|
||||
if (data.supervisionReviewStatus) {
|
||||
const statusMap = {
|
||||
'0': '待监理复核',
|
||||
'1': '监理复核中',
|
||||
'2': '监理复核通过',
|
||||
'3': '监理复核拒绝'
|
||||
}
|
||||
return statusMap[data.supervisionReviewStatus] || '未知状态'
|
||||
}
|
||||
|
||||
// 其次显示物业复核状态
|
||||
if (data.propertyReviewStatus) {
|
||||
const statusMap = {
|
||||
'0': '待物业复核',
|
||||
'1': '物业复核中',
|
||||
'2': '物业复核通过',
|
||||
'3': '物业复核拒绝'
|
||||
}
|
||||
return statusMap[data.propertyReviewStatus] || '未知状态'
|
||||
}
|
||||
|
||||
return '未开始复核'
|
||||
}
|
||||
|
||||
// 组件挂载时获取详情
|
||||
onMounted(() => {
|
||||
// 从URL参数获取项目ID
|
||||
const pages = getCurrentPages()
|
||||
const currentPage = pages[pages.length - 1]
|
||||
const options = currentPage.options || {}
|
||||
const projectId = options.id || options.projectId
|
||||
|
||||
if (projectId) {
|
||||
fetchProjectDetail(projectId)
|
||||
fetchTodayInspectionSummary(projectId)
|
||||
} else {
|
||||
uni.showToast({
|
||||
title: '缺少项目ID参数',
|
||||
icon: 'none'
|
||||
})
|
||||
}
|
||||
})
|
||||
</script>
|
||||
<style lang="scss" scoped>
|
||||
.FlexBox {
|
||||
|
|
|
|||
|
|
@ -4,7 +4,7 @@
|
|||
<view class="FlexBox TopBox">
|
||||
<view class="SelectBox">
|
||||
<u-select :current="TypeValue" :options="TypeList" placeholder="请选择工单类型" size="large" showOptionsLabel
|
||||
@update:current="TypeValue = $event"></u-select>
|
||||
@update:current="handleTypeChange($event)"></u-select>
|
||||
</view>
|
||||
|
||||
|
||||
|
|
@ -34,7 +34,10 @@
|
|||
</view>
|
||||
</template>
|
||||
<script setup>
|
||||
import { ref } from 'vue'
|
||||
import { ref, onMounted } from 'vue'
|
||||
import { onPullDownRefresh } from '@dcloudio/uni-app'
|
||||
import { getProjectImplementationList } from '@/api'
|
||||
|
||||
const TypeValue = ref('1') // 工单类型
|
||||
// 类型列表
|
||||
const TypeList = ref([
|
||||
|
|
@ -44,15 +47,96 @@ const TypeList = ref([
|
|||
{ name: '待完工确认', id: '4' },
|
||||
])
|
||||
|
||||
const dataSource = ref([
|
||||
{ id: 1, name: '北京CBD写字楼改造项目', remainingTime: '1', site: '北京市朝阳区建国路88号', status: '实施中' },
|
||||
{ id: 2, name: '工单2', remainingTime: '2', site: '北京市朝阳区建国路88号', status: '整改中' },
|
||||
{ id: 3, name: '工单3', remainingTime: '3', site: '北京市朝阳区建国路88号', status: '待完工确认' },
|
||||
{ id: 4, name: '工单4', remainingTime: '5', site: '北京市朝阳区建国路88号', status: '实施中' },
|
||||
{ id: 5, name: '工单5', remainingTime: '3', site: '北京市朝阳区建国路88号', status: '待完工确认' },
|
||||
{ id: 6, name: '工单6', remainingTime: '2', site: '北京市朝阳区建国路88号', status: '已完工' },
|
||||
{ id: 7, name: '工单7', remainingTime: '4', site: '北京市朝阳区建国路88号', status: '已完工' },
|
||||
])
|
||||
const dataSource = ref([])
|
||||
const total = ref(0) // 总条数
|
||||
|
||||
// 查询项目实施列表
|
||||
const fetchProjectImplementationList = async () => {
|
||||
try {
|
||||
const params = {
|
||||
pageNum: 1,
|
||||
pageSize: 1000
|
||||
}
|
||||
// 根据选择的类型添加筛选条件
|
||||
if (TypeValue.value === '2') {
|
||||
// 我负责的项目 - 可能需要根据实际接口参数调整
|
||||
params.myProject = true
|
||||
} else if (TypeValue.value === '3') {
|
||||
// 带整改
|
||||
params.status = '整改中'
|
||||
} else if (TypeValue.value === '4') {
|
||||
// 待完工确认
|
||||
params.status = '待完工确认'
|
||||
} else {
|
||||
// 全部实施中项目
|
||||
params.status = '实施中'
|
||||
}
|
||||
|
||||
const result = await getProjectImplementationList(params)
|
||||
// 根据返回的数据结构处理:{ total, rows, code, msg }
|
||||
if (result && result.rows && Array.isArray(result.rows)) {
|
||||
dataSource.value = result.rows.map(item => {
|
||||
// 计算剩余作业时长(天)
|
||||
let remainingDays = 0
|
||||
if (item.workEndTime) {
|
||||
const endTime = new Date(item.workEndTime)
|
||||
const now = new Date()
|
||||
const diffTime = endTime - now
|
||||
remainingDays = Math.ceil(diffTime / (1000 * 60 * 60 * 24))
|
||||
remainingDays = remainingDays > 0 ? remainingDays : 0
|
||||
}
|
||||
|
||||
// 映射实施状态文本
|
||||
let statusText = '未知状态'
|
||||
if (item.implementationStatus === '1') {
|
||||
statusText = '实施中'
|
||||
} else if (item.implementationStatus === '2') {
|
||||
statusText = '已完工'
|
||||
} else if (item.implementationStatus === '3') {
|
||||
statusText = '整改中'
|
||||
} else if (item.implementationStatus === '4') {
|
||||
statusText = '待完工确认'
|
||||
}
|
||||
|
||||
return {
|
||||
id: item.projectId,
|
||||
name: item.projectName || '未命名项目',
|
||||
remainingTime: remainingDays,
|
||||
site: item.workLocation || item.workLocationDetail || '未设置地址',
|
||||
status: statusText,
|
||||
// 保留原始数据,方便详情页使用
|
||||
rawData: item
|
||||
}
|
||||
})
|
||||
total.value = result.total || 0
|
||||
} else {
|
||||
dataSource.value = []
|
||||
total.value = 0
|
||||
}
|
||||
} catch (error) {
|
||||
console.error('查询项目实施列表失败:', error)
|
||||
dataSource.value = []
|
||||
total.value = 0
|
||||
}
|
||||
}
|
||||
|
||||
// 监听类型变化,重新查询
|
||||
const handleTypeChange = (value) => {
|
||||
TypeValue.value = value
|
||||
fetchProjectImplementationList()
|
||||
}
|
||||
|
||||
// 组件挂载时获取数据
|
||||
onMounted(() => {
|
||||
fetchProjectImplementationList()
|
||||
})
|
||||
|
||||
// 下拉刷新
|
||||
onPullDownRefresh(() => {
|
||||
fetchProjectImplementationList().finally(() => {
|
||||
uni.stopPullDownRefresh()
|
||||
})
|
||||
})
|
||||
|
||||
// 跳转项目详情
|
||||
const GoDetail = (id) => {
|
||||
|
|
|
|||
|
|
@ -18,8 +18,8 @@
|
|||
<view class="LabelBox">{{ item.checkItemName }}</view>
|
||||
<view class="ValueBox">
|
||||
<u-radio-group v-model="item.value" @change="change(item)">
|
||||
<u-radio label="合格" :border-color="item.value === '是' ? '#ff9900' : '#c5d5d6'"></u-radio>
|
||||
<u-radio label="不合格" :border-color="item.value === '否' ? '#ff9900' : '#c5d5d6'"></u-radio>
|
||||
<u-radio label="合格" :name="'合格'" :border-color="item.value === '合格' ? '#ff9900' : '#c5d5d6'"></u-radio>
|
||||
<u-radio label="不合格" :name="'不合格'" :border-color="item.value === '不合格' ? '#ff9900' : '#c5d5d6'"></u-radio>
|
||||
</u-radio-group>
|
||||
</view>
|
||||
</view>
|
||||
|
|
@ -32,31 +32,75 @@
|
|||
</view>
|
||||
</template>
|
||||
<script setup>
|
||||
import { ref } from 'vue'
|
||||
import { ref, onMounted } from 'vue'
|
||||
import { getProjectImplementationDetail } from '@/api'
|
||||
|
||||
// 检查项列表
|
||||
const checkItemList = ref([
|
||||
{
|
||||
id: 1,
|
||||
checkItemName: '作业人员是否持证上岗',
|
||||
value: '是'
|
||||
},
|
||||
{
|
||||
id: 2,
|
||||
checkItemName: '作业人员是否有安全装备',
|
||||
value: '是'
|
||||
},
|
||||
{
|
||||
id: 3,
|
||||
checkItemName: '作业人员是否有安全工具',
|
||||
value: '是'
|
||||
}
|
||||
])
|
||||
const checkItemList = ref([])
|
||||
|
||||
// 返回列表页
|
||||
const goBack = () => {
|
||||
uni.navigateBack({
|
||||
delta: 1
|
||||
})
|
||||
}
|
||||
|
||||
// 获取项目详情并提取检查项
|
||||
const fetchCheckItems = async (projectId) => {
|
||||
try {
|
||||
const data = await getProjectImplementationDetail(projectId)
|
||||
if (data && data.riskControlCard && data.riskControlCard.checkItems && data.riskControlCard.checkItems.length > 0) {
|
||||
// 将接口返回的checkItems转换为页面需要的格式,并按sortOrder排序
|
||||
checkItemList.value = data.riskControlCard.checkItems
|
||||
.map(item => ({
|
||||
id: item.checkItemId,
|
||||
checkItemName: item.itemDescription,
|
||||
value: item.checkResult === '合格' ? '合格' : (item.checkResult || ''),
|
||||
checkItemId: item.checkItemId,
|
||||
templateItemId: item.templateItemId,
|
||||
sortOrder: item.sortOrder || 0,
|
||||
originalData: item // 保留原始数据,方便后续提交
|
||||
}))
|
||||
.sort((a, b) => (a.sortOrder || 0) - (b.sortOrder || 0))
|
||||
} else {
|
||||
uni.showToast({
|
||||
title: '暂无检查项数据',
|
||||
icon: 'none'
|
||||
})
|
||||
checkItemList.value = []
|
||||
}
|
||||
} catch (error) {
|
||||
console.error('获取检查项数据失败:', error)
|
||||
uni.showToast({
|
||||
title: '获取检查项数据失败',
|
||||
icon: 'none'
|
||||
})
|
||||
checkItemList.value = []
|
||||
}
|
||||
}
|
||||
|
||||
// 单选改变事件
|
||||
const change = (item) => {
|
||||
console.log('检查项选择改变:', item)
|
||||
}
|
||||
|
||||
// 页面加载时获取数据
|
||||
onMounted(() => {
|
||||
// 从URL参数获取项目ID
|
||||
const pages = getCurrentPages()
|
||||
const currentPage = pages[pages.length - 1]
|
||||
const options = currentPage.options || {}
|
||||
const projectId = options.projectId || options.id
|
||||
|
||||
if (projectId) {
|
||||
fetchCheckItems(projectId)
|
||||
} else {
|
||||
uni.showToast({
|
||||
title: '缺少项目ID参数',
|
||||
icon: 'none'
|
||||
})
|
||||
}
|
||||
})
|
||||
</script>
|
||||
|
||||
<style lang="scss" scoped>
|
||||
|
|
|
|||
|
|
@ -26,8 +26,8 @@
|
|||
<u-tag :text="item.draftStatusText" shape="circle"></u-tag>
|
||||
</view>
|
||||
<view class="BtnList">
|
||||
<u-button text="修改" plain color="#2979ff" size="small"></u-button>
|
||||
<u-button text="撤回" plain color="#ff9900" size="small"></u-button>
|
||||
<u-button text="修改" plain color="#2979ff" size="small" @click="handleEdit(item)"></u-button>
|
||||
<u-button text="撤回" plain color="#ff9900" size="small" @click="handleWithdraw(item, index)"></u-button>
|
||||
<u-button text="删除" plain color="#fa3534" size="small" @click="handleDelete(item, index)"></u-button>
|
||||
</view>
|
||||
</view>
|
||||
|
|
@ -36,7 +36,7 @@
|
|||
</template>
|
||||
<script setup>
|
||||
import { ref, onMounted } from 'vue'
|
||||
import { getWorkPlanList, deleteWorkPlan } from '@/api/modules/workTicket'
|
||||
import { getWorkPlanList, deleteWorkPlan, withdrawWorkPlan } from '@/api/modules/workTicket'
|
||||
|
||||
const TypeValue = ref('1') // 工单类型
|
||||
// 类型列表
|
||||
|
|
@ -142,6 +142,30 @@ const HandleNewAdd = () => {
|
|||
})
|
||||
}
|
||||
|
||||
// 跳转修改工单
|
||||
const handleEdit = (item) => {
|
||||
const projectId = item.projectId || item.id
|
||||
if (!projectId) {
|
||||
uni.showToast({
|
||||
title: '项目ID不存在',
|
||||
icon: 'none'
|
||||
})
|
||||
return
|
||||
}
|
||||
// 获取工作票ID,支持 ticketIds 或 ticketId 字段
|
||||
const ticketId = item.ticketIds || item.ticketId
|
||||
// 构建跳转URL,添加 edit=1 标识为修改模式
|
||||
let url = `/pages/WorkOrderEdit/index?projectId=${projectId}&edit=1`
|
||||
if (ticketId) {
|
||||
// 如果 ticketIds 是数组,取第一个;如果是单个值,直接使用
|
||||
const ticketIdValue = Array.isArray(ticketId) ? ticketId[0] : ticketId
|
||||
url += `&workTicketId=${ticketIdValue}`
|
||||
}
|
||||
uni.navigateTo({
|
||||
url: url
|
||||
})
|
||||
}
|
||||
|
||||
// 跳转到详情页
|
||||
const handleDetail = (item) => {
|
||||
const projectId = item.projectId || item.id
|
||||
|
|
@ -166,6 +190,55 @@ const handleDetail = (item) => {
|
|||
})
|
||||
}
|
||||
|
||||
// 撤回工作计划
|
||||
const handleWithdraw = async (item, index) => {
|
||||
try {
|
||||
// 确认撤回
|
||||
const res = await new Promise((resolve) => {
|
||||
uni.showModal({
|
||||
title: '提示',
|
||||
content: `确定要撤回项目"${item.projectName || '未命名项目'}"吗?`,
|
||||
confirmText: '撤回',
|
||||
confirmColor: '#ff9900',
|
||||
success: (result) => {
|
||||
resolve(result.confirm)
|
||||
},
|
||||
fail: () => {
|
||||
resolve(false)
|
||||
}
|
||||
})
|
||||
})
|
||||
|
||||
if (!res) {
|
||||
return
|
||||
}
|
||||
|
||||
// 获取项目ID,优先使用 projectId,如果没有则使用 id
|
||||
const projectId = item.projectId || item.id
|
||||
if (!projectId) {
|
||||
uni.showToast({
|
||||
title: '项目ID不存在',
|
||||
icon: 'none'
|
||||
})
|
||||
return
|
||||
}
|
||||
|
||||
// 调用撤回接口
|
||||
await withdrawWorkPlan(projectId)
|
||||
|
||||
uni.showToast({
|
||||
title: '撤回成功',
|
||||
icon: 'success'
|
||||
})
|
||||
|
||||
// 撤回成功后,刷新列表
|
||||
await fetchWorkPlanList()
|
||||
} catch (error) {
|
||||
console.error('撤回失败:', error)
|
||||
// 错误提示已在 request.js 的拦截器中处理
|
||||
}
|
||||
}
|
||||
|
||||
// 删除工作计划
|
||||
const handleDelete = async (item, index) => {
|
||||
try {
|
||||
|
|
|
|||
|
|
@ -137,13 +137,19 @@ const restoreFormData = (data) => {
|
|||
}
|
||||
if (data.period && Array.isArray(data.period) && data.period.length >= 2) {
|
||||
if (data.period[0]) {
|
||||
startDateText.value = data.period[0];
|
||||
startDate.value = dayjs(data.period[0]).valueOf();
|
||||
// 处理日期字符串,提取日期部分(处理 "2020-01-01 00:00:00" 格式)
|
||||
const startDateStr = String(data.period[0]).split(' ')[0];
|
||||
startDateText.value = startDateStr;
|
||||
startDate.value = dayjs(startDateStr).isValid() ? dayjs(startDateStr).valueOf() : null;
|
||||
}
|
||||
if (data.period[1]) {
|
||||
endDateText.value = data.period[1];
|
||||
endDate.value = dayjs(data.period[1]).valueOf();
|
||||
// 处理日期字符串,提取日期部分(处理 "2020-01-01 00:00:00" 格式)
|
||||
const endDateStr = String(data.period[1]).split(' ')[0];
|
||||
endDateText.value = endDateStr;
|
||||
endDate.value = dayjs(endDateStr).isValid() ? dayjs(endDateStr).valueOf() : null;
|
||||
}
|
||||
// 更新 formData.period,确保数据同步
|
||||
UpdatePeriod();
|
||||
}
|
||||
};
|
||||
|
||||
|
|
|
|||
|
|
@ -296,10 +296,10 @@ const restoreFormData = (data) => {
|
|||
formData.value.CarList = [...data.CarList];
|
||||
}
|
||||
if (data.remark) formData.value.remark = data.remark;
|
||||
// 恢复文件列表(如果需要的话,可以从 data 中恢复)
|
||||
// if (data.fileList && Array.isArray(data.fileList)) {
|
||||
// fileList1.value = [...data.fileList];
|
||||
// }
|
||||
// 恢复文件列表
|
||||
if (data.fileList && Array.isArray(data.fileList)) {
|
||||
fileList1.value = [...data.fileList];
|
||||
}
|
||||
};
|
||||
|
||||
// 监听 allData.GatePassInfo 的变化,恢复表单数据
|
||||
|
|
@ -358,7 +358,11 @@ defineExpose({
|
|||
return typeof id === 'string' ? parseInt(id) || id : id;
|
||||
});
|
||||
|
||||
// 获取出入证ID(修改模式下需要)
|
||||
const accessPermitId = props.allData?.GatePassInfo?.id || null;
|
||||
|
||||
return {
|
||||
permitId: accessPermitId, // 修改模式下需要传入ID(使用permitId字段)
|
||||
projectId,
|
||||
workLocation,
|
||||
sysUserIds,
|
||||
|
|
|
|||
|
|
@ -19,7 +19,8 @@
|
|||
<GatePassInfo ref="gatePassInfoRef" :allData="allData" v-if="currentStep.id == 2"></GatePassInfo>
|
||||
<WorkNote ref="workNoteRef" :allData="allData" :openApplyForMachine="openApplyForMachine"
|
||||
v-if="currentStep.id == 3"></WorkNote>
|
||||
<RiskControl ref="riskControlRef" :allData="allData" :templateId="templateId" v-if="currentStep.id == 4"></RiskControl>
|
||||
<RiskControl ref="riskControlRef" :allData="allData" :templateId="templateId" v-if="currentStep.id == 4">
|
||||
</RiskControl>
|
||||
<ApplyForMachine ref="applyForMachineRef" :allData="allData" v-if="currentStep.id == '3a'">
|
||||
</ApplyForMachine>
|
||||
</view>
|
||||
|
|
@ -30,13 +31,13 @@
|
|||
</view>
|
||||
</template>
|
||||
<script setup>
|
||||
import { ref, onMounted, nextTick } from 'vue'
|
||||
import { ref, onMounted, nextTick, watch } from 'vue'
|
||||
import BasicsInfo from './compoents/BasicsInfo.vue'
|
||||
import GatePassInfo from './compoents/GatePassInfo.vue'
|
||||
import WorkNote from './compoents/WorkNote.vue'
|
||||
import RiskControl from './compoents/RiskControl.vue'
|
||||
import ApplyForMachine from './compoents/ApplyForMachine.vue'
|
||||
import { createWorkTicket, applyAccessPermit, createWorkPlan, createCameraApplication, submitWorkPlan, getWorkPlanDetail, getWorkTicketDetail, submitRiskControlCard, submitWorkTicketForContractor } from '@/api'
|
||||
import { createWorkTicket, applyAccessPermit, createWorkPlan, createCameraApplication, submitWorkPlan, getWorkPlanDetail, getWorkTicketDetail, submitRiskControlCard, submitWorkTicketForContractor, updateWorkPlan, updateWorkTicket, updateAccessPermit, getAccessPermitDetail } from '@/api'
|
||||
import { setStorage } from '@/utils/storage'
|
||||
import dayjs from 'dayjs'
|
||||
|
||||
|
|
@ -88,11 +89,15 @@ const allData = ref({
|
|||
GatePassInfo: {}, // 出入证申请
|
||||
WorkNote: {}, // 工作票
|
||||
workTicketId: null, // 工作票ID,用于球机申领
|
||||
workPlanDetail: null, // 工作计划详情(修改模式下使用)
|
||||
})
|
||||
|
||||
// 风险管控卡模板ID(从路由参数获取)
|
||||
const templateId = ref(null);
|
||||
|
||||
// 是否为修改模式
|
||||
const isEditMode = ref(false);
|
||||
|
||||
// 将 WorkNote/BasicsInfo 中的“作业班成员资质”统一转换为后端可提交的 qualificationList
|
||||
const buildQualificationList = (workNoteData, basicsInfo) => {
|
||||
// 优先使用 WorkNote 里回填/勾选后的 memberCheckedList(来源可能是详情 qualificationList)
|
||||
|
|
@ -144,6 +149,20 @@ const mapWorkTicketDetailToWorkNote = (detail) => {
|
|||
// 作业班成员资质(后端字段:qualificationList)
|
||||
const qualificationList = detail.qualificationList || detail.qualifications || detail.qualification || []
|
||||
|
||||
// 处理风险控制卡模板ID:优先使用模板ID字段,如果没有则尝试从风险控制卡ID获取
|
||||
// 根据用户需求,riskControlCardTemplateId 为风险光控卡选择的数据
|
||||
let riskCardTemplateId =
|
||||
detail.riskControlCardTemplateId ||
|
||||
detail.riskCardTemplateId ||
|
||||
detail.templateId ||
|
||||
detail.riskCardTemplateID ||
|
||||
undefined
|
||||
|
||||
// 如果工作票详情中有 riskControlCardId,可能需要通过该ID查询对应的模板ID
|
||||
// 但根据用户需求,riskControlCardTemplateId 应该直接在工作票详情中
|
||||
// 如果确实需要通过 riskControlCardId 查询,可以在这里添加查询逻辑
|
||||
// 目前先使用直接提供的模板ID字段
|
||||
|
||||
return {
|
||||
ticketNumber: detail.ticketNumber || detail.number || detail.ticketNo || '',
|
||||
projectName: detail.projectName || detail.project || '',
|
||||
|
|
@ -158,26 +177,185 @@ const mapWorkTicketDetailToWorkNote = (detail) => {
|
|||
detail.needMonitoringCamera === 1 ||
|
||||
detail.needMonitoringCamera === true ||
|
||||
detail.needApplyBallMachine === true,
|
||||
riskCardTemplateId:
|
||||
detail.riskCardTemplateId ||
|
||||
detail.templateId ||
|
||||
detail.riskCardTemplateID ||
|
||||
undefined,
|
||||
riskCardTemplateId: riskCardTemplateId,
|
||||
memberCheckedList: Array.isArray(qualificationList)
|
||||
? qualificationList.map((m) => ({
|
||||
id: m.id || m.memberId || m.userId,
|
||||
name: m.name || m.memberName || m.userName,
|
||||
// 尽量携带“持证/未持证”信息,供 WorkNote 直接渲染
|
||||
// 尽量携带"持证/未持证"信息,供 WorkNote 直接渲染
|
||||
status:
|
||||
m.status ||
|
||||
(m.hasCertificate === '0' || m.hasCertificate === 0 || m.hasCertificate === false ? '未持证' : '持证'),
|
||||
// 后端如未提供勾选状态,默认按“已确认”处理,避免进入页面全空需要重勾
|
||||
checked: m.checked === undefined ? true : (m.checked === true || m.checked === 'true' || m.checked === 1)
|
||||
// 默认勾选查询出来的 qualificationList 中的所有人员(无论 qualificationConfirmed 的值是什么)
|
||||
// 因为 qualificationList 中的人员都是作业班成员资质确认的人员,应该默认勾选
|
||||
checked: true
|
||||
}))
|
||||
: undefined
|
||||
}
|
||||
}
|
||||
|
||||
// 将出入证详情映射为 GatePassInfo 组件可回填的数据结构
|
||||
const mapAccessPermitDetailToGatePassInfo = (detail) => {
|
||||
if (!detail) return {};
|
||||
|
||||
// 格式化日期:将时间戳或日期字符串转换为 YYYY-MM-DD 格式
|
||||
const formatDate = (dateStr) => {
|
||||
if (!dateStr) return '';
|
||||
// 如果是数字(时间戳),直接格式化
|
||||
if (typeof dateStr === 'number') {
|
||||
return dayjs(dateStr).format('YYYY-MM-DD');
|
||||
}
|
||||
// 如果是字符串,先尝试解析
|
||||
const dateStrValue = String(dateStr);
|
||||
// 如果包含空格,提取日期部分(处理 "2020-01-01 00:00:00" 格式)
|
||||
if (dateStrValue.includes(' ')) {
|
||||
const datePart = dateStrValue.split(' ')[0];
|
||||
// 验证日期格式是否正确
|
||||
if (dayjs(datePart).isValid()) {
|
||||
return datePart;
|
||||
}
|
||||
}
|
||||
// 如果包含 T(ISO 格式),转换为标准格式
|
||||
if (dateStrValue.includes('T')) {
|
||||
return dayjs(dateStrValue).format('YYYY-MM-DD');
|
||||
}
|
||||
// 尝试直接解析
|
||||
if (dayjs(dateStrValue).isValid()) {
|
||||
return dayjs(dateStrValue).format('YYYY-MM-DD');
|
||||
}
|
||||
return dateStrValue;
|
||||
};
|
||||
|
||||
// 处理有效日期
|
||||
let validTime = '';
|
||||
const startTime = detail.validityStartTime || detail.startTime || detail.validStartTime;
|
||||
const endTime = detail.validityEndTime || detail.endTime || detail.validEndTime;
|
||||
if (startTime && endTime) {
|
||||
const startDate = formatDate(startTime);
|
||||
const endDate = formatDate(endTime);
|
||||
validTime = `${startDate} 至 ${endDate}`;
|
||||
} else if (startTime) {
|
||||
validTime = formatDate(startTime);
|
||||
}
|
||||
|
||||
// 处理车辆列表
|
||||
const vehicleList = detail.vehicleList || detail.vehicles || [];
|
||||
const carList = vehicleList.map((vehicle, index) => ({
|
||||
id: vehicle.id || `car_${index}`,
|
||||
type: vehicle.vehicleType || vehicle.type || '',
|
||||
code: vehicle.licensePlate || vehicle.code || ''
|
||||
}));
|
||||
|
||||
// 处理附件列表
|
||||
const attachmentList = detail.attachmentList || detail.attachments || [];
|
||||
const fileList = attachmentList.map((url, index) => ({
|
||||
fid: `file_${index}`,
|
||||
name: url.split('/').pop() || `附件${index + 1}`,
|
||||
size: '0MB', // 无法从URL获取文件大小
|
||||
url: url,
|
||||
uploading: false
|
||||
}));
|
||||
|
||||
return {
|
||||
id: detail.id || detail.accessPermitId,
|
||||
validTime: validTime,
|
||||
CarList: carList,
|
||||
remark: detail.remark || '',
|
||||
fileList: fileList
|
||||
};
|
||||
};
|
||||
|
||||
// 将工作计划详情映射为基础信息表单数据
|
||||
const mapWorkPlanDetailToBasicsInfo = (workPlanDetail) => {
|
||||
if (!workPlanDetail) return {};
|
||||
|
||||
// 格式化日期:将时间戳或日期字符串转换为 YYYY-MM-DD 格式
|
||||
const formatDate = (dateStr) => {
|
||||
if (!dateStr) return '';
|
||||
// 如果是数字(时间戳),直接格式化
|
||||
if (typeof dateStr === 'number') {
|
||||
return dayjs(dateStr).format('YYYY-MM-DD');
|
||||
}
|
||||
// 如果是字符串,先尝试解析
|
||||
const dateStrValue = String(dateStr);
|
||||
// 如果包含空格,提取日期部分(处理 "2020-01-01 00:00:00" 格式)
|
||||
if (dateStrValue.includes(' ')) {
|
||||
const datePart = dateStrValue.split(' ')[0];
|
||||
// 验证日期格式是否正确
|
||||
if (dayjs(datePart).isValid()) {
|
||||
return datePart;
|
||||
}
|
||||
}
|
||||
// 如果包含 T(ISO 格式),转换为标准格式
|
||||
if (dateStrValue.includes('T')) {
|
||||
return dayjs(dateStrValue).format('YYYY-MM-DD');
|
||||
}
|
||||
// 尝试直接解析
|
||||
if (dayjs(dateStrValue).isValid()) {
|
||||
return dayjs(dateStrValue).format('YYYY-MM-DD');
|
||||
}
|
||||
return dateStrValue;
|
||||
};
|
||||
|
||||
// 构建成员列表:优先使用 sysUserList(已勾选的作业班成员),如果没有则从 sysUserIds 转换为 { id, name } 格式
|
||||
const memberList = [];
|
||||
|
||||
// 优先使用 sysUserList(修改模式下返回的已勾选作业班成员列表)
|
||||
if (workPlanDetail.sysUserList && Array.isArray(workPlanDetail.sysUserList) && workPlanDetail.sysUserList.length > 0) {
|
||||
workPlanDetail.sysUserList.forEach(user => {
|
||||
const userId = user.userId || user.id;
|
||||
const userName = user.nickName || user.userName || user.name || `用户${userId}`;
|
||||
if (userId) {
|
||||
memberList.push({
|
||||
id: userId,
|
||||
name: userName
|
||||
});
|
||||
}
|
||||
});
|
||||
} else if (workPlanDetail.sysUserIds && Array.isArray(workPlanDetail.sysUserIds)) {
|
||||
// 如果工作计划详情中包含用户信息列表,优先使用
|
||||
if (workPlanDetail.userList && Array.isArray(workPlanDetail.userList)) {
|
||||
workPlanDetail.sysUserIds.forEach(userId => {
|
||||
const user = workPlanDetail.userList.find(u =>
|
||||
(u.userId || u.id) == userId
|
||||
);
|
||||
memberList.push({
|
||||
id: userId,
|
||||
name: user ? (user.nickName || user.userName || user.name || `用户${userId}`) : `用户${userId}`
|
||||
});
|
||||
});
|
||||
} else {
|
||||
// 如果没有用户信息列表,先使用临时名称
|
||||
// BasicsInfo组件会在加载用户列表后自动匹配名称
|
||||
workPlanDetail.sysUserIds.forEach(userId => {
|
||||
memberList.push({
|
||||
id: userId,
|
||||
name: `用户${userId}` // 临时名称,BasicsInfo组件会自动匹配
|
||||
});
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
// 构建位置信息:将经纬度组合为 "经度,纬度" 格式
|
||||
const location = (workPlanDetail.longitude && workPlanDetail.latitude)
|
||||
? `${workPlanDetail.longitude},${workPlanDetail.latitude}`
|
||||
: '';
|
||||
|
||||
return {
|
||||
projectId: workPlanDetail.projectId || workPlanDetail.id,
|
||||
ProjectName: workPlanDetail.projectName || '',
|
||||
Location: location,
|
||||
SpecificAddress: workPlanDetail.workLocation || '',
|
||||
period: [
|
||||
formatDate(workPlanDetail.workStartTime),
|
||||
formatDate(workPlanDetail.workEndTime)
|
||||
],
|
||||
ResponsiblePerson: workPlanDetail.supervisorName || '',
|
||||
MemberList: memberList,
|
||||
remark: workPlanDetail.remark || ''
|
||||
};
|
||||
};
|
||||
|
||||
// 从路由参数获取项目ID和模板ID
|
||||
onMounted(() => {
|
||||
const pages = getCurrentPages();
|
||||
|
|
@ -187,12 +365,92 @@ onMounted(() => {
|
|||
const step = currentPage.options.step;
|
||||
const templateIdParam = currentPage.options.templateId;
|
||||
const workTicketIdParam = currentPage.options.workTicketId;
|
||||
const editParam = currentPage.options.edit; // 是否为修改模式
|
||||
|
||||
// 检测是否为修改模式
|
||||
if (editParam === '1' || editParam === 1 || editParam === true) {
|
||||
isEditMode.value = true;
|
||||
}
|
||||
console.log(projectId, 'projectId');
|
||||
|
||||
if (projectId) {
|
||||
// 将项目ID存储到基础信息中
|
||||
if (!allData.value.BasicsInfo.projectId) {
|
||||
allData.value.BasicsInfo.projectId = parseInt(projectId) || projectId;
|
||||
}
|
||||
|
||||
// 如果是修改模式,加载工作计划详情并回填数据
|
||||
if (isEditMode.value) {
|
||||
getWorkPlanDetail(projectId)
|
||||
.then((workPlanDetail) => {
|
||||
console.log('工作计划详细信息(修改模式):', workPlanDetail);
|
||||
// 保存完整的工作计划详情,以便后续使用(如获取出入证申请ID)
|
||||
allData.value.workPlanDetail = workPlanDetail;
|
||||
|
||||
// 将工作计划详情映射为基础信息数据
|
||||
const basicsInfoData = mapWorkPlanDetailToBasicsInfo(workPlanDetail);
|
||||
// 更新 allData.BasicsInfo,BasicsInfo 组件会通过 watch 自动回填
|
||||
allData.value.BasicsInfo = {
|
||||
...allData.value.BasicsInfo,
|
||||
...basicsInfoData
|
||||
};
|
||||
|
||||
// 如果有出入证申请ID,保存到 GatePassInfo,并获取出入证详情
|
||||
if (workPlanDetail.accessPermitId || workPlanDetail.accessPermit?.id) {
|
||||
if (!allData.value.GatePassInfo) {
|
||||
allData.value.GatePassInfo = {};
|
||||
}
|
||||
allData.value.GatePassInfo.id = workPlanDetail.accessPermitId || workPlanDetail.accessPermit?.id;
|
||||
|
||||
// 获取出入证详情
|
||||
const projectIdForAccessPermit = workPlanDetail.projectId || workPlanDetail.id || projectId;
|
||||
if (projectIdForAccessPermit) {
|
||||
getAccessPermitDetail(projectId)
|
||||
.then((accessPermitDetail) => {
|
||||
console.log('出入证详细信息(修改模式):', accessPermitDetail);
|
||||
// 将出入证详情映射为 GatePassInfo 数据
|
||||
const gatePassInfoData = mapAccessPermitDetailToGatePassInfo(accessPermitDetail);
|
||||
allData.value.GatePassInfo = {
|
||||
...allData.value.GatePassInfo,
|
||||
...gatePassInfoData
|
||||
};
|
||||
})
|
||||
.catch((err) => {
|
||||
console.error('获取出入证详细信息失败:', err);
|
||||
// 不显示错误提示,因为可能出入证还未创建
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
// 如果有工作票ID,也加载工作票详情
|
||||
const ticketId = workTicketIdParam || workPlanDetail.ticketIds?.[0] || workPlanDetail.ticketId;
|
||||
if (ticketId) {
|
||||
allData.value.workTicketId = parseInt(ticketId) || ticketId;
|
||||
getWorkTicketDetail(allData.value.workTicketId)
|
||||
.then((res) => {
|
||||
// 处理响应数据:如果返回的数据有 data 字段,则使用 data 字段,否则直接使用返回的数据
|
||||
const workTicketDetail = res?.data || res;
|
||||
console.log('工作票详细信息(修改模式):', workTicketDetail);
|
||||
// 将工作票详情映射为 WorkNote 数据
|
||||
const workNoteData = mapWorkTicketDetailToWorkNote(workTicketDetail);
|
||||
allData.value.WorkNote = {
|
||||
...allData.value.WorkNote,
|
||||
...workNoteData
|
||||
};
|
||||
})
|
||||
.catch((err) => {
|
||||
console.error('获取工作票详细信息失败:', err);
|
||||
});
|
||||
}
|
||||
})
|
||||
.catch((err) => {
|
||||
console.error('获取工作计划详细信息失败:', err);
|
||||
uni.showToast({
|
||||
title: err.message || err.msg || '获取工作计划信息失败',
|
||||
icon: 'none'
|
||||
});
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
// 如果传入了步骤参数,切换到对应步骤
|
||||
|
|
@ -203,6 +461,28 @@ onMounted(() => {
|
|||
if (stepConfig) {
|
||||
currentStep.value = { ...stepConfig };
|
||||
|
||||
// 如果直接跳转到出入证申请页面(步骤2),且是修改模式,获取出入证详情
|
||||
if (stepId === 2 && isEditMode.value && projectId) {
|
||||
getAccessPermitDetail(projectId)
|
||||
.then((accessPermitDetail) => {
|
||||
console.log('出入证详细信息:', accessPermitDetail);
|
||||
// 将出入证详情映射为 GatePassInfo 数据
|
||||
const gatePassInfoData = mapAccessPermitDetailToGatePassInfo(accessPermitDetail);
|
||||
allData.value.GatePassInfo = {
|
||||
...allData.value.GatePassInfo,
|
||||
...gatePassInfoData
|
||||
};
|
||||
// 保存出入证ID
|
||||
if (accessPermitDetail.id || accessPermitDetail.accessPermitId) {
|
||||
allData.value.GatePassInfo.id = accessPermitDetail.id || accessPermitDetail.accessPermitId;
|
||||
}
|
||||
})
|
||||
.catch((err) => {
|
||||
console.error('获取出入证详细信息失败:', err);
|
||||
// 不显示错误提示,因为可能出入证还未创建
|
||||
});
|
||||
}
|
||||
|
||||
// 如果直接跳转到风险管控卡页面(步骤4),获取工作计划详细信息和工作票详细信息
|
||||
if (stepId === 4) {
|
||||
// 获取工作计划详细信息
|
||||
|
|
@ -229,7 +509,9 @@ onMounted(() => {
|
|||
const ticketId = allData.value.workTicketId || workTicketIdParam;
|
||||
if (ticketId) {
|
||||
getWorkTicketDetail(ticketId)
|
||||
.then((workTicketDetail) => {
|
||||
.then((res) => {
|
||||
// 处理响应数据:如果返回的数据有 data 字段,则使用 data 字段,否则直接使用返回的数据
|
||||
const workTicketDetail = res?.data || res;
|
||||
console.log('工作票详细信息:', workTicketDetail);
|
||||
// 将工作票详细信息保存到 allData 中,以便 RiskControl 组件使用
|
||||
if (!allData.value.RiskControl) {
|
||||
|
|
@ -259,12 +541,14 @@ onMounted(() => {
|
|||
allData.value.workTicketId = parseInt(workTicketIdParam) || workTicketIdParam;
|
||||
}
|
||||
|
||||
// 如果带了 workTicketId,并且进入“填写工作票”步骤(或其他需要回填的步骤),拉取工作票详情用于初始回填
|
||||
// 需求:高风险票/球机申领在“待填写”时点击卡片,跳到填写工作票页并带入工作票ID,渲染初始数据
|
||||
// 如果带了 workTicketId,并且进入"填写工作票"步骤(或其他需要回填的步骤),拉取工作票详情用于初始回填
|
||||
// 需求:高风险票/球机申领在"待填写"时点击卡片,跳到填写工作票页并带入工作票ID,渲染初始数据
|
||||
const stepIdForHydrate = step ? (isNaN(parseInt(step)) ? step : parseInt(step)) : null
|
||||
if (allData.value.workTicketId && (stepIdForHydrate === 3 || stepIdForHydrate === '3a' || stepIdForHydrate === 4)) {
|
||||
getWorkTicketDetail(allData.value.workTicketId)
|
||||
.then((workTicketDetail) => {
|
||||
.then((res) => {
|
||||
// 处理响应数据:如果返回的数据有 data 字段,则使用 data 字段,否则直接使用返回的数据
|
||||
const workTicketDetail = res?.data || res;
|
||||
// WorkNote 初始回填
|
||||
if (!allData.value.WorkNote) allData.value.WorkNote = {}
|
||||
allData.value.WorkNote = {
|
||||
|
|
@ -363,15 +647,31 @@ const saveDraft = () => {
|
|||
projectStatus: 0 // 草稿状态
|
||||
};
|
||||
|
||||
// 如果是修改模式,添加ID并调用修改接口
|
||||
// 获取 projectId,优先使用 allData 中的,如果没有则从 workPlanDetail 中获取
|
||||
const projectId = allData.value.BasicsInfo.projectId
|
||||
|| allData.value.workPlanDetail?.projectId
|
||||
|| allData.value.workPlanDetail?.id;
|
||||
|
||||
// 调用接口保存草稿
|
||||
createWorkPlan(workPlanData)
|
||||
let savePromise;
|
||||
if (isEditMode.value && projectId) {
|
||||
// 修改模式:将 projectId 作为 id 传递给修改接口
|
||||
workPlanData.projectId = projectId;
|
||||
savePromise = updateWorkPlan(workPlanData);
|
||||
} else {
|
||||
// 新增模式:调用新增接口
|
||||
savePromise = createWorkPlan(workPlanData);
|
||||
}
|
||||
|
||||
savePromise
|
||||
.then((res) => {
|
||||
// 保存返回的 projectId
|
||||
if (res) {
|
||||
// 保存返回的 projectId(新增模式返回ID,修改模式可能不返回)
|
||||
if (res && !isEditMode.value) {
|
||||
allData.value.BasicsInfo.projectId = res;
|
||||
}
|
||||
uni.showToast({
|
||||
title: '草稿保存成功',
|
||||
title: isEditMode.value ? '修改成功' : '草稿保存成功',
|
||||
icon: 'success',
|
||||
duration: 2000
|
||||
});
|
||||
|
|
@ -444,14 +744,23 @@ const saveDraft = () => {
|
|||
status: 0 // 草稿状态为0
|
||||
};
|
||||
|
||||
// 如果是修改模式,添加ID并调用修改接口
|
||||
if (isEditMode.value && allData.value.workTicketId) {
|
||||
workTicketData.ticketId = allData.value.workTicketId;
|
||||
}
|
||||
|
||||
// 调用接口保存草稿
|
||||
createWorkTicket(workTicketData)
|
||||
const savePromise = isEditMode.value && workTicketData.ticketId
|
||||
? updateWorkTicket(workTicketData)
|
||||
: createWorkTicket(workTicketData);
|
||||
|
||||
savePromise
|
||||
.then((res) => {
|
||||
if (res) {
|
||||
if (res && !isEditMode.value) {
|
||||
allData.value.workTicketId = res;
|
||||
}
|
||||
uni.showToast({
|
||||
title: '草稿保存成功',
|
||||
title: isEditMode.value ? '修改成功' : '草稿保存成功',
|
||||
icon: 'success',
|
||||
duration: 2000
|
||||
});
|
||||
|
|
@ -589,7 +898,15 @@ const nextStep = () => {
|
|||
if (currentStep.value.id == 1) {
|
||||
console.log(basicsInfoRef.value.getFormData());
|
||||
const basicsData = basicsInfoRef.value.getFormData();
|
||||
allData.value.BasicsInfo = basicsData;
|
||||
|
||||
// 保存 projectId,避免在替换时丢失(修改模式下需要保留)
|
||||
const savedProjectId = allData.value.BasicsInfo.projectId || basicsData.projectId;
|
||||
|
||||
// 合并数据,保留 projectId
|
||||
allData.value.BasicsInfo = {
|
||||
...basicsData,
|
||||
projectId: savedProjectId
|
||||
};
|
||||
|
||||
// 数据验证
|
||||
if (!basicsData.ProjectName) {
|
||||
|
|
@ -657,15 +974,30 @@ const nextStep = () => {
|
|||
projectStatus: 0
|
||||
};
|
||||
|
||||
// 如果是修改模式,添加ID并调用修改接口
|
||||
// 优先使用保存的 projectId,如果没有则从 workPlanDetail 中获取
|
||||
const projectId = savedProjectId || allData.value.workPlanDetail?.projectId || allData.value.workPlanDetail?.id;
|
||||
|
||||
// 提交工作计划
|
||||
createWorkPlan(workPlanData)
|
||||
// 修改模式下,如果有 projectId 则调用修改接口,否则调用新增接口
|
||||
let submitPromise;
|
||||
if (isEditMode.value && projectId) {
|
||||
// 修改模式:将 projectId 作为 id 传递给修改接口
|
||||
workPlanData.projectId = projectId;
|
||||
submitPromise = updateWorkPlan(workPlanData);
|
||||
} else {
|
||||
// 新增模式:调用新增接口
|
||||
submitPromise = createWorkPlan(workPlanData);
|
||||
}
|
||||
|
||||
submitPromise
|
||||
.then((res) => {
|
||||
// 保存返回的 projectId(res.data 就是 projectId)
|
||||
if (res) {
|
||||
// 保存返回的 projectId(新增模式返回ID,修改模式可能不返回)
|
||||
if (res && !isEditMode.value) {
|
||||
allData.value.BasicsInfo.projectId = res;
|
||||
}
|
||||
uni.showToast({
|
||||
title: '工作计划提交成功',
|
||||
title: isEditMode.value ? '工作计划修改成功' : '工作计划提交成功',
|
||||
icon: 'success'
|
||||
});
|
||||
// 切换到下一步
|
||||
|
|
@ -673,6 +1005,31 @@ const nextStep = () => {
|
|||
const nextStepConfig = stepList.value.find(item => item.id == nextStepId);
|
||||
if (nextStepConfig) {
|
||||
currentStep.value = { ...nextStepConfig };
|
||||
|
||||
// 如果切换到出入证申请步骤(步骤2),且是修改模式,获取出入证详情
|
||||
if (nextStepId === 2 && isEditMode.value) {
|
||||
const projectIdForAccessPermit = res || projectId || allData.value.BasicsInfo.projectId;
|
||||
if (projectIdForAccessPermit) {
|
||||
getAccessPermitDetail(projectId)
|
||||
.then((accessPermitDetail) => {
|
||||
console.log('出入证详细信息(修改模式):', accessPermitDetail);
|
||||
// 将出入证详情映射为 GatePassInfo 数据
|
||||
const gatePassInfoData = mapAccessPermitDetailToGatePassInfo(accessPermitDetail);
|
||||
allData.value.GatePassInfo = {
|
||||
...allData.value.GatePassInfo,
|
||||
...gatePassInfoData
|
||||
};
|
||||
// 保存出入证ID
|
||||
if (accessPermitDetail.id || accessPermitDetail.accessPermitId) {
|
||||
allData.value.GatePassInfo.id = accessPermitDetail.id || accessPermitDetail.accessPermitId;
|
||||
}
|
||||
})
|
||||
.catch((err) => {
|
||||
console.error('获取出入证详细信息失败:', err);
|
||||
// 不显示错误提示,因为可能出入证还未创建
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
})
|
||||
.catch((err) => {
|
||||
|
|
@ -735,11 +1092,39 @@ const nextStep = () => {
|
|||
|
||||
allData.value.GatePassInfo = gatePassData;
|
||||
|
||||
// 提交出入证申请
|
||||
applyAccessPermit(gatePassData)
|
||||
// 如果是修改模式,需要先获取出入证详情以获取 permitId
|
||||
if (isEditMode.value) {
|
||||
// 优先从 gatePassData.permitId 获取(getFormData 已返回),如果没有则从其他地方获取
|
||||
let accessPermitId = gatePassData.permitId;
|
||||
if (!accessPermitId) {
|
||||
accessPermitId = allData.value.GatePassInfo?.id
|
||||
|| allData.value.workPlanDetail?.accessPermitId
|
||||
|| allData.value.workPlanDetail?.accessPermit?.id;
|
||||
}
|
||||
|
||||
// 如果还没有找到出入证ID,从出入证详情接口获取
|
||||
if (!accessPermitId) {
|
||||
const projectId = gatePassData.projectId || allData.value.BasicsInfo.projectId;
|
||||
if (projectId) {
|
||||
// 先获取出入证详情,然后提交
|
||||
getAccessPermitDetail(projectId)
|
||||
.then((accessPermitDetail) => {
|
||||
console.log('出入证详细信息(修改模式提交前):', accessPermitDetail);
|
||||
// 从详情中提取 permitId
|
||||
const permitId = accessPermitDetail?.permitId;
|
||||
if (permitId) {
|
||||
gatePassData.permitId = permitId;
|
||||
// 删除 permitId 字段,避免接口混淆
|
||||
delete gatePassData.id;
|
||||
// 调用修改接口
|
||||
return updateAccessPermit(gatePassData);
|
||||
} else {
|
||||
throw new Error('未找到出入证ID,无法修改');
|
||||
}
|
||||
})
|
||||
.then((res) => {
|
||||
uni.showToast({
|
||||
title: '出入证申请提交成功',
|
||||
title: '出入证申请修改成功',
|
||||
icon: 'success'
|
||||
});
|
||||
// 切换到下一步
|
||||
|
|
@ -752,7 +1137,49 @@ const nextStep = () => {
|
|||
.catch((err) => {
|
||||
console.error('出入证申请提交失败:', err);
|
||||
uni.showToast({
|
||||
title: err.message || '出入证申请提交失败',
|
||||
title: err.message || err.msg || '出入证申请提交失败',
|
||||
icon: 'none'
|
||||
});
|
||||
});
|
||||
return;
|
||||
} else {
|
||||
uni.showToast({
|
||||
title: '项目ID不存在,无法获取出入证详情',
|
||||
icon: 'none'
|
||||
});
|
||||
return;
|
||||
}
|
||||
} else {
|
||||
// 如果找到了出入证ID,将其设置为 id 字段(updateAccessPermit 接口需要 id 字段)
|
||||
gatePassData.id = accessPermitId;
|
||||
// 删除 permitId 字段,避免接口混淆
|
||||
delete gatePassData.permitId;
|
||||
}
|
||||
}
|
||||
|
||||
// 提交出入证申请
|
||||
// 修改模式下调用修改接口,新建模式下调用新建接口
|
||||
const submitPromise = isEditMode.value && gatePassData.id
|
||||
? updateAccessPermit(gatePassData)
|
||||
: applyAccessPermit(gatePassData);
|
||||
|
||||
submitPromise
|
||||
.then((res) => {
|
||||
uni.showToast({
|
||||
title: isEditMode.value ? '出入证申请修改成功' : '出入证申请提交成功',
|
||||
icon: 'success'
|
||||
});
|
||||
// 切换到下一步
|
||||
const nextStepId = currentStep.value.id + 1;
|
||||
const nextStepConfig = stepList.value.find(item => item.id == nextStepId);
|
||||
if (nextStepConfig) {
|
||||
currentStep.value = { ...nextStepConfig };
|
||||
}
|
||||
})
|
||||
.catch((err) => {
|
||||
console.error('出入证申请提交失败:', err);
|
||||
uni.showToast({
|
||||
title: err.message || err.msg || '出入证申请提交失败',
|
||||
icon: 'none'
|
||||
});
|
||||
});
|
||||
|
|
@ -884,11 +1311,20 @@ const nextStep = () => {
|
|||
status: 0 // 提交工单状态为1
|
||||
};
|
||||
|
||||
// 如果是修改模式,添加ID并调用修改接口
|
||||
if (isEditMode.value && allData.value.workTicketId) {
|
||||
workTicketData.ticketId = allData.value.workTicketId;
|
||||
}
|
||||
|
||||
// 提交工作票申请
|
||||
createWorkTicket(workTicketData)
|
||||
const submitPromise = isEditMode.value && workTicketData.ticketId
|
||||
? updateWorkTicket(workTicketData)
|
||||
: createWorkTicket(workTicketData);
|
||||
|
||||
submitPromise
|
||||
.then((res) => {
|
||||
// 保存工作票ID,用于后续球机申领
|
||||
if (res) {
|
||||
// 保存工作票ID,用于后续球机申领(新增模式返回ID,修改模式可能不返回)
|
||||
if (res && !isEditMode.value) {
|
||||
allData.value.workTicketId = res;
|
||||
}
|
||||
|
||||
|
|
@ -939,7 +1375,9 @@ const nextStep = () => {
|
|||
if (allData.value.workTicketId) {
|
||||
promises.push(
|
||||
getWorkTicketDetail(allData.value.workTicketId)
|
||||
.then((workTicketDetail) => {
|
||||
.then((res) => {
|
||||
// 处理响应数据:如果返回的数据有 data 字段,则使用 data 字段,否则直接使用返回的数据
|
||||
const workTicketDetail = res?.data || res;
|
||||
console.log('工作票详细信息:', workTicketDetail);
|
||||
// 将工作票详细信息保存到 allData 中,以便 RiskControl 组件使用
|
||||
if (!allData.value.RiskControl) {
|
||||
|
|
@ -1218,6 +1656,54 @@ const nextStep = () => {
|
|||
}
|
||||
}
|
||||
|
||||
// 监听步骤变化,在修改模式下进入步骤3时加载工作票详情
|
||||
watch(() => currentStep.value.id, (newStepId) => {
|
||||
// 如果是修改模式,且切换到步骤3(填写工作票),且有工作票ID,则加载工作票详情
|
||||
if (isEditMode.value && newStepId === 3) {
|
||||
// 获取工作票ID,优先使用 allData 中的,如果没有则从其他地方获取
|
||||
const ticketId = allData.value.workTicketId ||
|
||||
allData.value.workPlanDetail?.ticketIds?.[0] ||
|
||||
allData.value.workPlanDetail?.ticketId;
|
||||
|
||||
if (ticketId) {
|
||||
// 保存工作票ID到 allData
|
||||
if (!allData.value.workTicketId) {
|
||||
allData.value.workTicketId = parseInt(ticketId) || ticketId;
|
||||
}
|
||||
|
||||
// 在修改模式下,填写工作票页面先调用查询工作票详情接口
|
||||
getWorkTicketDetail(allData.value.workTicketId)
|
||||
.then((res) => {
|
||||
// 处理响应数据:如果返回的数据有 data 字段,则使用 data 字段,否则直接使用返回的数据
|
||||
const workTicketDetail = res?.data || res;
|
||||
console.log('工作票详细信息(修改模式-步骤3):', workTicketDetail);
|
||||
|
||||
// 将工作票详情映射为 WorkNote 数据
|
||||
// mapWorkTicketDetailToWorkNote 函数会将 qualificationList 中的所有人员默认设置为勾选状态
|
||||
const workNoteData = mapWorkTicketDetailToWorkNote(workTicketDetail);
|
||||
|
||||
// 更新 allData.WorkNote,确保数据正确回填
|
||||
allData.value.WorkNote = {
|
||||
...allData.value.WorkNote,
|
||||
...workNoteData
|
||||
};
|
||||
|
||||
console.log('工作票数据已回填,包括成员资质勾选状态和风险控制卡模板ID:', allData.value.WorkNote);
|
||||
console.log('风险控制卡模板ID:', workNoteData.riskCardTemplateId);
|
||||
})
|
||||
.catch((err) => {
|
||||
console.error('获取工作票详细信息失败:', err);
|
||||
uni.showToast({
|
||||
title: err.message || err.msg || '获取工作票信息失败',
|
||||
icon: 'none'
|
||||
});
|
||||
});
|
||||
} else {
|
||||
console.warn('修改模式下未找到工作票ID,无法加载工作票详情');
|
||||
}
|
||||
}
|
||||
}, { immediate: false });
|
||||
|
||||
// 打开球机申领
|
||||
const openApplyForMachine = (e) => {
|
||||
console.log(e);
|
||||
|
|
|
|||
|
|
@ -75,8 +75,6 @@ async function handleLogin() {
|
|||
password: formData.password,
|
||||
role: formData.role
|
||||
})
|
||||
console.log(response);
|
||||
|
||||
// 保存用户信息和token
|
||||
if (response) {
|
||||
userStore.setUserInfo(response)
|
||||
|
|
|
|||
Loading…
Reference in New Issue