Blame view

pages-sub/problem/work-order-manage/add-order.vue 21.1 KB
d433e7f6   刘淇   工单
1
  <template>
c7df828a   刘淇   快速工单 样式优化
2
    <view class="page-container">
5822009a   刘淇   工单管理--新增工单
3
      <view class="work-order-form-content commonPageLRpadding">
6cc0ab0e   刘淇   养护任务
4
        <up-form label-position="left" :model="workOrderForm" ref="workOrderFormRef" labelWidth="200rpx">
9441e28e   刘淇   考勤打卡
5
          <!-- 业务线单选框 -->
6cc0ab0e   刘淇   养护任务
6
7
8
9
          <up-form-item label="业务线" prop="busiLineCn" border-bottom required>
            <up-radio-group v-model="workOrderForm.busiLineCn" placement="row" @change="handleBusiLineChange">
              <up-radio v-for="item in busiLineOptions" :key="item.name" :label="item.name" :name="item.name"></up-radio>
            </up-radio-group>
e6a04285   刘淇   单图情况 宽高70*70
10
          </up-form-item>
fa775c6b   刘淇   养护计划调整
11
          <!-- 1. 工单位置(地图选择) -->
6cc0ab0e   刘淇   养护任务
12
13
14
15
          <up-form-item label="工单位置" prop="workLocation" border-bottom required
            @click="chooseWorkLocation(); hideKeyboard()">
            <up-input v-model="workOrderForm.workLocation" border="none" readonly suffix-icon="map-fill"
              placeholder="点击选择工单位置"></up-input>
fa775c6b   刘淇   养护计划调整
16
          </up-form-item>
9441e28e   刘淇   考勤打卡
17
          <!-- 2. 道路名称(下拉框action-sheet,保留不变) -->
6cc0ab0e   刘淇   养护任务
18
19
20
21
          <up-form-item label="道路名称" prop="roadName" border-bottom required
            @click="handleActionSheetOpen('roadName'); hideKeyboard()">
            <up-input v-model="workOrderForm.roadName" readonly disabled-color="#ffffff" placeholder="请先选择工单位置"
              border="none"></up-input>
fa775c6b   刘淇   养护计划调整
22
            <template #right>
6cc0ab0e   刘淇   养护任务
23
              <up-icon name="arrow-right" size="16"></up-icon>
fa775c6b   刘淇   养护计划调整
24
25
            </template>
          </up-form-item>
9441e28e   刘淇   考勤打卡
26
27
          <!-- 3. 问题类型 级联选择器【对齐参考页面】 -->
          <up-form-item label="问题类型" prop="orderName" border-bottom required @click="openCascader(); hideKeyboard()">
6cc0ab0e   刘淇   养护任务
28
29
            <up-input v-model="workOrderForm.orderName" disabled disabled-color="#ffffff" placeholder="请选择问题类型"
              border="none"></up-input>
fa775c6b   刘淇   养护计划调整
30
31
32
            <template #right>
              <up-icon name="arrow-right" size="16"></up-icon>
            </template>
5822009a   刘淇   工单管理--新增工单
33
          </up-form-item>
fa775c6b   刘淇   养护计划调整
34
          <!-- 新增:紧急程度选择 -->
6cc0ab0e   刘淇   养护任务
35
36
37
38
          <up-form-item label="紧急程度" prop="pressingTypeName" border-bottom required
            @click="handleActionSheetOpen('pressingType'); hideKeyboard()">
            <up-input v-model="workOrderForm.pressingTypeName" disabled disabled-color="#ffffff" placeholder="请选择紧急程度"
              border="none"></up-input>
5822009a   刘淇   工单管理--新增工单
39
40
41
42
            <template #right>
              <up-icon name="arrow-right" size="16"></up-icon>
            </template>
          </up-form-item>
fa775c6b   刘淇   养护计划调整
43
          <!-- 4. 情况描述(文本域) -->
6cc0ab0e   刘淇   养护任务
44
45
          <up-form-item label="情况描述" prop="problemDesc" required>
            <up-textarea placeholder="请输入情况描述(最多200字)" v-model.trim="workOrderForm.problemDesc" count maxlength="200"
9441e28e   刘淇   考勤打卡
46
              rows="4" @blur="() => workOrderFormRef.value?.validateField('problemDesc')"></up-textarea>
5822009a   刘淇   工单管理--新增工单
47
          </up-form-item>
9441e28e   刘淇   考勤打卡
48
          <!-- 问题照片 -->
e6a04285   刘淇   单图情况 宽高70*70
49
          <up-form-item label="问题照片" prop="problemImgs" border-bottom required>
6cc0ab0e   刘淇   养护任务
50
51
52
53
            <up-upload :file-list="problemImgs.imgList.value || []" @after-read="problemImgs.uploadImgs"
              @delete="problemImgs.deleteImg" multiple :width="70" :height="70"
              :max-count="problemImgs.uploadConfig.maxCount" :upload-text="problemImgs.uploadConfig.uploadText"
              :size-type="problemImgs.uploadConfig.sizeType"></up-upload>
fa775c6b   刘淇   养护计划调整
54
          </up-form-item>
fa775c6b   刘淇   养护计划调整
55
          <!-- 完成时间 -->
6cc0ab0e   刘淇   养护任务
56
57
          <up-form-item label="希望完成时间" prop="expectedFinishDate" @click="show = true; hideKeyboard()">
            <up-input v-model="workOrderForm.expectedFinishDate" border="none" readonly placeholder="点击选择时间"></up-input>
fa775c6b   刘淇   养护计划调整
58
            <template #right>
e6a04285   刘淇   单图情况 宽高70*70
59
              <view v-if="workOrderForm.expectedFinishDate" @click.stop>
6cc0ab0e   刘淇   养护任务
60
                <up-icon name="close" size="20" @click.stop="clearExpectedFinishDate"></up-icon>
e6a04285   刘淇   单图情况 宽高70*70
61
62
              </view>
              <up-icon name="arrow-right" size="16" v-else></up-icon>
fa775c6b   刘淇   养护计划调整
63
64
            </template>
          </up-form-item>
9441e28e   刘淇   考勤打卡
65
66
67
68
69
70
71
72
73
74
75
76
77
          <!-- 重点巡检区域 -->
          <up-form-item label="重点巡检区域" prop="keyInspection" border-bottom required>
            <up-radio-group v-model="workOrderForm.keyInspection" @change="groupChange">
              <up-radio
                :customStyle="{marginBottom: '8px'}"
                v-for="(item, index) in keyInspectionOptions"
                :key="index"
                :label="item.name"
                :name="item.name"
              >
              </up-radio>
            </up-radio-group>
          </up-form-item>
5822009a   刘淇   工单管理--新增工单
78
79
        </up-form>
      </view>
5822009a   刘淇   工单管理--新增工单
80
81
      <!-- 底部提交按钮 -->
      <view class="fixed-bottom-btn-wrap">
6cc0ab0e   刘淇   养护任务
82
        <up-button type="primary" text="提交工单" @click="submitWorkOrder"></up-button>
5822009a   刘淇   工单管理--新增工单
83
      </view>
9441e28e   刘淇   考勤打卡
84
      <!-- 通用下拉弹窗:道路名称、紧急程度保留 -->
6cc0ab0e   刘淇   养护任务
85
86
87
      <up-action-sheet :show="showActionSheet" :actions="currentActionSheetData.list"
        :title="currentActionSheetData.title" @close="handleActionSheetClose"
        @select="handleActionSheetSelect"></up-action-sheet>
9441e28e   刘淇   考勤打卡
88
89
90
91
92
93
94
95
96
      <!-- 级联选择器 up-cascader【对齐参考页面写法】 -->
      <up-cascader
        v-model:show="showCascader"
        v-model="cascaderValue"
        :data="cascaderOptions"
        title="选择问题类型"
        :auto-close="false"
        @confirm="cascaderConfirm"
      ></up-cascader>
fa775c6b   刘淇   养护计划调整
97
      <!-- 完成时间选择器 -->
6cc0ab0e   刘淇   养护任务
98
99
      <up-datetime-picker :show="show" v-model="expectedFinishDate" mode="datetime" :min-date="new Date()"
        @cancel="show = false" @confirm="expectedFinishDateConfirm"></up-datetime-picker>
5822009a   刘淇   工单管理--新增工单
100
101
    </view>
  </template>
d433e7f6   刘淇   工单
102
  
c7df828a   刘淇   快速工单 样式优化
103
  <script setup>
e6a04285   刘淇   单图情况 宽高70*70
104
  import { ref, reactive } from 'vue'
7a96cf50   刘淇   重新提交
105
  import { onReady, onShow, onLoad } from '@dcloudio/uni-app';
e6a04285   刘淇   单图情况 宽高70*70
106
  import { useUploadImgs } from '@/common/utils/useUploadImgs'
9441e28e   刘淇   考勤打卡
107
  import { getRoadListByLatLng, getProblemListByType } from '@/api/common'
7a96cf50   刘淇   重新提交
108
  import { universalApproval, workorderCreate } from '@/api/work-order-manage/work-order-manage'
fa775c6b   刘淇   养护计划调整
109
  import { timeFormat } from '@/uni_modules/uview-plus'
5059c4dd   刘淇   养护员提交养护工单
110
  import { nextStepMap } from '@/common/utils/common'
e6a04285   刘淇   单图情况 宽高70*70
111
  import { useUserStore } from '@/pinia/user';
71518877   王彪总   业务线 小程序不用写死,从后端接口获取
112
  import { getDictLabel, getDictValue } from '@/common/utils/dict';
e6a04285   刘淇   单图情况 宽高70*70
113
  const userStore = useUserStore();
71518877   王彪总   业务线 小程序不用写死,从后端接口获取
114
  const BUSI_LINE_DICT_TYPE = 'business_line';
71518877   王彪总   业务线 小程序不用写死,从后端接口获取
115
  const CJK_RE = /[一-龥]/;
e6a04285   刘淇   单图情况 宽高70*70
116
  const busiLineOptions = ref([]);
e6a04285   刘淇   单图情况 宽高70*70
117
118
119
120
121
  const formatBusiLineOptions = () => {
    if (!userStore.userInfo?.user?.busiLine) {
      busiLineOptions.value = [];
      return;
    }
9441e28e   刘淇   考勤打卡
122
    const rawBusiLines = userStore.userInfo.user.busiLine.split(',');
e6a04285   刘淇   单图情况 宽高70*70
123
    busiLineOptions.value = rawBusiLines.map(item => ({
9441e28e   刘淇   考勤打卡
124
      name: getBusiLineCnByEn(item.trim())
e6a04285   刘淇   单图情况 宽高70*70
125
    }));
e6a04285   刘淇   单图情况 宽高70*70
126
  };
3c3d6799   刘淇   重点巡检区域
127
  const keyInspectionOptions = reactive([
9441e28e   刘淇   考勤打卡
128
129
    { name: '否', disabled: false },
    { name: '是', disabled: false },
3c3d6799   刘淇   重点巡检区域
130
  ]);
3c3d6799   刘淇   重点巡检区域
131
132
133
  const groupChange = (n) => {
    console.log('groupChange', n);
  };
71518877   王彪总   业务线 小程序不用写死,从后端接口获取
134
135
136
137
  const getBusiLineCnByEn = (busiLineEn) => {
    if (!busiLineEn) return '';
    return getDictLabel(BUSI_LINE_DICT_TYPE, busiLineEn) || busiLineEn;
  };
e6a04285   刘淇   单图情况 宽高70*70
138
  const getBusiLineEnByCn = (cnName) => {
71518877   王彪总   业务线 小程序不用写死,从后端接口获取
139
140
141
142
    if (!cnName) return '';
    const code = getDictValue(BUSI_LINE_DICT_TYPE, cnName);
    if (code) return code;
    return CJK_RE.test(cnName) ? '' : cnName;
e6a04285   刘淇   单图情况 宽高70*70
143
  };
7a96cf50   刘淇   重新提交
144
  
9441e28e   刘淇   考勤打卡
145
146
147
148
  // ========== 级联选择器变量(和参考页面对齐) ==========
  const showCascader = ref(false);
  const cascaderValue = ref([]);
  const cascaderOptions = ref([]);
fa775c6b   刘淇   养护计划调整
149
  
9441e28e   刘淇   考勤打卡
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
  // 打开级联弹窗
  const openCascader = () => {
    console.log('312321dasd')
    const busiLineEn = getBusiLineEnByCn(workOrderForm.busiLineCn)
    if (!busiLineEn) {
      uni.showToast({ title: '请先选择业务线', icon: 'none' })
      return
    }
    if (!cascaderOptions.value || cascaderOptions.value.length === 0) {
      uni.showToast({ title: '正在加载问题类型,请稍等', icon: 'none' });
      loadProblemCascader(busiLineEn);
      return;
    }
    cascaderValue.value = [];
    showCascader.value = true;
  };
  
  /**
   * 级联【确认回调】,选中后点确定才赋值,和参考页面保持一致
   */
  const cascaderConfirm = (selectedArr) => {
    console.log('最终选中值数组:', selectedArr);
    // 递归拼接多级label,用 / 分隔
    const getLabelByValueList = (list, valList) => {
      const labelArr = [];
      let currentList = list;
      for (const val of valList) {
        const target = currentList.find(item => item.value === val);
        if (!target) break;
        labelArr.push(target.label);
        currentList = target.children || [];
      }
      return labelArr.join('/');
    };
    const fullLabel = getLabelByValueList(cascaderOptions.value, selectedArr);
    workOrderForm.orderName = fullLabel;
    workOrderForm.orderCode = selectedArr.at(-1);
    cascaderValue.value = selectedArr;
    workOrderFormRef.value?.validateField('orderName');
  };
  
  /**
   * 加载级联树形数据
   */
  const loadProblemCascader = async (parentCode) => {
    if (!parentCode) {
      cascaderOptions.value = []
      return
    }
    try {
      uni.showLoading({ title: '加载类型中...' })
      const res = await getProblemListByType({ parentCode })
      uni.hideLoading()
      cascaderOptions.value = res || []
    } catch (err) {
      uni.hideLoading()
      console.error('获取问题类型失败', err)
      uni.showToast({ title: '获取问题类型失败', icon: 'none' })
      cascaderOptions.value = []
    }
  }
  
  // 表单Ref
  const workOrderFormRef = ref(null)
fa775c6b   刘淇   养护计划调整
214
215
216
217
218
219
220
  const problemImgs = useUploadImgs({
    maxCount: 3,
    uploadText: '选择问题照片',
    sizeType: ['compressed'],
    formRef: workOrderFormRef,
    fieldName: 'problemImgs'
  })
4c54ad5d   刘淇   转工单 选择是 传紧急程度和...
221
222
223
  if (!Array.isArray(problemImgs.rawImgList.value)) {
    problemImgs.rawImgList.value = [];
  }
c7df828a   刘淇   快速工单 样式优化
224
  const showActionSheet = ref(false)
c7df828a   刘淇   快速工单 样式优化
225
226
227
228
229
  const currentActionSheetData = reactive({
    type: '',
    list: [],
    title: ''
  })
fa775c6b   刘淇   养护计划调整
230
  const show = ref(false)
2f1e3176   刘淇   图片参数处理
231
  const expectedFinishDate = ref(Date.now())
9441e28e   刘淇   考勤打卡
232
233
  const isRenew = ref(false);
  const renewOrderData = ref(null);
fa775c6b   刘淇   养护计划调整
234
  const roadNameList = ref([])
fa775c6b   刘淇   养护计划调整
235
236
  const pressingTypeList = ref([])
  
9441e28e   刘淇   考勤打卡
237
  // ========== 表单数据 ==========
c7df828a   刘淇   快速工单 样式优化
238
  const workOrderForm = reactive({
9441e28e   刘淇   考勤打卡
239
240
241
242
243
244
245
246
247
248
249
250
    busiLineCn: '',
    roadId: 0,
    roadName: '',
    workLocation: '',
    orderName: '',
    orderCode: '',
    pressingType: '',
    pressingTypeName: '',
    problemDesc: '',
    lat: 0,
    lon: 0,
    expectedFinishDate: '',
3c3d6799   刘淇   重点巡检区域
251
    keyInspection: '否'
c7df828a   刘淇   快速工单 样式优化
252
  })
9441e28e   刘淇   考勤打卡
253
  // 表单校验规则:prop改成 orderName,对齐参考页面
c7df828a   刘淇   快速工单 样式优化
254
  const workOrderFormRules = reactive({
9441e28e   刘淇   考勤打卡
255
    busiLineCn: [
e6a04285   刘淇   单图情况 宽高70*70
256
257
      { type: 'string', required: true, message: '请选择业务线', trigger: ['change', 'blur'] }
    ],
fa775c6b   刘淇   养护计划调整
258
259
    workLocation: [
      { type: 'string', required: true, message: '请选择工单位置', trigger: ['change', 'blur'] }
c7df828a   刘淇   快速工单 样式优化
260
    ],
fa775c6b   刘淇   养护计划调整
261
262
263
264
    roadName: [
      { type: 'string', required: true, message: '请选择道路名称', trigger: ['change', 'blur'] }
    ],
    orderName: [
9441e28e   刘淇   考勤打卡
265
      { type: 'string', required: true, message: '请选择问题类型', trigger: 'change' }
fa775c6b   刘淇   养护计划调整
266
267
268
269
270
271
272
273
    ],
    pressingTypeName: [
      { type: 'string', required: true, message: '请选择紧急程度', trigger: ['change'] }
    ],
    problemDesc: [
      { type: 'string', required: true, message: '请输入情况描述', trigger: ['change', 'blur'] },
      { type: 'string', min: 3, max: 200, message: '情况描述需3-200字', trigger: ['change', 'blur'] }
    ],
9441e28e   刘淇   考勤打卡
274
    problemImgs: [problemImgs.imgValidateRule]
c7df828a   刘淇   快速工单 样式优化
275
  })
2764b83e   刘淇   分配养护员
276
  
7a96cf50   刘淇   重新提交
277
  onLoad((options) => {
e6a04285   刘淇   单图情况 宽高70*70
278
    formatBusiLineOptions();
e6a04285   刘淇   单图情况 宽高70*70
279
280
    if (busiLineOptions.value.length > 0) {
      workOrderForm.busiLineCn = busiLineOptions.value[0].name;
9441e28e   刘淇   考勤打卡
281
282
      const busiLineEn = getBusiLineEnByCn(workOrderForm.busiLineCn)
      loadProblemCascader(busiLineEn)
e6a04285   刘淇   单图情况 宽高70*70
283
    }
7a96cf50   刘淇   重新提交
284
    console.log(options)
e6a04285   刘淇   单图情况 宽高70*70
285
    if (options.isRenew == 1 && options.tempKey) {
7a96cf50   刘淇   重新提交
286
287
      isRenew.value = true;
      const tempKey = options.tempKey;
7a96cf50   刘淇   重新提交
288
289
290
291
      try {
        const orderData = uni.getStorageSync(tempKey);
        if (orderData && typeof orderData === 'object') {
          renewOrderData.value = orderData;
7a96cf50   刘淇   重新提交
292
293
294
          echoOrderData(renewOrderData.value);
        } else {
          uni.showToast({ title: '工单数据不存在,无法重新提交', icon: 'none' });
7a96cf50   刘淇   重新提交
295
296
297
298
299
300
301
302
303
          setTimeout(() => uni.navigateBack(), 1000);
          return;
        }
      } catch (error) {
        console.error('读取工单数据失败:', error);
        uni.showToast({ title: '数据读取异常,无法重新提交', icon: 'none' });
        setTimeout(() => uni.navigateBack(), 1000);
        return;
      } finally {
7a96cf50   刘淇   重新提交
304
305
306
307
        uni.removeStorageSync(tempKey);
      }
    }
  });
c7df828a   刘淇   快速工单 样式优化
308
  onReady(() => {
c7df828a   刘淇   快速工单 样式优化
309
310
311
    if (workOrderFormRef.value) {
      workOrderFormRef.value.setRules(workOrderFormRules)
    }
fa775c6b   刘淇   养护计划调整
312
    console.log('工单表单规则初始化完成')
c7df828a   刘淇   快速工单 样式优化
313
  })
c7df828a   刘淇   快速工单 样式优化
314
  onShow(() => {
fa775c6b   刘淇   养护计划调整
315
316
    pressingTypeList.value = uni.$dict.transformLabelValueToNameValue(uni.$dict.getDictSimpleList('workorder_pressing_type'))
    console.log('紧急程度列表:', pressingTypeList.value)
c7df828a   刘淇   快速工单 样式优化
317
  })
fa775c6b   刘淇   养护计划调整
318
  
9441e28e   刘淇   考勤打卡
319
320
321
322
323
  // 回显工单数据【重点对齐参考页面的递归查找级联路径】
  const echoOrderData = async (orderItem) => {
    const busiCode = orderItem.busiLine || '';
    if (busiCode) {
      workOrderForm.busiLineCn = getBusiLineCnByEn(busiCode);
e6a04285   刘淇   单图情况 宽高70*70
324
    }
7a96cf50   刘淇   重新提交
325
326
327
328
    workOrderForm.roadId = orderItem.roadId || 0;
    workOrderForm.roadName = orderItem.roadName || '';
    workOrderForm.workLocation = orderItem.lonLatAddress || orderItem.roadName || '';
    workOrderForm.orderName = orderItem.orderName || '';
9441e28e   刘淇   考勤打卡
329
    workOrderForm.orderCode = orderItem.orderCode || '';
7a96cf50   刘淇   重新提交
330
331
332
333
334
    workOrderForm.pressingType = orderItem.pressingType || '';
    workOrderForm.pressingTypeName = uni.$dict.getDictLabel('workorder_pressing_type', orderItem.pressingType) || '';
    workOrderForm.problemDesc = orderItem.remark || '';
    workOrderForm.lat = orderItem.lat || 0;
    workOrderForm.lon = orderItem.lon || 0;
6cc0ab0e   刘淇   养护任务
335
    workOrderForm.expectedFinishDate = orderItem.expectedFinishDate ? timeFormat(orderItem.expectedFinishDate, 'yyyy-mm-dd hh:MM:ss') : '';
9441e28e   刘淇   考勤打卡
336
337
338
    if (orderItem.keyInspection !== undefined) {
      workOrderForm.keyInspection = orderItem.keyInspection === 1 ? '是' : '否'
    }
7a96cf50   刘淇   重新提交
339
340
341
342
    if (orderItem.problemsImgs && Array.isArray(orderItem.problemsImgs) && orderItem.problemsImgs.length > 0) {
      const imgList = orderItem.problemsImgs.map((imgUrl, index) => ({
        url: imgUrl,
        name: `renew_img_${index}`,
9441e28e   刘淇   考勤打卡
343
        status: 'success'
7a96cf50   刘淇   重新提交
344
      }));
4c54ad5d   刘淇   转工单 选择是 传紧急程度和...
345
      problemImgs.imgList.value = imgList;
7a96cf50   刘淇   重新提交
346
347
348
      problemImgs.rawImgList.value = imgList;
    }
  
9441e28e   刘淇   考勤打卡
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
    // ========= 回显核心:加载级联树,递归找到选中路径,赋值 cascaderValue =========
    if (busiCode) {
      await loadProblemCascader(busiCode);
      const targetCode = orderItem.orderCode
      if (targetCode && cascaderOptions.value.length) {
        const findCascaderPath = (list, targetVal, path = []) => {
          for (const node of list) {
            const newPath = [...path, node.value]
            if (node.value === targetVal) {
              return newPath
            }
            if (node.children && node.children.length) {
              const res = findCascaderPath(node.children, targetVal, newPath)
              if (res) return res
            }
          }
          return null
        }
        const selectPath = findCascaderPath(cascaderOptions.value, targetCode)
        if (selectPath) {
          cascaderValue.value = selectPath
        }
      }
    }
  
7a96cf50   刘淇   重新提交
374
    if (orderItem.lat && orderItem.lon) {
9441e28e   刘淇   考勤打卡
375
      getRoadListByBusiLine();
7a96cf50   刘淇   重新提交
376
377
378
    }
  };
  
e6a04285   刘淇   单图情况 宽高70*70
379
  /**
9441e28e   刘淇   考勤打卡
380
   * 业务线切换:清空道路、问题类型级联数据,重新加载级联树
e6a04285   刘淇   单图情况 宽高70*70
381
382
   */
  const handleBusiLineChange = () => {
9441e28e   刘淇   考勤打卡
383
    // 清空道路
e6a04285   刘淇   单图情况 宽高70*70
384
385
    workOrderForm.roadName = '';
    workOrderForm.roadId = 0;
e6a04285   刘淇   单图情况 宽高70*70
386
    roadNameList.value = [];
9441e28e   刘淇   考勤打卡
387
388
389
390
391
392
393
    // 清空问题类型
    workOrderForm.orderName = ''
    workOrderForm.orderCode = ''
    cascaderValue.value = []
    cascaderOptions.value = []
    const busiLineEn = getBusiLineEnByCn(workOrderForm.busiLineCn)
    loadProblemCascader(busiLineEn)
e6a04285   刘淇   单图情况 宽高70*70
394
395
396
397
398
    if (workOrderForm.workLocation) {
      getRoadListByBusiLine();
    }
  };
  
e6a04285   刘淇   单图情况 宽高70*70
399
400
401
402
  const getRoadListByBusiLine = async () => {
    if (!workOrderForm.lat || !workOrderForm.lon) {
      return;
    }
e6a04285   刘淇   单图情况 宽高70*70
403
404
405
406
407
    const busiLineEn = getBusiLineEnByCn(workOrderForm.busiLineCn);
    if (!busiLineEn) {
      uni.showToast({ title: '业务线标识异常', icon: 'none' });
      return;
    }
e6a04285   刘淇   单图情况 宽高70*70
408
409
410
    try {
      uni.showLoading({ title: '获取道路名称中...' });
      const roadRes = await getRoadListByLatLng({
9441e28e   刘淇   考勤打卡
411
        busiLine: busiLineEn,
e6a04285   刘淇   单图情况 宽高70*70
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
        latitude: workOrderForm.lat,
        longitude: workOrderForm.lon
      });
      uni.hideLoading();
      if (Array.isArray(roadRes)) {
        roadNameList.value = roadRes.map((item) => ({
          name: item.roadName || '',
          code: item.roadCode || '',
          id: item.roadId || 0
        }));
      } else {
        roadNameList.value = [{ name: '未查询到道路名称', code: '', id: 0 }];
        uni.showToast({ title: '未查询到该位置的道路信息', icon: 'none' });
      }
    } catch (err) {
      uni.hideLoading();
      console.error('获取道路名称失败:', err);
      uni.showToast({ title: '获取道路名称失败,请重试', icon: 'none' });
      roadNameList.value = [{ name: '获取失败,请重新选择位置', code: '', id: 0 }];
    }
  };
  
9441e28e   刘淇   考勤打卡
434
  // 通用action-sheet方法
c7df828a   刘淇   快速工单 样式优化
435
  const handleActionSheetOpen = (type) => {
fa775c6b   刘淇   养护计划调整
436
437
    if (type === 'roadName' && !workOrderForm.workLocation) {
      uni.showToast({ title: '请先选择工单位置', icon: 'none' })
c7df828a   刘淇   快速工单 样式优化
438
439
      return
    }
c7df828a   刘淇   快速工单 样式优化
440
    const configMap = {
fa775c6b   刘淇   养护计划调整
441
442
443
444
      roadName: {
        title: '请选择道路名称',
        list: roadNameList.value
      },
fa775c6b   刘淇   养护计划调整
445
446
447
      pressingType: {
        title: '请选择紧急程度',
        list: pressingTypeList.value
d433e7f6   刘淇   工单
448
      }
c7df828a   刘淇   快速工单 样式优化
449
    }
c7df828a   刘淇   快速工单 样式优化
450
451
452
453
454
    currentActionSheetData.type = type
    currentActionSheetData.title = configMap[type].title
    currentActionSheetData.list = configMap[type].list
    showActionSheet.value = true
  }
c7df828a   刘淇   快速工单 样式优化
455
456
  const handleActionSheetClose = () => {
    showActionSheet.value = false
c7df828a   刘淇   快速工单 样式优化
457
458
459
460
    currentActionSheetData.type = ''
    currentActionSheetData.list = []
    currentActionSheetData.title = ''
  }
c7df828a   刘淇   快速工单 样式优化
461
  const handleActionSheetSelect = (e) => {
fa775c6b   刘淇   养护计划调整
462
    const { type } = currentActionSheetData
fa775c6b   刘淇   养护计划调整
463
464
465
466
467
468
    switch (type) {
      case 'roadName':
        workOrderForm.roadName = e.name
        workOrderForm.roadId = e.code
        workOrderFormRef.value?.validateField('roadName')
        break
fa775c6b   刘淇   养护计划调整
469
      case 'pressingType':
7a96cf50   刘淇   重新提交
470
        workOrderForm.pressingType = e.value
fa775c6b   刘淇   养护计划调整
471
        workOrderForm.pressingTypeName = e.name
7a96cf50   刘淇   重新提交
472
        workOrderFormRef.value?.validateField('pressingTypeName')
fa775c6b   刘淇   养护计划调整
473
        break
c7df828a   刘淇   快速工单 样式优化
474
    }
c7df828a   刘淇   快速工单 样式优化
475
476
    showActionSheet.value = false
  }
fa775c6b   刘淇   养护计划调整
477
  
fa775c6b   刘淇   养护计划调整
478
  const navigateBack = () => {
e6a04285   刘淇   单图情况 宽高70*70
479
    uni.reLaunch({
9441e28e   刘淇   考勤打卡
480
      url: '/pages-sub/problem/work-order-manage/index',
e6a04285   刘淇   单图情况 宽高70*70
481
      fail: () => {
e6a04285   刘淇   单图情况 宽高70*70
482
483
484
485
        uni.navigateBack({ delta: 2 });
      }
    });
  }
6cc0ab0e   刘淇   养护任务
486
  const clearExpectedFinishDate = () => {
e6a04285   刘淇   单图情况 宽高70*70
487
    workOrderForm.expectedFinishDate = ''
fa775c6b   刘淇   养护计划调整
488
  }
fa775c6b   刘淇   养护计划调整
489
490
491
492
493
494
  const chooseWorkLocation = () => {
    uni.chooseLocation({
      success: async (res) => {
        workOrderForm.roadName = ''
        workOrderForm.roadId = 0
        roadNameList.value = []
fa775c6b   刘淇   养护计划调整
495
496
497
        workOrderForm.workLocation = res.name
        workOrderForm.lat = res.latitude
        workOrderForm.lon = res.longitude
fa775c6b   刘淇   养护计划调整
498
499
        workOrderFormRef.value?.validateField('workLocation')
        workOrderFormRef.value?.validateField('roadName')
e6a04285   刘淇   单图情况 宽高70*70
500
        await getRoadListByBusiLine();
fa775c6b   刘淇   养护计划调整
501
502
503
504
505
506
507
      },
      fail: (err) => {
        console.error('选择位置失败:', err)
        uni.showToast({ title: '选择位置失败:' + err.errMsg, icon: 'none' })
      }
    })
  }
2f1e3176   刘淇   图片参数处理
508
  const expectedFinishDateConfirm = (e) => {
fa775c6b   刘淇   养护计划调整
509
    console.log('选择的完成时间:', e)
2f1e3176   刘淇   图片参数处理
510
    workOrderForm.expectedFinishDate = timeFormat(e.value, 'yyyy-mm-dd hh:MM:ss')
fa775c6b   刘淇   养护计划调整
511
512
    show.value = false
  }
c7df828a   刘淇   快速工单 样式优化
513
514
515
  const hideKeyboard = () => {
    uni.hideKeyboard()
  }
fa775c6b   刘淇   养护计划调整
516
  
c7df828a   刘淇   快速工单 样式优化
517
518
  const submitWorkOrder = async () => {
    try {
c7df828a   刘淇   快速工单 样式优化
519
      await workOrderFormRef.value.validate()
e6a04285   刘淇   单图情况 宽高70*70
520
521
522
523
524
      const busiLineEn = getBusiLineEnByCn(workOrderForm.busiLineCn);
      if (!busiLineEn) {
        uni.showToast({ title: '业务线选择异常,请重新选择', icon: 'none' });
        return;
      }
3c3d6799   刘淇   重点巡检区域
525
      const keyInspectionVal = workOrderForm.keyInspection === '是' ? 1 : 0
7a96cf50   刘淇   重新提交
526
      const commonSubmitData = {
fa775c6b   刘淇   养护计划调整
527
528
        roadId: workOrderForm.roadId,
        roadName: workOrderForm.roadName,
9441e28e   刘淇   考勤打卡
529
        problemsImgs: problemImgs.getSuccessImgUrls(),
fa775c6b   刘淇   养护计划调整
530
531
532
533
534
535
536
        remark: workOrderForm.problemDesc.trim(),
        latLonType: 2,
        lat: workOrderForm.lat,
        lon: workOrderForm.lon,
        lonLatAddress: workOrderForm.workLocation,
        pressingType: workOrderForm.pressingType,
        orderName: workOrderForm.orderName,
9441e28e   刘淇   考勤打卡
537
        orderCode: workOrderForm.orderCode,
3c3d6799   刘淇   重点巡检区域
538
        keyInspection: keyInspectionVal,
6cc0ab0e   刘淇   养护任务
539
        expectedFinishDate: workOrderForm.expectedFinishDate == "" ? "" : new Date(workOrderForm.expectedFinishDate).getTime(),
fa775c6b   刘淇   养护计划调整
540
        sourceId: 1,
9441e28e   刘淇   考勤打卡
541
542
        sourceName: workOrderForm.busiLineCn,
        busiLine: busiLineEn
c7df828a   刘淇   快速工单 样式优化
543
      }
34d239d6   刘淇   全域巡查员
544
      console.log(commonSubmitData)
fa775c6b   刘淇   养护计划调整
545
      uni.showLoading({ title: '提交中...' })
7a96cf50   刘淇   重新提交
546
      let res
7a96cf50   刘淇   重新提交
547
      if (isRenew.value) {
7a96cf50   刘淇   重新提交
548
        const renewSubmitData = {
7a96cf50   刘淇   重新提交
549
550
551
552
553
          workerDataId: renewOrderData.value.id,
          taskKey: renewOrderData.value.taskKey,
          taskId: renewOrderData.value.taskId,
          operateType: nextStepMap[renewOrderData.value.taskKey]?.operateTypeRenew || '',
          agree: 0,
34d239d6   刘淇   全域巡查员
554
          reason: workOrderForm.problemDesc.trim(),
7a96cf50   刘淇   重新提交
555
556
557
558
          ...commonSubmitData
        }
        res = await universalApproval(renewSubmitData)
      } else {
7a96cf50   刘淇   重新提交
559
560
        res = await workorderCreate(commonSubmitData)
      }
c7df828a   刘淇   快速工单 样式优化
561
562
      uni.hideLoading()
      uni.showToast({
7a96cf50   刘淇   重新提交
563
        title: isRenew.value ? '重新提交成功' : '工单提交成功',
c7df828a   刘淇   快速工单 样式优化
564
565
566
        icon: 'success',
        duration: 1000
      })
c7df828a   刘淇   快速工单 样式优化
567
      setTimeout(() => {
4fa8cf12   刘淇   巡查员结束工单
568
        uni.reLaunch({
fa775c6b   刘淇   养护计划调整
569
          url: '/pages-sub/problem/work-order-manage/index'
c7df828a   刘淇   快速工单 样式优化
570
571
572
        })
      }, 1000)
    } catch (error) {
c7df828a   刘淇   快速工单 样式优化
573
      uni.hideLoading()
c7df828a   刘淇   快速工单 样式优化
574
      if (!Array.isArray(error)) {
7a96cf50   刘淇   重新提交
575
        console.error(isRenew.value ? '工单重新提交失败:' : '工单提交失败:', error)
c7df828a   刘淇   快速工单 样式优化
576
        uni.showToast({
9441e28e   刘淇   考勤打卡
577
          title: error.msg || '请求异常',
c7df828a   刘淇   快速工单 样式优化
578
579
580
          icon: 'none',
          duration: 2000
        })
d433e7f6   刘淇   工单
581
582
      }
    }
d433e7f6   刘淇   工单
583
  }
5822009a   刘淇   工单管理--新增工单
584
  </script>
d433e7f6   刘淇   工单
585
  
5822009a   刘淇   工单管理--新增工单
586
  <style lang="scss" scoped>
c7df828a   刘淇   快速工单 样式优化
587
  .page-container {
fa775c6b   刘淇   养护计划调整
588
    min-height: 100vh;
9441e28e   刘淇   考勤打卡
589
    padding-bottom: 100rpx;
d433e7f6   刘淇   工单
590
  }
5822009a   刘淇   工单管理--新增工单
591
592
  .work-order-form-content {
    background: #fff;
d433e7f6   刘淇   工单
593
  }
9441e28e   刘淇   考勤打卡
594
  </style>