|
@@ -6,24 +6,12 @@
|
|
|
<ContentWrap>
|
|
<ContentWrap>
|
|
|
<!-- 搜索工作栏 -->
|
|
<!-- 搜索工作栏 -->
|
|
|
<el-form class="-mb-15px" :model="queryParams" ref="queryFormRef" :inline="true">
|
|
<el-form class="-mb-15px" :model="queryParams" ref="queryFormRef" :inline="true">
|
|
|
- <el-form-item label="地址" prop="address">
|
|
|
|
|
- <el-input placeholder="请输入地址" v-model="queryParams.address" />
|
|
|
|
|
|
|
+ <el-form-item label="PTW编号" prop="ptwNo">
|
|
|
|
|
+ <el-input placeholder="请输入PTW编号" v-model="queryParams.ptwNo" />
|
|
|
</el-form-item>
|
|
</el-form-item>
|
|
|
|
|
|
|
|
- <el-form-item label="状态" prop="status">
|
|
|
|
|
- <el-select
|
|
|
|
|
- v-model="queryParams.status"
|
|
|
|
|
- placeholder="请选择状态"
|
|
|
|
|
- clearable
|
|
|
|
|
- style="width: 180px"
|
|
|
|
|
- >
|
|
|
|
|
- <el-option
|
|
|
|
|
- v-for="dict in getStrDictOptions(DICT_TYPE.QHSE_HAZARD_STATUS)"
|
|
|
|
|
- :key="dict.value"
|
|
|
|
|
- :label="dict.label"
|
|
|
|
|
- :value="dict.value"
|
|
|
|
|
- />
|
|
|
|
|
- </el-select>
|
|
|
|
|
|
|
+ <el-form-item label="PTW序号" prop="ptwXh">
|
|
|
|
|
+ <el-input placeholder="请输入PTW序号" v-model="queryParams.ptwXh" />
|
|
|
</el-form-item>
|
|
</el-form-item>
|
|
|
|
|
|
|
|
<el-form-item>
|
|
<el-form-item>
|
|
@@ -52,22 +40,22 @@
|
|
|
height="calc(85vh - 130px)"
|
|
height="calc(85vh - 130px)"
|
|
|
:show-overflow-tooltip="true"
|
|
:show-overflow-tooltip="true"
|
|
|
>
|
|
>
|
|
|
- <el-table-column :label="t('monitor.serial')" width="70" align="center">
|
|
|
|
|
|
|
+ <el-table-column :label="t('monitor.serial')" width="70" align="center" fixed="left">
|
|
|
<template #default="scope">
|
|
<template #default="scope">
|
|
|
{{ scope.$index + 1 }}
|
|
{{ scope.$index + 1 }}
|
|
|
</template>
|
|
</template>
|
|
|
</el-table-column>
|
|
</el-table-column>
|
|
|
|
|
|
|
|
- <el-table-column label="PTW编号" align="center" prop="ptwNo" width="100" />
|
|
|
|
|
- <el-table-column label="PTW序号" align="center" prop="ptwXh" width="100" />
|
|
|
|
|
|
|
+ <el-table-column label="PTW编号" align="center" prop="ptwNo" width="100" fixed="left" />
|
|
|
|
|
+ <el-table-column label="PTW序号" align="center" prop="ptwXh" width="100" fixed="left" />
|
|
|
|
|
|
|
|
<el-table-column label="时间" align="center" show-overflow-tooltip>
|
|
<el-table-column label="时间" align="center" show-overflow-tooltip>
|
|
|
<template #default="{ row }">
|
|
<template #default="{ row }">
|
|
|
- {{ formatDate(row.ptwTime) }}
|
|
|
|
|
|
|
+ {{ formatDate(row.ptwTime).substring(0, 10) }}
|
|
|
</template>
|
|
</template>
|
|
|
</el-table-column>
|
|
</el-table-column>
|
|
|
|
|
|
|
|
- <el-table-column label="作业票类型" align="center">
|
|
|
|
|
|
|
+ <el-table-column label="作业票类型" align="center" width="120">
|
|
|
<template #default="{ row }">
|
|
<template #default="{ row }">
|
|
|
<dict-tag :type="DICT_TYPE.QHSE_PTW_TYPE" :value="row.ptwType" />
|
|
<dict-tag :type="DICT_TYPE.QHSE_PTW_TYPE" :value="row.ptwType" />
|
|
|
</template>
|
|
</template>
|
|
@@ -160,7 +148,7 @@
|
|
|
</el-row>
|
|
</el-row>
|
|
|
|
|
|
|
|
<!-- 新增/编辑证书对话框 -->
|
|
<!-- 新增/编辑证书对话框 -->
|
|
|
- <el-dialog
|
|
|
|
|
|
|
+ <Dialog
|
|
|
:title="dialogTitle"
|
|
:title="dialogTitle"
|
|
|
v-model="dialogVisible"
|
|
v-model="dialogVisible"
|
|
|
width="600px"
|
|
width="600px"
|
|
@@ -174,6 +162,13 @@
|
|
|
label-width="120px"
|
|
label-width="120px"
|
|
|
v-loading="formLoading"
|
|
v-loading="formLoading"
|
|
|
>
|
|
>
|
|
|
|
|
+ <el-form-item label="JSA编号" prop="ptwNo">
|
|
|
|
|
+ <el-input v-model="formData.ptwNo" disabled placeholder="选择JSA编号" style="width: 300px">
|
|
|
|
|
+ <template #append>
|
|
|
|
|
+ <el-link @click="selectJSA" :underline="false">选择</el-link>
|
|
|
|
|
+ </template>
|
|
|
|
|
+ </el-input>
|
|
|
|
|
+ </el-form-item>
|
|
|
<el-form-item label="序号" prop="ptwXh">
|
|
<el-form-item label="序号" prop="ptwXh">
|
|
|
<el-input v-model="formData.ptwXh" placeholder="请输入序号" />
|
|
<el-input v-model="formData.ptwXh" placeholder="请输入序号" />
|
|
|
</el-form-item>
|
|
</el-form-item>
|
|
@@ -187,10 +182,11 @@
|
|
|
/>
|
|
/>
|
|
|
</el-form-item>
|
|
</el-form-item>
|
|
|
|
|
|
|
|
- <el-form-item label="作业分级" prop="ptwGrade">
|
|
|
|
|
- <el-select v-model="formData.ptwGrade" placeholder="请选择作业分级">
|
|
|
|
|
|
|
+ <!-- 作业票类型 -->
|
|
|
|
|
+ <el-form-item label="作业票类型" prop="ptwType">
|
|
|
|
|
+ <el-select v-model="formData.ptwType" placeholder="请选择作业票类型">
|
|
|
<el-option
|
|
<el-option
|
|
|
- v-for="item in getDictOptions(DICT_TYPE.QHSE_PTW_GRADE)"
|
|
|
|
|
|
|
+ v-for="item in getDictOptions(DICT_TYPE.QHSE_PTW_TYPE)"
|
|
|
:key="item.value"
|
|
:key="item.value"
|
|
|
:label="item.label"
|
|
:label="item.label"
|
|
|
:value="item.value"
|
|
:value="item.value"
|
|
@@ -198,11 +194,14 @@
|
|
|
</el-select>
|
|
</el-select>
|
|
|
</el-form-item>
|
|
</el-form-item>
|
|
|
|
|
|
|
|
- <!-- 作业票类型 -->
|
|
|
|
|
- <el-form-item label="作业票类型" prop="ptwType">
|
|
|
|
|
- <el-select v-model="formData.ptwType" placeholder="请选择作业票类型">
|
|
|
|
|
|
|
+ <el-form-item
|
|
|
|
|
+ label="作业分级"
|
|
|
|
|
+ prop="ptwGrade"
|
|
|
|
|
+ v-if="formData.ptwType === '1' || formData.ptwType === '4' || formData.ptwType === '3'"
|
|
|
|
|
+ >
|
|
|
|
|
+ <el-select v-model="formData.ptwGrade" placeholder="请选择作业分级">
|
|
|
<el-option
|
|
<el-option
|
|
|
- v-for="item in getDictOptions(DICT_TYPE.QHSE_PTW_TYPE)"
|
|
|
|
|
|
|
+ v-for="item in getDictOptions(DICT_TYPE.QHSE_PTW_GRADE)"
|
|
|
:key="item.value"
|
|
:key="item.value"
|
|
|
:label="item.label"
|
|
:label="item.label"
|
|
|
:value="item.value"
|
|
:value="item.value"
|
|
@@ -214,16 +213,53 @@
|
|
|
<el-input v-model="formData.workLocation" placeholder="请输入作业地点" />
|
|
<el-input v-model="formData.workLocation" placeholder="请输入作业地点" />
|
|
|
</el-form-item>
|
|
</el-form-item>
|
|
|
|
|
|
|
|
|
|
+ <el-form-item label="作业时间" prop="ptwTime">
|
|
|
|
|
+ <el-date-picker
|
|
|
|
|
+ v-model="formData.ptwTime"
|
|
|
|
|
+ type="date"
|
|
|
|
|
+ value-format="x"
|
|
|
|
|
+ placeholder="请选择作业时间"
|
|
|
|
|
+ style="width: 100%"
|
|
|
|
|
+ />
|
|
|
|
|
+ </el-form-item>
|
|
|
|
|
+
|
|
|
<el-form-item label="作业人员" prop="workPerson">
|
|
<el-form-item label="作业人员" prop="workPerson">
|
|
|
- <el-input v-model="formData.workPerson" placeholder="请输入作业人员" />
|
|
|
|
|
|
|
+ <el-input
|
|
|
|
|
+ v-model="formData.workPerson"
|
|
|
|
|
+ disabled
|
|
|
|
|
+ placeholder="请选择作业人员"
|
|
|
|
|
+ style="width: 300px"
|
|
|
|
|
+ >
|
|
|
|
|
+ <template #append>
|
|
|
|
|
+ <el-link @click="selectworkPerson('workPerson')" :underline="false">选择</el-link>
|
|
|
|
|
+ </template>
|
|
|
|
|
+ </el-input>
|
|
|
</el-form-item>
|
|
</el-form-item>
|
|
|
|
|
|
|
|
<el-form-item label="监护人" prop="guardian">
|
|
<el-form-item label="监护人" prop="guardian">
|
|
|
- <el-input v-model="formData.guardian" placeholder="请输入监护人" />
|
|
|
|
|
|
|
+ <el-input
|
|
|
|
|
+ v-model="formData.guardian"
|
|
|
|
|
+ disabled
|
|
|
|
|
+ placeholder="请选择监护人"
|
|
|
|
|
+ style="width: 300px"
|
|
|
|
|
+ >
|
|
|
|
|
+ <template #append>
|
|
|
|
|
+ <el-link @click="selectworkPerson('guardian')" :underline="false">选择</el-link>
|
|
|
|
|
+ </template>
|
|
|
|
|
+ </el-input>
|
|
|
</el-form-item>
|
|
</el-form-item>
|
|
|
|
|
|
|
|
<el-form-item label="作业负责人" prop="workDuty">
|
|
<el-form-item label="作业负责人" prop="workDuty">
|
|
|
- <el-input v-model="formData.workDuty" placeholder="请输入作业负责人" />
|
|
|
|
|
|
|
+ <el-input
|
|
|
|
|
+ v-model="formData.workDuty"
|
|
|
|
|
+ disabled
|
|
|
|
|
+ placeholder="请选择作业负责人"
|
|
|
|
|
+ style="width: 300px"
|
|
|
|
|
+ >
|
|
|
|
|
+ <template #append>
|
|
|
|
|
+ <el-link @click="selectworkPerson('workDuty')" :underline="false">选择</el-link>
|
|
|
|
|
+ </template>
|
|
|
|
|
+ </el-input>
|
|
|
</el-form-item>
|
|
</el-form-item>
|
|
|
|
|
|
|
|
<el-form-item label="附件" prop="file">
|
|
<el-form-item label="附件" prop="file">
|
|
@@ -251,9 +287,10 @@
|
|
|
<el-button @click="closeDialog">取 消</el-button>
|
|
<el-button @click="closeDialog">取 消</el-button>
|
|
|
<el-button type="primary" @click="submitForm" :loading="submitLoading">确 定</el-button>
|
|
<el-button type="primary" @click="submitForm" :loading="submitLoading">确 定</el-button>
|
|
|
</template>
|
|
</template>
|
|
|
- </el-dialog>
|
|
|
|
|
|
|
+ </Dialog>
|
|
|
|
|
|
|
|
- <el-dialog v-model="dialogFileView" title="附件" width="500">
|
|
|
|
|
|
|
+ <!-- 文件查看对话框 -->
|
|
|
|
|
+ <Dialog v-model="dialogFileView" title="附件" width="500">
|
|
|
<div
|
|
<div
|
|
|
v-for="(file, index) in fileList"
|
|
v-for="(file, index) in fileList"
|
|
|
:key="index"
|
|
:key="index"
|
|
@@ -275,7 +312,203 @@
|
|
|
<el-button type="primary" @click="dialogFileView = false"> 确认 </el-button>
|
|
<el-button type="primary" @click="dialogFileView = false"> 确认 </el-button>
|
|
|
</div>
|
|
</div>
|
|
|
</template>
|
|
</template>
|
|
|
- </el-dialog>
|
|
|
|
|
|
|
+ </Dialog>
|
|
|
|
|
+
|
|
|
|
|
+ <!-- 选择作业人员对话框 -->
|
|
|
|
|
+ <Dialog :title="personDialog" v-model="personDialogVisible" width="60%">
|
|
|
|
|
+ <ContentWrap>
|
|
|
|
|
+ <!-- 搜索工作栏 -->
|
|
|
|
|
+ <el-form class="-mb-15px" :model="queryParams" ref="queryFormRef" :inline="true">
|
|
|
|
|
+ <el-form-item label="所属人员" prop="userName">
|
|
|
|
|
+ <el-input
|
|
|
|
|
+ v-model="queryParams2.userName"
|
|
|
|
|
+ placeholder="请输入所属人员"
|
|
|
|
|
+ clearable
|
|
|
|
|
+ @keyup.enter="handleQuery2"
|
|
|
|
|
+ class="!w-200px"
|
|
|
|
|
+ />
|
|
|
|
|
+ </el-form-item>
|
|
|
|
|
+ <el-form-item>
|
|
|
|
|
+ <el-button @click="handleQuery2"
|
|
|
|
|
+ ><Icon icon="ep:search" class="mr-5px" /> {{ t('devicePerson.search') }}</el-button
|
|
|
|
|
+ >
|
|
|
|
|
+ <el-button @click="resetQuery2"
|
|
|
|
|
+ ><Icon icon="ep:refresh" class="mr-5px" /> {{ t('devicePerson.reset') }}</el-button
|
|
|
|
|
+ >
|
|
|
|
|
+ </el-form-item>
|
|
|
|
|
+ </el-form>
|
|
|
|
|
+ </ContentWrap>
|
|
|
|
|
+ <div class="pb-10">
|
|
|
|
|
+ <el-table
|
|
|
|
|
+ v-loading="loading"
|
|
|
|
|
+ :data="certList"
|
|
|
|
|
+ :stripe="true"
|
|
|
|
|
+ :show-overflow-tooltip="true"
|
|
|
|
|
+ ref="measureTableRef"
|
|
|
|
|
+ >
|
|
|
|
|
+ <el-table-column width="50" align="center">
|
|
|
|
|
+ <template #default="scope">
|
|
|
|
|
+ <el-radio
|
|
|
|
|
+ :model-value="selectedPerson"
|
|
|
|
|
+ :label="scope.row.userName"
|
|
|
|
|
+ @change="handleRadioChange(scope.row)"
|
|
|
|
|
+ >
|
|
|
|
|
+
|
|
|
|
|
+ </el-radio>
|
|
|
|
|
+ </template>
|
|
|
|
|
+ </el-table-column>
|
|
|
|
|
+ <el-table-column :label="t('monitor.serial')" width="70" align="center">
|
|
|
|
|
+ <template #default="scope">
|
|
|
|
|
+ {{ scope.$index + 1 }}
|
|
|
|
|
+ </template>
|
|
|
|
|
+ </el-table-column>
|
|
|
|
|
+ <el-table-column label="证书类型" align="center" prop="type">
|
|
|
|
|
+ <template #default="scope">
|
|
|
|
|
+ {{ getCertificateTypeText(scope.row.type) }}
|
|
|
|
|
+ </template>
|
|
|
|
|
+ </el-table-column>
|
|
|
|
|
+
|
|
|
|
|
+ <el-table-column label="证书类别" align="center" width="150" prop="classify">
|
|
|
|
|
+ <template #default="scope">
|
|
|
|
|
+ <dict-tag
|
|
|
|
|
+ v-if="scope.row.type === 'organization'"
|
|
|
|
|
+ :type="DICT_TYPE.ORG_CERT"
|
|
|
|
|
+ :value="scope.row.classify"
|
|
|
|
|
+ />
|
|
|
|
|
+ <dict-tag v-else :type="DICT_TYPE.PERSON_CERT" :value="scope.row.classify" />
|
|
|
|
|
+ </template>
|
|
|
|
|
+ </el-table-column>
|
|
|
|
|
+ <el-table-column
|
|
|
|
|
+ label="证书名称"
|
|
|
|
|
+ width="150"
|
|
|
|
|
+ align="center"
|
|
|
|
|
+ prop="certName"
|
|
|
|
|
+ show-overflow-tooltip
|
|
|
|
|
+ />
|
|
|
|
|
+
|
|
|
|
|
+ <el-table-column label="所属人" align="center" prop="userName" />
|
|
|
|
|
+ <el-table-column label="所在部门" align="center" prop="deptName" />
|
|
|
|
|
+
|
|
|
|
|
+ <el-table-column label="颁发机构" align="center" prop="certOrg" width="120" />
|
|
|
|
|
+
|
|
|
|
|
+ <el-table-column label="证书标准" align="center" prop="certStandard" width="120" />
|
|
|
|
|
+
|
|
|
|
|
+ <el-table-column label="颁发时间" align="center" prop="certIssue">
|
|
|
|
|
+ <template #default="scope">
|
|
|
|
|
+ {{ formatDateCorrectly(scope.row.certIssue) }}
|
|
|
|
|
+ </template>
|
|
|
|
|
+ </el-table-column>
|
|
|
|
|
+
|
|
|
|
|
+ <el-table-column label="有效期" align="center">
|
|
|
|
|
+ <template #default="scope">
|
|
|
|
|
+ {{ formatDateCorrectly(scope.row.certExpire) }}
|
|
|
|
|
+ </template>
|
|
|
|
|
+ </el-table-column>
|
|
|
|
|
+
|
|
|
|
|
+ <el-table-column label="到期提醒" align="center">
|
|
|
|
|
+ <template #default="scope"> {{ scope.row.noticeBefore }}天前提醒 </template>
|
|
|
|
|
+ </el-table-column>
|
|
|
|
|
+
|
|
|
|
|
+ <el-table-column label="备注" align="center" prop="remark" />
|
|
|
|
|
+ </el-table>
|
|
|
|
|
+ <!-- 分页 -->
|
|
|
|
|
+ <Pagination
|
|
|
|
|
+ :total="total2"
|
|
|
|
|
+ v-model:page="queryParams2.pageNo"
|
|
|
|
|
+ v-model:limit="queryParams2.pageSize"
|
|
|
|
|
+ @pagination="getCertList"
|
|
|
|
|
+ />
|
|
|
|
|
+ </div>
|
|
|
|
|
+
|
|
|
|
|
+ <template #footer>
|
|
|
|
|
+ <el-button @click="confirmSelectMeasure" type="primary">确 定</el-button>
|
|
|
|
|
+ <el-button @click="((personDialogVisible = false), (selectedPerson = undefined))"
|
|
|
|
|
+ >取 消</el-button
|
|
|
|
|
+ >
|
|
|
|
|
+ </template>
|
|
|
|
|
+ </Dialog>
|
|
|
|
|
+
|
|
|
|
|
+ <!-- 选择JSA 对话框 -->
|
|
|
|
|
+ <Dialog title="选择JSA序号" v-model="dialogJSA" width="60%">
|
|
|
|
|
+ <ContentWrap>
|
|
|
|
|
+ <!-- 搜索工作栏 -->
|
|
|
|
|
+ <el-form class="-mb-15px" :model="queryParams3" ref="queryFormRef" :inline="true">
|
|
|
|
|
+ <el-form-item label="JSA序号" prop="jsaXh">
|
|
|
|
|
+ <el-input
|
|
|
|
|
+ v-model="queryParams3.jsaXh"
|
|
|
|
|
+ placeholder="请输入JSA序号"
|
|
|
|
|
+ clearable
|
|
|
|
|
+ @keyup.enter="handleQuery3"
|
|
|
|
|
+ class="!w-200px"
|
|
|
|
|
+ />
|
|
|
|
|
+ </el-form-item>
|
|
|
|
|
+ <el-form-item>
|
|
|
|
|
+ <el-button @click="handleQuery3"
|
|
|
|
|
+ ><Icon icon="ep:search" class="mr-5px" /> {{ t('devicePerson.search') }}</el-button
|
|
|
|
|
+ >
|
|
|
|
|
+ <el-button @click="resetQuery3"
|
|
|
|
|
+ ><Icon icon="ep:refresh" class="mr-5px" /> {{ t('devicePerson.reset') }}</el-button
|
|
|
|
|
+ >
|
|
|
|
|
+ </el-form-item>
|
|
|
|
|
+ </el-form>
|
|
|
|
|
+ </ContentWrap>
|
|
|
|
|
+ <div class="pb-10">
|
|
|
|
|
+ <el-table v-loading="loading" :data="JSAList" :stripe="true" :show-overflow-tooltip="true">
|
|
|
|
|
+ <el-table-column width="50" align="center">
|
|
|
|
|
+ <template #default="scope">
|
|
|
|
|
+ <el-radio
|
|
|
|
|
+ :model-value="selectedJSA"
|
|
|
|
|
+ :label="scope.row.jsaNo"
|
|
|
|
|
+ @change="handleRadioChange2(scope.row)"
|
|
|
|
|
+ >
|
|
|
|
|
+
|
|
|
|
|
+ </el-radio>
|
|
|
|
|
+ </template>
|
|
|
|
|
+ </el-table-column>
|
|
|
|
|
+ <el-table-column label="JSA序号" align="center" prop="jsaXh" />
|
|
|
|
|
+ <el-table-column label="编号" align="center" prop="jsaNo" />
|
|
|
|
|
+
|
|
|
|
|
+ <el-table-column label="日期" align="center" prop="jsaTime">
|
|
|
|
|
+ <template #default="{ row }">
|
|
|
|
|
+ {{ formatDate(row.jsaTime).substring(0, 10) }}
|
|
|
|
|
+ </template>
|
|
|
|
|
+ </el-table-column>
|
|
|
|
|
+ <el-table-column label="工作任务" align="center" prop="jobTask" />
|
|
|
|
|
+
|
|
|
|
|
+ <el-table-column label="工作地点" align="center" prop="jobAddress" />
|
|
|
|
|
+
|
|
|
|
|
+ <el-table-column label="工作负责人" align="center" prop="jobDuty" />
|
|
|
|
|
+
|
|
|
|
|
+ <el-table-column label="附件" align="center" prop="jsaFile">
|
|
|
|
|
+ <template #default="{ row }">
|
|
|
|
|
+ <el-link
|
|
|
|
|
+ v-if="row.jsaFile"
|
|
|
|
|
+ :underline="false"
|
|
|
|
|
+ type="primary"
|
|
|
|
|
+ size="small"
|
|
|
|
|
+ @click="viewFile(row.jsaFile)"
|
|
|
|
|
+ >查看</el-link
|
|
|
|
|
+ >
|
|
|
|
|
+ <span v-else>-</span>
|
|
|
|
|
+ </template>
|
|
|
|
|
+ </el-table-column>
|
|
|
|
|
+
|
|
|
|
|
+ <el-table-column label="备注" align="center" prop="remark" show-overflow-tooltip />
|
|
|
|
|
+ </el-table>
|
|
|
|
|
+ <!-- 分页 -->
|
|
|
|
|
+ <Pagination
|
|
|
|
|
+ :total="total3"
|
|
|
|
|
+ v-model:page="queryParams3.pageNo"
|
|
|
|
|
+ v-model:limit="queryParams3.pageSize"
|
|
|
|
|
+ @pagination="getJSAList"
|
|
|
|
|
+ />
|
|
|
|
|
+ </div>
|
|
|
|
|
+
|
|
|
|
|
+ <template #footer>
|
|
|
|
|
+ <el-button @click="confirmSelectJSA" type="primary">确 定</el-button>
|
|
|
|
|
+ <el-button @click="((dialogJSA = false), (selectedJSA = undefined))">取 消</el-button>
|
|
|
|
|
+ </template>
|
|
|
|
|
+ </Dialog>
|
|
|
|
|
|
|
|
<FilePreviewDialog
|
|
<FilePreviewDialog
|
|
|
v-model="filePreviewVisible"
|
|
v-model="filePreviewVisible"
|
|
@@ -285,18 +518,19 @@
|
|
|
</template>
|
|
</template>
|
|
|
|
|
|
|
|
<script setup lang="ts">
|
|
<script setup lang="ts">
|
|
|
-import { QHSEPtwApi } from '@/api/pms/qhse/index'
|
|
|
|
|
|
|
+import { QHSEPtwApi, IotMeasureCertApi, QHSEJsaApi } from '@/api/pms/qhse/index'
|
|
|
import DeptTree from '@/views/system/user/DeptTree2.vue'
|
|
import DeptTree from '@/views/system/user/DeptTree2.vue'
|
|
|
import { handleTree } from '@/utils/tree'
|
|
import { handleTree } from '@/utils/tree'
|
|
|
import * as DeptApi from '@/api/system/dept'
|
|
import * as DeptApi from '@/api/system/dept'
|
|
|
import { ElMessageBox, ElMessage } from 'element-plus'
|
|
import { ElMessageBox, ElMessage } from 'element-plus'
|
|
|
const deptList2 = ref<Tree[]>([]) // 树形结构
|
|
const deptList2 = ref<Tree[]>([]) // 树形结构
|
|
|
import { formatDate } from '@/utils/formatTime'
|
|
import { formatDate } from '@/utils/formatTime'
|
|
|
-
|
|
|
|
|
|
|
+import { useUserStore } from '@/store/modules/user'
|
|
|
import UploadFile from '@/components/UploadFile/src/UploadFile.vue'
|
|
import UploadFile from '@/components/UploadFile/src/UploadFile.vue'
|
|
|
import FilePreviewDialog from '@/components/FilePreview/src/FilePreviewDialog.vue'
|
|
import FilePreviewDialog from '@/components/FilePreview/src/FilePreviewDialog.vue'
|
|
|
-import { DICT_TYPE, getStrDictOptions, getDictOptions } from '@/utils/dict'
|
|
|
|
|
-
|
|
|
|
|
|
|
+import { DICT_TYPE, getDictOptions } from '@/utils/dict'
|
|
|
|
|
+import { getUserProfile } from '@/api/system/user/profile'
|
|
|
|
|
+const userStore = useUserStore()
|
|
|
defineOptions({ name: 'IotQHSEPTW' })
|
|
defineOptions({ name: 'IotQHSEPTW' })
|
|
|
|
|
|
|
|
const loading = ref(true) // 列表的加载中
|
|
const loading = ref(true) // 列表的加载中
|
|
@@ -312,8 +546,20 @@ const total = ref(0) // 列表的总页数
|
|
|
const queryParams = reactive({
|
|
const queryParams = reactive({
|
|
|
pageNo: 1,
|
|
pageNo: 1,
|
|
|
pageSize: 10,
|
|
pageSize: 10,
|
|
|
- deptId: '',
|
|
|
|
|
- address: ''
|
|
|
|
|
|
|
+ ptwXh: '',
|
|
|
|
|
+ ptwNo: ''
|
|
|
|
|
+})
|
|
|
|
|
+
|
|
|
|
|
+const queryParams2 = reactive({
|
|
|
|
|
+ pageNo: 1,
|
|
|
|
|
+ pageSize: 10,
|
|
|
|
|
+ userName: ''
|
|
|
|
|
+})
|
|
|
|
|
+
|
|
|
|
|
+const queryParams3 = reactive({
|
|
|
|
|
+ pageNo: 1,
|
|
|
|
|
+ pageSize: 10,
|
|
|
|
|
+ jsaXh: ''
|
|
|
})
|
|
})
|
|
|
const queryFormRef = ref(null) // 搜索的表单
|
|
const queryFormRef = ref(null) // 搜索的表单
|
|
|
|
|
|
|
@@ -337,10 +583,13 @@ const formData = ref({
|
|
|
workLocation: '',
|
|
workLocation: '',
|
|
|
workContent: '',
|
|
workContent: '',
|
|
|
ptwXh: '',
|
|
ptwXh: '',
|
|
|
|
|
+ ptwNo: '',
|
|
|
ptwGrade: '',
|
|
ptwGrade: '',
|
|
|
ptwType: '',
|
|
ptwType: '',
|
|
|
file: '',
|
|
file: '',
|
|
|
- remark: ''
|
|
|
|
|
|
|
+ remark: '',
|
|
|
|
|
+ ptwTime: '',
|
|
|
|
|
+ jsaId: ''
|
|
|
})
|
|
})
|
|
|
|
|
|
|
|
// 表单验证规则
|
|
// 表单验证规则
|
|
@@ -354,7 +603,8 @@ const formRules = {
|
|
|
ptwXh: [{ required: true, message: '作业票编号不能为空', trigger: 'blur' }],
|
|
ptwXh: [{ required: true, message: '作业票编号不能为空', trigger: 'blur' }],
|
|
|
ptwGrade: [{ required: true, message: '作业票等级不能为空', trigger: 'blur' }],
|
|
ptwGrade: [{ required: true, message: '作业票等级不能为空', trigger: 'blur' }],
|
|
|
ptwType: [{ required: true, message: '作业票类型不能为空', trigger: 'blur' }],
|
|
ptwType: [{ required: true, message: '作业票类型不能为空', trigger: 'blur' }],
|
|
|
- file: [{ required: true, message: '附件不能为空', trigger: 'blur' }]
|
|
|
|
|
|
|
+ file: [{ required: true, message: '附件不能为空', trigger: 'blur' }],
|
|
|
|
|
+ ptwTime: [{ required: true, message: '作业票时间不能为空', trigger: 'blur' }]
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
/** 查询列表 */
|
|
/** 查询列表 */
|
|
@@ -501,7 +751,8 @@ const resetForm = () => {
|
|
|
ptwGrade: '',
|
|
ptwGrade: '',
|
|
|
ptwType: '',
|
|
ptwType: '',
|
|
|
file: '',
|
|
file: '',
|
|
|
- remark: ''
|
|
|
|
|
|
|
+ remark: '',
|
|
|
|
|
+ jsaId: ''
|
|
|
}
|
|
}
|
|
|
formRef.value?.clearValidate()
|
|
formRef.value?.clearValidate()
|
|
|
}
|
|
}
|
|
@@ -511,7 +762,7 @@ const closeDialog = () => {
|
|
|
dialogVisible.value = false
|
|
dialogVisible.value = false
|
|
|
resetForm()
|
|
resetForm()
|
|
|
}
|
|
}
|
|
|
-
|
|
|
|
|
|
|
+let userInfo = ref()
|
|
|
// 提交表单
|
|
// 提交表单
|
|
|
const submitForm = async () => {
|
|
const submitForm = async () => {
|
|
|
if (!formRef.value) return
|
|
if (!formRef.value) return
|
|
@@ -525,12 +776,16 @@ const submitForm = async () => {
|
|
|
...formData.value
|
|
...formData.value
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
+ // submitData.deptName = userInfo.value.dept.name
|
|
|
|
|
+
|
|
|
if (isEdit.value) {
|
|
if (isEdit.value) {
|
|
|
// 编辑
|
|
// 编辑
|
|
|
await QHSEPtwApi.updatePtw(submitData)
|
|
await QHSEPtwApi.updatePtw(submitData)
|
|
|
ElMessage.success('编辑成功')
|
|
ElMessage.success('编辑成功')
|
|
|
} else {
|
|
} else {
|
|
|
// 新增
|
|
// 新增
|
|
|
|
|
+ submitData.deptId = userStore.getUser.deptId
|
|
|
|
|
+
|
|
|
await QHSEPtwApi.createPtw(submitData)
|
|
await QHSEPtwApi.createPtw(submitData)
|
|
|
ElMessage.success('新增成功')
|
|
ElMessage.success('新增成功')
|
|
|
}
|
|
}
|
|
@@ -594,7 +849,162 @@ const extractFileName = (url: string): string => {
|
|
|
onMounted(async () => {
|
|
onMounted(async () => {
|
|
|
getList()
|
|
getList()
|
|
|
deptList2.value = handleTree(await DeptApi.getSimpleDeptList())
|
|
deptList2.value = handleTree(await DeptApi.getSimpleDeptList())
|
|
|
|
|
+
|
|
|
|
|
+ const users = await getUserProfile()
|
|
|
|
|
+ userInfo.value = users
|
|
|
|
|
+ console.log('xxxxxxxxxxxxxxxxxx', userInfo.value)
|
|
|
})
|
|
})
|
|
|
|
|
+
|
|
|
|
|
+let personDialogVisible = ref(false)
|
|
|
|
|
+let certList = ref([])
|
|
|
|
|
+const selectedPerson = ref<string | undefined>(undefined)
|
|
|
|
|
+
|
|
|
|
|
+const getCertificateTypeText = (type: string) => {
|
|
|
|
|
+ const map: Record<string, string> = {
|
|
|
|
|
+ personal: '个人证书',
|
|
|
|
|
+ organization: '组织证书',
|
|
|
|
|
+ other: '其他'
|
|
|
|
|
+ }
|
|
|
|
|
+ return map[type] || type
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+// 正确格式化日期的函数
|
|
|
|
|
+const formatDateCorrectly = (timestamp) => {
|
|
|
|
|
+ if (!timestamp) return ''
|
|
|
|
|
+
|
|
|
|
|
+ // 如果是秒级时间戳,转换为毫秒级
|
|
|
|
|
+ let time = Number(timestamp)
|
|
|
|
|
+ if (time < 10000000000) {
|
|
|
|
|
+ // 小于这个数通常表示秒级时间戳
|
|
|
|
|
+ time = time * 1000
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ return formatDate(time).substring(0, 10)
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+let total2 = ref(0)
|
|
|
|
|
+const getCertList = async () => {
|
|
|
|
|
+ loading.value = true
|
|
|
|
|
+ try {
|
|
|
|
|
+ const data = await IotMeasureCertApi.getIotMeasureCertPage(queryParams2)
|
|
|
|
|
+ certList.value = data.list
|
|
|
|
|
+ total2.value = data.total
|
|
|
|
|
+ } finally {
|
|
|
|
|
+ loading.value = false
|
|
|
|
|
+ }
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+let personType = ref('')
|
|
|
|
|
+const confirmSelectMeasure = () => {
|
|
|
|
|
+ if (!selectedPerson.value) {
|
|
|
|
|
+ ElMessage.warning('请先选择一个计量器具')
|
|
|
|
|
+ return
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ // 将选中的仪器信息填入表单
|
|
|
|
|
+ if (personType.value == 'workPerson') {
|
|
|
|
|
+ formData.value.workPerson = selectedPerson.value
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ if (personType.value == 'guardian') {
|
|
|
|
|
+ formData.value.guardian = selectedPerson.value
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ if (personType.value == 'workDuty') {
|
|
|
|
|
+ formData.value.workDuty = selectedPerson.value
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ // 关闭选择仪器对话框
|
|
|
|
|
+ personDialogVisible.value = false
|
|
|
|
|
+ selectedPerson.value = undefined
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+let personDialog = ref('')
|
|
|
|
|
+const selectworkPerson = (type) => {
|
|
|
|
|
+ personType.value = type
|
|
|
|
|
+ if (type == 'workPerson') {
|
|
|
|
|
+ personDialog.value = '选择作业人员'
|
|
|
|
|
+ } else if (type == 'guardian') {
|
|
|
|
|
+ personDialog.value = '选择监护人'
|
|
|
|
|
+ } else if (type == 'workDuty') {
|
|
|
|
|
+ personDialog.value = '选择作业负责人'
|
|
|
|
|
+ }
|
|
|
|
|
+ personDialogVisible.value = true
|
|
|
|
|
+ getCertList()
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+const handleRadioChange = (row: any) => {
|
|
|
|
|
+ selectedPerson.value = row.userName
|
|
|
|
|
+ // selectedMeasure.value = row
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+/** 搜索按钮操作 */
|
|
|
|
|
+const handleQuery2 = () => {
|
|
|
|
|
+ queryParams2.pageNo = 1
|
|
|
|
|
+ getCertList()
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+/** 重置按钮操作 */
|
|
|
|
|
+const resetQuery2 = () => {
|
|
|
|
|
+ queryParams2.userName = ''
|
|
|
|
|
+ queryFormRef.value?.resetFields()
|
|
|
|
|
+ handleQuery2()
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+// JSA序号***********************************88
|
|
|
|
|
+let dialogJSA = ref(false)
|
|
|
|
|
+let JSAList = ref([])
|
|
|
|
|
+let total3 = ref(0)
|
|
|
|
|
+const getJSAList = async () => {
|
|
|
|
|
+ loading.value = true
|
|
|
|
|
+ try {
|
|
|
|
|
+ const data = await QHSEJsaApi.getJsaList(queryParams3)
|
|
|
|
|
+ JSAList.value = data.list
|
|
|
|
|
+ total3.value = data.total
|
|
|
|
|
+ } finally {
|
|
|
|
|
+ loading.value = false
|
|
|
|
|
+ }
|
|
|
|
|
+}
|
|
|
|
|
+// 选择JSA序号
|
|
|
|
|
+const selectJSA = () => {
|
|
|
|
|
+ dialogJSA.value = true
|
|
|
|
|
+ getJSAList()
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+/** 搜索按钮操作 */
|
|
|
|
|
+const handleQuery3 = () => {
|
|
|
|
|
+ queryParams3.pageNo = 1
|
|
|
|
|
+ getJSAList()
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+/** 重置按钮操作 */
|
|
|
|
|
+const resetQuery3 = () => {
|
|
|
|
|
+ queryParams3.jsaXh = ''
|
|
|
|
|
+ queryFormRef.value?.resetFields()
|
|
|
|
|
+ handleQuery3()
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+let selectedJSA = ref<string | undefined>(undefined)
|
|
|
|
|
+const confirmSelectJSA = () => {
|
|
|
|
|
+ if (!selectedJSA.value) {
|
|
|
|
|
+ ElMessage.warning('请先选择一个JSA')
|
|
|
|
|
+ return
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ // 将选中的仪器信息填入表单
|
|
|
|
|
+ formData.value.ptwNo = selectedJSA.value
|
|
|
|
|
+ formData.value.jsaId = jsaId.value
|
|
|
|
|
+
|
|
|
|
|
+ // 关闭选择仪器对话框
|
|
|
|
|
+ dialogJSA.value = false
|
|
|
|
|
+ selectedJSA.value = undefined
|
|
|
|
|
+}
|
|
|
|
|
+let jsaId = ref(0)
|
|
|
|
|
+const handleRadioChange2 = (row: any) => {
|
|
|
|
|
+ console.log('row', row)
|
|
|
|
|
+ selectedJSA.value = row.jsaNo
|
|
|
|
|
+ jsaId.value = row.id
|
|
|
|
|
+}
|
|
|
</script>
|
|
</script>
|
|
|
|
|
|
|
|
<style scoped>
|
|
<style scoped>
|