Blame view

common/utils/common.js 5.61 KB
2764b83e   刘淇   分配养护员
1
  export const nextStepMap = {
5059c4dd   刘淇   养护员提交养护工单
2
3
    ylTeamLeader: {
      name: '养护组长分配',
7a96cf50   刘淇   重新提交
4
      btnText: '分配',
5059c4dd   刘淇   养护员提交养护工单
5
      operateTypePass: 110,
7a96cf50   刘淇   重新提交
6
7
8
      operateTypeNoPass: 210,  //养护组长退回:210
      backShow: true,
      renewShow: false
5059c4dd   刘淇   养护员提交养护工单
9
10
11
    },
    ylWorker: {
      name: '养护员待实施',
7a96cf50   刘淇   重新提交
12
      btnText: '实施',
5059c4dd   刘淇   养护员提交养护工单
13
      operateTypePass: 120,
dacff5e3   刘淇   养护员退回
14
      operateTypeNoPass: 220,
7a96cf50   刘淇   重新提交
15
16
      backShow: true,
      renewShow: false
5059c4dd   刘淇   养护员提交养护工单
17
18
19
    },
    ylTeamLeaderConfirm: {
      name: '养护组长验收',
7a96cf50   刘淇   重新提交
20
      btnText: '验收',
5059c4dd   刘淇   养护员提交养护工单
21
22
      operateTypePass: 130, //养护组长验收通过: 130
      operateTypeNoPass: 230,  // 养护组长验收不通过:230
7a96cf50   刘淇   重新提交
23
24
      backShow: false,
      renewShow: false
5059c4dd   刘淇   养护员提交养护工单
25
    },
7a96cf50   刘淇   重新提交
26
    ylInspector: {
1f1f236c   刘淇   工单详情
27
      name: '巡查员验收',
7a96cf50   刘淇   重新提交
28
      btnText: '验收',
1f1f236c   刘淇   工单详情
29
30
      operateTypePass: 140, //巡查员验收通过: 140
      operateTypeNoPass: 240,  // 巡查员验收不通过:230
7a96cf50   刘淇   重新提交
31
32
33
34
35
36
37
38
39
40
41
42
      backShow: false,
      renewShow: false
    },
    ylInspectorStart: {
      name: '发起人确认',
      btnText: '结束工单',
      operateTypePass: 200, //巡查员结束工单:200
      operateTypeNoPass: 240,  // 巡查员验收不通过:230
      operateTypeRenew: 100,  //巡查员重新发起:100
      backShow: false,
      renewShow: true
    },
4fa8cf12   刘淇   巡查员结束工单
43
44
  }
  
4fa8cf12   刘淇   巡查员结束工单
45
46
47
48
49
50
51
52
53
54
55
56
57
  
  export const buzStatusMap = {
    '000' :'巡查员发起',
    "210" : '养护组长退回',
    "110" : '养护组长分配',
    "200" : '巡查员结束工单',
    "100" : '巡查员重新发起',
    "220" : '养护员退回',
    "120" : '养护员实施',
    "130" : '养护组长验收通过',
    "230" : '养护组长验收不通过',
    "140" : '巡查员验收通过',
    "240" : '巡查员验收不通过',
4c54ad5d   刘淇   转工单 选择是 传紧急程度和...
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
  }
  
  
  /**
   * 计算两个时间的时间差,返回格式化字符串(天/小时/分钟/秒,按需显示,无无效单位)
   * @param {string | Date | number} startTime - 开始时间(时间字符串/Date对象/10/13位时间戳)
   * @param {string | Date | number} endTime - 结束时间(时间字符串/Date对象/10/13位时间戳)
   * @returns {string} - 格式化时间差字符串(如:35小时2分钟30秒、3小时2分钟30秒、2分钟30秒、30秒)
   */
  export const calculateFormatTimeDiff = (startTime, endTime) => {
    // 辅助函数:将任意合法时间格式转换为13位毫秒级时间戳
    const to13BitTimestamp = (time) => {
      let timestamp = 0;
  
      // 情况1:数字类型(时间戳)
      if (typeof time === 'number') {
        const timeStr = time.toString();
        if (timeStr.length === 10) {
          timestamp = time * 1000; // 10位秒级转13位毫秒级
        } else if (timeStr.length === 13) {
          timestamp = time; // 13位毫秒级直接使用
        } else {
          console.error('非法时间戳:仅支持10位/13位数字', time);
          return 0;
        }
        return timestamp;
      }
  
      // 情况2:Date对象
      if (time instanceof Date) {
        timestamp = time.getTime();
        if (isNaN(timestamp)) {
          console.error('无效的Date对象', time);
          return 0;
        }
        return timestamp;
      }
  
      // 情况3:字符串类型
      if (typeof time === 'string') {
        const timeStr = time.trim().replace(/\//g, '-'); // 统一分隔符,兼容YYYY/MM/DD
        const date = new Date(timeStr);
        timestamp = date.getTime();
        if (isNaN(timestamp)) {
          console.error('无效的时间字符串', time);
          return 0;
        }
        return timestamp;
      }
  
      // 非法类型
      console.error('不支持的时间类型:仅支持string/Date/number', time);
      return 0;
    };
  
    // 1. 统一转换为13位时间戳
    const startTimestamp = to13BitTimestamp(startTime);
    const endTimestamp = to13BitTimestamp(endTime);
  
    // 2. 校验时间戳有效性
    if (startTimestamp === 0 || endTimestamp === 0) {
      return '0秒';
    }
  
    // 3. 计算总毫秒差(取绝对值,确保时间差为正数,不影响单位计算)
    const totalMsDiff = Math.abs(endTimestamp - startTimestamp);
  
    // 4. 定义时间单位换算(毫秒)
    const oneDayMs = 24 * 60 * 60 * 1000;
    const oneHourMs = 60 * 60 * 1000;
    const oneMinuteMs = 60 * 1000;
    const oneSecondMs = 1000;
  
    // 5. 计算各单位的差值(向下取整,获取整数单位)
    const days = Math.floor(totalMsDiff / oneDayMs);
    const remainingMsAfterDay = totalMsDiff % oneDayMs; // 扣除天数后剩余的毫秒数
  
    const hours = Math.floor(remainingMsAfterDay / oneHourMs);
    const remainingMsAfterHour = remainingMsAfterDay % oneHourMs; // 扣除小时后剩余的毫秒数
  
    const minutes = Math.floor(remainingMsAfterHour / oneMinuteMs);
    const remainingMsAfterMinute = remainingMsAfterHour % oneMinuteMs; // 扣除分钟后剩余的毫秒数
  
    const seconds = Math.floor(remainingMsAfterMinute / oneSecondMs);
  
    // 6. 组装格式化字符串(按需添加单位,无无效单位)
    const timeParts = [];
    if (days > 0) {
      timeParts.push(`${days}天`);
    }
    if (hours > 0 || (days > 0 && hours === 0)) { // 有天数时,小时即使为0也可保留(可选:删除 || 后的条件则不显示0小时)
      timeParts.push(`${hours}小时`);
    }
    if (minutes > 0 || (timeParts.length > 0 && minutes === 0)) { // 有天/小时时,分钟即使为0也可保留(可选:删除 || 后的条件则不显示0分钟)
      timeParts.push(`${minutes}分钟`);
    }
    // 秒数始终保留(即使为0,保证最后有一个有效单位)
    timeParts.push(`${seconds}秒`);
  
    // 7. 过滤掉可能存在的「0单位」(可选优化:避免出现“0小时”等无效字段)
    const validTimeParts = timeParts.filter(part => {
      const num = parseInt(part);
      return num > 0 || (timeParts.length === 1 && num === 0); // 仅当只有秒数时,允许0秒
    });
  
    // 8. 拼接并返回结果
    return validTimeParts.join('');
  };