2025-07-09 15:08:55 +08:00
|
|
|
|
<template>
|
|
|
|
|
|
<view class="addIssue">
|
|
|
|
|
|
<view class="fixedheader">
|
|
|
|
|
|
<headers :showBack="true">
|
|
|
|
|
|
<view class="headerName">
|
|
|
|
|
|
{{ onEditType ? '编辑作业票' : '新增作业票'}}
|
|
|
|
|
|
</view>
|
|
|
|
|
|
</headers>
|
|
|
|
|
|
</view>
|
|
|
|
|
|
<view class="content" :style="{paddingTop: mobileTopHeight + 44 + 'px'}">
|
|
|
|
|
|
<u-steps
|
|
|
|
|
|
:class="{'steps_1': current == 1, 'steps_1 steps_2': current == 2, 'steps_3': workTicketBindCamera == 0}"
|
|
|
|
|
|
:list="numList" :current="current"></u-steps>
|
|
|
|
|
|
<view class="content_main" v-if="current == 0">
|
|
|
|
|
|
<view class="header-title">基础信息</view>
|
|
|
|
|
|
<view class="main-box">
|
|
|
|
|
|
<view class="box1">
|
|
|
|
|
|
<view><text>*</text>工作票类型:</view>
|
|
|
|
|
|
<view>{{workTicketTypeDetail.typeName}}</view>
|
|
|
|
|
|
</view>
|
|
|
|
|
|
<view class="box1">
|
|
|
|
|
|
<view>工作票编号:</view>
|
|
|
|
|
|
<view><u-input v-model="workTicketInfo.workTicketNumber" placeholder="请输入" type="text"
|
|
|
|
|
|
:border="true" /></view>
|
|
|
|
|
|
</view>
|
|
|
|
|
|
<view class="box1">
|
|
|
|
|
|
<view>施工场站:</view>
|
2025-08-14 09:45:03 +08:00
|
|
|
|
<view @click="onClickType(1)">
|
|
|
|
|
|
<u-input disabled style="pointer-events:none" :value="workTicketInfo.constructionAreasName" type="text"
|
2025-07-09 15:08:55 +08:00
|
|
|
|
:border="true" placeholder="请选择" />
|
|
|
|
|
|
</view>
|
|
|
|
|
|
</view>
|
|
|
|
|
|
<view class="box1">
|
|
|
|
|
|
<view>施工地点:</view>
|
|
|
|
|
|
<view><u-input v-model="workTicketInfo.constructionAddr" placeholder="请输入" type="text"
|
|
|
|
|
|
:border="true" /></view>
|
|
|
|
|
|
</view>
|
|
|
|
|
|
<view class="box1">
|
|
|
|
|
|
<view>申请单位:</view>
|
2025-08-14 09:45:03 +08:00
|
|
|
|
<view @click="onClickType(2)">
|
|
|
|
|
|
<u-input disabled style="pointer-events:none" :value="workTicketInfo.applicantsName" type="text"
|
2025-07-09 15:08:55 +08:00
|
|
|
|
:border="true" placeholder="请选择" />
|
|
|
|
|
|
</view>
|
|
|
|
|
|
</view>
|
|
|
|
|
|
<view class="box1">
|
|
|
|
|
|
<view>申请时间:</view>
|
|
|
|
|
|
<view>{{workTicketInfo.applicationTime}}</view>
|
|
|
|
|
|
</view>
|
|
|
|
|
|
<view class="box1">
|
|
|
|
|
|
<view>施工时间:</view>
|
|
|
|
|
|
<view>
|
|
|
|
|
|
<view class="changetime" @click="constructionTimeShow = true">
|
|
|
|
|
|
<view class="changetime_icon"></view>
|
|
|
|
|
|
<view>{{ workTicketInfo.constructionTimeBegin }}</view>
|
|
|
|
|
|
<view>-</view>
|
|
|
|
|
|
<view>{{ workTicketInfo.constructionTimeEnd }}</view>
|
|
|
|
|
|
<view class="changetime_icon"></view>
|
|
|
|
|
|
</view>
|
|
|
|
|
|
<u-calendar v-model="constructionTimeShow" mode="range" :max-date="'2300-01-01'"
|
|
|
|
|
|
@change="onConstructionTimeChange"></u-calendar>
|
|
|
|
|
|
</view>
|
|
|
|
|
|
</view>
|
|
|
|
|
|
<view class="box1">
|
|
|
|
|
|
<view>作业人员:</view>
|
|
|
|
|
|
<view class="textarea">
|
2025-07-10 16:25:18 +08:00
|
|
|
|
<u-input :clearable="false" v-model="workTicketInfo.operator" :maxlength="200"
|
2025-07-09 15:08:55 +08:00
|
|
|
|
placeholder="请输入" type="textarea" :border="true" />
|
2025-07-10 16:25:18 +08:00
|
|
|
|
<view class="textarea_text"><text>{{workTicketInfo.operator.length}}</text>/200</view>
|
2025-07-09 15:08:55 +08:00
|
|
|
|
</view>
|
2025-08-14 09:45:03 +08:00
|
|
|
|
<!-- <view @click="operatorShow = true">
|
|
|
|
|
|
<u-input disabled style="pointer-events:none" :value="workTicketInfo.operatorsName" type="text"
|
2025-07-09 15:08:55 +08:00
|
|
|
|
:border="true" placeholder="请选择" />
|
|
|
|
|
|
</view> -->
|
|
|
|
|
|
</view>
|
|
|
|
|
|
<view class="box1">
|
|
|
|
|
|
<view><text>*</text>作业内容:</view>
|
|
|
|
|
|
<view class="textarea">
|
2025-07-10 16:25:18 +08:00
|
|
|
|
<u-input :clearable="false" v-model="workTicketInfo.workContent" :maxlength="1000"
|
2025-07-09 15:08:55 +08:00
|
|
|
|
placeholder="请输入" type="textarea" :border="true" />
|
2025-07-10 16:25:18 +08:00
|
|
|
|
<view class="textarea_text"><text>{{workTicketInfo.workContent.length}}</text>/1000</view>
|
2025-07-09 15:08:55 +08:00
|
|
|
|
</view>
|
|
|
|
|
|
</view>
|
|
|
|
|
|
<view class="box1">
|
|
|
|
|
|
<view>安全措施:</view>
|
|
|
|
|
|
<view class="textarea">
|
2025-07-10 16:25:18 +08:00
|
|
|
|
<u-input :clearable="false" v-model="workTicketInfo.safetyMeasure" :maxlength="1000"
|
2025-07-09 15:08:55 +08:00
|
|
|
|
placeholder="请输入" type="textarea" :border="true" />
|
2025-07-10 16:25:18 +08:00
|
|
|
|
<view class="textarea_text"><text>{{workTicketInfo.safetyMeasure.length}}</text>/1000</view>
|
2025-07-09 15:08:55 +08:00
|
|
|
|
</view>
|
|
|
|
|
|
</view>
|
|
|
|
|
|
<view class="box1 box2">
|
|
|
|
|
|
<view><text>*</text>作业票附件:</view>
|
|
|
|
|
|
<view class="imgBox_wrap">
|
|
|
|
|
|
<view class="imgBox" v-show="workTicketAttachmentList.length>0"
|
|
|
|
|
|
v-for="(item,index) in workTicketAttachmentList" :key="index">
|
|
|
|
|
|
<image :src="url_config+'image/'+item.url" class="img"
|
|
|
|
|
|
@click="previewImage(url_config+'image/'+item.url)">
|
|
|
|
|
|
</image>
|
|
|
|
|
|
<view @click="deleteImg(item,1)" style="margin: 5px;" class="deleteImg"></view>
|
|
|
|
|
|
</view>
|
|
|
|
|
|
<view class="addImgBox" @click="uploadImg(1)" v-if="workTicketAttachmentList.length<5">
|
|
|
|
|
|
<image src="/static/workTicketManage/index-icon8.png" class="icon-add"></image>
|
|
|
|
|
|
</view>
|
|
|
|
|
|
</view>
|
|
|
|
|
|
</view>
|
|
|
|
|
|
<!-- <view class="box1 box2">
|
|
|
|
|
|
<view>安全风险分析:</view>
|
|
|
|
|
|
<view class="imgBox_wrap">
|
|
|
|
|
|
<view class="imgBox" v-show="safetyRiskAnalysisList.length>0"
|
|
|
|
|
|
v-for="(item,index) in safetyRiskAnalysisList" :key="index">
|
|
|
|
|
|
<image :src="url_config+'image/'+item.url" class="img"
|
|
|
|
|
|
@click="previewImage(url_config+'image/'+item.url)">
|
|
|
|
|
|
</image>
|
|
|
|
|
|
<view @click="deleteImg(item,2)" style="margin: 5px;" class="deleteImg"></view>
|
|
|
|
|
|
</view>
|
|
|
|
|
|
<view class="addImgBox" @click="uploadImg(2)" v-if="safetyRiskAnalysisList.length<5">
|
|
|
|
|
|
<image src="/static/workTicketManage/index-icon8.png" class="icon-add"></image>
|
|
|
|
|
|
</view>
|
|
|
|
|
|
</view>
|
|
|
|
|
|
</view> -->
|
|
|
|
|
|
<view class="box1 box2">
|
|
|
|
|
|
<view>其他附件:</view>
|
|
|
|
|
|
<view class="imgBox_wrap_list">
|
|
|
|
|
|
<view class="addImgBox_btn" @click="uploadImg(3)">上传附件</view>
|
|
|
|
|
|
<view class="addImgBox_text">
|
|
|
|
|
|
只能上传jpg/png文件,且不超过100Mb
|
|
|
|
|
|
</view>
|
|
|
|
|
|
<view class="imgBox_list imgBox_list_active"
|
|
|
|
|
|
@click="previewImage(url_config+'image/'+item.url)"
|
|
|
|
|
|
v-show="otherAttachmentList.length>0" v-for="(item,index) in otherAttachmentList"
|
|
|
|
|
|
:key="index">
|
|
|
|
|
|
<view>
|
|
|
|
|
|
<u-icon name="file-text"></u-icon>
|
|
|
|
|
|
<view>{{item.name}}</view>
|
|
|
|
|
|
</view>
|
|
|
|
|
|
<!-- <u-icon name="checkmark-circle"></u-icon> -->
|
|
|
|
|
|
<view @click.stop="deleteImg(item,3)">
|
|
|
|
|
|
<u-icon name="close-circle"></u-icon>
|
|
|
|
|
|
</view>
|
|
|
|
|
|
|
|
|
|
|
|
</view>
|
|
|
|
|
|
</view>
|
|
|
|
|
|
</view>
|
|
|
|
|
|
</view>
|
|
|
|
|
|
</view>
|
|
|
|
|
|
<view class="content_main1" v-else-if="current == 1">
|
|
|
|
|
|
<view class="header-title">
|
|
|
|
|
|
<view>绑定工作票监控</view>
|
|
|
|
|
|
<view @click="issueInvoiceShow = true">
|
|
|
|
|
|
<view></view>
|
|
|
|
|
|
<view>去绑定</view>
|
|
|
|
|
|
</view>
|
|
|
|
|
|
</view>
|
|
|
|
|
|
<view class="content_main-box" v-for="item in policeCameraItemListUp" :key="item.itemId">
|
|
|
|
|
|
<view>
|
|
|
|
|
|
<view>{{item.devName}}</view>
|
|
|
|
|
|
<view @click="onDelete(item)">
|
2025-07-10 16:25:18 +08:00
|
|
|
|
<!-- <u-icon name="trash"></u-icon> -->
|
|
|
|
|
|
<image src="/static/icon-delete.png"></image>
|
2025-07-09 15:08:55 +08:00
|
|
|
|
</view>
|
|
|
|
|
|
</view>
|
|
|
|
|
|
<view class="">
|
|
|
|
|
|
<image v-if="item.pic" :src="url_config + 'image/' + item.pic" mode=""></image>
|
|
|
|
|
|
<image v-else src="/static/staffAttendance/attendance-bg2.png" mode=""></image>
|
|
|
|
|
|
<view>
|
|
|
|
|
|
<view>
|
|
|
|
|
|
<view>使用人</view>
|
|
|
|
|
|
<view>{{item.userNames ? item.userNames : '--'}}</view>
|
|
|
|
|
|
</view>
|
|
|
|
|
|
<view>
|
|
|
|
|
|
<view>编号</view>
|
|
|
|
|
|
<view>{{item.devSn}}</view>
|
|
|
|
|
|
</view>
|
|
|
|
|
|
</view>
|
|
|
|
|
|
</view>
|
|
|
|
|
|
</view>
|
|
|
|
|
|
</view>
|
|
|
|
|
|
<view class="content_main2" v-else-if="current == 2">
|
|
|
|
|
|
<view :class="{'edit_img': onEditType}"></view>
|
|
|
|
|
|
<view>工作票已{{onEditType ? '编辑' : '添加'}}完成,是否立即开始作业?</view>
|
|
|
|
|
|
<view>
|
|
|
|
|
|
<u-icon name="info-circle"></u-icon>
|
2025-08-26 18:09:17 +08:00
|
|
|
|
<view>点击立即开始后,将会下发工单任务至执法记录仪设备中,施工员需要到设备的工单任务中点击开始执行工单任务进行录音、录像、拍照。</view>
|
2025-07-09 15:08:55 +08:00
|
|
|
|
</view>
|
|
|
|
|
|
</view>
|
|
|
|
|
|
<view class="confrim-btn" v-if="current != 2">
|
2025-07-10 16:25:18 +08:00
|
|
|
|
<view v-if="current == 1" @click="onLastStep">上一步</view>
|
|
|
|
|
|
<view v-else @click="onNavigateBack">取消</view>
|
2025-07-09 15:08:55 +08:00
|
|
|
|
<view @click="onNextStep">下一步</view>
|
|
|
|
|
|
</view>
|
|
|
|
|
|
<view class="confrim-btn" v-else>
|
|
|
|
|
|
<view @click="onNavigateDetail(1)">不,暂时保存</view>
|
|
|
|
|
|
<view @click="onChangeState(1)">是,立即开始</view>
|
|
|
|
|
|
</view>
|
|
|
|
|
|
</view>
|
|
|
|
|
|
<u-popup :mask-close-able="false" v-model="issueInvoiceShow" :closeable="false" mode="bottom">
|
|
|
|
|
|
<view class="content-popup">
|
|
|
|
|
|
<view class="content-popup_header">
|
|
|
|
|
|
绑定方式
|
|
|
|
|
|
</view>
|
|
|
|
|
|
<view class="content-popup_main">
|
|
|
|
|
|
<view :class="{'popup_main_active': bindingModeType == 1}" @click="bindingModeType = 1">去设备列表选择
|
|
|
|
|
|
</view>
|
|
|
|
|
|
<view :class="{'popup_main_active': bindingModeType == 2}" @click="bindingModeType = 2">直接扫码添加
|
|
|
|
|
|
</view>
|
|
|
|
|
|
</view>
|
|
|
|
|
|
<view class="confrim-btn">
|
|
|
|
|
|
<view @click="issueInvoiceShow = false;">取消</view>
|
|
|
|
|
|
<view @click="onSubmit">确定</view>
|
|
|
|
|
|
</view>
|
|
|
|
|
|
</view>
|
|
|
|
|
|
</u-popup>
|
|
|
|
|
|
<u-popup :mask-close-able="false" v-model="constructionAreasShow" :closeable="false" mode="bottom">
|
|
|
|
|
|
<view class="content-popup">
|
|
|
|
|
|
<view class="content-popup_header">
|
|
|
|
|
|
施工场站
|
|
|
|
|
|
</view>
|
|
|
|
|
|
<scroll-view v-if="qualityRegionList.length > 0" scroll-y="true" style="max-height: 600rpx;">
|
|
|
|
|
|
<TreeView @node-click="onConstructionAreasClick" :multiple="true"
|
|
|
|
|
|
checked-bg-color="rgba(81,129,246,0.1)" :data="qualityRegionList" :children-key="'children'"
|
|
|
|
|
|
:label-key="'regionName'" :id-key="'id'" :value="constructionAreasList" />
|
|
|
|
|
|
</scroll-view>
|
|
|
|
|
|
<view class="new-nodata_height" v-else>
|
|
|
|
|
|
<view class="new-nodata">
|
|
|
|
|
|
<view></view>
|
|
|
|
|
|
<text>暂无数据...</text>
|
|
|
|
|
|
</view>
|
|
|
|
|
|
</view>
|
|
|
|
|
|
<view class="confrim-btn">
|
|
|
|
|
|
<view @click="onCancelClick(1)">取消</view>
|
|
|
|
|
|
<view @click="onSubmitType(1)">确定</view>
|
|
|
|
|
|
</view>
|
|
|
|
|
|
</view>
|
|
|
|
|
|
</u-popup>
|
|
|
|
|
|
<u-popup :mask-close-able="false" v-model="applicantsShow" :closeable="false" mode="bottom">
|
|
|
|
|
|
<view class="content-popup">
|
|
|
|
|
|
<view class="content-popup_header">
|
|
|
|
|
|
申请单位
|
|
|
|
|
|
</view>
|
|
|
|
|
|
<scroll-view v-if="enterpriseInfoList.length > 0" scroll-y="true" style="max-height: 600rpx;">
|
|
|
|
|
|
<TreeView @node-click="onApplicantsClick" :multiple="true" checked-bg-color="rgba(81,129,246,0.1)"
|
|
|
|
|
|
:data="enterpriseInfoList" :children-key="'children'" :label-key="'enterpriseName'"
|
|
|
|
|
|
:id-key="'id'" :value="applicantsList" />
|
|
|
|
|
|
</scroll-view>
|
|
|
|
|
|
<view class="new-nodata_height" v-else>
|
|
|
|
|
|
<view class="new-nodata">
|
|
|
|
|
|
<view></view>
|
|
|
|
|
|
<text>暂无数据...</text>
|
|
|
|
|
|
</view>
|
|
|
|
|
|
</view>
|
|
|
|
|
|
<view class="confrim-btn">
|
|
|
|
|
|
<view @click="onCancelClick(2)">取消</view>
|
|
|
|
|
|
<view @click="onSubmitType(2)">确定</view>
|
|
|
|
|
|
</view>
|
|
|
|
|
|
</view>
|
|
|
|
|
|
</u-popup>
|
|
|
|
|
|
<u-popup :mask-close-able="false" v-model="operatorShow" :closeable="false" mode="bottom">
|
|
|
|
|
|
<view class="content-popup">
|
|
|
|
|
|
<view class="content-popup_header">
|
|
|
|
|
|
作业人员
|
|
|
|
|
|
</view>
|
|
|
|
|
|
<scroll-view v-if="selectWorkerInfoList.length > 0" scroll-y="true" style="max-height: 600rpx;">
|
|
|
|
|
|
<TreeView @node-click="onOperatorClick" :multiple="true" checked-bg-color="rgba(81,129,246,0.1)"
|
|
|
|
|
|
:data="selectWorkerInfoList" :children-key="'children'" :label-key="'workerName'" :id-key="'id'"
|
|
|
|
|
|
:value="operatorsList" />
|
|
|
|
|
|
</scroll-view>
|
|
|
|
|
|
<view class="new-nodata_height" v-else>
|
|
|
|
|
|
<view class="new-nodata">
|
|
|
|
|
|
<view></view>
|
|
|
|
|
|
<text>暂无数据...</text>
|
|
|
|
|
|
</view>
|
|
|
|
|
|
</view>
|
|
|
|
|
|
<view class="confrim-btn">
|
|
|
|
|
|
<view @click="onCancelClick(3)">取消</view>
|
|
|
|
|
|
<view @click="onSubmitType(3)">确定</view>
|
|
|
|
|
|
</view>
|
|
|
|
|
|
</view>
|
|
|
|
|
|
</u-popup>
|
|
|
|
|
|
<u-toast ref="uToast" />
|
|
|
|
|
|
|
|
|
|
|
|
<u-modal @cancel="onCancel" @confirm="onConfirm" v-model="submitShow" confirm-text="确认绑定"
|
|
|
|
|
|
:show-cancel-button="true" cancel-text="重新扫码">
|
|
|
|
|
|
<view class="slot-content">
|
|
|
|
|
|
<view class="content_main-box1">
|
|
|
|
|
|
<view>
|
|
|
|
|
|
<view>{{policeCameraItemInfo.devName}}</view>
|
|
|
|
|
|
<view :class="{'boundalready': policeCameraItemInfo.bindTicket == 1}">
|
2025-07-10 16:25:18 +08:00
|
|
|
|
{{policeCameraItemInfo.bindTicket == 1 ? '已绑定' : '空闲'}}
|
|
|
|
|
|
</view>
|
2025-07-09 15:08:55 +08:00
|
|
|
|
</view>
|
|
|
|
|
|
<view class="">
|
|
|
|
|
|
<image v-if="policeCameraItemInfo.pic" :src="url_config + 'image/' + policeCameraItemInfo.pic"
|
|
|
|
|
|
mode=""></image>
|
|
|
|
|
|
<image v-else src="/static/staffAttendance/attendance-bg2.png" mode=""></image>
|
|
|
|
|
|
<view>
|
|
|
|
|
|
<view>
|
|
|
|
|
|
<view>使用人</view>
|
|
|
|
|
|
<view>{{policeCameraItemInfo.userNames ? policeCameraItemInfo.userNames : '--'}}</view>
|
|
|
|
|
|
</view>
|
|
|
|
|
|
<view>
|
|
|
|
|
|
<view>编号</view>
|
|
|
|
|
|
<view>{{policeCameraItemInfo.devSn}}</view>
|
|
|
|
|
|
</view>
|
|
|
|
|
|
</view>
|
|
|
|
|
|
</view>
|
|
|
|
|
|
</view>
|
|
|
|
|
|
</view>
|
|
|
|
|
|
</u-modal>
|
|
|
|
|
|
</view>
|
|
|
|
|
|
</template>
|
|
|
|
|
|
|
|
|
|
|
|
<script>
|
|
|
|
|
|
import TreeView from '@/components/tree-view/TreeView.vue';
|
|
|
|
|
|
import {
|
|
|
|
|
|
handleAuthScan
|
|
|
|
|
|
} from "@/common/permissionTips"
|
|
|
|
|
|
export default {
|
|
|
|
|
|
components: {
|
|
|
|
|
|
TreeView
|
|
|
|
|
|
},
|
|
|
|
|
|
data() {
|
|
|
|
|
|
return {
|
|
|
|
|
|
mobileTopHeight: 0,
|
|
|
|
|
|
projectDetail: {},
|
|
|
|
|
|
numList: [{
|
|
|
|
|
|
name: '基础信息'
|
|
|
|
|
|
}, {
|
|
|
|
|
|
name: '绑定工作票监控'
|
|
|
|
|
|
}, {
|
|
|
|
|
|
name: '完成'
|
|
|
|
|
|
}, ],
|
|
|
|
|
|
current: 0,
|
|
|
|
|
|
issueInvoiceShow: false,
|
|
|
|
|
|
show: false,
|
|
|
|
|
|
list: [{
|
|
|
|
|
|
value: '1',
|
|
|
|
|
|
label: '江'
|
|
|
|
|
|
},
|
|
|
|
|
|
{
|
|
|
|
|
|
value: '2',
|
|
|
|
|
|
label: '湖'
|
|
|
|
|
|
}
|
|
|
|
|
|
],
|
|
|
|
|
|
imgFileList: [],
|
|
|
|
|
|
workTicketTypeDetail: {},
|
|
|
|
|
|
workTicketInfo: {
|
2025-07-10 16:25:18 +08:00
|
|
|
|
workTicketNumber: `GZP${Date.now()}`,
|
2025-07-09 15:08:55 +08:00
|
|
|
|
applicants: [],
|
|
|
|
|
|
applicantsName: "",
|
|
|
|
|
|
constructionAreas: [],
|
|
|
|
|
|
constructionAreasName: "",
|
|
|
|
|
|
applicationTime: "",
|
|
|
|
|
|
constructionTimeBegin: "",
|
|
|
|
|
|
constructionTimeEnd: "",
|
|
|
|
|
|
operatorsName: "",
|
|
|
|
|
|
operators: [],
|
|
|
|
|
|
workContent: "",
|
|
|
|
|
|
safetyMeasure: "",
|
|
|
|
|
|
constructionAddr: "",
|
|
|
|
|
|
operator: "",
|
|
|
|
|
|
},
|
|
|
|
|
|
// 区域
|
|
|
|
|
|
qualityRegionList: [],
|
|
|
|
|
|
constructionAreasList: [],
|
|
|
|
|
|
constructionAreasNameList: [],
|
|
|
|
|
|
constructionAreasShow: false,
|
|
|
|
|
|
// 申请单位
|
|
|
|
|
|
enterpriseInfoList: [],
|
|
|
|
|
|
applicantsList: [],
|
|
|
|
|
|
applicantsNameList: [],
|
|
|
|
|
|
applicantsShow: false,
|
|
|
|
|
|
// 作业人员
|
|
|
|
|
|
selectWorkerInfoList: [],
|
|
|
|
|
|
operatorShow: false,
|
|
|
|
|
|
operatorsList: [],
|
|
|
|
|
|
operatorsNameList: [],
|
|
|
|
|
|
constructionTimeShow: false,
|
|
|
|
|
|
safetyRiskAnalysisList: [],
|
|
|
|
|
|
workTicketAttachmentList: [],
|
|
|
|
|
|
otherAttachmentList: [],
|
|
|
|
|
|
bindingModeType: 1,
|
|
|
|
|
|
selectList: [],
|
|
|
|
|
|
policeCameraItemList: [],
|
|
|
|
|
|
submitShow: false,
|
|
|
|
|
|
workTicketBindCamera: 0,
|
|
|
|
|
|
workTicketId: "",
|
|
|
|
|
|
onEditType: "",
|
|
|
|
|
|
policeCameraItemInfo: {},
|
2025-07-10 16:25:18 +08:00
|
|
|
|
userInfo: {},
|
2025-07-09 15:08:55 +08:00
|
|
|
|
}
|
|
|
|
|
|
},
|
|
|
|
|
|
onLoad(opts) {
|
2025-07-10 16:25:18 +08:00
|
|
|
|
this.projectDetail = JSON.parse(uni.getStorageSync('projectDetail'));
|
|
|
|
|
|
this.userInfo = JSON.parse(uni.getStorageSync('userInfo'));
|
|
|
|
|
|
console.log(1111, opts, this.projectDetail)
|
2025-07-09 15:08:55 +08:00
|
|
|
|
if (opts.edit) {
|
|
|
|
|
|
this.onEditType = opts.edit
|
|
|
|
|
|
this.workTicketId = opts.workTicketId;
|
|
|
|
|
|
this.getWorkTicketQueryByIdFn();
|
|
|
|
|
|
} else {
|
|
|
|
|
|
this.workTicketInfo.typeId = opts.id;
|
|
|
|
|
|
this.workTicketInfo.applicationTime = this.$dayjs().format("YYYY-MM-DD HH:mm:ss")
|
|
|
|
|
|
this.getWorkTicketTypeQueryByIdFn(opts.id);
|
2025-07-10 16:25:18 +08:00
|
|
|
|
this.getQueryBindRegionsFn()
|
2025-07-09 15:08:55 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
this.getQualityRegionListFn();
|
|
|
|
|
|
this.getEnterpriseInfoListFn();
|
|
|
|
|
|
this.getProjectConfigListFn();
|
|
|
|
|
|
},
|
|
|
|
|
|
onShow() {
|
|
|
|
|
|
let that = this
|
|
|
|
|
|
uni.$on('updateData', function(data) {
|
|
|
|
|
|
if (data) {
|
|
|
|
|
|
const resultList = JSON.parse(data);
|
|
|
|
|
|
if (resultList.length > 0) {
|
|
|
|
|
|
that.selectList = [...that.selectList, ...resultList];
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
console.log('监听到事件来自 updateData ,携带参数为:' + data);
|
|
|
|
|
|
})
|
|
|
|
|
|
},
|
|
|
|
|
|
mounted() {
|
|
|
|
|
|
var that = this
|
|
|
|
|
|
uni.getSystemInfo({
|
|
|
|
|
|
success(res) {
|
|
|
|
|
|
that.mobileTopHeight = res.statusBarHeight ? res.statusBarHeight : 0;
|
|
|
|
|
|
uni.setStorageSync('systemInfo', res)
|
|
|
|
|
|
console.log(res)
|
|
|
|
|
|
}
|
|
|
|
|
|
})
|
|
|
|
|
|
},
|
|
|
|
|
|
methods: {
|
|
|
|
|
|
// 扫码提示
|
|
|
|
|
|
onCancel() {
|
|
|
|
|
|
this.onQRCode();
|
|
|
|
|
|
this.submitShow = false;
|
|
|
|
|
|
},
|
|
|
|
|
|
// 通过id查询工作票信息
|
|
|
|
|
|
getWorkTicketQueryByIdFn() {
|
|
|
|
|
|
let that = this;
|
|
|
|
|
|
let data = {
|
|
|
|
|
|
projectSn: this.projectDetail.projectSn,
|
|
|
|
|
|
id: this.workTicketId,
|
|
|
|
|
|
};
|
|
|
|
|
|
this.sendRequest({
|
|
|
|
|
|
url: 'xmgl/workTicket/queryById',
|
|
|
|
|
|
method: 'GET',
|
|
|
|
|
|
data: data,
|
|
|
|
|
|
success: res => {
|
|
|
|
|
|
if (res.code == 200) {
|
|
|
|
|
|
this.workTicketInfo = {
|
|
|
|
|
|
...res.result,
|
|
|
|
|
|
applicants: res.result.applicants ? res.result.applicants.split(',') : [],
|
|
|
|
|
|
applicantsName: res.result.applicantNames,
|
|
|
|
|
|
constructionAreas: res.result.constructionAreas ? res.result
|
|
|
|
|
|
.constructionAreas.split(',') : [],
|
|
|
|
|
|
constructionAreasName: res.result.constructionAreaNames,
|
|
|
|
|
|
operators: res.result.operators ? res.result.operators.split(',') : [],
|
|
|
|
|
|
operatorsName: res.result.operatorNames,
|
|
|
|
|
|
};
|
|
|
|
|
|
this.otherAttachmentList = res.result.otherAttachment && Array.isArray(JSON.parse(
|
|
|
|
|
|
res.result.otherAttachment)) ? JSON.parse(res.result.otherAttachment) : [];
|
|
|
|
|
|
this.safetyRiskAnalysisList = res.result.safetyRiskAnalysis && Array.isArray(JSON
|
|
|
|
|
|
.parse(res.result.safetyRiskAnalysis)) ? JSON.parse(res.result
|
|
|
|
|
|
.safetyRiskAnalysis) : [];
|
|
|
|
|
|
this.workTicketAttachmentList = res.result.workTicketAttachment && Array.isArray(
|
|
|
|
|
|
JSON.parse(res.result.workTicketAttachment)) ? JSON.parse(res.result
|
|
|
|
|
|
.workTicketAttachment) : [];
|
|
|
|
|
|
this.selectList = res.result.itemList ? res.result.itemList.map(item => item
|
|
|
|
|
|
.itemId) : [];
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
})
|
|
|
|
|
|
},
|
|
|
|
|
|
onConfirm() {
|
|
|
|
|
|
this.submitShow = false;
|
|
|
|
|
|
if (this.policeCameraItemInfo.bindTicket == 1 || this.selectList.includes(this.policeCameraItemInfo
|
2025-07-10 16:25:18 +08:00
|
|
|
|
.itemId)) {
|
2025-07-09 15:08:55 +08:00
|
|
|
|
return this.showToast('该设备已经被绑定', 'warning');
|
|
|
|
|
|
}
|
|
|
|
|
|
this.selectList.push(this.policeCameraItemInfo.itemId)
|
|
|
|
|
|
},
|
|
|
|
|
|
onNavigateDetail(type) {
|
|
|
|
|
|
if (type == 1) {
|
|
|
|
|
|
uni.redirectTo({
|
|
|
|
|
|
url: './workTicketList', // 跳转目标页面路径
|
|
|
|
|
|
});
|
|
|
|
|
|
} else if (type == 2) {
|
|
|
|
|
|
uni.redirectTo({
|
|
|
|
|
|
url: `./workTicketDetail?id=${this.workTicketId}`
|
|
|
|
|
|
});
|
|
|
|
|
|
}
|
|
|
|
|
|
},
|
|
|
|
|
|
onChangeState(operateStatus) {
|
|
|
|
|
|
let that = this;
|
|
|
|
|
|
let data = {
|
|
|
|
|
|
id: this.workTicketId,
|
|
|
|
|
|
projectSn: this.projectDetail.projectSn,
|
|
|
|
|
|
operateStatus,
|
|
|
|
|
|
};
|
|
|
|
|
|
this.sendRequest({
|
|
|
|
|
|
url: 'xmgl/workTicket/operateWorkTicket',
|
|
|
|
|
|
method: 'POST',
|
|
|
|
|
|
data: data,
|
|
|
|
|
|
success: res => {
|
|
|
|
|
|
if (res.code == 200) {
|
|
|
|
|
|
that.onNavigateDetail(2);
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
})
|
|
|
|
|
|
},
|
|
|
|
|
|
// 删除
|
|
|
|
|
|
onDelete(row) {
|
|
|
|
|
|
const findIndex = this.selectList.findIndex(item => item == row.itemId);
|
|
|
|
|
|
if (findIndex > -1) {
|
|
|
|
|
|
this.selectList.splice(findIndex, 1)
|
|
|
|
|
|
}
|
|
|
|
|
|
},
|
|
|
|
|
|
onSubmit() {
|
|
|
|
|
|
this.issueInvoiceShow = false;
|
|
|
|
|
|
if (this.bindingModeType == 1) {
|
|
|
|
|
|
uni.navigateTo({
|
|
|
|
|
|
url: `./equipmentList?selectList=${JSON.stringify(this.selectList)}`
|
|
|
|
|
|
})
|
|
|
|
|
|
} else if (this.bindingModeType == 2) {
|
|
|
|
|
|
this.onQRCode();
|
|
|
|
|
|
// this.submitShow = true;
|
|
|
|
|
|
}
|
|
|
|
|
|
},
|
|
|
|
|
|
onQRCode() {
|
|
|
|
|
|
let that = this;
|
|
|
|
|
|
handleAuthScan().then(() => {
|
|
|
|
|
|
uni.scanCode({
|
|
|
|
|
|
scanType: ['qrCode'],
|
|
|
|
|
|
success: function(res) {
|
|
|
|
|
|
console.log('扫一扫得到的数据:' + res.result)
|
|
|
|
|
|
if (res.result) {
|
|
|
|
|
|
const resultInfo = JSON.parse(res.result);
|
|
|
|
|
|
that.policeCameraItemInfo = that.policeCameraItemList.find(item => item
|
2025-09-16 18:00:18 +08:00
|
|
|
|
.devSn == resultInfo.devSn);
|
2025-07-09 15:08:55 +08:00
|
|
|
|
that.submitShow = true;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
})
|
|
|
|
|
|
})
|
|
|
|
|
|
},
|
2025-07-10 16:25:18 +08:00
|
|
|
|
onLastStep() {
|
|
|
|
|
|
this.current = 0;
|
|
|
|
|
|
},
|
2025-07-09 15:08:55 +08:00
|
|
|
|
// 下一步
|
|
|
|
|
|
onNextStep() {
|
|
|
|
|
|
if (this.current == 0) {
|
|
|
|
|
|
if (!this.workTicketInfo.typeId || !this.workTicketInfo.workContent || this
|
|
|
|
|
|
.workTicketAttachmentList.length == 0) {
|
|
|
|
|
|
this.showToast('有必填项未填写', 'warning');
|
|
|
|
|
|
return
|
|
|
|
|
|
}
|
|
|
|
|
|
if (this.workTicketBindCamera == 0) {
|
|
|
|
|
|
if (this.onEditType) {
|
|
|
|
|
|
this.getworkTicketEditFn();
|
|
|
|
|
|
} else {
|
|
|
|
|
|
this.getworkTicketAddFn();
|
|
|
|
|
|
}
|
|
|
|
|
|
return
|
|
|
|
|
|
}
|
|
|
|
|
|
this.current = 1;
|
|
|
|
|
|
this.getPoliceCameraItemListFn();
|
|
|
|
|
|
} else if (this.current == 1) {
|
2025-07-10 16:25:18 +08:00
|
|
|
|
// if (this.selectList.length == 0) {
|
|
|
|
|
|
// this.showToast('至少要绑定一台设备', 'warning');
|
|
|
|
|
|
// return
|
|
|
|
|
|
// }
|
2025-07-09 15:08:55 +08:00
|
|
|
|
if (this.onEditType) {
|
|
|
|
|
|
this.getworkTicketEditFn();
|
|
|
|
|
|
} else {
|
|
|
|
|
|
this.getworkTicketAddFn();
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
},
|
|
|
|
|
|
// 编辑工作票
|
|
|
|
|
|
getworkTicketEditFn() {
|
|
|
|
|
|
let that = this;
|
|
|
|
|
|
let data = {
|
|
|
|
|
|
...this.workTicketInfo,
|
|
|
|
|
|
applicants: this.workTicketInfo.applicants.join(','),
|
|
|
|
|
|
constructionAreas: this.workTicketInfo.constructionAreas.join(','),
|
|
|
|
|
|
operators: this.workTicketInfo.operators.join(','),
|
|
|
|
|
|
otherAttachment: JSON.stringify(this.otherAttachmentList),
|
|
|
|
|
|
safetyRiskAnalysis: JSON.stringify(this.safetyRiskAnalysisList),
|
|
|
|
|
|
workTicketAttachment: JSON.stringify(this.workTicketAttachmentList),
|
|
|
|
|
|
projectSn: this.projectDetail.projectSn,
|
|
|
|
|
|
policeCameraIds: this.selectList.join(','),
|
|
|
|
|
|
};
|
|
|
|
|
|
console.log(data)
|
|
|
|
|
|
this.sendRequest({
|
|
|
|
|
|
url: 'xmgl/workTicket/edit',
|
|
|
|
|
|
method: 'POST',
|
|
|
|
|
|
data: data,
|
|
|
|
|
|
success: res => {
|
|
|
|
|
|
if (res.code == 200) {
|
|
|
|
|
|
that.showToast('编辑成功', 'success');
|
|
|
|
|
|
that.current = 2;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
})
|
|
|
|
|
|
},
|
|
|
|
|
|
// 添加工作票
|
|
|
|
|
|
getworkTicketAddFn() {
|
|
|
|
|
|
let that = this;
|
|
|
|
|
|
let data = {
|
|
|
|
|
|
...this.workTicketInfo,
|
|
|
|
|
|
applicants: this.workTicketInfo.applicants.join(','),
|
|
|
|
|
|
constructionAreas: this.workTicketInfo.constructionAreas.join(','),
|
|
|
|
|
|
operators: this.workTicketInfo.operators.join(','),
|
|
|
|
|
|
otherAttachment: JSON.stringify(this.otherAttachmentList),
|
|
|
|
|
|
safetyRiskAnalysis: JSON.stringify(this.safetyRiskAnalysisList),
|
|
|
|
|
|
workTicketAttachment: JSON.stringify(this.workTicketAttachmentList),
|
|
|
|
|
|
projectSn: this.projectDetail.projectSn,
|
|
|
|
|
|
policeCameraIds: this.selectList.join(','),
|
|
|
|
|
|
};
|
|
|
|
|
|
this.sendRequest({
|
|
|
|
|
|
url: 'xmgl/workTicket/add',
|
|
|
|
|
|
method: 'POST',
|
|
|
|
|
|
data: data,
|
|
|
|
|
|
success: res => {
|
|
|
|
|
|
if (res.code == 200) {
|
|
|
|
|
|
that.showToast('添加成功', 'success');
|
|
|
|
|
|
that.workTicketId = res.result.id;
|
|
|
|
|
|
that.current = 2;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
})
|
|
|
|
|
|
},
|
|
|
|
|
|
// 取消
|
|
|
|
|
|
onNavigateBack() {
|
|
|
|
|
|
uni.navigateBack({
|
|
|
|
|
|
delta: 1
|
|
|
|
|
|
})
|
|
|
|
|
|
},
|
|
|
|
|
|
// 获取时间
|
|
|
|
|
|
onConstructionTimeChange(event) {
|
|
|
|
|
|
console.log(event)
|
|
|
|
|
|
this.workTicketInfo.constructionTimeBegin = event.startDate;
|
|
|
|
|
|
this.workTicketInfo.constructionTimeEnd = event.endDate;
|
|
|
|
|
|
},
|
|
|
|
|
|
// 多选下拉 1区域 2单位 3人员
|
|
|
|
|
|
onClickType(type) {
|
|
|
|
|
|
if (type == 1) {
|
|
|
|
|
|
this.constructionAreasList = this.workTicketInfo.constructionAreas.map(item => item);
|
|
|
|
|
|
this.constructionAreasNameList = this.workTicketInfo.constructionAreasName ? this.workTicketInfo
|
|
|
|
|
|
.constructionAreasName.split(',') : [];
|
|
|
|
|
|
this.constructionAreasShow = true;
|
|
|
|
|
|
} else if (type == 2) {
|
|
|
|
|
|
this.applicantsList = this.workTicketInfo.applicants.map(item => item);
|
|
|
|
|
|
this.applicantsNameList = this.workTicketInfo.applicantsName ? this.workTicketInfo
|
|
|
|
|
|
.applicantsName.split(',') : [];
|
|
|
|
|
|
this.applicantsShow = true;
|
|
|
|
|
|
} else if (type == 3) {
|
|
|
|
|
|
this.operatorsList = this.workTicketInfo.operators.map(item => item);
|
|
|
|
|
|
this.operatorsNameList = this.workTicketInfo.operatorsName ? this.workTicketInfo
|
|
|
|
|
|
.operatorsName.split(',') : [];
|
|
|
|
|
|
this.operatorShow = true;
|
|
|
|
|
|
}
|
|
|
|
|
|
},
|
|
|
|
|
|
// 区域
|
|
|
|
|
|
onConstructionAreasClick(id, checked, label) {
|
|
|
|
|
|
console.log(id, checked, label)
|
|
|
|
|
|
const idx = this.constructionAreasList.indexOf(id);
|
|
|
|
|
|
if (checked && idx === -1) {
|
|
|
|
|
|
this.constructionAreasList.push(id);
|
|
|
|
|
|
this.constructionAreasNameList.push(label);
|
|
|
|
|
|
} else if (!checked && idx !== -1) {
|
|
|
|
|
|
this.constructionAreasList.splice(idx, 1);
|
|
|
|
|
|
this.constructionAreasNameList.splice(idx, 1);
|
|
|
|
|
|
}
|
|
|
|
|
|
console.log(1122, this.constructionAreasNameList, this.constructionAreasList)
|
|
|
|
|
|
},
|
|
|
|
|
|
// 单位
|
|
|
|
|
|
onApplicantsClick(id, checked, label) {
|
|
|
|
|
|
const idx = this.applicantsList.indexOf(id);
|
|
|
|
|
|
if (checked && idx === -1) {
|
|
|
|
|
|
this.applicantsList.push(id);
|
|
|
|
|
|
this.applicantsNameList.push(label);
|
|
|
|
|
|
} else if (!checked && idx !== -1) {
|
|
|
|
|
|
this.applicantsList.splice(idx, 1);
|
|
|
|
|
|
this.applicantsNameList.splice(idx, 1);
|
|
|
|
|
|
}
|
|
|
|
|
|
},
|
|
|
|
|
|
// 人员
|
|
|
|
|
|
onOperatorClick(id, checked, label) {
|
|
|
|
|
|
const idx = this.operatorsList.indexOf(id);
|
|
|
|
|
|
if (checked && idx === -1) {
|
|
|
|
|
|
this.operatorsList.push(id);
|
|
|
|
|
|
this.operatorsNameList.push(label);
|
|
|
|
|
|
} else if (!checked && idx !== -1) {
|
|
|
|
|
|
this.operatorsList.splice(idx, 1);
|
|
|
|
|
|
this.operatorsNameList.splice(idx, 1);
|
|
|
|
|
|
}
|
|
|
|
|
|
},
|
|
|
|
|
|
onSubmitType(type) {
|
|
|
|
|
|
if (type == 1) {
|
|
|
|
|
|
console.log(11233, this.constructionAreasNameList)
|
|
|
|
|
|
this.workTicketInfo.constructionAreas = [...this.constructionAreasList];
|
|
|
|
|
|
this.workTicketInfo.constructionAreasName = this.constructionAreasNameList.join(',');
|
|
|
|
|
|
this.constructionAreasShow = false;
|
|
|
|
|
|
} else if (type == 2) {
|
|
|
|
|
|
this.workTicketInfo.applicants = [...this.applicantsList];
|
|
|
|
|
|
this.workTicketInfo.applicantsName = this.applicantsNameList.join(',');
|
|
|
|
|
|
this.getSelectWorkerInfoListFn();
|
|
|
|
|
|
this.applicantsShow = false;
|
|
|
|
|
|
} else if (type == 3) {
|
|
|
|
|
|
this.workTicketInfo.operators = [...this.operatorsList];
|
|
|
|
|
|
this.workTicketInfo.operatorsName = this.operatorsNameList.join(',');
|
|
|
|
|
|
this.operatorShow = false;
|
|
|
|
|
|
}
|
|
|
|
|
|
},
|
|
|
|
|
|
onCancelClick(type) {
|
|
|
|
|
|
if (type == 1) {
|
|
|
|
|
|
this.constructionAreasList = [...this.workTicketInfo.constructionAreas];
|
|
|
|
|
|
this.constructionAreasShow = false;
|
|
|
|
|
|
} else if (type == 2) {
|
|
|
|
|
|
this.applicantsList = [...this.workTicketInfo.applicants];
|
|
|
|
|
|
this.applicantsShow = false;
|
|
|
|
|
|
} else if (type == 3) {
|
|
|
|
|
|
this.operatorsList = [...this.workTicketInfo.operators];
|
|
|
|
|
|
this.operatorShow = false;
|
|
|
|
|
|
}
|
|
|
|
|
|
},
|
|
|
|
|
|
//上传附件
|
|
|
|
|
|
uploadImg(type) {
|
|
|
|
|
|
var that = this
|
|
|
|
|
|
if (type == 1) {
|
|
|
|
|
|
this.$chooseImage({
|
|
|
|
|
|
count: 5 - that.workTicketAttachmentList.length,
|
|
|
|
|
|
success(res) {
|
|
|
|
|
|
const tempFilePaths = res.tempFilePaths;
|
|
|
|
|
|
uni.uploadFile({
|
|
|
|
|
|
url: that.url_config + 'upload/image', //仅为示例,非真实的接口地址
|
|
|
|
|
|
filePath: tempFilePaths[0],
|
|
|
|
|
|
name: 'files',
|
|
|
|
|
|
success: (uploadFileRes) => {
|
|
|
|
|
|
let data = {
|
|
|
|
|
|
name: JSON.parse(uploadFileRes.data).data[0].filename,
|
|
|
|
|
|
url: JSON.parse(uploadFileRes.data).data[0].imageUrl
|
|
|
|
|
|
};
|
|
|
|
|
|
that.workTicketAttachmentList.push(data)
|
|
|
|
|
|
}
|
|
|
|
|
|
});
|
|
|
|
|
|
}
|
|
|
|
|
|
})
|
|
|
|
|
|
} else if (type == 2) {
|
|
|
|
|
|
this.$chooseImage({
|
|
|
|
|
|
count: 5 - that.safetyRiskAnalysisList.length,
|
|
|
|
|
|
success(res) {
|
|
|
|
|
|
const tempFilePaths = res.tempFilePaths;
|
|
|
|
|
|
uni.uploadFile({
|
|
|
|
|
|
url: that.url_config + 'upload/image', //仅为示例,非真实的接口地址
|
|
|
|
|
|
filePath: tempFilePaths[0],
|
|
|
|
|
|
name: 'files',
|
|
|
|
|
|
success: (uploadFileRes) => {
|
|
|
|
|
|
let data = {
|
|
|
|
|
|
name: JSON.parse(uploadFileRes.data).data[0].filename,
|
|
|
|
|
|
url: JSON.parse(uploadFileRes.data).data[0].imageUrl
|
|
|
|
|
|
};
|
|
|
|
|
|
that.safetyRiskAnalysisList.push(data)
|
|
|
|
|
|
}
|
|
|
|
|
|
});
|
|
|
|
|
|
}
|
|
|
|
|
|
})
|
|
|
|
|
|
} else {
|
|
|
|
|
|
this.$chooseImage({
|
|
|
|
|
|
count: 5 - that.otherAttachmentList.length,
|
|
|
|
|
|
success(res) {
|
|
|
|
|
|
const tempFilePaths = res.tempFilePaths;
|
|
|
|
|
|
uni.uploadFile({
|
|
|
|
|
|
url: that.url_config + 'upload/image', //仅为示例,非真实的接口地址
|
|
|
|
|
|
filePath: tempFilePaths[0],
|
|
|
|
|
|
name: 'files',
|
|
|
|
|
|
success: (uploadFileRes) => {
|
|
|
|
|
|
let data = {
|
|
|
|
|
|
name: JSON.parse(uploadFileRes.data).data[0].filename,
|
|
|
|
|
|
url: JSON.parse(uploadFileRes.data).data[0].imageUrl
|
|
|
|
|
|
};
|
|
|
|
|
|
that.otherAttachmentList.push(data)
|
|
|
|
|
|
}
|
|
|
|
|
|
});
|
|
|
|
|
|
}
|
|
|
|
|
|
})
|
|
|
|
|
|
}
|
|
|
|
|
|
},
|
|
|
|
|
|
//删除附件
|
|
|
|
|
|
deleteImg(val, type) {
|
|
|
|
|
|
let that = this;
|
|
|
|
|
|
uni.showModal({
|
|
|
|
|
|
title: '提示',
|
|
|
|
|
|
content: '确定删除该附件吗?',
|
|
|
|
|
|
success: function(res) {
|
|
|
|
|
|
if (res.confirm) {
|
|
|
|
|
|
const objFn = {
|
|
|
|
|
|
1: 'workTicketAttachmentList',
|
|
|
|
|
|
2: 'safetyRiskAnalysisList',
|
|
|
|
|
|
3: 'otherAttachmentList',
|
|
|
|
|
|
}
|
|
|
|
|
|
const findIndex = that[objFn[type]].findIndex(item => item.url == val.url);
|
|
|
|
|
|
if (findIndex > -1) {
|
|
|
|
|
|
that[objFn[type]].splice(findIndex, 1)
|
|
|
|
|
|
}
|
|
|
|
|
|
} else if (res.cancel) {
|
|
|
|
|
|
console.log('用户点击取消');
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
});
|
|
|
|
|
|
},
|
|
|
|
|
|
//预览图片
|
|
|
|
|
|
previewImage(url) {
|
|
|
|
|
|
uni.previewImage({
|
|
|
|
|
|
urls: [url]
|
|
|
|
|
|
})
|
|
|
|
|
|
},
|
|
|
|
|
|
// 通过id获取工作票类型详情
|
|
|
|
|
|
getWorkTicketTypeQueryByIdFn(id) {
|
|
|
|
|
|
let that = this;
|
|
|
|
|
|
let data = {
|
|
|
|
|
|
projectSn: this.projectDetail.projectSn,
|
|
|
|
|
|
id: id,
|
|
|
|
|
|
};
|
|
|
|
|
|
this.sendRequest({
|
|
|
|
|
|
url: 'xmgl/workTicketType/queryById',
|
|
|
|
|
|
method: 'GET',
|
|
|
|
|
|
data: data,
|
|
|
|
|
|
success: res => {
|
|
|
|
|
|
if (res.code == 200) {
|
|
|
|
|
|
that.workTicketTypeDetail = res.result;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
})
|
|
|
|
|
|
},
|
|
|
|
|
|
// 获取施工区域
|
|
|
|
|
|
getQualityRegionListFn() {
|
|
|
|
|
|
let that = this;
|
|
|
|
|
|
let data = {
|
|
|
|
|
|
projectSn: this.projectDetail.projectSn,
|
|
|
|
|
|
};
|
|
|
|
|
|
this.sendRequest({
|
|
|
|
|
|
url: 'xmgl/qualityRegion/list',
|
|
|
|
|
|
method: 'POST',
|
|
|
|
|
|
data: data,
|
|
|
|
|
|
success: res => {
|
|
|
|
|
|
if (res.code == 200) {
|
|
|
|
|
|
that.qualityRegionList = res.result;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
})
|
|
|
|
|
|
},
|
|
|
|
|
|
// 获取申请单位
|
|
|
|
|
|
getEnterpriseInfoListFn() {
|
|
|
|
|
|
let that = this;
|
|
|
|
|
|
let data = {
|
|
|
|
|
|
projectSn: this.projectDetail.projectSn,
|
|
|
|
|
|
};
|
|
|
|
|
|
this.sendRequest({
|
|
|
|
|
|
url: 'xmgl/enterpriseInfo/list',
|
|
|
|
|
|
method: 'POST',
|
|
|
|
|
|
data: data,
|
|
|
|
|
|
success: res => {
|
|
|
|
|
|
if (res.code == 200) {
|
|
|
|
|
|
that.enterpriseInfoList = res.result;
|
2025-07-10 16:25:18 +08:00
|
|
|
|
|
|
|
|
|
|
const find = res.result.find(item => item.id == that.userInfo.enterpriseId);
|
|
|
|
|
|
console.log(find, )
|
|
|
|
|
|
if (find && !that.onEditType) {
|
|
|
|
|
|
that.onApplicantsClick(find.id, true, find.enterpriseName);
|
|
|
|
|
|
that.onSubmitType(2);
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
})
|
|
|
|
|
|
},
|
|
|
|
|
|
// 查询项目子账号绑定的区域列表
|
|
|
|
|
|
getQueryBindRegionsFn() {
|
|
|
|
|
|
let that = this;
|
|
|
|
|
|
let data = {
|
|
|
|
|
|
// projectSn: this.projectDetail.projectSn,
|
|
|
|
|
|
};
|
|
|
|
|
|
this.sendRequest({
|
|
|
|
|
|
url: 'xmgl/qualityRegion/queryBindRegions',
|
|
|
|
|
|
method: 'GET',
|
|
|
|
|
|
data: data,
|
|
|
|
|
|
success: res => {
|
|
|
|
|
|
if (res.code == 200) {
|
|
|
|
|
|
console.log(res.result);
|
|
|
|
|
|
res.result.forEach(item => {
|
|
|
|
|
|
that.onConstructionAreasClick(item.id, true, item.regionName);
|
|
|
|
|
|
})
|
|
|
|
|
|
that.onSubmitType(1);
|
2025-07-09 15:08:55 +08:00
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
})
|
|
|
|
|
|
},
|
|
|
|
|
|
// 获取人员
|
|
|
|
|
|
getSelectWorkerInfoListFn() {
|
|
|
|
|
|
let that = this;
|
|
|
|
|
|
let data = {
|
|
|
|
|
|
projectSn: this.projectDetail.projectSn,
|
|
|
|
|
|
enterpriseId: this.workTicketInfo.applicants.join(',')
|
|
|
|
|
|
};
|
|
|
|
|
|
this.sendRequest({
|
|
|
|
|
|
url: 'xmgl/workerInfo/selectWorkerInfoList',
|
|
|
|
|
|
method: 'POST',
|
|
|
|
|
|
data: data,
|
|
|
|
|
|
success: res => {
|
|
|
|
|
|
if (res.code == 200) {
|
|
|
|
|
|
that.selectWorkerInfoList = res.result.records;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
})
|
|
|
|
|
|
},
|
|
|
|
|
|
// 获取项目配置信息
|
|
|
|
|
|
getProjectConfigListFn() {
|
|
|
|
|
|
let that = this;
|
|
|
|
|
|
let data = {
|
|
|
|
|
|
projectSn: this.projectDetail.projectSn,
|
|
|
|
|
|
};
|
|
|
|
|
|
this.sendRequest({
|
|
|
|
|
|
url: 'xmgl/projectConfig/getProjectConfigList',
|
|
|
|
|
|
method: 'POST',
|
|
|
|
|
|
data: data,
|
|
|
|
|
|
success: res => {
|
|
|
|
|
|
if (res.code == 200) {
|
|
|
|
|
|
if (!res.result || res.result.length == 0) {
|
|
|
|
|
|
that.workTicketBindCamera = 0;
|
|
|
|
|
|
} else {
|
|
|
|
|
|
let workTicketBindCamera = res.result[0].workTicketBindCamera;
|
|
|
|
|
|
that.workTicketBindCamera = workTicketBindCamera;
|
|
|
|
|
|
}
|
|
|
|
|
|
if (that.workTicketBindCamera == 0) {
|
|
|
|
|
|
that.numList = [{
|
|
|
|
|
|
name: '基础信息'
|
|
|
|
|
|
}, {
|
|
|
|
|
|
name: ''
|
|
|
|
|
|
}, {
|
|
|
|
|
|
name: '完成'
|
|
|
|
|
|
}, ];
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
})
|
|
|
|
|
|
},
|
|
|
|
|
|
showToast(title, type) {
|
|
|
|
|
|
this.$refs.uToast.show({
|
|
|
|
|
|
title: title,
|
|
|
|
|
|
type: type,
|
|
|
|
|
|
})
|
|
|
|
|
|
},
|
|
|
|
|
|
// 获取设备列表
|
|
|
|
|
|
getPoliceCameraItemListFn() {
|
|
|
|
|
|
let that = this;
|
|
|
|
|
|
let data = {
|
|
|
|
|
|
projectSn: this.projectDetail.projectSn,
|
|
|
|
|
|
};
|
|
|
|
|
|
this.sendRequest({
|
|
|
|
|
|
url: 'xmgl/policeCameraItem/list',
|
|
|
|
|
|
method: 'get',
|
|
|
|
|
|
data: data,
|
|
|
|
|
|
success: res => {
|
|
|
|
|
|
if (res.code == 200) {
|
|
|
|
|
|
that.policeCameraItemList = res.result;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
})
|
|
|
|
|
|
},
|
|
|
|
|
|
},
|
|
|
|
|
|
computed: {
|
|
|
|
|
|
policeCameraItemListUp() {
|
|
|
|
|
|
return this.policeCameraItemList.filter(item => {
|
|
|
|
|
|
console.log(111, this.selectList, )
|
|
|
|
|
|
return this.selectList.includes(item.itemId);
|
|
|
|
|
|
})
|
|
|
|
|
|
}
|
|
|
|
|
|
},
|
|
|
|
|
|
}
|
|
|
|
|
|
</script>
|
|
|
|
|
|
|
|
|
|
|
|
<style scoped lang="scss">
|
|
|
|
|
|
.content {
|
|
|
|
|
|
.content_main2 {
|
|
|
|
|
|
background-color: white;
|
|
|
|
|
|
min-height: calc(100vh - 88rpx - 180rpx);
|
|
|
|
|
|
display: flex;
|
|
|
|
|
|
flex-direction: column;
|
|
|
|
|
|
align-items: center;
|
|
|
|
|
|
padding: 40rpx 94rpx;
|
|
|
|
|
|
|
|
|
|
|
|
>view:first-child {
|
|
|
|
|
|
width: 502rpx;
|
|
|
|
|
|
height: 336rpx;
|
|
|
|
|
|
background-image: url('@/static/workTicketManage/index-icon11.png');
|
|
|
|
|
|
background-repeat: no-repeat;
|
|
|
|
|
|
background-size: 100% 100%;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
.edit_img {
|
|
|
|
|
|
background-image: url('@/static/workTicketManage/index-icon12.png') !important;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
>view:nth-child(2) {
|
|
|
|
|
|
font-weight: 500;
|
|
|
|
|
|
font-size: 28rpx;
|
|
|
|
|
|
color: #171717;
|
|
|
|
|
|
margin-top: 30rpx;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
>view:nth-child(3) {
|
|
|
|
|
|
font-size: 24rpx;
|
|
|
|
|
|
color: #FFA026;
|
|
|
|
|
|
margin-top: 26rpx;
|
|
|
|
|
|
display: flex;
|
|
|
|
|
|
align-items: flex-start;
|
|
|
|
|
|
|
|
|
|
|
|
.u-icon {
|
|
|
|
|
|
font-size: 36rpx;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
.content_main1 {
|
|
|
|
|
|
margin-top: 26rpx;
|
|
|
|
|
|
padding-bottom: 138rpx;
|
|
|
|
|
|
// background-color: white;
|
|
|
|
|
|
// min-height: calc(100vh - 88rpx - 180rpx - 26rpx);
|
|
|
|
|
|
|
|
|
|
|
|
.content_main-box {
|
|
|
|
|
|
height: 224rpx;
|
|
|
|
|
|
background-color: #FFFFFF;
|
|
|
|
|
|
padding: 26rpx;
|
|
|
|
|
|
margin-top: 20rpx;
|
|
|
|
|
|
|
|
|
|
|
|
>view:last-child {
|
|
|
|
|
|
margin-top: 22rpx;
|
|
|
|
|
|
display: flex;
|
|
|
|
|
|
align-items: center;
|
|
|
|
|
|
|
|
|
|
|
|
>image {
|
|
|
|
|
|
width: 80rpx;
|
|
|
|
|
|
height: 104rpx;
|
|
|
|
|
|
border-radius: 6rpx;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
>view:last-child {
|
|
|
|
|
|
display: flex;
|
|
|
|
|
|
flex-direction: column;
|
|
|
|
|
|
justify-content: space-between;
|
|
|
|
|
|
margin-left: 40rpx;
|
|
|
|
|
|
height: 104rpx;
|
|
|
|
|
|
|
|
|
|
|
|
>view {
|
|
|
|
|
|
display: flex;
|
|
|
|
|
|
|
|
|
|
|
|
>view:first-child {
|
|
|
|
|
|
width: 84rpx;
|
|
|
|
|
|
font-size: 28rpx;
|
|
|
|
|
|
color: #4D4D4D;
|
|
|
|
|
|
text-align: right;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
>view:last-child {
|
|
|
|
|
|
margin-left: 40rpx;
|
|
|
|
|
|
font-size: 28rpx;
|
|
|
|
|
|
color: #4D4D4D;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
>view:first-child {
|
|
|
|
|
|
display: flex;
|
|
|
|
|
|
align-items: center;
|
|
|
|
|
|
justify-content: space-between;
|
|
|
|
|
|
|
|
|
|
|
|
>view:first-child {
|
|
|
|
|
|
font-weight: 800;
|
|
|
|
|
|
font-size: 30rpx;
|
|
|
|
|
|
color: #171717;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2025-07-10 16:25:18 +08:00
|
|
|
|
image {
|
|
|
|
|
|
width: 32rpx;
|
|
|
|
|
|
height: 32rpx;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2025-07-09 15:08:55 +08:00
|
|
|
|
.u-icon {
|
|
|
|
|
|
font-size: 40rpx;
|
|
|
|
|
|
color: #EA3941;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
.header-title {
|
|
|
|
|
|
display: flex;
|
|
|
|
|
|
align-items: center;
|
|
|
|
|
|
justify-content: space-between;
|
|
|
|
|
|
padding: 12rpx 26rpx;
|
|
|
|
|
|
background-color: white;
|
|
|
|
|
|
|
|
|
|
|
|
>view:first-child {
|
|
|
|
|
|
font-weight: 500;
|
|
|
|
|
|
font-size: 30rpx;
|
|
|
|
|
|
color: #1A1A1A;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
>view:last-child {
|
|
|
|
|
|
display: flex;
|
|
|
|
|
|
align-items: center;
|
|
|
|
|
|
|
|
|
|
|
|
>view:first-child {
|
|
|
|
|
|
width: 40rpx;
|
|
|
|
|
|
height: 40rpx;
|
|
|
|
|
|
background-image: url('@/static/workTicketManage/index-icon10.png');
|
|
|
|
|
|
background-repeat: no-repeat;
|
|
|
|
|
|
background-size: 100% 100%;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
>view:last-child {
|
|
|
|
|
|
font-weight: 500;
|
|
|
|
|
|
font-size: 24rpx;
|
|
|
|
|
|
color: #4D8EEC;
|
|
|
|
|
|
margin-left: 20rpx;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
.content_main {
|
|
|
|
|
|
margin-top: 26rpx;
|
|
|
|
|
|
padding-bottom: 138rpx;
|
|
|
|
|
|
background-color: white;
|
|
|
|
|
|
|
|
|
|
|
|
.main-box {
|
|
|
|
|
|
padding: 0 16rpx;
|
|
|
|
|
|
|
|
|
|
|
|
>.box2 {
|
|
|
|
|
|
flex-direction: column;
|
|
|
|
|
|
margin-top: 0 !important;
|
|
|
|
|
|
|
|
|
|
|
|
>view:first-child {
|
|
|
|
|
|
width: 192rpx !important;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
.imgBox_wrap_list {
|
|
|
|
|
|
flex-direction: column;
|
|
|
|
|
|
align-items: flex-start !important;
|
|
|
|
|
|
margin-left: 142rpx;
|
|
|
|
|
|
|
|
|
|
|
|
.addImgBox_text {
|
|
|
|
|
|
margin-top: 20rpx;
|
|
|
|
|
|
margin-bottom: 10rpx;
|
|
|
|
|
|
font-size: 24rpx;
|
|
|
|
|
|
color: #808080;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
.addImgBox_btn {
|
|
|
|
|
|
width: 184rpx;
|
|
|
|
|
|
height: 66rpx;
|
|
|
|
|
|
background-color: #5181F6;
|
|
|
|
|
|
border-radius: 6rpx;
|
|
|
|
|
|
font-size: 28rpx;
|
|
|
|
|
|
color: #FFFFFF;
|
|
|
|
|
|
display: flex;
|
|
|
|
|
|
align-items: center;
|
|
|
|
|
|
justify-content: center;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
.imgBox_list {
|
|
|
|
|
|
width: 550rpx;
|
|
|
|
|
|
display: flex;
|
|
|
|
|
|
align-items: center;
|
|
|
|
|
|
justify-content: space-between;
|
|
|
|
|
|
padding: 14rpx 26rpx 14rpx 40rpx;
|
|
|
|
|
|
|
|
|
|
|
|
>view:first-child {
|
|
|
|
|
|
display: flex;
|
|
|
|
|
|
align-items: center;
|
|
|
|
|
|
|
|
|
|
|
|
.u-icon {
|
|
|
|
|
|
font-size: 40rpx;
|
|
|
|
|
|
color: #B3B3B3;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
>view:last-child {
|
|
|
|
|
|
margin-left: 14rpx;
|
|
|
|
|
|
width: 320rpx;
|
|
|
|
|
|
font-size: 24rpx;
|
|
|
|
|
|
color: #808080;
|
|
|
|
|
|
overflow: hidden;
|
|
|
|
|
|
white-space: nowrap;
|
|
|
|
|
|
text-overflow: ellipsis;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
>.u-icon {
|
|
|
|
|
|
font-size: 32rpx;
|
|
|
|
|
|
color: #7AC756;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
.imgBox_list_active {
|
|
|
|
|
|
>view:first-child {
|
|
|
|
|
|
|
|
|
|
|
|
.u-icon,
|
|
|
|
|
|
>view:last-child {
|
|
|
|
|
|
color: #5181F6;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
>.u-icon {
|
|
|
|
|
|
color: #B3B3B3;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
.imgBox_list:nth-child(even) {
|
|
|
|
|
|
background-color: #FBFBFB;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
.imgBox_list:nth-child(odd) {
|
|
|
|
|
|
background-color: #FFFFFF;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
.imgBox_wrap {
|
|
|
|
|
|
display: flex;
|
|
|
|
|
|
flex-wrap: wrap;
|
|
|
|
|
|
margin-left: 192rpx;
|
|
|
|
|
|
flex: 1;
|
|
|
|
|
|
|
|
|
|
|
|
>view:not(:last-child) {
|
|
|
|
|
|
margin-right: 26rpx;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
>view {
|
|
|
|
|
|
margin-bottom: 20rpx;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
.imgBox {
|
|
|
|
|
|
width: 112rpx;
|
|
|
|
|
|
height: 120rpx;
|
|
|
|
|
|
display: inline-flex;
|
|
|
|
|
|
position: relative;
|
|
|
|
|
|
border-radius: 8rpx;
|
|
|
|
|
|
|
|
|
|
|
|
.img {
|
|
|
|
|
|
width: 100%;
|
|
|
|
|
|
height: 100%;
|
|
|
|
|
|
border-radius: 8rpx;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
.deleteImg {
|
|
|
|
|
|
position: absolute;
|
|
|
|
|
|
right: -20rpx;
|
|
|
|
|
|
top: -20rpx;
|
|
|
|
|
|
color: #fff;
|
|
|
|
|
|
width: 20rpx;
|
|
|
|
|
|
height: 20rpx;
|
|
|
|
|
|
background-image: url('@/static/workTicketManage/index-icon9.png');
|
|
|
|
|
|
background-repeat: no-repeat;
|
|
|
|
|
|
background-size: 100% 100%;
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
.addImgBox {
|
|
|
|
|
|
width: 118rpx;
|
|
|
|
|
|
height: 120rpx;
|
|
|
|
|
|
background: #FFFFFF;
|
|
|
|
|
|
border-radius: 8rpx;
|
|
|
|
|
|
border: 2rpx solid #D8DBE8;
|
|
|
|
|
|
display: inline-flex;
|
|
|
|
|
|
align-items: center;
|
|
|
|
|
|
justify-content: center;
|
|
|
|
|
|
font-size: 24rpx;
|
|
|
|
|
|
|
|
|
|
|
|
.icon-add {
|
|
|
|
|
|
width: 40rpx;
|
|
|
|
|
|
height: 40rpx;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
>.box1:not(:first-child) {
|
|
|
|
|
|
margin-top: 20rpx;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
>.box1 {
|
|
|
|
|
|
display: flex;
|
|
|
|
|
|
align-items: flex-start;
|
|
|
|
|
|
font-size: 28rpx;
|
|
|
|
|
|
font-weight: 500;
|
|
|
|
|
|
|
|
|
|
|
|
>view:first-child {
|
2025-07-10 16:25:18 +08:00
|
|
|
|
width: 164rpx;
|
2025-07-09 15:08:55 +08:00
|
|
|
|
color: #808080;
|
|
|
|
|
|
height: 68rpx;
|
|
|
|
|
|
display: flex;
|
|
|
|
|
|
align-items: center;
|
|
|
|
|
|
|
|
|
|
|
|
>text {
|
|
|
|
|
|
color: #FF0000;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
>view:last-child {
|
|
|
|
|
|
color: #4D4D4D;
|
|
|
|
|
|
min-height: 68rpx;
|
|
|
|
|
|
display: flex;
|
|
|
|
|
|
align-items: center;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/deep/ .u-input {
|
|
|
|
|
|
width: 550rpx;
|
|
|
|
|
|
height: 68rpx;
|
|
|
|
|
|
line-height: 68rpx;
|
|
|
|
|
|
border-radius: 8rpx 8rpx 8rpx 8rpx;
|
|
|
|
|
|
border: 2rpx solid #D8DBE8;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
.changetime {
|
|
|
|
|
|
width: 550rpx;
|
|
|
|
|
|
height: 68rpx;
|
|
|
|
|
|
border-radius: 8rpx 8rpx 8rpx 8rpx;
|
|
|
|
|
|
border: 2rpx solid #D8DBE8;
|
|
|
|
|
|
display: flex;
|
|
|
|
|
|
align-items: center;
|
|
|
|
|
|
justify-content: space-between;
|
|
|
|
|
|
padding: 0 34rpx;
|
|
|
|
|
|
font-size: 28rpx;
|
|
|
|
|
|
color: #4D4D4D;
|
|
|
|
|
|
|
|
|
|
|
|
.changetime_icon {
|
|
|
|
|
|
width: 36rpx;
|
|
|
|
|
|
height: 36rpx;
|
|
|
|
|
|
background-image: url('@/static/workTicketManage/index-icon7.png');
|
|
|
|
|
|
background-repeat: no-repeat;
|
|
|
|
|
|
background-size: 100% 100%;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
.textarea {
|
|
|
|
|
|
position: relative;
|
|
|
|
|
|
|
|
|
|
|
|
/deep/ .u-input {
|
2025-07-10 16:25:18 +08:00
|
|
|
|
// height: 160rpx;
|
2025-07-09 15:08:55 +08:00
|
|
|
|
line-height: 68rpx;
|
2025-07-10 16:25:18 +08:00
|
|
|
|
min-height: 160rpx !important;
|
|
|
|
|
|
height: initial;
|
|
|
|
|
|
padding-bottom: 20px !important;
|
2025-07-09 15:08:55 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
.textarea_text {
|
|
|
|
|
|
position: absolute;
|
|
|
|
|
|
right: 20rpx;
|
|
|
|
|
|
bottom: 20rpx;
|
|
|
|
|
|
font-size: 22rpx;
|
|
|
|
|
|
color: #B3B3B3;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
.header-title {
|
|
|
|
|
|
padding: 12rpx 16rpx;
|
|
|
|
|
|
font-weight: 500;
|
|
|
|
|
|
font-size: 30rpx;
|
|
|
|
|
|
color: #1A1A1A;
|
|
|
|
|
|
border-bottom: 2rpx solid #EFF3F7;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
.confrim-btn {
|
|
|
|
|
|
width: 100%;
|
|
|
|
|
|
padding: 18rpx 26rpx;
|
|
|
|
|
|
background-color: #FFFFFF;
|
|
|
|
|
|
box-shadow: 0rpx -8rpx 8rpx 0rpx rgba(0, 0, 0, 0.05);
|
|
|
|
|
|
display: flex;
|
|
|
|
|
|
position: fixed;
|
|
|
|
|
|
bottom: 0;
|
|
|
|
|
|
z-index: 1;
|
|
|
|
|
|
|
|
|
|
|
|
>view {
|
|
|
|
|
|
width: 50%;
|
|
|
|
|
|
height: 76rpx;
|
|
|
|
|
|
font-weight: 500;
|
|
|
|
|
|
font-size: 28rpx;
|
|
|
|
|
|
display: flex;
|
|
|
|
|
|
align-items: center;
|
|
|
|
|
|
justify-content: center;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
>view:first-child {
|
|
|
|
|
|
background-color: rgba(81, 129, 246, 0.1);
|
|
|
|
|
|
border-radius: 6rpx 0rpx 0rpx 6rpx;
|
|
|
|
|
|
color: #5181F6;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
>view:last-child {
|
|
|
|
|
|
background-color: #5181F6;
|
|
|
|
|
|
border-radius: 0rpx 6rpx 6rpx 0rpx;
|
|
|
|
|
|
color: #FFFFFF;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/deep/ .u-mode-center-box {
|
|
|
|
|
|
width: 698rpx !important;
|
|
|
|
|
|
|
|
|
|
|
|
.u-model__title {
|
|
|
|
|
|
padding: 0;
|
|
|
|
|
|
font-size: 32rpx;
|
|
|
|
|
|
color: #272D45;
|
|
|
|
|
|
height: 86rpx;
|
|
|
|
|
|
background-color: #FFFFFF;
|
|
|
|
|
|
box-shadow: 0rpx 8rpx 10rpx -8rpx rgba(81, 129, 246, 0.42);
|
|
|
|
|
|
display: flex;
|
|
|
|
|
|
align-items: center;
|
|
|
|
|
|
justify-content: center;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
.u-model__content__message {
|
|
|
|
|
|
padding: 26rpx 26rpx 72rpx;
|
|
|
|
|
|
font-size: 28rpx;
|
|
|
|
|
|
color: #171717;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
.u-model__footer__button {
|
|
|
|
|
|
height: 76rpx;
|
|
|
|
|
|
line-height: 76rpx;
|
|
|
|
|
|
background-color: rgba(81, 129, 246, 0.1);
|
|
|
|
|
|
font-weight: 500;
|
|
|
|
|
|
font-size: 28rpx;
|
|
|
|
|
|
color: #5181F6;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
.hairline-left {
|
|
|
|
|
|
background-color: #5181F6;
|
|
|
|
|
|
color: white !important;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/deep/ .u-drawer-bottom {
|
|
|
|
|
|
border-radius: 32rpx 32rpx 0 0;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
.content-popup {
|
|
|
|
|
|
.content-popup_main {
|
|
|
|
|
|
padding: 26rpx 0;
|
|
|
|
|
|
|
|
|
|
|
|
>view {
|
|
|
|
|
|
width: 100%;
|
|
|
|
|
|
height: 80rpx;
|
|
|
|
|
|
background-color: #FFFFFF;
|
|
|
|
|
|
font-weight: 500;
|
|
|
|
|
|
font-size: 30rpx;
|
|
|
|
|
|
color: #1A1A1A;
|
|
|
|
|
|
display: flex;
|
|
|
|
|
|
align-items: center;
|
|
|
|
|
|
justify-content: center;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
>view:not(:first-child) {
|
|
|
|
|
|
margin-top: 20rpx;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
.popup_main_active {
|
|
|
|
|
|
background-color: rgba(81, 129, 246, 0.1);
|
|
|
|
|
|
color: #5181F6;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
2025-07-10 16:25:18 +08:00
|
|
|
|
uni-scroll-view {
|
|
|
|
|
|
margin: 26rpx 0;
|
|
|
|
|
|
}
|
2025-07-09 15:08:55 +08:00
|
|
|
|
.content-popup_header {
|
|
|
|
|
|
height: 86rpx;
|
|
|
|
|
|
box-shadow: 0rpx 8rpx 10rpx -8rpx rgba(81, 129, 246, 0.42);
|
|
|
|
|
|
display: flex;
|
|
|
|
|
|
align-items: center;
|
|
|
|
|
|
justify-content: center;
|
|
|
|
|
|
font-weight: 800;
|
|
|
|
|
|
font-size: 30rpx;
|
|
|
|
|
|
color: #1A1A1A;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
.confrim-btn {
|
|
|
|
|
|
padding: 18rpx 26rpx;
|
|
|
|
|
|
background-color: #FFFFFF;
|
|
|
|
|
|
box-shadow: 0rpx -8rpx 8rpx 0rpx rgba(0, 0, 0, 0.05);
|
|
|
|
|
|
display: flex;
|
|
|
|
|
|
|
|
|
|
|
|
>view {
|
|
|
|
|
|
width: 50%;
|
|
|
|
|
|
height: 76rpx;
|
|
|
|
|
|
font-weight: 500;
|
|
|
|
|
|
font-size: 28rpx;
|
|
|
|
|
|
display: flex;
|
|
|
|
|
|
align-items: center;
|
|
|
|
|
|
justify-content: center;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
>view:first-child {
|
|
|
|
|
|
background-color: rgba(81, 129, 246, 0.1);
|
|
|
|
|
|
border-radius: 6rpx 0rpx 0rpx 6rpx;
|
|
|
|
|
|
color: #5181F6;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
>view:last-child {
|
|
|
|
|
|
background-color: #5181F6;
|
|
|
|
|
|
border-radius: 0rpx 6rpx 6rpx 0rpx;
|
|
|
|
|
|
color: #FFFFFF;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
.addIssue {
|
|
|
|
|
|
min-height: 100vh;
|
|
|
|
|
|
background-color: #F2F3F7;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/deep/ .u-steps {
|
|
|
|
|
|
background-color: #FFFFFF;
|
|
|
|
|
|
padding: 26rpx;
|
|
|
|
|
|
|
|
|
|
|
|
.u-steps__item {
|
|
|
|
|
|
flex: unset;
|
|
|
|
|
|
|
|
|
|
|
|
.u-steps__item__dot {
|
|
|
|
|
|
width: 72rpx;
|
|
|
|
|
|
height: 72rpx;
|
|
|
|
|
|
border-radius: 50%;
|
|
|
|
|
|
background-color: #F4333C !important;
|
|
|
|
|
|
position: relative;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
.u-steps__item__dot::after {
|
|
|
|
|
|
content: "";
|
|
|
|
|
|
width: 40rpx;
|
|
|
|
|
|
height: 40rpx;
|
|
|
|
|
|
background-repeat: no-repeat;
|
|
|
|
|
|
background-size: 100% 100%;
|
|
|
|
|
|
position: absolute;
|
|
|
|
|
|
left: 50%;
|
|
|
|
|
|
top: 50%;
|
|
|
|
|
|
transform: translate(-50%, -50%);
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
.u-steps__item:nth-child(1) .u-steps__item__line {
|
|
|
|
|
|
width: 230rpx;
|
|
|
|
|
|
left: 80%;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
.u-steps__item:nth-child(1) .u-steps__item__dot {
|
|
|
|
|
|
background-color: #008DE4 !important;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
.u-steps__item:nth-child(1) .u-steps__item__dot::after {
|
|
|
|
|
|
background-image: url('@/static/workTicketManage/index-icon4.png');
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
.u-steps__item:nth-child(2) {
|
|
|
|
|
|
flex: 1;
|
|
|
|
|
|
|
|
|
|
|
|
.u-steps__item__line {
|
|
|
|
|
|
width: 220rpx;
|
|
|
|
|
|
left: 57%;
|
|
|
|
|
|
|
|
|
|
|
|
.u-line {
|
|
|
|
|
|
border-color: #F4353E !important;
|
|
|
|
|
|
border-bottom: 4rpx solid #F4353E !important;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
.u-steps__item__dot::after {
|
|
|
|
|
|
background-image: url('@/static/workTicketManage/index-icon5.png');
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
.u-steps__item:nth-child(3) .u-steps__item__dot::after {
|
|
|
|
|
|
background-image: url('@/static/workTicketManage/index-icon6.png');
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
.u-steps__item__line {
|
|
|
|
|
|
top: calc(72rpx / 2) !important;
|
|
|
|
|
|
|
|
|
|
|
|
.u-line {
|
|
|
|
|
|
border-color: #038EE4 !important;
|
|
|
|
|
|
border-bottom: 4rpx solid #038EE4 !important;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
.u-steps__item__text--row {
|
|
|
|
|
|
font-weight: 500;
|
|
|
|
|
|
font-size: 30rpx;
|
|
|
|
|
|
color: #1A1A1A !important;
|
|
|
|
|
|
margin-top: 12rpx;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/deep/ .steps_1 {
|
|
|
|
|
|
.u-steps__item:nth-child(2) .u-steps__item__dot {
|
|
|
|
|
|
background-color: #008DE4 !important;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
.u-steps__item:nth-child(2) .u-steps__item__line .u-line {
|
|
|
|
|
|
border-color: #038EE4 !important;
|
|
|
|
|
|
border-bottom: 4rpx solid #038EE4 !important;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/deep/ .steps_2 {
|
|
|
|
|
|
.u-steps__item:nth-child(3) .u-steps__item__dot {
|
|
|
|
|
|
background-color: #008DE4 !important;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/deep/ .steps_3 {
|
|
|
|
|
|
.u-steps__item:nth-child(1) .u-steps__item__line {
|
|
|
|
|
|
width: 520rpx;
|
|
|
|
|
|
left: 80%;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
.u-steps__item:nth-child(2) .u-steps__item__line {
|
|
|
|
|
|
opacity: 0;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
.u-steps__item:nth-child(2) .u-steps__item__dot {
|
|
|
|
|
|
opacity: 0;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
.fixedheader {
|
|
|
|
|
|
position: fixed;
|
|
|
|
|
|
top: 0;
|
|
|
|
|
|
left: 0;
|
|
|
|
|
|
width: 100%;
|
|
|
|
|
|
z-index: 2;
|
|
|
|
|
|
|
|
|
|
|
|
/deep/ .headerBox {
|
|
|
|
|
|
border-bottom: none;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
.headerName {
|
|
|
|
|
|
z-index: 1;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
.new-nodata_height {
|
|
|
|
|
|
min-height: 500rpx;
|
|
|
|
|
|
position: relative;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
.new-nodata {
|
|
|
|
|
|
position: absolute;
|
|
|
|
|
|
top: 50%;
|
|
|
|
|
|
left: 50%;
|
|
|
|
|
|
transform: translate(-50%, -50%);
|
|
|
|
|
|
display: flex;
|
|
|
|
|
|
flex-direction: column;
|
|
|
|
|
|
align-items: center;
|
|
|
|
|
|
justify-content: center;
|
|
|
|
|
|
|
|
|
|
|
|
>view {
|
|
|
|
|
|
width: 300rpx;
|
|
|
|
|
|
height: 300rpx;
|
|
|
|
|
|
background-image: url('@/static/staffAttendance/nodata.png');
|
|
|
|
|
|
background-repeat: no-repeat;
|
|
|
|
|
|
background-size: 100% 100%;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
>text {
|
|
|
|
|
|
font-size: 22rpx;
|
|
|
|
|
|
color: #808080;
|
|
|
|
|
|
margin-top: 60rpx;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
.content_main-box1 {
|
|
|
|
|
|
height: 224rpx;
|
|
|
|
|
|
// background-color: #FFFFFF;
|
|
|
|
|
|
padding: 26rpx;
|
|
|
|
|
|
|
|
|
|
|
|
/deep/ .uni-checkbox-input {
|
|
|
|
|
|
width: 32rpx;
|
|
|
|
|
|
height: 32rpx;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
>view:last-child {
|
|
|
|
|
|
margin-top: 22rpx;
|
|
|
|
|
|
display: flex;
|
|
|
|
|
|
align-items: center;
|
|
|
|
|
|
|
|
|
|
|
|
>image {
|
|
|
|
|
|
width: 80rpx;
|
|
|
|
|
|
height: 104rpx;
|
|
|
|
|
|
border-radius: 6rpx;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
>view:last-child {
|
|
|
|
|
|
display: flex;
|
|
|
|
|
|
flex-direction: column;
|
|
|
|
|
|
justify-content: space-between;
|
|
|
|
|
|
margin-left: 40rpx;
|
|
|
|
|
|
height: 104rpx;
|
|
|
|
|
|
|
|
|
|
|
|
>view {
|
|
|
|
|
|
display: flex;
|
|
|
|
|
|
|
|
|
|
|
|
>view:first-child {
|
|
|
|
|
|
width: 84rpx;
|
|
|
|
|
|
font-size: 28rpx;
|
|
|
|
|
|
color: #4D4D4D;
|
|
|
|
|
|
text-align: right;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
>view:last-child {
|
|
|
|
|
|
margin-left: 40rpx;
|
|
|
|
|
|
font-size: 28rpx;
|
|
|
|
|
|
color: #4D4D4D;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
>view:first-child {
|
|
|
|
|
|
display: flex;
|
|
|
|
|
|
align-items: center;
|
|
|
|
|
|
justify-content: space-between;
|
|
|
|
|
|
|
|
|
|
|
|
>view:first-child {
|
|
|
|
|
|
font-weight: 800;
|
|
|
|
|
|
font-size: 30rpx;
|
|
|
|
|
|
color: #171717;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
>view:last-child {
|
|
|
|
|
|
width: 90rpx;
|
|
|
|
|
|
height: 42rpx;
|
|
|
|
|
|
background-color: rgba(71, 195, 147, 0.1);
|
|
|
|
|
|
border-radius: 76rpx;
|
|
|
|
|
|
display: flex;
|
|
|
|
|
|
align-items: center;
|
|
|
|
|
|
justify-content: center;
|
|
|
|
|
|
font-size: 21rpx;
|
|
|
|
|
|
color: #47C393;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
.boundalready {
|
|
|
|
|
|
background-color: rgba(113, 75, 0, 0.1) !important;
|
|
|
|
|
|
color: #714B00 !important;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
</style>
|