Blame view

pages-sub/problem/regional-order-manage/index.vue 20.2 KB
3d474e84   刘淇   快速工单 加上业务线
1
2
3
4
5
  <template>
    <view class="page-container">
      <!-- 顶部固定区域 -->
      <up-sticky>
        <view class="header-wrap">
3d474e84   刘淇   快速工单 加上业务线
6
7
8
9
10
11
12
13
          <up-tabs
              v-model="activeTab"
              :list="tabList"
              active-color="#1989fa"
              inactive-color="#666"
              font-size="30rpx"
              @click="handleTabChange"
          />
3d474e84   刘淇   快速工单 加上业务线
14
15
          <!-- 第二行:下拉框 + 搜索框 -->
          <view class="search-header">
3d474e84   刘淇   快速工单 加上业务线
16
17
18
19
20
21
22
23
24
25
            <view class="select-wrap common-text-color">
              <up-select
                  v-model:current="selectedSortValue"
                  :options="sortOptions"
                  :showOptionsLabel="true"
                  @select="handleSortChange"
                  border="surround"
                  :style="{ flex: 1 }"
              />
            </view>
3d474e84   刘淇   快速工单 加上业务线
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
            <view class="search-input-wrap">
              <up-search
                  v-model="searchValue"
                  placeholder="请输入关键字"
                  @search="handleSearch"
                  bg-color="#f5f5f5"
                  :clearabled="false"
                  :show-action="true"
                  actionText="搜索"
                  :animation="true"
                  @custom="handleSearch"
              />
            </view>
          </view>
        </view>
      </up-sticky>
  
      <!-- 列表容器 -->
      <z-paging
8ddc6f6e   刘淇   登录 修改样式
45
          ref="pagingRef"
3d474e84   刘淇   快速工单 加上业务线
46
47
48
          v-model="orderList"
          @query="queryList"
          :auto-show-system-loading="true"
3d474e84   刘淇   快速工单 加上业务线
49
50
      >
        <template #empty>
8ddc6f6e   刘淇   登录 修改样式
51
          <empty-view />
3d474e84   刘淇   快速工单 加上业务线
52
53
        </template>
  
12e66ec8   刘淇   新增树
54
        <view class="common-card-list">
3d474e84   刘淇   快速工单 加上业务线
55
          <up-card
3d474e84   刘淇   快速工单 加上业务线
56
57
58
              :border="false"
              :foot-border-top="false"
              v-for="(item, index) in orderList"
12e66ec8   刘淇   新增树
59
              :key="item.id || index"
3d474e84   刘淇   快速工单 加上业务线
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
              :show-head="false"
              class="order-card"
          >
            <template #body>
              <view class="card-body">
                <view class="u-body-item u-flex">
                  <view class="u-body-item-title">工单编号:</view>
                  <view class="u-line-1 u-body-value">{{ item.orderNo || '-' }}</view>
                </view>
                <view class="u-body-item u-flex">
                  <view class="u-body-item-title">工单位置:</view>
                  <view class="u-line-1 u-body-value">{{ item.lonLatAddress || '-' }}</view>
                </view>
                <view class="u-body-item u-flex">
                  <view class="u-body-item-title">工单名称:</view>
                  <view class="u-line-1 u-body-value">{{ item.orderName || '未填写' }}</view>
                </view>
                <view class="u-body-item u-flex">
                  <view class="u-body-item-title">情况描述:</view>
                  <view class="u-line-1 u-body-value">{{ item.remark || '无' }}</view>
                </view>
12e66ec8   刘淇   新增树
81
82
83
84
85
86
87
88
89
                <!-- 核心修改:紧急程度行 合并工单详情按钮 【我发起的/已办】放到该行最右侧 -->
                <view class="u-body-item u-flex common-justify-between common-item-center">
                  <view class="u-body-item-title">紧急程度:{{ uni.$dict.getDictLabel('workorder_pressing_type', item.pressingType) || '-' }}</view>
  <!--                <view class="u-line-1 u-body-value flex-1 text-right">-->
  <!--                  {{ uni.$dict.getDictLabel('workorder_pressing_type', item.pressingType) || '-' }}-->
  <!--                </view>-->
                  <!-- 只有 我发起的(1)、已办(2) 显示该行的详情按钮 -->
                  <view v-if="activeTab !== 0" class="ml-10">
                    <up-button type="primary" size="mini" @click="handleDetail(item)">工单详情</up-button>
3d474e84   刘淇   快速工单 加上业务线
90
91
92
93
                  </view>
                </view>
                <view class="u-body-item u-flex">
                  <view class="u-body-item-title">工单状态:</view>
12e66ec8   刘淇   新增树
94
                  <view class="u-line-1 u-body-value">{{ buzStatusMap[item.buzStatus] || '-' }}</view>
3d474e84   刘淇   快速工单 加上业务线
95
96
97
                </view>
                <view class="u-body-item u-flex">
                  <view class="u-body-item-title">提交时间:</view>
12e66ec8   刘淇   新增树
98
                  <view class="u-line-1 u-body-value">{{ item.createTime ? timeFormat(item.createTime, 'yyyy-mm-dd hh:MM:ss') : '-' }}</view>
3d474e84   刘淇   快速工单 加上业务线
99
                </view>
12e66ec8   刘淇   新增树
100
101
102
  
                <!-- 待办工单(0) 保留原来的操作按钮区 不变 -->
                <view v-if="activeTab === 0" class="u-body-item u-flex common-justify-between common-item-center mt-20">
8ddc6f6e   刘淇   登录 修改样式
103
104
105
                  <up-button type="warning" size="mini" @click="handleReject(item)" v-show="nextStepMap[item.taskKey].backShow">回退</up-button>
                  <up-button type="success" size="mini" @click="handleRenew(item)" v-show="nextStepMap[item.taskKey].renewShow">重新提交</up-button>
                  <up-button type="primary" size="mini" @click="handleProcess(item)">{{ nextStepMap[item.taskKey].btnText }}</up-button>
3d474e84   刘淇   快速工单 加上业务线
106
107
                  <up-button type="info" size="mini" @click="handleDetail(item)">详情</up-button>
                </view>
3d474e84   刘淇   快速工单 加上业务线
108
  
12e66ec8   刘淇   新增树
109
                <!-- 已删除:原来单独的【我发起的/已办】按钮区,不需要了 -->
3d474e84   刘淇   快速工单 加上业务线
110
111
112
113
114
115
              </view>
            </template>
          </up-card>
        </view>
      </z-paging>
  
8ddc6f6e   刘淇   登录 修改样式
116
      <!-- 底部新增工单按钮 -->
6e9f0396   刘淇   全域督察员
117
      <view class="fixed-bottom-btn-wrap" v-if="isAi">
8ddc6f6e   刘淇   登录 修改样式
118
        <up-button type="primary" size="large" @click="handleAddOrder">新增工单</up-button>
3d474e84   刘淇   快速工单 加上业务线
119
120
      </view>
  
8ddc6f6e   刘淇   登录 修改样式
121
      <!-- 回退原因弹窗 -->
3d474e84   刘淇   快速工单 加上业务线
122
123
124
125
126
127
128
129
130
131
      <up-modal
          :show="rejectModalShow"
          title="回退原因"
          :closeOnClickOverlay="false"
          :showConfirmButton="true"
          :showCancelButton="true"
          @cancel="handleRejectModalCancel"
          @confirm="confirmReject"
      >
        <view class="reject-modal-content">
3d474e84   刘淇   快速工单 加上业务线
132
133
134
135
136
137
138
139
          <up-textarea
              v-model.trim="rejectReason"
              placeholder="请输入回退原因(必填)"
              rows="6"
              :count="200"
              maxlength="200"
              class="reject-textarea"
          />
3d474e84   刘淇   快速工单 加上业务线
140
141
142
          <view class="upload-wrap mt-20">
            <view class="upload-title">上传图片(选填)</view>
            <up-upload
8ddc6f6e   刘淇   登录 修改样式
143
                :file-list="rejectImgs.rawImgList.value || []"
3d474e84   刘淇   快速工单 加上业务线
144
145
146
147
148
149
150
151
152
153
154
155
156
                @after-read="rejectImgs.uploadImgs"
                @delete="rejectImgs.deleteImg"
                multiple
                width="70"
                height="70"
                :max-count="rejectImgs.uploadConfig.maxCount"
                :upload-text="rejectImgs.uploadConfig.uploadText"
                :size-type="rejectImgs.uploadConfig.sizeType"
            />
          </view>
        </view>
      </up-modal>
  
8ddc6f6e   刘淇   登录 修改样式
157
      <!-- 验收弹窗 -->
3d474e84   刘淇   快速工单 加上业务线
158
159
160
161
162
163
164
165
166
167
      <up-modal
          :show="acceptModalShow"
          title="验收"
          :closeOnClickOverlay="false"
          :showConfirmButton="true"
          :showCancelButton="true"
          @cancel="handleAcceptModalCancel"
          @confirm="handleAcceptModalConfirm"
      >
        <view class="accept-modal-content">
3d474e84   刘淇   快速工单 加上业务线
168
169
170
171
172
173
          <view class="radio-group-wrap">
            <up-radio-group v-model="acceptRadioValue">
              <up-radio name="0" label="通过"></up-radio>
              <up-radio name="1" label="不通过"></up-radio>
            </up-radio-group>
          </view>
3d474e84   刘淇   快速工单 加上业务线
174
175
176
177
178
179
180
181
182
183
          <view class="textarea-wrap mt-30">
            <up-textarea
                v-model.trim="acceptReason"
                placeholder="请输入验收原因(必填,最多200字)"
                :required="true"
                maxlength="200"
                rows="5"
                count
            />
          </view>
3d474e84   刘淇   快速工单 加上业务线
184
185
186
187
188
189
          <view class="upload-wrap mt-20">
            <view class="upload-title">上传验收图片(选填)</view>
            <up-upload
                :file-list="acceptImgs.rawImgList.value || []"
                @after-read="acceptImgs.uploadImgs"
                @delete="acceptImgs.deleteImg"
3d474e84   刘淇   快速工单 加上业务线
190
191
192
193
194
195
196
197
198
199
200
                multiple
                width="70"
                height="70"
                :max-count="acceptImgs.uploadConfig.maxCount"
                :upload-text="acceptImgs.uploadConfig.uploadText"
                :size-type="acceptImgs.uploadConfig.sizeType"
            />
          </view>
        </view>
      </up-modal>
    </view>
4c54ad5d   刘淇   转工单 选择是 传紧急程度和...
201
202
  </template>
  
3d474e84   刘淇   快速工单 加上业务线
203
  <script setup>
6e9f0396   刘淇   全域督察员
204
  import { ref, computed } from 'vue';
3d474e84   刘淇   快速工单 加上业务线
205
206
207
208
209
210
  import { onShow, onLoad } from '@dcloudio/uni-app';
  import { timeFormat } from '@/uni_modules/uview-plus';
  import {
    myBuzSimplePage,
    todoBuzSimplePage,
    doneBuzSimplePage,
2e2b95d3   刘淇   修改接口路径 和命名
211
212
213
214
    qyUniversalApproval,
    daquUniversalApproval,
    dcyUniversalApproval
  } from '@/api/regional-order-manage/regional-order-manage'
3d474e84   刘淇   快速工单 加上业务线
215
216
  import { useUserStore } from '@/pinia/user';
  import { nextStepMap, buzStatusMap } from '@/common/utils/common'
3d474e84   刘淇   快速工单 加上业务线
217
  import { useUploadImgs } from '@/common/utils/useUploadImgs'
8ddc6f6e   刘淇   登录 修改样式
218
219
  
  // ========== 全局实例 & 常量 ==========
3d474e84   刘淇   快速工单 加上业务线
220
  const userStore = useUserStore();
8ddc6f6e   刘淇   登录 修改样式
221
222
223
224
  const USER_ROLES = userStore.userInfo?.roles || [];
  
  // ========== 基础状态 (按模块分组,语义化更强) ==========
  // tab切换
3d474e84   刘淇   快速工单 加上业务线
225
  const activeTab = ref(0); // 0-待办 1-我发起的 2-已办
12e66ec8   刘淇   新增树
226
  const tabList = [{name: '待办'}, {name: '我发起的任务'}, {name: '已办'}];
8ddc6f6e   刘淇   登录 修改样式
227
  // 排序与搜索
3d474e84   刘淇   快速工单 加上业务线
228
229
  const selectedSortValue = ref(1);
  const sortOptions = ref([
8ddc6f6e   刘淇   登录 修改样式
230
    {name: '位置', id: 1}, {name: '名称', id: 2}, {name: '描述', id: 3}, {name: '编号', id: 4},
3d474e84   刘淇   快速工单 加上业务线
231
  ]);
3d474e84   刘淇   快速工单 加上业务线
232
  const searchValue = ref('');
8ddc6f6e   刘淇   登录 修改样式
233
234
  // 分页相关
  const pagingRef = ref(null);
3d474e84   刘淇   快速工单 加上业务线
235
  const orderList = ref([]);
8ddc6f6e   刘淇   登录 修改样式
236
  
12e66ec8   刘淇   新增树
237
  // ========== 角色权限计算属性 ==========
6e9f0396   刘淇   全域督察员
238
  const isAi = computed(() => {
12e66ec8   刘淇   新增树
239
    const roles = USER_ROLES || [];
8ddc6f6e   刘淇   登录 修改样式
240
    // AI工单派发人员 不显示新增按钮,其他角色显示
12e66ec8   刘淇   新增树
241
    return !roles.includes('AI_dispatcher');
3d474e84   刘淇   快速工单 加上业务线
242
  });
8ddc6f6e   刘淇   登录 修改样式
243
244
245
246
247
  
  // ========== 回退弹窗相关 ==========
  const rejectModalShow = ref(false);
  const rejectReason = ref('');
  const currentRejectItem = ref(null);
3d474e84   刘淇   快速工单 加上业务线
248
  const rejectImgs = useUploadImgs({
8ddc6f6e   刘淇   登录 修改样式
249
    maxCount: 3, uploadText: '选择回退图片', sizeType: ['compressed'], formRef: null, fieldName: 'rejectImgs'
3d474e84   刘淇   快速工单 加上业务线
250
  })
8ddc6f6e   刘淇   登录 修改样式
251
252
253
254
255
256
  
  // ========== 验收弹窗相关 ==========
  const acceptModalShow = ref(false);
  const acceptRadioValue = ref('0'); // 默认通过
  const acceptReason = ref('');
  const currentAcceptItem = ref(null);
3d474e84   刘淇   快速工单 加上业务线
257
  const acceptImgs = useUploadImgs({
8ddc6f6e   刘淇   登录 修改样式
258
    maxCount: 3, uploadText: '选择验收图片', sizeType: ['compressed'], formRef: null, fieldName: 'acceptImgs'
3d474e84   刘淇   快速工单 加上业务线
259
  })
8ddc6f6e   刘淇   登录 修改样式
260
261
262
  
  // ========== 公共封装方法 (核心优化:消灭重复代码) ==========
  /**
12e66ec8   刘淇   新增树
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
   * 统一提示方法
   */
  const showToast = (title, icon = 'none', duration = 2000) => {
    uni.showToast({ title, icon, duration });
  };
  
  /**
   * z-paging 统一操作,处理空指针
   */
  const pagingHandle = (method, ...args) => {
    const paging = pagingRef.value;
    if (paging && typeof paging[method] === 'function') {
      paging[method](...args);
    }
  };
  
  /**
8ddc6f6e   刘淇   登录 修改样式
280
   * 生成统一的临时存储key
8ddc6f6e   刘淇   登录 修改样式
281
282
283
284
285
286
287
   */
  const generateTempKey = (prefix = 'order') => {
    return `${prefix}_${Date.now()}_${Math.floor(Math.random() * 10000)}`;
  };
  
  /**
   * 存储工单数据到本地缓存
8ddc6f6e   刘淇   登录 修改样式
288
289
290
291
292
293
294
295
296
   */
  const setOrderStorage = (item, prefix) => {
    if (!item?.id) return null;
    const tempKey = generateTempKey(prefix);
    try {
      uni.setStorageSync(tempKey, item);
      return tempKey;
    } catch (error) {
      console.error('存储工单数据失败:', error);
12e66ec8   刘淇   新增树
297
      showToast('数据存储异常,请重试');
8ddc6f6e   刘淇   登录 修改样式
298
299
300
301
302
303
      return null;
    }
  };
  
  /**
   * 获取分页请求公共参数
8ddc6f6e   刘淇   登录 修改样式
304
305
306
307
308
309
310
311
312
313
314
315
   */
  const getQueryParams = (pageNo, pageSize) => {
    return {
      searchContent: searchValue.value.trim() || '',
      pageNo,
      pageSize,
      type: selectedSortValue.value
    };
  };
  
  /**
   * 统一调用审批接口
8ddc6f6e   刘淇   登录 修改样式
316
317
318
319
   */
  const callApprovalApi = async (params, taskKey) => {
    if (taskKey === 'shRegionManager') return await dcyUniversalApproval(params);
    if (taskKey === 'regionManager') return await qyUniversalApproval(params);
8ddc6f6e   刘淇   登录 修改样式
320
321
322
    if (USER_ROLES.includes('regional_manager')) return await daquUniversalApproval(params);
    if (USER_ROLES.includes('Inspector_global')) return await dcyUniversalApproval(params);
    if (USER_ROLES.includes('patrol_global')) return await qyUniversalApproval(params);
12e66ec8   刘淇   新增树
323
    throw new Error('未匹配到对应的审批接口,请检查角色或工单taskKey');
8ddc6f6e   刘淇   登录 修改样式
324
325
326
  };
  
  /**
12e66ec8   刘淇   新增树
327
   * 统一跳转工单页面 (支持携带回调事件)
8ddc6f6e   刘淇   登录 修改样式
328
   */
12e66ec8   刘淇   新增树
329
330
331
332
333
334
335
336
  const navToOrderPage = (path, query = {}, events = {}) => {
    const queryStr = Object.keys(query).map(k => `${k}=${encodeURIComponent(query[k])}`).join('&');
    const url = `${path}${queryStr ? '?' + queryStr : ''}`;
    if(Object.keys(events).length) {
      uni.navigateTo({ url, events });
    } else {
      uni.redirectTo({ url });
    }
8ddc6f6e   刘淇   登录 修改样式
337
338
339
  };
  
  /**
12e66ec8   刘淇   新增树
340
   * 刷新列表
8ddc6f6e   刘淇   登录 修改样式
341
   */
12e66ec8   刘淇   新增树
342
  const refreshOrderList = () => pagingHandle('reload');
8ddc6f6e   刘淇   登录 修改样式
343
344
  
  // ========== 业务核心方法 ==========
3d474e84   刘淇   快速工单 加上业务线
345
346
347
  // 分页查询列表
  const queryList = async (pageNo, pageSize) => {
    try {
8ddc6f6e   刘淇   登录 修改样式
348
      const params = getQueryParams(pageNo, pageSize);
3d474e84   刘淇   快速工单 加上业务线
349
      let res;
8ddc6f6e   刘淇   登录 修改样式
350
351
352
      if (activeTab.value === 0) res = await todoBuzSimplePage(params);
      else if (activeTab.value === 1) res = await myBuzSimplePage(params);
      else res = await doneBuzSimplePage(params);
12e66ec8   刘淇   新增树
353
      pagingHandle('complete', res?.list || [], res?.total || 0);
3d474e84   刘淇   快速工单 加上业务线
354
355
    } catch (error) {
      console.error('加载工单失败:', error);
12e66ec8   刘淇   新增树
356
357
      pagingHandle('complete', false);
      showToast('加载失败,请重试');
3d474e84   刘淇   快速工单 加上业务线
358
359
    }
  };
8ddc6f6e   刘淇   登录 修改样式
360
  
3d474e84   刘淇   快速工单 加上业务线
361
362
  // 标签页切换
  const handleTabChange = (item) => {
3d474e84   刘淇   快速工单 加上业务线
363
    activeTab.value = item.index;
8ddc6f6e   刘淇   登录 修改样式
364
365
    orderList.value = [];
    refreshOrderList();
3d474e84   刘淇   快速工单 加上业务线
366
  };
8ddc6f6e   刘淇   登录 修改样式
367
  
3d474e84   刘淇   快速工单 加上业务线
368
369
370
371
  // 排序变更
  const handleSortChange = (val) => {
    selectedSortValue.value = val.id;
    searchValue.value = '';
8ddc6f6e   刘淇   登录 修改样式
372
    refreshOrderList();
3d474e84   刘淇   快速工单 加上业务线
373
  };
8ddc6f6e   刘淇   登录 修改样式
374
  
3d474e84   刘淇   快速工单 加上业务线
375
376
377
  // 搜索
  const handleSearch = (val) => {
    searchValue.value = val;
8ddc6f6e   刘淇   登录 修改样式
378
    refreshOrderList();
3d474e84   刘淇   快速工单 加上业务线
379
  };
8ddc6f6e   刘淇   登录 修改样式
380
  
3d474e84   刘淇   快速工单 加上业务线
381
382
  // 工单详情
  const handleDetail = (item) => {
12e66ec8   刘淇   新增树
383
384
385
386
387
388
389
390
391
    if (!item?.taskId) return showToast('工单信息异常');
    navToOrderPage('/pages-sub/problem/regional-order-manage/order-detail', {
      taskId: item.taskId,
      activeTab: activeTab.value,
      processInstanceId: item.processInstanceId
    }, {
      needRefresh: () => {
        console.log('详情页返回,触发工单列表刷新');
        refreshOrderList();
3d474e84   刘淇   快速工单 加上业务线
392
393
      }
    });
3d474e84   刘淇   快速工单 加上业务线
394
  };
8ddc6f6e   刘淇   登录 修改样式
395
396
  
  // 重新提交工单
3d474e84   刘淇   快速工单 加上业务线
397
  const handleRenew = (item) => {
12e66ec8   刘淇   新增树
398
    if (!item?.id) return showToast('工单信息异常,无法重新提交');
8ddc6f6e   刘淇   登录 修改样式
399
400
    const tempKey = setOrderStorage(item, 'renew_order');
    if (!tempKey) return;
3d474e84   刘淇   快速工单 加上业务线
401
  
8ddc6f6e   刘淇   登录 修改样式
402
403
404
    const pageUrl = USER_ROLES.includes('patrol_global')
        ? '/pages-sub/problem/regional-order-manage/add-patrol-order'
        : '/pages-sub/problem/regional-order-manage/add-order';
3d474e84   刘淇   快速工单 加上业务线
405
  
8ddc6f6e   刘淇   登录 修改样式
406
    navToOrderPage(pageUrl, { isRenew: 1, tempKey });
3d474e84   刘淇   快速工单 加上业务线
407
  };
8ddc6f6e   刘淇   登录 修改样式
408
409
  
  // 处理工单核心逻辑
3d474e84   刘淇   快速工单 加上业务线
410
  const handleProcess = async (item) => {
12e66ec8   刘淇   新增树
411
    if (!item) return showToast('工单信息异常');
8ddc6f6e   刘淇   登录 修改样式
412
    const stepName = nextStepMap[item.taskKey]?.name;
12e66ec8   刘淇   新增树
413
    if (!stepName) return showToast('暂无处理权限或工单状态异常');
3d474e84   刘淇   快速工单 加上业务线
414
    try {
8ddc6f6e   刘淇   登录 修改样式
415
416
417
418
      // 大区经理分配
      if (stepName === '大区经理分配') {
        const tempKey = setOrderStorage(item, 'distribute_order');
        tempKey && navToOrderPage('/pages-sub/problem/regional-order-manage/distribution-order', { tempKey });
3d474e84   刘淇   快速工单 加上业务线
419
      }
8ddc6f6e   刘淇   登录 修改样式
420
421
422
      // 督察员单子大区经理分配
      else if (stepName === '督察员单子大区经理分配') {
        const postData = { taskKey: item.taskKey, taskId: item.taskId, operateType:60, workerDataId:item.id, agree:0, reason:item.remark, roadId:item.roadId, roadName:item.roadName, pressingType:item.pressingType, orderName:item.orderName, expectedFinishDate: item.expectedFinishDate, busiLine:item.busiLine };
12e66ec8   刘淇   新增树
423
424
        await dcyUniversalApproval(postData);
        showToast('分配成功', 'success');
8ddc6f6e   刘淇   登录 修改样式
425
        refreshOrderList();
2e2b95d3   刘淇   修改接口路径 和命名
426
      }
8ddc6f6e   刘淇   登录 修改样式
427
428
429
430
431
432
      // 验收弹窗
      else if (['巡查员验收', '养护组长验收'].includes(stepName)) {
        currentAcceptItem.value = item;
        acceptReason.value = '';
        acceptRadioValue.value = '0';
        acceptModalShow.value = true;
3d474e84   刘淇   快速工单 加上业务线
433
      }
8ddc6f6e   刘淇   登录 修改样式
434
435
      // 发起人确认-结束工单
      else if (stepName === '发起人确认') {
3d474e84   刘淇   快速工单 加上业务线
436
437
438
        uni.showModal({
          title: "结束工单",
          content: "请确定是否结束工单?",
8ddc6f6e   刘淇   登录 修改样式
439
          success: async (res) => {
3d474e84   刘淇   快速工单 加上业务线
440
            if (res.confirm) {
3d474e84   刘淇   快速工单 加上业务线
441
              const requestData = {
8ddc6f6e   刘淇   登录 修改样式
442
443
                workerDataId: item.id, taskKey: 'ylInspectorStart', taskId: item.taskId,
                operateType: 200, agree: 1, reason: '结束工单'
3d474e84   刘淇   快速工单 加上业务线
444
              };
8ddc6f6e   刘淇   登录 修改样式
445
              await callApprovalApi(requestData, item.taskKey);
12e66ec8   刘淇   新增树
446
              showToast('结束成功', 'success');
8ddc6f6e   刘淇   登录 修改样式
447
              refreshOrderList();
3d474e84   刘淇   快速工单 加上业务线
448
            }
8ddc6f6e   刘淇   登录 修改样式
449
          }
3d474e84   刘淇   快速工单 加上业务线
450
451
452
453
        });
      }
    } catch (error) {
      console.error('处理工单失败:', error);
12e66ec8   刘淇   新增树
454
      showToast(error.msg || error.message || '处理失败,请重试');
3d474e84   刘淇   快速工单 加上业务线
455
456
    }
  };
8ddc6f6e   刘淇   登录 修改样式
457
458
  
  // 回退工单-打开弹窗
3d474e84   刘淇   快速工单 加上业务线
459
  const handleReject = (item) => {
12e66ec8   刘淇   新增树
460
    if (!item?.id) return showToast('工单信息异常,无法回退');
3d474e84   刘淇   快速工单 加上业务线
461
    currentRejectItem.value = item;
8ddc6f6e   刘淇   登录 修改样式
462
463
464
    rejectReason.value = '';
    rejectImgs.clearImgs();
    rejectModalShow.value = true;
3d474e84   刘淇   快速工单 加上业务线
465
  };
8ddc6f6e   刘淇   登录 修改样式
466
467
  
  // 关闭回退弹窗-重置状态
3d474e84   刘淇   快速工单 加上业务线
468
469
470
  const handleRejectModalCancel = () => {
    rejectModalShow.value = false;
    rejectReason.value = '';
8ddc6f6e   刘淇   登录 修改样式
471
    rejectImgs.clearImgs();
3d474e84   刘淇   快速工单 加上业务线
472
  };
8ddc6f6e   刘淇   登录 修改样式
473
  
3d474e84   刘淇   快速工单 加上业务线
474
475
  // 确认回退工单
  const confirmReject = async () => {
8ddc6f6e   刘淇   登录 修改样式
476
    const reason = rejectReason.value.trim();
12e66ec8   刘淇   新增树
477
    if (!reason) return showToast('请填写回退原因');
8ddc6f6e   刘淇   登录 修改样式
478
    const item = currentRejectItem.value;
12e66ec8   刘淇   新增树
479
    if (!item?.id) return showToast('工单信息异常');
8ddc6f6e   刘淇   登录 修改样式
480
481
  
    uni.showLoading({title: '提交中...', mask: true});
3d474e84   刘淇   快速工单 加上业务线
482
    try {
3d474e84   刘淇   快速工单 加上业务线
483
      const requestData = {
8ddc6f6e   刘淇   登录 修改样式
484
485
        returnImgs: rejectImgs.getSuccessImgUrls(), workerDataId: item.id, taskKey: item.taskKey,
        taskId: item.taskId, operateType: nextStepMap[item.taskKey].operateTypeNoPass, agree:1, reason
3d474e84   刘淇   快速工单 加上业务线
486
      };
8ddc6f6e   刘淇   登录 修改样式
487
      await callApprovalApi(requestData, item.taskKey);
12e66ec8   刘淇   新增树
488
      showToast('回退成功', 'success');
8ddc6f6e   刘淇   登录 修改样式
489
490
      handleRejectModalCancel();
      refreshOrderList();
3d474e84   刘淇   快速工单 加上业务线
491
492
    } catch (error) {
      console.error('回退工单失败:', error);
12e66ec8   刘淇   新增树
493
      showToast(error.msg || error.message || '回退失败,请重试');
3d474e84   刘淇   快速工单 加上业务线
494
    } finally {
3d474e84   刘淇   快速工单 加上业务线
495
496
497
      uni.hideLoading();
    }
  };
8ddc6f6e   刘淇   登录 修改样式
498
  
3d474e84   刘淇   快速工单 加上业务线
499
500
  // 新增工单
  const handleAddOrder = () => {
8ddc6f6e   刘淇   登录 修改样式
501
502
503
504
    const pageUrl = USER_ROLES.includes('patrol_global')
        ? '/pages-sub/problem/regional-order-manage/add-patrol-order'
        : '/pages-sub/problem/regional-order-manage/add-order';
    navToOrderPage(pageUrl);
3d474e84   刘淇   快速工单 加上业务线
505
  };
8ddc6f6e   刘淇   登录 修改样式
506
507
  
  // 关闭验收弹窗-重置状态
3d474e84   刘淇   快速工单 加上业务线
508
509
  const handleAcceptModalCancel = () => {
    acceptModalShow.value = false;
8ddc6f6e   刘淇   登录 修改样式
510
511
512
    acceptReason.value = '';
    acceptRadioValue.value = '0';
    acceptImgs.clearImgs();
3d474e84   刘淇   快速工单 加上业务线
513
  };
8ddc6f6e   刘淇   登录 修改样式
514
515
  
  // 验收提交
3d474e84   刘淇   快速工单 加上业务线
516
  const handleAcceptModalConfirm = async () => {
8ddc6f6e   刘淇   登录 修改样式
517
    const reason = acceptReason.value.trim();
12e66ec8   刘淇   新增树
518
519
    if (!reason) return showToast('请填写验收原因');
    if (reason.length > 200) return showToast('验收原因最多200字');
8ddc6f6e   刘淇   登录 修改样式
520
521
  
    const item = currentAcceptItem.value;
12e66ec8   刘淇   新增树
522
    if (!item?.id) return showToast('工单信息异常');
2e2b95d3   刘淇   修改接口路径 和命名
523
  
12e66ec8   刘淇   新增树
524
    uni.showLoading({title: '提交中...', mask: true});
8ddc6f6e   刘淇   登录 修改样式
525
526
527
528
529
530
531
    try {
      const postData = {
        returnImgs: acceptImgs.getSuccessImgUrls(), taskKey: item.taskKey, workerDataId: item.id,
        taskId: item.taskId, agree: acceptRadioValue.value, reason,
        operateType: acceptRadioValue.value === '0' ? nextStepMap[item.taskKey].operateTypePass : nextStepMap[item.taskKey].operateTypeNoPass
      };
      await callApprovalApi(postData, item.taskKey);
12e66ec8   刘淇   新增树
532
      showToast('提交成功', 'success');
8ddc6f6e   刘淇   登录 修改样式
533
534
      handleAcceptModalCancel();
      refreshOrderList();
3d474e84   刘淇   快速工单 加上业务线
535
    } catch (error) {
3d474e84   刘淇   快速工单 加上业务线
536
      console.error('验收失败:', error);
12e66ec8   刘淇   新增树
537
538
539
      showToast(error.msg || error.message || '验收提交失败,请重试');
    } finally {
      uni.hideLoading();
3d474e84   刘淇   快速工单 加上业务线
540
541
    }
  };
8ddc6f6e   刘淇   登录 修改样式
542
543
  
  // ========== 页面生命周期 ==========
3d474e84   刘淇   快速工单 加上业务线
544
  onLoad(() => {
8ddc6f6e   刘淇   登录 修改样式
545
    refreshOrderList();
3d474e84   刘淇   快速工单 加上业务线
546
547
548
  });
  </script>
  
4c54ad5d   刘淇   转工单 选择是 传紧急程度和...
549
  <style scoped lang="scss">
3d474e84   刘淇   快速工单 加上业务线
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
  .page-container {
    min-height: 100vh;
    background-color: #fafafa;
  }
  
  // 顶部固定区域
  .header-wrap {
    background-color: #fff;
  }
  
  // 搜索栏样式
  .search-header {
    display: flex;
    align-items: center;
    padding: 20rpx;
    box-sizing: border-box;
  
    .select-wrap {
      width: 120rpx;
      margin-right: 20rpx;
8ddc6f6e   刘淇   登录 修改样式
570
      :deep(.u-select), :deep(.u-input__placeholder) {
3d474e84   刘淇   快速工单 加上业务线
571
572
573
        width: 100%;
        font-size: 28rpx;
      }
3d474e84   刘淇   快速工单 加上业务线
574
575
576
577
578
579
580
    }
  
    .search-input-wrap {
      flex: 1;
    }
  }
  
12e66ec8   刘淇   新增树
581
582
583
584
585
586
  // 工单列表样式
  .common-card-list {
    padding: calc(var(--status-bar-height) + 140rpx) 0 30rpx;
    box-sizing: border-box;
  }
  
3d474e84   刘淇   快速工单 加上业务线
587
588
589
590
591
592
593
594
  // 工单卡片样式
  .order-card {
    margin: 0 20rpx 20rpx;
    background: #fff;
    border-radius: 12rpx;
    box-shadow: 0 2rpx 8rpx rgba(0, 0, 0, 0.04);
  }
  
12e66ec8   刘淇   新增树
595
596
597
598
599
  // 新增样式:解决按钮和文字间距、排版问题
  .flex-1 { flex: 1; }
  .text-right { text-align: right; }
  .ml-10 { margin-left: 10rpx; }
  
8ddc6f6e   刘淇   登录 修改样式
600
601
  // 弹窗公共样式
  .reject-modal-content, .accept-modal-content {
3d474e84   刘淇   快速工单 加上业务线
602
603
604
605
606
    width: 100%;
    box-sizing: border-box;
    padding: 10rpx 0;
  }
  
3d474e84   刘淇   快速工单 加上业务线
607
  .upload-wrap {
3d474e84   刘淇   快速工单 加上业务线
608
609
610
611
612
613
614
    .upload-title {
      font-size: 28rpx;
      color: #333;
      margin-bottom: 10rpx;
    }
  }
  
8ddc6f6e   刘淇   登录 修改样式
615
  // 验收弹窗单选框样式
3d474e84   刘淇   快速工单 加上业务线
616
617
618
  .radio-group-wrap {
    display: flex;
    align-items: center;
8ddc6f6e   刘淇   登录 修改样式
619
    gap: 40rpx;
3d474e84   刘淇   快速工单 加上业务线
620
621
622
623
624
625
    font-size: 28rpx;
    margin-bottom: 20rpx;
  }
  
  .textarea-wrap {
    width: 100%;
3d474e84   刘淇   快速工单 加上业务线
626
  }
4c54ad5d   刘淇   转工单 选择是 传紧急程度和...
627
  
8ddc6f6e   刘淇   登录 修改样式
628
629
630
  // 间距公共样式
  .mt-20 { margin-top: 20rpx; }
  .mt-30 { margin-top: 30rpx; }
4c54ad5d   刘淇   转工单 选择是 传紧急程度和...
631
  </style>