jy-safe-app/pages/apply/subPages/SK/riskSafeIdenEdit.vue
2026-04-16 17:56:47 +08:00

944 lines
32 KiB
Vue
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<template>
<view class="todo-page">
<step-title :stepPage="stepsPage" :stepText="stepsText"></step-title>
<view class="allview">
<view class="card" v-if="stepsPageList === 0">
<u--form labelWidth="auto" :model="dataModel" ref="wForm" class="demo-ruleForm">
<view style="position: relative;">
<view style="position: absolute;left: -10px;color: #3d4b70;top: -3px;">*</view>
</view>
<view style="font-size: 15px; font-weight: bold;color: #3d4b70;margin-bottom: 10px;">基本信息填写</view>
<u-form-item label="年度:" prop="YEAR">
<u--input v-model="dataModel.YEAR" disabled Color="#ffffff" placeholder="请填写年度" border="none" inputAlign="right" fontSize="14px">
</u--input>
</u-form-item>
<u-form-item label="辨识与评估内容:">
</u-form-item>
<u--textarea v-model="dataModel.CONTENTS" disabled placeholder="请输入内容" autoHeight></u--textarea>
<u-form-item label="开始时间">
<!-- @click="handleChangeRecitify('start')" -->
<u--input v-model="dataModel.START_DATE" disabled placeholder="请选择时间" Color="#ffffff" inputAlign="right" fontSize="14px" border="none">
</u--input>
<!-- <u-icon style="margin-left: 4px;" slot="right" name="arrow-down" size="12">
</u-icon> -->
</u-form-item>
<u-form-item label="结束时间">
<!-- @click="handleChangeRecitify('end')" -->
<u--input v-model="dataModel.END_DATE" disabled placeholder="请选择时间" Color="#ffffff" inputAlign="right" fontSize="14px" border="none">
</u--input>
<!-- <u-icon style="margin-left: 4px;" disabled slot="right" name="arrow-down" size="12">
</u-icon> -->
</u-form-item>
<u-form-item label="辨识要求" @click="handleChangeStep('','demand')">
<u--input v-model="(dataModel.Nav_Require||{}).NAME" placeholder="请选择辨识要求" disabled disabledColor="#ffffff" inputAlign="right" fontSize="14px" border="none">
</u--input>
<u-icon style="margin-left: 4px;" slot="right" name="arrow-down" size="12">
</u-icon>
</u-form-item>
<u--textarea v-model="dataModel.RequireName" disabled autoHeight></u--textarea>
<view class="upload-title">附件:</view>
<full-upload v-model="dataModel.Nav_Files" :isShowBtn='true' :listProp='listPropUpload' :listPropVal='listPropValUpload'></full-upload>
</u--form>
</view>
<view style="padding: 10px 16px;" v-if="stepsPageList === 0" class="bottom-button">
<u-button type="primary" :loading="stepLoad" @click="stepAdd" color="#3d4b70">下一步</u-button>
</view>
<view class="card" v-if="stepsPageList === 1">
<u--form labelWidth="auto" :model="dataModel" ref="wForm" class="sub-form">
<view style="position: relative;">
<view style="position: absolute;left: -10px;color: #3d4b70;top: -3px;">*</view>
</view>
<view style="font-size: 15px; font-weight: bold;color: #3d4b70;margin-bottom: 10px;margin-top: 20px;">辨识内容</view>
<view v-for="(item,index) in dataModel.Nav_Details" :key="index" style="border-bottom: #ceccca 1px solid;margin-bottom: 10px;padding-bottom: 10px;">
<u-form-item prop="Nav_Contents">
<view style="display: flex;flex-direction: row;justify-content: space-between;align-items: center;flex: 1;">
<view @click="handleChangeStep(index,'Area')" style="flex: 1;">
{{index+1+'.辨识区域:'+item.Nav_Area.NAME}}
</view>
<view class="action" style="display: flex;flex-direction: row;align-items: center;justify-content: space-around;">
<u-icon @click="handleDelRowBefore(index)" name="trash" color="#ff4d4f" size="21" style="margin-right: 20px;"></u-icon>
<u-icon name="arrow-up" size="12" v-if="item.showPack" @click="handlePack(index)"></u-icon>
<u-icon name="arrow-down" size="12" v-if="!item.showPack" @click="handlePack(index)"></u-icon>
</view>
</view>
</u-form-item>
<view v-if="item.showPack==true">
<u-form-item label="生产单元:" @click="handleChangeUnit(index,'MinType')" border-bottom>
<u--input v-model="(item.Nav_ProductionUnit||{}).NAME" disabled disabledColor="#ffffff" placeholder="请选择生产单元" border="none" inputAlign="right" fontSize="14px">
</u--input>
<u-icon style="margin-left: 4px;" slot="right" name="arrow-down" size="12">
</u-icon>
</u-form-item>
<u-form-item label="风险名称" prop="CHECKSTANDARD" border-bottom>
<u--input v-model="item.RISK_NAME" placeholder="请填写风险名称" disabledColor="#ffffff" inputAlign="right" fontSize="14px" border="none">
</u--input>
</u-form-item>
<!-- <u-form-item label="风险名称" prop="CHECKSTANDARD" @click="handleChangeStep(index,'RiskName')" border-bottom>
<u--input v-model="(item.Nav_RiskName||{}).NAME" placeholder="请填写风险名称" suffixIcon="arrow-down" suffixIconStyle="font-size: 12px" disabledColor="#ffffff" inputAlign="right" fontSize="14px"
border="none">
</u--input>
</u-form-item> -->
<u-form-item label="风险描述" prop="HIDDEN_DESCRIPTION" border-bottom>
<u--input v-model="item.RISK_DESCRIPTION" placeholder="请填写风险描述" disabledColor="#ffffff" inputAlign="right" fontSize="14px" border="none">
</u--input>
</u-form-item>
<u-form-item label="风险类别" prop="HIDDEN_LEVEL" @click="handleChangeStep(index,'Category')" border-bottom>
<u--input v-model="(item.Nav_Type||{}).NAME" placeholder="请选择风险类别" suffixIcon="arrow-down" suffixIconStyle="font-size: 12px" disabledColor="#ffffff" inputAlign="right" fontSize="14px"
border="none">
</u--input>
</u-form-item>
<u-form-item label="管控措施" prop="HIDDEN_PLACE" border-bottom>
<u--input v-model="item.MEASURE" placeholder="请填写管控措施" disabledColor="#ffffff" inputAlign="right" fontSize="14px" border="none">
</u--input>
</u-form-item>
<u-form-item label="应急处置" prop="HIDDEN_PLACE" border-bottom>
</u-form-item>
<u--textarea v-model="item.EMERGENCY" placeholder="请填写应急处置" autoHeight maxlength="-1"></u--textarea>
<u-form-item label="新增标识" prop="HIDDEN_PLACE" border-bottom>
<u--input v-model="item.MARK_NAME" disabled disabledColor="#ffffff" inputAlign="right" fontSize="14px" border="none">
</u--input>
</u-form-item>
<u-form-item label="是否有效" prop="HIDDEN_PLACE" @click="handleChangeUnit(index,'SKEnableStatusEnum')">
<u--input v-model="item.ENABLE_STATUS_NAME" placeholder="请选择是否有效" disabledColor="#ffffff" inputAlign="right" fontSize="14px" border="none">
</u--input>
<u-icon style="margin-left: 4px;" slot="right" name="arrow-down" size="12">
</u-icon>
</u-form-item>
</view>
</view>
<view style="padding: 10px 16px;display: flex;flex-direction: row;">
<u-button type="primary" @click="handleNewCheckContent" color="#3d4b70">新增检查区域</u-button>
<u-button type="primary" @click="handleNewCheckList" color="#3d4b70" style="margin-left: 5px;">导入企业库内容</u-button>
</view>
</u--form>
</view>
<view style="padding: 10px 16px;display: flex;flex-direction: row;" v-if="stepsPageList === 1" class="bottom-button">
<u-button type="primary" @click="stepReduce" color="#3d4b70" :plain="true" style="margin-right: 5px;">上一步</u-button>
<u-button type="primary" @click="submit" color="#3d4b70" style="margin-left: 5px;">提交</u-button>
</view>
<u-picker :show="showPopupUnit" :columns="UnitLists" @confirm="confirmUnit" @cancel="cancelUnit" :defaultIndex="UnitDefaultIndex" keyName="NAME"></u-picker>
<u-modal :show="showDelModalIndex >= 0" @confirm="confirmDel" @cancel="cacelDel" :showCancelButton="true" title="确认删除?"></u-modal>
<u-modal :show="showEnterpriseLibrary" :closeOnClickOverlay="false" :showCancelButton="true" @confirm="confirmEnterpriseSelection" @cancel="cancelEnterpriseSelection" title="选择企业库内容">
<view class="enterprise-list-container">
<view class="enterprise-list" :style="{ maxHeight: '400px', overflowY: 'auto' }">
<view v-for="(item, idx) in enterpriseLibraryList" :key="item.ID" class="enterprise-item" >
<u-checkbox-group><u-checkbox :checked="selectedEnterpriseIndices.includes(idx)" shape="circle" @change="(e) => toggleEnterpriseSelection(idx, e)"></u-checkbox></u-checkbox-group>
<view class="enterprise-info" >
<text class="enterprise-detail">{{idx+1}}.生产单元 : </text>
<text class="enterprise-name">{{ item.Nav_ProductionUnit.NAME || '' }}</text>
<text class="enterprise-detail">辨识区域 : </text>
<text class="enterprise-name">{{ item.Nav_Area.NAME || '' }}</text>
<text class="enterprise-detail">风险名称 : </text>
<text class="enterprise-name">{{ item.RISK_NAME || '' }}</text>
<text class="enterprise-detail">风险描述 : </text>
<text class="enterprise-name">{{ item.RISK_DESCRIPTION || '' }}</text>
<text class="enterprise-detail">风险类别 : </text>
<text class="enterprise-name">{{ item.Nav_Type.NAME || '' }}</text>
<text class="enterprise-detail">管控措施 : </text>
<text class="enterprise-name">{{ item.MEASURE || '' }}</text>
<text class="enterprise-detail">应急处置 : </text>
<text class="enterprise-name">{{ item.EMERGENCY || '' }}</text>
</view>
</view>
<view v-if="enterpriseLibraryList.length === 0 && !enterpriseLibraryLoading" class="empty-tip">暂无企业库数据</view>
</view>
<!-- 底部加载更多按钮 -->
<view class="load-more-footer" v-if="enterpriseLibraryList.length > 0">
<u-button v-if="enterpriseLibraryHasMore" type="primary" :plain="true" :loading="enterpriseLibraryLoading" @click="loadMoreEnterpriseData" class="load-more-btn" size="small">
{{ enterpriseLibraryLoading ? '加载中...' : '加载更多' }}
</u-button>
<view v-else class="no-more-tip">—— 没有更多数据了 ——</view>
</view>
</view>
</u-modal>
<u-datetime-picker :show="showPopupRecitifyDate" v-model="dateRecitifyTime" mode="date" @confirm="confirmRecitifyDate" @cancel="cancelRecitifyDate"></u-datetime-picker>
<query-selector :show="showPopupStep" :total="curTotalStep" :lists="stepLists" :defaultValue="currentOperateStep.NAME" @close="handleClosePopupStep" @search="handleSearchStep" @select="handleSelectedStep" />
</view>
</view>
</template>
<script>
import {
extendFilterGroup,
extendGroupRule,
extendInclude,
extendOrder,
extendRule,
extendIgnoreDataRule,
guid,
initFilter,
initFilterGroup,
handleOriginalArray,
transformData
} from '../../../../utils/common'
import {
FMProductionUnit,
SKEffective,
CheckPeriods,
CheckLevels,
MineTypeIndex,
MineTypeName
} from '../../../../utils/enums.js'
import {
EvaIdentifyPlanGet,
SKRiskIdentifyFullUpdate,
getUserLists,
GetSKRequestInfo,
GetRiskAreaInfo,
GetRiskTypeInfo,
GetRiskNameInfo,
} from '../../../../services/apply/subPages/SK/SKServices.js'
import {
getEnum,
GetEnumAnyOrder
} from '../../../../services/common';
import {
getRequest,
} from '../../../../services/apply/FOServices/FOServices';
import stepTitle from '@/components/custom/step-title.vue'
import swipeActionItem from '../../../../uni_modules/uview-ui/libs/config/props/swipeActionItem';
export default {
components: {
stepTitle,
},
data() {
return {
showDelModalIndex: undefined,
showPopupDate: false,
showPopupRecitifyDate: false,
listPropUpload: ['NOTIFY_ID'],
listPropValUpload: [],
ORG_ID: uni.getStorageSync('orgId'),
currentOperateStep: {},
showPopupStep: false,
stepLists: [],
curTotalStep: 0,
showPopupUnit: false,
stepLoad: true,
UnitLists: [],
UnitDefaultIndex: [0],
// 新增企业库相关数据
showEnterpriseLibrary: false,
enterpriseLibraryList: [],
selectedEnterpriseIndices: [],
// 新增分页相关变量
enterpriseLibraryPageIndex: 1,
enterpriseLibraryHasMore: true,
enterpriseLibraryLoading: false,
enterpriseLibraryTotal: 0,
dataModel: {
YEAR: '',
START_DATE: '',
END_DATE: '',
CONTENTS: '',
Nav_Require: {
NAME: ''
},
RequireName: '',
IDENTIFY_EVALUATION_PLAN_ID: null,
Nav_Files: [],
Nav_Details: [{
showPack: false,
MineType: '',
Nav_Area: {
NAME: ''
},
RISK_NAME: '',
Nav_RiskName: {
NAME: ''
},
RISK_DESCRIPTION: '',
Nav_Type: {
NAME: ''
},
MEASURE: '',
EMERGENCY: '',
ENABLE_STATUS: '',
}]
},
model: {
ORG_ID: '',
YEAR: '',
START_DATE: '',
END_DATE: '',
CONTENTS: '',
Nav_Require: {
NAME: ''
},
RequireName: '',
IDENTIFY_EVALUATION_PLAN_ID: null,
Nav_Files: [],
Nav_Details: [{
MineType: '',
Nav_Area: {
NAME: ''
},
RISK_NAME: '',
Nav_RiskName: {
NAME: ''
},
RISK_DESCRIPTION: '',
Nav_Type: {
NAME: ''
},
MEASURE: '',
EMERGENCY: '',
ENABLE_STATUS: '',
}]
},
dateRecitifyTime: uni.$u.timeFormat(new Date(), 'yyyy-mm-dd'),
stepsText: ['发起', '审批', '归档'],
stepsPage: 0,
stepsPageList: 0,
TaskID: '',
nowName: '',
nowIndex: 0,
enumsData: {}, // 存储所有枚举数据(键:枚举名称,值:处理后的枚举列表)
enumsText: {} // 存储枚举文本列表(用于下拉选择等场景)
}
},
onLoad(option) {
this.TaskID = option.taskID ? option.taskID : '';
this.ID = option.ID ? option.ID : '';
this.fetchEnums(['SKMarkEnum', 'SKEnableStatusEnum']);
},
methods: {
fetchEnums(enumNames) {
var dataParm = {
'name': enumNames.join('|')
}
GetEnumAnyOrder(dataParm).then(res => {
let newd = transformData(res, enumNames)
this.enumsData = newd[0];
// 生成文本列表(如需要)
this.enumsText = newd[1]
this.loadData();
})
},
loadData() {
// const json = {}
const orgId = uni.getStorageSync('orgId')
const json = initFilter(orgId, "", "")
extendRule(json, 'ID', 1, this.ID);
extendInclude(json, 'Nav_Require');
extendInclude(json, 'Nav_Files.Nav_ImgFile');
extendInclude(json, 'Nav_Details');
extendInclude(json, 'Nav_Details.Nav_Area');
extendInclude(json, 'Nav_Details.Nav_RiskName');
extendInclude(json, 'Nav_Details.Nav_Type');
extendInclude(json, 'Nav_Details.Nav_DetailMeasures');
extendIgnoreDataRule(json)
// extendRule(json, 'TASK_ID', 1, this.TaskID);
EvaIdentifyPlanGet(json).then(res => {
this.dataModel = res;
this.stepsPage = res.STATUS == 0 ? 0 : res.STATUS == 20 ? 1 : 2
this.dataModel.START_DATE = uni.$u.timeFormat(res.START_DATE, 'yyyy-mm-dd')
this.dataModel.END_DATE = uni.$u.timeFormat(res.END_DATE, 'yyyy-mm-dd')
this.dataModel.Nav_Require = res.Nav_Require ? res.Nav_Require : {
NAME: ''
},
this.dataModel.RequireName = res.Nav_Require ? res.Nav_Require.NAME : {
NAME: ''
},
this.dataModel.Nav_Details.map(item => {
item['showPack'] = false
item.ENABLE_STATUS_NAME = item.ENABLE_STATUS !== undefined ? this.enumsData['SKEnableStatusEnum'].find(item1 => item1.code === item.ENABLE_STATUS).name : '';
item.MARK_NAME = item.MARK !== undefined ? this.enumsData['SKMarkEnum'].find(item1 => item1.code === item.MARK).name : '';
})
this.stepLoad = false
})
},
handlePack(index) {
this.dataModel.Nav_Details[index].showPack = this.dataModel.Nav_Details[index].showPack == false ? true : false
this.dataModel.Nav_Details = [...this.dataModel.Nav_Details]
},
cancelUnit() {
this.showPopupUnit = false
},
handleChangeUnit(index, name) {
this.nowIndex = [index, name]
if (name == 'MinType') {
const json = initFilter(this.ORG_ID)
getRequest(json, "/FM/UserProductionUnitSet/OrderPaged").then(res => {
this.UnitLists = [res]
})
} else {
this.UnitLists = [this.enumsData[name]]
}
this.showPopupUnit = true
},
confirmUnit(e) {
if (this.nowIndex[1] == 'MinType') {
this.dataModel.Nav_Details[this.nowIndex[0]].Nav_ProductionUnit = e.value[0]
this.dataModel.Nav_Details[this.nowIndex[0]].PRODUCTION_UNIT_ID = e.value[0].ID
} else {
this.dataModel.Nav_Details[this.nowIndex[0]].ENABLE_STATUS = e.value[0].code
this.dataModel.Nav_Details[this.nowIndex[0]].ENABLE_STATUS_NAME = e.value[0].name
}
this.showPopupUnit = false
},
stepAdd() {
this.stepsPageList = this.stepsPageList + 1
},
stepReduce() {
this.stepsPageList = this.stepsPageList - 1
},
handleNewCheckContent() {
this.dataModel.Nav_Details.push({
showPack: false,
Nav_ProductionUnit: {
NAME: ''
},
PRODUCTION_UNIT_ID: '',
Nav_Area: {
NAME: ''
},
ORG_ID: this.ORG_ID,
RISK_NAME: '',
Nav_RiskName: {
NAME: ''
},
RISK_DESCRIPTION: '',
Nav_Type: {
NAME: ''
},
MEASURE: '',
EMERGENCY: '',
ENABLE_STATUS: this.enumsData['SKEnableStatusEnum'][0].code,
ENABLE_STATUS_NAME: this.enumsData['SKEnableStatusEnum'][0].name,
MARK: this.enumsData['SKMarkEnum'].find(item1 => item1.name === '新增').code,
MARK_NAME: this.enumsData['SKMarkEnum'].find(item1 => item1.name === '新增').name,
})
this.dataModel.Nav_Details = [...this.dataModel.Nav_Details]
},
handleNewCheckList() {
// 重置分页状态
this.enterpriseLibraryPageIndex = 1
this.enterpriseLibraryHasMore = true
this.enterpriseLibraryList = []
this.selectedEnterpriseIndices = []
this.loadEnterpriseLibraryData()
},
loadEnterpriseLibraryData(isLoadMore = false) {
if (this.enterpriseLibraryLoading) return
if (!isLoadMore) {
this.enterpriseLibraryPageIndex = 1
this.enterpriseLibraryHasMore = true
this.enterpriseLibraryList = []
this.selectedEnterpriseIndices = []
}
if (!this.enterpriseLibraryHasMore && isLoadMore) {
uni.showToast({
title: '没有更多数据了',
icon: 'none'
})
return
}
this.enterpriseLibraryLoading = true
const json = initFilter(this.ORG_ID)
extendInclude(json, 'Nav_ProductionUnit');
extendInclude(json, 'Nav_Area');
extendInclude(json, 'Nav_Type');
json.SelectField = [
"CODE",
"Nav_ProductionUnit.NAME",
"Nav_Area.NAME",
"RISK_NAME",
"RISK_DESCRIPTION",
"Nav_Type.NAME",
"CHECKLEVEL",
"CHECKDEPT",
"CHECKPOST",
"EVALUATE_LEVEL",
"MEASURE",
"EMERGENCY",
"ID",
"ORG_ID",
"PRODUCTION_UNIT_ID",
"AREA_ID",
"TYPE_ID",
"RISK_NAME_ID"
]
json.Limit = 2
json.PageIndex = this.enterpriseLibraryPageIndex
json.Start = (this.enterpriseLibraryPageIndex - 1) * json.Limit
getRequest(json, "/SK/SKEnterpriseLibrary/SKOrderPaged").then(res => {
this.enterpriseLibraryLoading = false
if (res && res.length > 0) {
if (isLoadMore) {
this.enterpriseLibraryList = [...this.enterpriseLibraryList, ...res]
} else {
this.enterpriseLibraryList = res
}
// 判断是否还有更多数据
this.enterpriseLibraryHasMore = res.length >= json.Limit
this.enterpriseLibraryPageIndex++
this.showEnterpriseLibrary = true
} else {
if (isLoadMore) {
this.enterpriseLibraryHasMore = false
uni.showToast({
title: '没有更多数据了',
icon: 'none'
})
} else {
if (this.enterpriseLibraryList.length === 0) {
this.showEnterpriseLibrary = false
uni.showToast({
title: '暂无企业库数据',
icon: 'none'
})
}
}
}
}).catch(err => {
this.enterpriseLibraryLoading = false
uni.showToast({
title: '加载失败',
icon: 'none'
})
})
},
// 加载更多方法
loadMoreEnterpriseData() {
if (this.enterpriseLibraryHasMore && !this.enterpriseLibraryLoading) {
this.loadEnterpriseLibraryData(true)
} else if (!this.enterpriseLibraryHasMore && this.enterpriseLibraryList.length > 0) {
uni.showToast({
title: '没有更多数据了',
icon: 'none'
})
}
},
handleEnterpriseListScroll(e) {
if (this.enterpriseLibraryHasMore && !this.enterpriseLibraryLoading) {
this.loadEnterpriseLibraryData(true)
} else if (!this.enterpriseLibraryHasMore && this.enterpriseLibraryList.length > 0) {
uni.showToast({
title: '没有更多数据了',
icon: 'none'
})
}
},
// 切换企业库条目选择状态
toggleEnterpriseSelection(index) {
const idx = this.selectedEnterpriseIndices.indexOf(index)
if (idx === -1) {
this.selectedEnterpriseIndices.push(index)
} else {
this.selectedEnterpriseIndices.splice(idx, 1)
}
},
// 确认选择企业库条目
confirmEnterpriseSelection() {
if (this.selectedEnterpriseIndices.length === 0) {
uni.showToast({
title: '请至少选择一项',
icon: 'none'
})
return
}
// 原有逻辑保持不变
const newDetails = []
const duplicateItems = []
this.selectedEnterpriseIndices.forEach(idx => {
const enterpriseItem = this.enterpriseLibraryList[idx]
// 检查是否与现有数据重复
const isDuplicate = this.dataModel.Nav_Details.some(existingItem =>
existingItem.AREA_ID === (enterpriseItem.AREA_ID || '') &&
existingItem.PRODUCTION_UNIT_ID === (enterpriseItem.PRODUCTION_UNIT_ID || '') &&
existingItem.RISK_NAME === (enterpriseItem.RISK_NAME || '')
)
if (isDuplicate) {
duplicateItems.push({
生产单元: enterpriseItem.Nav_ProductionUnit?.NAME || '',
辨识区域: enterpriseItem.Nav_Area?.NAME || '',
风险名称: enterpriseItem.RISK_NAME || ''
})
return
}
const convertedItem = {
showPack: false,
PRODUCTION_UNIT_ID: enterpriseItem.PRODUCTION_UNIT_ID || '',
Nav_ProductionUnit: enterpriseItem.Nav_ProductionUnit || {
NAME: ''
},
AREA_ID: enterpriseItem.AREA_ID || '',
Nav_Area: enterpriseItem.Nav_Area || {
NAME: ''
},
RISK_NAME: enterpriseItem.RISK_NAME || '',
RISK_NAME_ID: enterpriseItem.RISK_NAME_ID || '',
Nav_RiskName: enterpriseItem.Nav_RiskName || {
NAME: ''
},
RISK_DESCRIPTION: enterpriseItem.RISK_DESCRIPTION || '',
TYPE_ID: enterpriseItem.TYPE_ID || '',
Nav_Type: enterpriseItem.Nav_Type || {
NAME: ''
},
MEASURE: enterpriseItem.MEASURE || '',
EMERGENCY: enterpriseItem.EMERGENCY || '',
ENABLE_STATUS: this.enumsData['SKEnableStatusEnum'][0].code,
ENABLE_STATUS_NAME: this.enumsData['SKEnableStatusEnum'][0].name,
MARK: this.enumsData['SKMarkEnum'].find(item1 => item1.name === '新增').code,
MARK_NAME: this.enumsData['SKMarkEnum'].find(item1 => item1.name === '新增').name,
ORG_ID: this.ORG_ID
}
newDetails.push(convertedItem)
})
// 处理重复项提示(保持原有逻辑)
if (duplicateItems.length > 0) {
const duplicateCount = duplicateItems.length
let message = ''
if (duplicateCount === 1) {
const dup = duplicateItems[0]
message = `以下数据已存在,无法重复导入:\n生产单元${dup.生产单元}\n辨识区域${dup.辨识区域}\n风险名称${dup.风险名称}`
} else {
message = `${duplicateCount} 条数据已存在,无法重复导入:\n`
duplicateItems.slice(0, 3).forEach((dup, i) => {
message += `${i+1}. ${dup.生产单元} / ${dup.辨识区域} / ${dup.风险名称}\n`
})
if (duplicateCount > 3) {
message += `...等共 ${duplicateCount}`
}
}
uni.showModal({
title: '重复数据提示',
content: message,
showCancel: false,
confirmText: '知道了'
})
}
if (newDetails.length > 0) {
this.dataModel.Nav_Details.push(...newDetails)
uni.showToast({
title: `成功导入 ${newDetails.length} 条数据${duplicateItems.length > 0 ? `,跳过 ${duplicateItems.length} 条重复数据` : ''}`,
icon: 'success',
duration: 2000
})
} else if (duplicateItems.length > 0) {
uni.showToast({
title: `所选数据均重复,未导入任何内容`,
icon: 'none',
duration: 2000
})
}
this.showEnterpriseLibrary = false
this.selectedEnterpriseIndices = []
},
// 取消选择
cancelEnterpriseSelection() {
this.showEnterpriseLibrary = false
this.selectedEnterpriseIndices = []
this.enterpriseLibraryList = []
this.enterpriseLibraryPageIndex = 1
this.enterpriseLibraryHasMore = true
this.enterpriseLibraryLoading = false
},
handleDelRowBefore(index) {
this.showDelModalIndex = index
this.nowIndex = index
},
confirmDel() {
this.dataModel.Nav_Details.splice(this.nowIndex, 1)
this.showDelModalIndex = undefined
},
cacelDel() {
this.showDelModalIndex = undefined
},
cancelRecitifyDate() {
this.showPopupRecitifyDate = false
},
handleChangeRecitify(name) {
this.nowName = name
this.showPopupRecitifyDate = true
},
confirmRecitifyDate(e) {
if (this.nowName == 'start') {
this.dataModel.START_DATE = uni.$u.timeFormat(e.value,
'yyyy-mm-dd')
} else {
this.dataModel.END_DATE = uni.$u.timeFormat(e.value,
'yyyy-mm-dd')
}
this.dateRecitifyTime = uni.$u.timeFormat(e.value,
'yyyy-mm-dd')
this.showPopupRecitifyDate = false
},
handleChangeStep(index, name) {
this.currentOperateStep = {}
this.showPopupStep = true
this.nowIndex = [index, name]
this.handleSearchStep('init')
},
handleClosePopupStep() {
this.showPopupStep = false
// this.showPopupCertificate = false
},
handleSearchStep(val, pageIndex) {
let requestInfo = this.nowIndex[1] == 'demand' ? GetSKRequestInfo : this.nowIndex[1] == 'Area' ? GetRiskAreaInfo : this.nowIndex[1] == 'RiskName' ? GetRiskNameInfo : GetRiskTypeInfo
const orgId = uni.getStorageSync('orgId')
const json = initFilter(orgId, "", "", 0, pageIndex ?? 1)
json.Limit = 20
if (pageIndex) {
json.Start = (pageIndex - 1) * json.Limit;
}
if (val !== 'init') {
const tempGroup = initFilterGroup(false);
extendGroupRule(tempGroup, 'NAME', 9, val)
extendFilterGroup(json, tempGroup);
}
requestInfo(json).then(res => {
// if (res.IsSuccessful) {
this.stepLists = (res.Data || res).map(i => {
return {
...i,
id: i.ID,
name: i.NAME,
}
})
this.curTotalStep = res.TotalCount
// }
})
},
handleSelectedStep(val) {
if (this.nowIndex[1] == 'demand') {
this.dataModel.Nav_Require.NAME = val.NAME
this.dataModel.REQUIRE_ID = val.ID
this.dataModel.RequireName = val.NAME
} else if (this.nowIndex[1] == 'Area') {
this.dataModel.Nav_Details[this.nowIndex[0]].Nav_Area.NAME = val.NAME
this.dataModel.Nav_Details[this.nowIndex[0]].AREA_ID = val.ID
} else if (this.nowIndex[1] == 'RiskName') {
this.dataModel.Nav_Details[this.nowIndex[0]].Nav_RiskName.NAME = val.NAME
this.dataModel.Nav_Details[this.nowIndex[0]].RISK_NAME_ID = val.ID
} else {
this.dataModel.Nav_Details[this.nowIndex[0]].Nav_Type.NAME = val.NAME
this.dataModel.Nav_Details[this.nowIndex[0]].TYPE_ID = val.ID
}
this.showPopupStep = false
},
submit() {
let i = 1
for (let item of this.dataModel.Nav_Details) {
if (!item.PRODUCTION_UNIT_ID) {
uni.showToast({
title: '顺序' + i + '生产单元不能为空',
icon: 'none'
})
return
}
if (!item.Nav_Area.NAME) {
uni.showToast({
title: '顺序' + i + '辨识区域不能为空',
icon: 'none'
})
return
}
if (!item.RISK_NAME) {
uni.showToast({
title: '顺序' + i + '风险名称不能为空',
icon: 'none'
})
return
}
// if (!item.Nav_RiskName.NAME) {
// uni.showToast({
// title: '风险名称不能为空',
// icon: 'none'
// })
// return
// }
if (!item.RISK_DESCRIPTION) {
uni.showToast({
title: '顺序' + i + '风险描述不能为空',
icon: 'none'
})
return
}
if (!item.Nav_Type.NAME) {
uni.showToast({
title: '顺序' + i + '风险类别不能为空',
icon: 'none'
})
return
}
i++
}
// this.model = this.dataModel
this.model.ORG_ID = this.ORG_ID
let arr = []
this.dataModel.Nav_Details.map(item => {
arr.push({
PRODUCTION_UNIT_ID: item.PRODUCTION_UNIT_ID,
AREA_ID: item.AREA_ID,
RISK_NAME: item.RISK_NAME,
RISK_NAME_ID: item.RISK_NAME_ID,
RISK_DESCRIPTION: item.RISK_DESCRIPTION,
TYPE_ID: item.TYPE_ID,
MEASURE: item.MEASURE,
EMERGENCY: item.EMERGENCY,
ENABLE_STATUS: item.ENABLE_STATUS,
MARK: item.MARK,
})
})
this.model = {
ORG_ID: this.ORG_ID,
YEAR: this.dataModel.YEAR,
START_DATE: this.dataModel.START_DATE,
END_DATE: this.dataModel.END_DATE,
CONTENTS: this.dataModel.CONTENTS,
REQUIRE_ID: this.dataModel.REQUIRE_ID,
RequireName: this.dataModel.RequireName,
IDENTIFY_EVALUATION_PLAN_ID: this.dataModel.IDENTIFY_EVALUATION_PLAN_ID,
Nav_Files: this.dataModel.Nav_Files,
Nav_Details: arr
}
this.model.ID = this.ID
this.model.TaskID = this.TaskID
this.model.PUBLISH = "SaveAndNotify";
SKRiskIdentifyFullUpdate(this.model).then(res => {
if (res) {
uni.$showMsgFunc('操作成功!', () => {
uni.navigateBack()
}, 'success', 1000)
}
})
}
}
}
</script>
<style scoped>
@import url("../../../../style/css/newTemplate.css");
/* 新增企业库弹窗样式 */
.enterprise-list {
max-height: 500px;
overflow-y: auto;
padding: 10px 0;
}
.enterprise-item {
display: flex;
align-items: flex-start;
padding: 12px 8px;
border-bottom: 1px solid #f0f0f0;
gap: 12px;
}
.enterprise-info {
flex: 1;
display: flex;
flex-direction: column;
gap: 4px;
}
.enterprise-name {
font-size: 14px;
font-weight: 500;
color: #333;
}
.enterprise-detail {
font-size: 14px;
color: #999;
}
.empty-tip {
text-align: center;
padding: 40px 0;
color: #999;
font-size: 14px;
}
.enterprise-list-container {
display: flex;
flex-direction: column;
}
.load-more-footer {
padding: 15px 0 10px;
display: flex;
justify-content: center;
border-top: 1px solid #f0f0f0;
margin-top: 10px;
}
.load-more-btn {
width: 80%;
}
.no-more-tip {
text-align: center;
padding: 10px 0;
color: #999;
font-size: 12px;
}
.loading-tip {
text-align: center;
padding: 20px 0;
color: #999;
font-size: 12px;
}
</style>