| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260 |
- const alarmLevelLabels = {
- 1: '一级报警',
- 2: '二级报警',
- 3: '三级报警',
- 4: '四级报警'
- }
- // 工单状态:0-待派单 1-待接单 2-已接单 3-处理中 4-待验收 5-已结案 6-延期中 7-已取消
- const workOrderStatusLabels = {
- 0: '待派单',
- 1: '待接单',
- 2: '已接单',
- 3: '处理中',
- 4: '待验收',
- 5: '已结案',
- 6: '延期中',
- 7: '已取消'
- }
- // 终态:5-已结案、7-已取消
- const terminalWorkOrderStatuses = new Set([5, 7])
- const deviceCurrentStatusLabels = {
- 1: '在用',
- 2: '闲置',
- 3: '维修',
- 4: '报废',
- 5: '待入库'
- }
- const onlineStatusLabels = {
- 1: '在线',
- 0: '离线'
- }
- const deviceImageBaseUrl = import.meta.env?.VITE_APP_BASE_API || ''
- export function normalizeDeviceImageUrl(value) {
- const url = String(value ?? '').trim()
- if (!url || /^(https?:|blob:|data:)/i.test(url)) return url
- if (deviceImageBaseUrl && (url === deviceImageBaseUrl || url.startsWith(`${deviceImageBaseUrl}/`))) return url
- return url.startsWith('/') ? `${deviceImageBaseUrl}${url}` : `${deviceImageBaseUrl}/${url}`
- }
- export function normalizeDeviceRow(row = {}) {
- const alarmStatus = Number(row.alarmStatus)
- const currentStatus = Number(row.currentStatus)
- const onlineStatus = Number(row.onlineStatus)
- const alarmLevel = Number(row.alertLevel ?? row.alarmLevel ?? 0)
- const relatedOrderNo = row.relatedWorkOrderNo
- ?? row.latestOrderNo
- ?? row.orderNo
- ?? '-'
- const rawOrderStatus = row.relatedWorkOrderStatus
- ?? row.latestMaintainStatus
- ?? row.orderStatus
- ?? row.statusText
- const currentStatusText = deviceCurrentStatusLabels[currentStatus]
- ?? (currentStatus ? `状态${currentStatus}` : '未知')
- const onlineStatusText = onlineStatusLabels[onlineStatus]
- ?? (Number.isFinite(onlineStatus) && onlineStatus !== 0 ? '在线' : '离线')
- const alarmStatusText = alarmStatus === 1 ? '报警' : '正常'
- const workOrderStatus = normalizeWorkOrderStatus(rawOrderStatus)
- return {
- ...row,
- equipmentImageUrl: normalizeDeviceImageUrl(row.equipmentImage),
- deviceStatusText: currentStatusText,
- currentStatusText,
- onlineStatusText,
- alarmStatusText,
- abnormalReasonText: row.abnormalReason
- || (alarmStatus === 1 ? '设备报警' : currentStatus === 3 ? '设备维修中' : '-'),
- alarmLevelText: alarmLevelLabels[alarmLevel] ?? (alarmLevel ? `${alarmLevel}级报警` : '未分级'),
- relatedOrderNo,
- relatedWorkOrderPerson: row.relatedWorkOrderPerson ?? '-',
- workOrderStatusCode: workOrderStatus.code,
- workOrderTerminal: workOrderStatus.terminal,
- workOrderStatusText: workOrderStatus.text
- }
- }
- export function normalizeWorkOrderStatus(value) {
- if (value === null || value === undefined || value === '') {
- return { code: null, text: '暂无工单', terminal: false }
- }
- const numeric = typeof value === 'number' || /^\s*\d+\s*$/.test(String(value))
- if (numeric) {
- const code = Number(value)
- return {
- code: Number.isFinite(code) ? code : null,
- text: workOrderStatusLabels[code] ?? '未知',
- terminal: terminalWorkOrderStatuses.has(code)
- }
- }
- const text = String(value)
- const code = Object.entries(workOrderStatusLabels).find(([, label]) => label === text)?.[0]
- return { code: code ? Number(code) : null, text: text || '暂无工单', terminal: code ? terminalWorkOrderStatuses.has(Number(code)) : false }
- }
- /** 关联工单是否仍未结束;已结案(5)与已取消(7)不再代表处置进行中 */
- export function isActiveWorkOrderStatus(status) {
- const normalized = normalizeWorkOrderStatus(status)
- return normalized.code !== null && !normalized.terminal
- }
- export function canDispatchDevice(row = {}) {
- const orderNo = row.relatedOrderNo ?? row.latestOrderNo ?? row.orderNo
- if (!orderNo || orderNo === '-') return true
- return normalizeWorkOrderStatus(row.relatedWorkOrderStatus ?? row.latestMaintainStatus ?? row.orderStatus).terminal
- }
- export function preserveDevicePageOnError(page) {
- return { page, error: '设备数据加载失败,请点击重试' }
- }
- export function normalizeDeviceGisPoints(response) {
- const data = response?.data ?? response
- const points = Array.isArray(data) ? data : (data?.features || data?.records || data?.rows || data?.points || [])
- return points.map(point => ({
- ...point,
- _longitude: Number(point.longitude ?? point.lng),
- _latitude: Number(point.latitude ?? point.lat)
- })).filter(point => Number.isFinite(point._longitude) && Number.isFinite(point._latitude))
- }
- export function normalizeAssigneeUser(user = {}) {
- const status = String(user.status ?? '0')
- const delFlag = String(user.delFlag ?? '0')
- const deptName = user.dept?.deptName ?? user.deptName ?? '-'
- const phone = user.phonenumber ?? user.phoneNumber ?? user.phone
- return {
- userId: user.userId ?? user.id,
- userName: user.userName ?? '',
- nickName: user.nickName ?? '',
- deptName,
- phone: phone || '未登记手机号',
- statusText: status === '0' && delFlag === '0' ? '正常' : '停用',
- eligible: status === '0' && delFlag === '0'
- }
- }
- export function buildAssigneeQuery({ deptId, keyword = '', pageNum = 1, pageSize = 10 } = {}) {
- const normalizedKeyword = String(keyword ?? '').trim()
- const searchField = normalizedKeyword
- ? (/^\+?[\d\s-]+$/.test(normalizedKeyword)
- ? 'phonenumber'
- : /[\u3400-\u9fff]/u.test(normalizedKeyword) ? 'nickName' : 'userName')
- : null
- return {
- pageNum: Number(pageNum) > 0 ? Number(pageNum) : 1,
- pageSize: Number(pageSize) > 0 ? Number(pageSize) : 10,
- ...(deptId == null || deptId === '' ? {} : { deptId }),
- status: '0',
- ...(searchField ? { [searchField]: normalizedKeyword } : {})
- }
- }
- export function selectSingleAssignee(selection = []) {
- return Array.isArray(selection) && selection.length ? selection[selection.length - 1] : null
- }
- export function normalizeDispatchOrderResponse(response) {
- const candidates = [response?.data?.data, response?.data, response]
- const summary = candidates.find(value => value && typeof value === 'object' && !Array.isArray(value)
- && value.orderId != null && String(value.orderNo ?? '').trim())
- // 派单成功后的工单应为「待接单」
- if (!summary || Number(summary.orderStatus) !== 1) return null
- return {
- ...summary,
- orderId: summary.orderId,
- orderNo: String(summary.orderNo).trim(),
- orderStatus: Number(summary.orderStatus)
- }
- }
- export function buildMaintainOrderPayload(device = {}, form = {}) {
- const payload = {
- equipmentId: device.equipmentId ?? device.id,
- equipmentCode: device.equipmentCode,
- equipmentName: device.equipmentName,
- maintainType: '故障维修',
- maintainContent: form.description?.trim() || '异常设备维修派单',
- orderLevel: form.orderLevel ?? 2
- }
- if (form.receiveUserId != null && form.receiveUserId !== '') {
- payload.receiveUserId = Number(form.receiveUserId)
- }
- return payload
- }
- export function getDeviceOrderEndpoint(view) {
- return view === 'dispatch' || view === 'abnormal'
- ? '/waterSupply/device/abnormal/order'
- : null
- }
- function normalizeThresholdValue(value) {
- if (value === '' || value === null || value === undefined) {
- return undefined
- }
- const parsed = Number(value)
- return Number.isFinite(parsed) ? parsed : value
- }
- function normalizeThresholdPeriod(form = {}) {
- const periodStart = form.periodStart?.trim() || undefined
- const periodEnd = form.periodEnd?.trim() || undefined
- return { periodStart, periodEnd }
- }
- function removeUndefined(payload) {
- return Object.fromEntries(
- Object.entries(payload).filter(([, value]) => value !== undefined)
- )
- }
- export function buildThresholdSavePayload(form = {}) {
- const deviceCodes = Array.from(new Set((form.deviceCodes || [])
- .map(code => code?.trim())
- .filter(Boolean)))
- const { periodStart, periodEnd } = normalizeThresholdPeriod(form)
- return removeUndefined({
- deviceCodes,
- warningType: form.warningType?.trim() || undefined,
- warningCode: form.warningCode?.trim() || undefined,
- minValue: normalizeThresholdValue(form.minValue),
- maxValue: normalizeThresholdValue(form.maxValue),
- periodStart,
- periodEnd,
- remark: form.remark?.trim() || undefined
- })
- }
- export function buildThresholdUpdatePayload(form = {}) {
- const { periodStart, periodEnd } = normalizeThresholdPeriod(form)
- return removeUndefined({
- id: form.id,
- deviceCode: form.deviceCode?.trim() || undefined,
- warningType: form.warningType?.trim() || undefined,
- warningCode: form.warningCode?.trim() || undefined,
- minValue: normalizeThresholdValue(form.minValue),
- maxValue: normalizeThresholdValue(form.maxValue),
- periodStart,
- periodEnd,
- remark: form.remark?.trim() || undefined
- })
- }
- export function buildThresholdQuery(query = {}) {
- return removeUndefined({
- pageNum: query.pageNum || 1,
- pageSize: query.pageSize || 10,
- deviceCode: query.deviceCode?.trim() || undefined,
- warningType: query.warningType?.trim() || undefined,
- keyword: query.keyword?.trim() || undefined
- })
- }
|