<template>
  <view>
    <scroll-view scroll-y="true" style="height: 95vh">
      <view v-if="isPageShow">
        <page-container
          :show="isPageShow"
          :duration="0"
          :overlay="false"
          @beforeleave="onBeforeleave"
        ></page-container>
      </view>
      <view class="container">
        <u-collapse
          :value="['basic', 'truck', 'pic', 'cost', 'explain', 'sign']"
          :border="false"
        >
          <u-collapse-item title="基本信息" name="basic">
            <view class="item">
              <view class="title">合同编号</view>
              <u--input
                border="surround"
                v-model="datas.take.contractSimple.contractNo"
                disabled
                fontSize="26"
              ></u--input>
            </view>
            <view class="item">
              <view class="title">项目名称</view>
              <u--input
                border="surround"
                v-model="datas.take.contractSimple.projectName"
                disabled
                fontSize="26"
              ></u--input>
            </view>
            <view class="item">
              <view class="title">客户名称</view>
              <u--input
                border="surround"
                v-model="datas.take.contractSimple.customerName"
                disabled
                fontSize="26"
              ></u--input>
            </view>
            <view class="item">
              <view class="title">客户联系人</view>
              <u--input
                border="surround"
                v-model="datas.take.contractSimple.customerContactName"
                disabled
                fontSize="26"
              ></u--input>
            </view>
            <view class="item">
              <view class="title">客户联系人手机</view>
              <u--input
                border="surround"
                v-model="datas.take.contractSimple.customerContactPhone"
                disabled
                fontSize="26"
              ></u--input>
            </view>
            <view class="item">
              <view class="title">销售经理</view>
              <u--input
                border="surround"
                :value="
                  getSalesManagerName(
                    datas.take &&
                      datas.take.contractSimple &&
                      datas.take.contractSimple.businessManager
                  )
                "
                disabled
                fontSize="26"
              ></u--input>
            </view>
            <view class="item">
              <view class="title">车牌号</view>
              <u--input
                border="surround"
                v-model="datas.take.truckSimple.plateNumber"
                disabled
                fontSize="26"
              ></u--input>
            </view>
            <view class="item">
              <view class="title">品牌</view>
              <u--input
                border="surround"
                v-model="datas.take.truckSimple.brandName"
                disabled
                fontSize="26"
              ></u--input>
            </view>
            <view class="item">
              <view class="title">车型</view>
              <u--input
                border="surround"
                v-model="datas.take.truckSimple.modelName"
                disabled
                fontSize="26"
              ></u--input>
            </view>
          </u-collapse-item>
          <u-collapse-item title="还车信息" ref="trunkCollapse" name="truck">
            <view class="item">
              <view class="title required">还车人</view>
              <view class="tip">授权人:{{ datas.take.takeName || "" }} </view>
              <u--input
                border="surround"
                @change="trimSpace('returnDriver')"
                v-model="datas.returnDriver"
                :disabled="disabled"
                fontSize="26"
              ></u--input>
            </view>
            <view class="item">
              <view class="title required">还车人电话</view>
              <view class="tip"
                >授权人联系电话:{{ datas.take.takePhone || "" }}
              </view>
              <u--input
                border="surround"
                v-model="datas.returneePhone"
                @change="trimPhone"
                :disabled="disabled"
                fontSize="26"
                type="number"
              ></u--input>
            </view>
            <view class="item">
              <view class="title required">还车人身份证</view>
              <view class="tip"
                >授权人身份证:{{ datas.take.takeIdNo || "" }}
              </view>
              <u--input
                border="surround"
                @change="trimSpace('identityCard')"
                v-model="datas.identityCard"
                :disabled="disabled"
                fontSize="26"
              ></u--input>
            </view>
            <view class="item">
              <view class="title required">还车里程</view>
              <view class="tip"
                >交车里程:{{ datas.take.takeMileage || "" }}
                <text class="unit">km</text>
              </view>
              <u-input
                border="surround"
                v-model="datas.returnMileage"
                :disabled="disabled"
                type="digit"
                fontSize="26"
              >
                <template slot="suffix">
                  <text class="unit">km</text>
                </template>
              </u-input>
            </view>
            <view class="item">
              <view class="title required">还车电量</view>
              <view class="tip"
                >交车电量:{{ datas.take.electricity || "" }}
                <text class="unit">%</text>
              </view>
              <u-input
                border="surround"
                v-model="datas.electricity"
                :disabled="disabled"
                type="digit"
                fontSize="26"
              >
                <template slot="suffix">
                  <text class="unit">%</text>
                </template>
              </u-input>
            </view>
            <view class="item">
              <view class="title required">还车氢量</view>
              <view class="tip"
                >交车氢量:{{ datas.take.hydrogenMeasure || ""
                }}{{ datas.take.hydrogenUnitName || "" }}
              </view>
              <u-input
                border="surround"
                v-model="datas.hydrogenMeasure"
                type="digit"
                :disabled="disabled"
                fontSize="26"
              >
                <template slot="suffix">
                  <text class="unit"
                    >{{ datas.take.hydrogenUnitName || "" }}
                  </text>
                </template>
              </u-input>
            </view>

            <view class="item">
              <view class="title required">还车时间</view>
              <view class="tip"
                >交车时间:{{
                  formatDateTime(
                    datas.take && datas.take.handoverDate,
                    "hour"
                  ) || ""
                }}
              </view>
              <u-datetime-picker
                :show="showHandoverDatePicker"
                mode="datetime"
                @confirm="confirmHandoverDate"
                @cancel="showHandoverDatePicker = false"
              ></u-datetime-picker>
              <u--input
                border="surround"
                :disabledColor="disabled ? '#f5f7fa' : '#ffffff'"
                disabled
                fontSize="26"
                :value="formatDateTime(datas.returnDate, 'hour')"
                @tap="!disabled && (showHandoverDatePicker = true)"
              >
              </u--input>
            </view>
            <view class="item">
              <view class="title required">还车地点</view>
              <!-- <view class="tip"
                  >交车地点:{{ datas.take.handoverAddress || "" }}
                </view> -->
              <!-- <u--input
                  border="surround"
                  v-model="datas.returnLocation"
                  disabled
                  fontSize="26"
                ></u--input> -->
              <u-picker
                :show="showParkOrFixPicker"
                :columns="[returnLocationTypeList]"
                keyName="dicName"
                :immediateChange="true"
                :disabled="disabled"
                @confirm="confirmIsParkOrFix"
                @cancel="showParkOrFixPicker = false"
              >
              </u-picker>
              <u--input
                border="surround"
                :disabledColor="disabled ? '#f5f7fa' : '#ffffff'"
                disabled
                fontSize="26"
                :value="
                  returnLocationTypeList[datas.returnLocationType - 1].dicName
                "
                @tap="!disabled && (showParkOrFixPicker = true)"
              >
              </u--input>
              <!-- returnLocationType是dicCode123 -->
              <view
                style="margin-top: 10rpx"
                v-if="datas.returnLocationType == 1"
              >
                <u-picker
                  :show="showParkPicker"
                  :columns="[parkingList]"
                  :disabled="disabled"
                  keyName="dicName"
                  :immediateChange="true"
                  @confirm="confirmPark"
                  @cancel="showParkPicker = false"
                >
                </u-picker>
                <u--input
                  border="surround"
                  :disabledColor="disabled ? '#f5f7fa' : '#ffffff'"
                  disabled
                  fontSize="26"
                  :value="parkingList[parkingSel].dicName"
                  @tap="!disabled && (showParkPicker = true)"
                >
                </u--input>
              </view>
              <view
                style="margin-top: 10rpx"
                v-if="datas.returnLocationType == 2"
              >
                <u-picker
                  :show="showFixPicker"
                  :columns="[maintainSite]"
                  keyName="name"
                  :immediateChange="true"
                  @confirm="confirmFix"
                  @cancel="showFixPicker = false"
                >
                </u-picker>
                <u--input
                  border="surround"
                  :disabledColor="disabled ? '#f5f7fa' : '#ffffff'"
                  disabled
                  fontSize="26"
                  :value="maintainSite[maintainSel].name"
                  @tap="!disabled && (showFixPicker = true)"
                >
                </u--input>
              </view>
              <view class="item">
                <view class="title">接车服务费</view>
                <u-input
                  border="surround"
                  v-model="datas.pickupServiceFee"
                  @blur="formatToFixed"
                  :disabled="disabled"
                  type="digit"
                  fontSize="26"
                >
                  <template slot="suffix">
                    <text class="unit">元</text>
                  </template>
                </u-input>
              </view>
              <!-- <view
                  style="margin-top: 10rpx"
                  v-if="datas.returnLocationType === 3"
                >
                  <u--input
                    border="surround"
                    v-model="otherInpt"
                    fontSize="26"
                  ></u--input>
                </view> -->
            </view>
            <view class="item">
              <button class="btn checkList required" @tap="openCheckListPopup">
                还车检查单
              </button>
            </view>
          </u-collapse-item>
          <u-collapse-item ref="uploadCollapse" title="照片上传" name="pic">
            <view class="item">
              <view class="title required">仪表盘照片</view>
              <u-upload
                :fileList="getFileList(1)"
                @afterRead="afterRead"
                @delete="deletePic"
                :maxCount="2"
                multiple
                :width="200"
                :height="200"
                :disabled="disabled"
                :deletable="!disabled"
                name="1"
              ></u-upload>
            </view>
            <view class="item">
              <view class="title required">正面照片</view>
              <u-upload
                :fileList="getFileList(2)"
                @afterRead="afterRead"
                @delete="deletePic"
                :maxCount="1"
                :width="200"
                :height="200"
                :disabled="disabled"
                :deletable="!disabled"
                name="2"
              ></u-upload>
            </view>
            <view class="item">
              <view class="title required">左前方照片</view>
              <u-upload
                :fileList="getFileList(3)"
                @afterRead="afterRead"
                @delete="deletePic"
                :maxCount="1"
                :width="200"
                :height="200"
                :disabled="disabled"
                :deletable="!disabled"
                name="3"
              ></u-upload>
            </view>
            <view class="item">
              <view class="title required">右前方照片</view>
              <u-upload
                :fileList="getFileList(4)"
                @afterRead="afterRead"
                @delete="deletePic"
                :maxCount="1"
                :width="200"
                :height="200"
                :disabled="disabled"
                :deletable="!disabled"
                name="4"
              ></u-upload>
            </view>
            <view class="item">
              <view class="title required">左后方照片</view>
              <u-upload
                :fileList="getFileList(5)"
                @afterRead="afterRead"
                @delete="deletePic"
                :maxCount="1"
                :width="200"
                :height="200"
                :disabled="disabled"
                :deletable="!disabled"
                name="5"
              ></u-upload>
            </view>
            <view class="item">
              <view class="title required">右后方照片</view>
              <u-upload
                :fileList="getFileList(6)"
                @afterRead="afterRead"
                @delete="deletePic"
                :maxCount="1"
                :width="200"
                :height="200"
                :disabled="disabled"
                :deletable="!disabled"
                name="6"
              ></u-upload>
            </view>
            <view class="item">
              <view class="title">瑕疵照片</view>
              <u-upload
                :fileList="getFileList(7)"
                @afterRead="afterRead"
                @delete="deletePic"
                :maxCount="10"
                :width="155"
                :height="155"
                multiple
                :disabled="disabled"
                :deletable="!disabled"
                name="7"
              ></u-upload>
            </view>
            <view class="item">
              <view class="title">轮胎照片</view>
              <u-upload
                :fileList="getFileList(8)"
                @afterRead="afterRead"
                @delete="deletePic"
                :maxCount="20"
                multiple
                :width="155"
                :height="155"
                :disabled="true"
                :deletable="!disabled"
                name="8"
              ></u-upload>
            </view>
            <view class="item">
              <view class="title required">轮胎照片</view>
              <view
                class="flexBox"
                v-if="datas.take.truckSimple.tireNumber == 6"
              >
                <view class="flexItem">
                  <u-upload
                    :fileList="getFileList(15)"
                    @afterRead="afterRead"
                    @delete="deletePic"
                    :width="155"
                    :height="155"
                    :maxCount="1"
                    :disabled="disabled"
                    :deletable="!disabled"
                    name="15"
                  ></u-upload>
                  <view class="title">左前轮</view>
                </view>
                <view class="flexItem">
                  <u-upload
                    :fileList="getFileList(16)"
                    @afterRead="afterRead"
                    @delete="deletePic"
                    :width="155"
                    :height="155"
                    :maxCount="1"
                    :disabled="disabled"
                    :deletable="!disabled"
                    name="16"
                  ></u-upload>
                  <view class="title">左后轮(内)</view>
                </view>
                <view class="flexItem">
                  <u-upload
                    :fileList="getFileList(17)"
                    @afterRead="afterRead"
                    @delete="deletePic"
                    :width="155"
                    :height="155"
                    :maxCount="1"
                    :disabled="disabled"
                    :deletable="!disabled"
                    name="17"
                  ></u-upload>
                  <view class="title">左后轮(外)</view>
                </view>
                <view class="flexItem">
                  <u-upload
                    :fileList="getFileList(18)"
                    @afterRead="afterRead"
                    @delete="deletePic"
                    :width="155"
                    :height="155"
                    :maxCount="1"
                    :disabled="disabled"
                    :deletable="!disabled"
                    name="18"
                  ></u-upload>
                  <view class="title">右前轮</view>
                </view>
                <view class="flexItem">
                  <u-upload
                    :fileList="getFileList(19)"
                    @afterRead="afterRead"
                    @delete="deletePic"
                    :width="155"
                    :height="155"
                    :maxCount="1"
                    :disabled="disabled"
                    :deletable="!disabled"
                    name="19"
                  ></u-upload>
                  <view class="title">右后轮(内)</view>
                </view>
                <view class="flexItem">
                  <u-upload
                    :fileList="getFileList(20)"
                    @afterRead="afterRead"
                    @delete="deletePic"
                    :width="155"
                    :height="155"
                    :maxCount="1"
                    :disabled="disabled"
                    :deletable="!disabled"
                    name="20"
                  ></u-upload>
                  <view class="title">右后轮(外)</view>
                </view>
                <view class="flexItem">
                  <u-upload
                    :fileList="getFileList(21)"
                    @afterRead="afterRead"
                    @delete="deletePic"
                    :width="155"
                    :height="155"
                    :maxCount="1"
                    :disabled="disabled"
                    :deletable="!disabled"
                    name="21"
                  ></u-upload>
                  <view class="title">备胎</view>
                </view>
              </view>
              <view
                class="flexBox"
                v-else-if="
                  datas.take.truckSimple.tireNumber == 10 ||
                  datas.take.truckSimple.tireNumber == 12
                "
              >
                <template v-if="datas.take.truckSimple.tireNumber == 10">
                  <view class="flexItem">
                    <u-upload
                      :fileList="getFileList(15)"
                      @afterRead="afterRead"
                      @delete="deletePic"
                      :width="155"
                      :height="155"
                      :maxCount="1"
                      :disabled="disabled"
                      :deletable="!disabled"
                      name="15"
                    ></u-upload>
                    <view class="title">左前轮</view>
                  </view>
                  <view class="flexItem">
                    <u-upload
                      :fileList="getFileList(18)"
                      @afterRead="afterRead"
                      @delete="deletePic"
                      :width="155"
                      :height="155"
                      :maxCount="1"
                      :disabled="disabled"
                      :deletable="!disabled"
                      name="18"
                    ></u-upload>
                    <view class="title">右前轮</view>
                  </view>
                </template>
                <template v-else>
                  <view class="flexItem">
                    <u-upload
                      :fileList="getFileList(36)"
                      @afterRead="afterRead"
                      @delete="deletePic"
                      :width="155"
                      :height="155"
                      :maxCount="1"
                      :disabled="disabled"
                      :deletable="!disabled"
                      name="36"
                    ></u-upload>
                    <view class="title">左前外</view>
                  </view>
                  <view class="flexItem">
                    <u-upload
                      :fileList="getFileList(37)"
                      @afterRead="afterRead"
                      @delete="deletePic"
                      :width="155"
                      :height="155"
                      :maxCount="1"
                      :disabled="disabled"
                      :deletable="!disabled"
                      name="37"
                    ></u-upload>
                    <view class="title">左前内</view>
                  </view>
                  <view class="flexItem">
                    <u-upload
                      :fileList="getFileList(38)"
                      @afterRead="afterRead"
                      @delete="deletePic"
                      :width="155"
                      :height="155"
                      :maxCount="1"
                      :disabled="disabled"
                      :deletable="!disabled"
                      name="38"
                    ></u-upload>
                    <view class="title">右前外</view>
                  </view>
                  <view class="flexItem">
                    <u-upload
                      :fileList="getFileList(39)"
                      @afterRead="afterRead"
                      @delete="deletePic"
                      :width="155"
                      :height="155"
                      :maxCount="1"
                      :disabled="disabled"
                      :deletable="!disabled"
                      name="39"
                    ></u-upload>
                    <view class="title">右前内</view>
                  </view>
                </template>
                <view class="flexItem">
                  <u-upload
                    :fileList="getFileList(22)"
                    @afterRead="afterRead"
                    @delete="deletePic"
                    :width="155"
                    :height="155"
                    :maxCount="1"
                    :disabled="disabled"
                    :deletable="!disabled"
                    name="22"
                  ></u-upload>
                  <view class="title">左中内</view>
                </view>
                <view class="flexItem">
                  <u-upload
                    :fileList="getFileList(23)"
                    @afterRead="afterRead"
                    @delete="deletePic"
                    :width="155"
                    :height="155"
                    :maxCount="1"
                    :disabled="disabled"
                    :deletable="!disabled"
                    name="23"
                  ></u-upload>
                  <view class="title">左中外</view>
                </view>
                <view class="flexItem">
                  <u-upload
                    :fileList="getFileList(24)"
                    @afterRead="afterRead"
                    @delete="deletePic"
                    :width="155"
                    :height="155"
                    :maxCount="1"
                    :disabled="disabled"
                    :deletable="!disabled"
                    name="24"
                  ></u-upload>
                  <view class="title">左后内</view>
                </view>
                <view class="flexItem">
                  <u-upload
                    :fileList="getFileList(25)"
                    @afterRead="afterRead"
                    @delete="deletePic"
                    :width="155"
                    :height="155"
                    :maxCount="1"
                    :disabled="disabled"
                    :deletable="!disabled"
                    name="25"
                  ></u-upload>
                  <view class="title">左后外</view>
                </view>
                <view class="flexItem">
                  <u-upload
                    :fileList="getFileList(26)"
                    @afterRead="afterRead"
                    @delete="deletePic"
                    :width="155"
                    :height="155"
                    :maxCount="1"
                    :disabled="disabled"
                    :deletable="!disabled"
                    name="26"
                  ></u-upload>
                  <view class="title">右中内</view>
                </view>
                <view class="flexItem">
                  <u-upload
                    :fileList="getFileList(27)"
                    @afterRead="afterRead"
                    @delete="deletePic"
                    :width="155"
                    :height="155"
                    :maxCount="1"
                    :disabled="disabled"
                    :deletable="!disabled"
                    name="27"
                  ></u-upload>
                  <view class="title">右中外</view>
                </view>
                <view class="flexItem">
                  <u-upload
                    :fileList="getFileList(28)"
                    @afterRead="afterRead"
                    @delete="deletePic"
                    :width="155"
                    :height="155"
                    :maxCount="1"
                    :disabled="disabled"
                    :deletable="!disabled"
                    name="28"
                  ></u-upload>
                  <view class="title">右后内</view>
                </view>
                <view class="flexItem">
                  <u-upload
                    :fileList="getFileList(29)"
                    @afterRead="afterRead"
                    @delete="deletePic"
                    :width="155"
                    :height="155"
                    :maxCount="1"
                    :disabled="disabled"
                    :deletable="!disabled"
                    name="29"
                  ></u-upload>
                  <view class="title">右后外</view>
                </view>
                <view class="flexItem">
                  <u-upload
                    :fileList="getFileList(21)"
                    @afterRead="afterRead"
                    @delete="deletePic"
                    :width="155"
                    :height="155"
                    :maxCount="1"
                    :disabled="disabled"
                    :deletable="!disabled"
                    name="21"
                  ></u-upload>
                  <view class="title">备胎</view>
                </view>
              </view>
            </view>
            <view class="item">
              <view class="title required">底盘照片</view>
              <view class="flexBox">
                <view class="flexItem">
                  <u-upload
                    :fileList="getFileList(30)"
                    @afterRead="afterRead"
                    @delete="deletePic"
                    :width="155"
                    :height="155"
                    :maxCount="1"
                    :disabled="disabled"
                    :deletable="!disabled"
                    name="30"
                  ></u-upload>
                  <view class="title">正前方底部</view>
                </view>
                <view class="flexItem">
                  <u-upload
                    :fileList="getFileList(31)"
                    @afterRead="afterRead"
                    @delete="deletePic"
                    :width="155"
                    :height="155"
                    :maxCount="1"
                    :disabled="disabled"
                    :deletable="!disabled"
                    name="31"
                  ></u-upload>
                  <view class="title">左侧前部底部</view>
                </view>
                <view class="flexItem">
                  <u-upload
                    :fileList="getFileList(32)"
                    @afterRead="afterRead"
                    @delete="deletePic"
                    :width="155"
                    :height="155"
                    :maxCount="1"
                    :disabled="disabled"
                    :deletable="!disabled"
                    name="32"
                  ></u-upload>
                  <view class="title">左侧后方底部</view>
                </view>
                <view class="flexItem">
                  <u-upload
                    :fileList="getFileList(33)"
                    @afterRead="afterRead"
                    @delete="deletePic"
                    :width="155"
                    :height="155"
                    :maxCount="1"
                    :disabled="disabled"
                    :deletable="!disabled"
                    name="33"
                  ></u-upload>
                  <view class="title">右侧前方底部</view>
                </view>
                <view class="flexItem">
                  <u-upload
                    :fileList="getFileList(34)"
                    @afterRead="afterRead"
                    @delete="deletePic"
                    :width="155"
                    :height="155"
                    :maxCount="1"
                    :disabled="disabled"
                    :deletable="!disabled"
                    name="34"
                  ></u-upload>
                  <view class="title">右侧后方底部</view>
                </view>
                <view class="flexItem">
                  <u-upload
                    :fileList="getFileList(35)"
                    @afterRead="afterRead"
                    @delete="deletePic"
                    :width="155"
                    :height="155"
                    :maxCount="1"
                    :disabled="disabled"
                    :deletable="!disabled"
                    name="35"
                  ></u-upload>
                  <view class="title">正后方底部</view>
                </view>
              </view>
            </view>
            <view class="item">
              <view class="title">其它</view>
              <u-upload
                :fileList="getFileList(9)"
                @afterRead="afterRead"
                @delete="deletePic"
                :maxCount="10"
                :width="155"
                multiple
                :height="155"
                :disabled="disabled"
                :deletable="!disabled"
                name="9"
              ></u-upload>
            </view>
          </u-collapse-item>
          <!-- <u-collapse-item title="费用信息" ref="costCollapse" name="cost">
              <view class="item" style="width: 20px">
                <u-button
                  class="btn"
                  style=""
                  type="primary"
                  size="mini"
                  plain
                  @tap="addForm"
                  text="添加"
                ></u-button>
              </view>
              <view class="item department">
                <view
                  class="truckItem"
                  v-for="(item, index) in departmentList"
                  :key="index"
                >
                  <view class="item">
                    <view class="title">项目</view>
                    <picker
                      @change="confirmSubject($event, index)"
                      :range="subjectList"
                      :disabled="disabled"
                      range-key="name"
                    >
                      <u--input
                        border="surround"
                        :disabledColor="disabled ? '#f5f7fa' : '#ffffff'"
                        :value="item.subjectName"
                        :disabled="true"
                        fontSize="26"
                      >
                      </u--input>
                    </picker>
                  </view>
                  <view class="item">
                    <view class="title required">金额</view>
                    <u-input
                      border="surround"
                      :value="item.amount"
                      @change="(value) => (departmentList[index].amount = value)"
                      fontSize="26"
                      type="digit"
                      :disabled="disabled"
                    >
                    </u-input>
                  </view>
                  <view class="item">
                    <view class="title">备注</view>
                    <u--textarea
                      border="surround"
                      v-model="item.remark"
                      fontSize="26"
                      :disabled="disabled"
                    ></u--textarea>
                  </view>
  
                  <view class="item">
                    <view class="title">照片</view>
                    <u-upload
                      :fileList="item.pictureList"
                      @afterRead="afterReadCost"
                      :width="155"
                      multiple
                      :height="155"
                      :name="index"
                      :disabled="disabled"
                      :deletable="!disabled"
                      @delete="deletePicCost"
                    ></u-upload>
                  </view>
                  <view class="item">
                    <view class="title">附件</view>
                    <view class="block">
                      <view class="item">
                        <u-upload
                          :fileList="item.attachmentList"
                          :disabled="disabled"
                          @afterRead="afterReadPdf"
                          uploadIcon="plus"
                          accept="all"
                          multiple
                          @delete="deletePdfCost"
                          :deletable="!disabled"
                          :width="155"
                          :height="155"
                          :name="index"
                        ></u-upload>
                      </view>
                      <view
                        class="item"
                        v-for="t in item.attachmentList"
                        :key="t.url"
                      >
                        <view class="line" style="justify-content: space-between">
                          <view class="text-small left">{{ t.fileName }}</view>
                          <view class="text-small" @tap="previewYyPdf(t)"
                            >预览</view
                          >
                        </view>
                      </view>
                    </view>
                  </view>
                  <view class="item">
                    <view class="depDetailCostVoListBtns">
                      <button
                        :class="{ disabled: isRead }"
                        class="del"
                        @tap="delForm(index)"
                      >
                        删除
                      </button>
                    </view>
                  </view>
                </view>
              </view>
            </u-collapse-item> -->
          <u-collapse-item title="还车说明" name="explain">
            <view class="item">
              <view class="title">备注</view>
              <u--textarea
                border="surround"
                v-model="datas.remark"
                fontSize="26"
                :disabled="disabled"
              ></u--textarea>
            </view>
            <view class="item">
              <view class="title">相关材料</view>
              <u-upload
                :fileList="getFileList(12)"
                @afterRead="afterRead"
                @delete="deletePic"
                :maxCount="10"
                multiple
                :width="155"
                :height="155"
                :disabled="disabled"
                :deletable="!disabled"
                name="12"
              ></u-upload>
            </view>
            <view class="item">
              <view class="title">司机证件</view>
              <u-upload
                :fileList="getFileList(10)"
                @afterRead="afterRead"
                @delete="deletePic"
                :maxCount="10"
                multiple
                :width="155"
                :height="155"
                :disabled="disabled"
                :deletable="!disabled"
                name="10"
              ></u-upload>
            </view>
          </u-collapse-item>
          <u-collapse-item title="签收栏" name="sign">
            <view class="item">
              <button
                class="btn sign"
                :class="{ disabled: disabled }"
                :disabled="disabled"
                @tap="generateWord"
              >
                点击签名
              </button>
              <button
                v-if="clearButton"
                class="btn sign"
                style="
                  background-color: #fff;
                  color: #7ba746;
                  border: 1px solid #7ba746;
                "
                :class="{ disabled: disabled }"
                :disabled="disabled"
                @tap="clearSign"
              >
                清除签名信息
              </button>
            </view>
            <view class="item">
              <button
                class="btn genDocument"
                :class="{ disabled: disabled }"
                :disabled="disabled"
                @tap="fileDownloadUrl"
              >
                生成签署文件
              </button>
            </view>
            <view class="item">
              <u-upload
                :fileList="getFileList(11)"
                @afterRead="afterRead"
                @delete="deletePic"
                uploadIcon="plus"
                :disabled="true"
                :deletable="false"
                :previewFullImage="false"
                @tap="previewPdf"
                :maxCount="1"
                :width="155"
                :height="155"
                name="11"
              ></u-upload>
            </view>
          </u-collapse-item>
        </u-collapse>

        <u-loading-page
          bg-color="#ffffff"
          color="#7ba746"
          font-size="24"
          :loading="loading"
          :loading-text="loadingText"
        ></u-loading-page>
        <view>
          <!-- <page-container :show="checkListShow" :duration="0" :overlay="false"> -->
          <u-popup :show="checkListShow" mode="right">
            <scroll-view scroll-y="true" style="height: 95vh">
              <!-- 编辑模式 -->
              <no-bad-table
                :columns="columns"
                :list="formDataList"
                :spanArr="spanArr"
                :isRead="disabled"
                :slot-cols="[
                  'dataCategory',
                  'dataName',
                  'returnTruck',
                  'remark',
                ]"
                :span-method="objectSpanMethod"
              >
                <template v-slot="{ row, col, index, isRead }">
                  <view
                    v-if="col.key == 'dataCategory'"
                    style="white-space: pre-wrap"
                  >
                    {{ row.dataCategory }}
                  </view>
                  <view
                    v-else-if="col.key == 'dataName'"
                    style="white-space: pre-wrap"
                  >
                    {{ row.dataName }}
                  </view>
                  <view
                    v-else-if="col.key == 'returnTruck'"
                    style="display: flex; justify-content: center"
                  >
                    <u-switch
                      size="50"
                      v-if="row.dataType != 3"
                      v-model="row.returnTruck"
                      @change="switchTakeTruck(index)"
                      :disabled="isRead"
                      inactiveColor="#f5f7fa"
                      activeColor="#7ba746"
                    >
                    </u-switch>
                    <u--input
                      border="surround"
                      fontSize="26"
                      v-else
                      :value="row.returnTruck"
                      :disabled="isRead"
                      @change="inputTakeTruck($event, index)"
                    >
                    </u--input>
                  </view>
                  <view
                    v-else-if="col.key == 'remark' && !row.notUpdate"
                    style="display: flex; justify-content: center"
                  >
                    <u--input
                      border="surround"
                      fontSize="26"
                      v-if="row.dataType != 3"
                      :value="row.remark"
                      :disabled="isRead"
                      @change="inputQuality($event, index)"
                    >
                    </u--input>
                  </view>
                </template>
              </no-bad-table>
              <view class="btns">
                <button
                  class="save"
                  :class="{ disabled: disabled }"
                  :disabled="disabled"
                  @tap="saveFormDataList"
                >
                  保存
                </button>
                <button class="cancel" @tap="cancelFormDataChange">取消</button>
              </view>
            </scroll-view>
          </u-popup>
          <!-- </page-container> -->
        </view>

        <view class="btns">
          <button
            class="done"
            :class="{ disabled: isRead }"
            :disabled="isRead"
            @tap="submitConfirm"
          >
            提交
          </button>
          <button
            class="done"
            :class="{ disabled: isRead }"
            :disabled="isRead"
            @tap="save(false)"
          >
            保存
          </button>
          <button class="cancel" @tap="navigateBack">取消</button>
        </view>
        <view style="width: 0px; height: 0px; overflow: hidden">
          <canvas
            :style="
              'width: ' +
              canvasWidth +
              'px; height:' +
              canvasHeight +
              'px;left:8888px'
            "
            canvas-id="myCanvas"
          ></canvas>
        </view>
      </view>
    </scroll-view>
  </view>
</template>

<script>
import { getUser } from "@/utils/auth.js";
import { checkButtonPermission } from "@/utils/permission.js";
export default {
  options: {
    styleIsolation: "shared", // 解除样式隔离
  },

  data() {
    return {
      value: null,
      checkListShow: false, // 检查单弹窗
      spanArr: [],
      showParkOrFixPicker: false,
      showParkPicker: false,
      showFixPicker: false,
      showParkingPicker: false,
      parkingSel: "",
      maintainSel: "",
      parkingList: [],
      maintainSite: [], // 维修站
      otherInpt: "", //其他输入框
      returnLocationTypeList: [
        // {
        //   dicCode: 1,
        //   dicName: "停车场",
        // },
        // {
        //   dicCode: 2,
        //   dicName: "维修站",
        // },
        // {
        //   dicCode: 3,
        //   dicName: "其他",
        // },
      ],
      columns: [
        {
          title: "检查类别",
          key: "dataCategory",
        },
        {
          title: "检查项目",
          key: "dataName",
        },
        {
          title: "是否拥有/检查",
          key: "returnTruck",
        },
        {
          title: "数量/备注",
          key: "remark",
        },
      ],
      range: [
        { value: 1, text: "%" },
        { value: 2, text: "MPa" },
        { value: 3, text: "kg" },
      ],
      datas: {
        contractNo: "合同编号",
        projectName: "项目名称",
        isDrivingTraining: 0,
        dataList: [], // 交车单数据
        hydrogenUnit: null,
        returnLocationType: "",
        pickupServiceFee: "", //接车服务费
        take: {
          truckSimple: {
            tireNumber: 6,
          },
        },
      },
      DrivingTrainingRange: [
        { value: 0, text: "否" },
        { value: 1, text: "是" },
      ],
      id: "1062294605097091072",
      brands: [], // 车辆品牌字典列表
      truckType: [], // 车辆型号字典列表,
      salesManagerDic: [], // 销售经理字典列表
      userInfo: {}, // 用户信息
      contractAuthorizerInformationList: [], // 授权人列表
      inStoreList: [], // 在库状态车辆列表
      showAuthorizerPicker: false,
      showIsDrivingTrainingPicker: false,
      showHandoverDatePicker: false,
      platNumberDisabled: true,
      showPlateNumberPicker: false,
      // 文件列表配置
      fileConfig: {
        // 基础照片
        1: { key: "dashboardPic", maxCount: 2, isArray: false }, // 仪表盘照片
        2: { key: "frontPic", maxCount: 1, isArray: false }, // 正面照片
        3: { key: "leftFrontPic", maxCount: 1, isArray: false }, // 左前方照片
        4: { key: "rightFrontPic", maxCount: 1, isArray: false }, // 右前方照片
        5: { key: "leftRearPic", maxCount: 1, isArray: false }, // 左后方照片
        6: { key: "rightRearPic", maxCount: 1, isArray: false }, // 右后方照片
        7: { key: "blemish", maxCount: 10, isArray: true }, // 瑕疵照片
        8: { key: "tirePic", maxCount: 20, isArray: true }, // 轮胎照片
        9: { key: "otherPics", maxCount: 10, isArray: true }, // 其它
        10: { key: "documents", maxCount: 10, isArray: true }, // 司机证件
        11: { key: "esignatureAttachment", maxCount: 1, isArray: true }, // 电子文档
        12: { key: "signAttachment", maxCount: 10, isArray: true }, // 相关材料
        // 底盘照片
        30: { key: "frontBottomPic", maxCount: 1, isArray: false }, // 正前方底部照片
        31: { key: "leftFrontBottomPic", maxCount: 1, isArray: false }, // 左侧前部底部照片
        32: { key: "leftRearBottomPic", maxCount: 1, isArray: false }, // 左侧后方底部照片
        33: { key: "rightFrontBottomPic", maxCount: 1, isArray: false }, // 右侧前方底部照片
        34: { key: "rightRearBottomPic", maxCount: 1, isArray: false }, // 右侧后方底部照片
        35: { key: "rearBottomPic", maxCount: 1, isArray: false }, // 正后方底部照片
        // 6轮轮胎照片
        15: {
          key: "leftFrontTirePic",
          maxCount: 1,
          isArray: false,
          showTireModal: true,
        }, // 左前轮照片
        16: {
          key: "leftRearTirePicIn",
          maxCount: 1,
          isArray: false,
          showTireModal: true,
        }, // 左后轮(内)
        17: {
          key: "leftRearTirePicOut",
          maxCount: 1,
          isArray: false,
          showTireModal: true,
        }, // 左后轮(外)
        18: {
          key: "rightFrontTirePic",
          maxCount: 1,
          isArray: false,
          showTireModal: true,
        }, // 右前轮
        19: {
          key: "rightRearTirePicIn",
          maxCount: 1,
          isArray: false,
          showTireModal: true,
        }, // 右后轮(内)
        20: {
          key: "rightRearTirePicOut",
          maxCount: 1,
          isArray: false,
          showTireModal: true,
        }, // 右后轮(外)
        21: { key: "spareTirePic", maxCount: 1, isArray: false }, // 备胎
        // 12轮车新增的轮胎字段
        36: {
          key: "leftFrontTirePicOut",
          maxCount: 1,
          isArray: false,
          showTireModal: true,
        }, // 左前外
        37: {
          key: "leftFrontTirePicIn",
          maxCount: 1,
          isArray: false,
          showTireModal: true,
        }, // 左前内
        38: {
          key: "rightFrontTirePicOut",
          maxCount: 1,
          isArray: false,
          showTireModal: true,
        }, // 右前外
        39: {
          key: "rightFrontTirePicIn",
          maxCount: 1,
          isArray: false,
          showTireModal: true,
        }, // 右前内
        // 10轮轮胎照片
        22: {
          key: "leftMiddleTirePicIn",
          maxCount: 1,
          isArray: false,
          showTireModal: true,
        }, // 左中内
        23: {
          key: "leftMiddleTirePicOut",
          maxCount: 1,
          isArray: false,
          showTireModal: true,
        }, // 左中外
        24: {
          key: "leftRearMiddleTirePicIn",
          maxCount: 1,
          isArray: false,
          showTireModal: true,
        }, // 左后内
        25: {
          key: "leftRearMiddleTirePicOut",
          maxCount: 1,
          isArray: false,
          showTireModal: true,
        }, // 左后外
        26: {
          key: "rightMiddleTirePicIn",
          maxCount: 1,
          isArray: false,
          showTireModal: true,
        }, // 右中内
        27: {
          key: "rightMiddleTirePicOut",
          maxCount: 1,
          isArray: false,
          showTireModal: true,
        }, // 右中外
        28: {
          key: "rightRearMiddleTirePicIn",
          maxCount: 1,
          isArray: false,
          showTireModal: true,
        }, // 右后内
        29: {
          key: "rightRearMiddleTirePicOut",
          maxCount: 1,
          isArray: false,
          showTireModal: true,
        }, // 右后外
      },
      // 动态生成的文件列表
      fileLists: {},
      // 轮胎厚度映射

      canvasWidth: 0,
      canvasHeight: 0,
      isRead: false, // 页面是否处于阅读模式
      formDataList: [], // 交车检查单数据副本
      loading: false,
      loadingText: "加载中...",
      hasSign: false, // 已完成签名，签署文件已生成
      hasSaveCheckList: false, // 是否保存过还车检查单
      compressPicMap: new Map(), // 缩略图映射，key为原图，value为缩略图
      isPageShow: false,
      departmentList: [],
      subjectList: [], // 项目列表
      gpsLocation: "", // GPS定位用在水印上， 以前的datas.returnLocation已经改做他用了
      showClearTip: false, // 是否显示提示清除签章
    };
  },
  methods: {
    formatToFixed() {
      if (
        this.datas.pickupServiceFee === "" ||
        this.datas.pickupServiceFee == null
      )
        return;

      // 转为数字，保留两位小数，再转回字符串（避免科学计数法）
      const num = parseFloat(this.datas.pickupServiceFee);
      if (!isNaN(num)) {
        this.$set(this.datas, "pickupServiceFee", num.toFixed(2));
      } else {
        this.$set(this.datas, "pickupServiceFee", "");
      }
    },
    trimSpace(val) {
      if (val === "returnDriver" && this.datas.signFlowId) {
        this.showClearTip = true;
        //在修改签章人信息后记录一个信息被修改的标签,点击点击签名的时候验证标签如果是则提示先点击清除签名信息.
      }
      this.datas[val] = this.datas[val]
        ? this.datas[val].replace(/\s+/g, "")
        : "";
    },
    trimPhone(value) {
      if (this.datas.signFlowId) {
        this.showClearTip = true;
        //在修改签章人信息后记录一个信息被修改的标签,点击点击签名的时候验证标签如果是则提示先点击清除签名信息.
      }
      this.datas.returneePhone = value ? value.replace(/[^0-9]/g, "") : "";
    },
    //还车地点逻辑相关调整
    maintainSiteSelect() {
      this.$api.returnCar.getFixPageList().then((res) => {
        console.log(res);
        this.maintainSite = res;
      });
    },
    async getLocationTypeList() {
      this.$api.returnCar.getLocationTypeList().then((res) => {
        console.log(`res:`, res);
        this.returnLocationTypeList = res;
      });
    },
    async getParkList() {
      await this.$api.returnCar
        .getParkingPageList({
          pageNo: 1,
          pageSize: 999,
        })
        .then((res) => {
          if (res) {
            let datas = res?.data;
            this.parkingList = datas.records.map((item) => {
              return {
                dicCode: item.id,
                dicName: item.parkingName,
              };
            });
          }
        });
    },
    confirmIsParkOrFix(e) {
      this.datas.returnLocationType = e.value[0].dicCode;
      this.showParkOrFixPicker = false;
      console.log(
        `this.datas.returnLocationType:`,
        this.datas.returnLocationType
      );
      this.$nextTick(() => {
        // 解决折叠collapse高度无法动态更新的问题
        this.$refs.trunkCollapse.init();
      });
    },
    confirmPark(e) {
      this.parkingSel = e.indexs[0];
      this.showParkPicker = false;
    },
    confirmFix(e) {
      this.maintainSel = e.indexs[0];
      this.showFixPicker = false;
    },

    onBeforeleave() {
      this.isPageShow = false;
      if (this.checkListShow) {
        this.checkListShow = false;
        this.$nextTick(() => {
          this.isPageShow = true;
        });
      } else {
        uni.showModal({
          title: "离开提示",
          content: "请确认是否退出当前界面?",
          success: (res) => {
            if (res.confirm) {
              this.navigateBack();
            } else {
              this.isPageShow = true;
              console.log("用户点击取消");
            }
          },
        });
      }

      //   this.$nextTick(() => {
      //     this.isPageShow = true;
      //   });
      // this.isPageShow = false;
      //
      //   setTimeout(() => {
      //     this.isPageShow = true;
      //   }, 10);
    },
    getData() {
      this.$api.returnCar.getTakeId({ id: this.id }).then((res) => {
        res.truckRentTaskId = this.id;
        // 避免出现额外的小数，"100.00" => 100
        res.takeMileage = res.takeMileage ? Number(res.takeMileage) : null;
        res.electricity = res.electricity ? Number(res.electricity) : null;
        res.hydrogenMeasure = res.hydrogenMeasure
          ? Number(res.hydrogenMeasure)
          : null;

        this.datas = res;
        console.log("res", res);
        this.$set(this.datas, "returnLocationType", res.returnLocationType); //set大法好
        if (this.datas.returnLocationType == 1) {
          const parkingIndex =
            this.parkingList.findIndex(
              (item) => item.dicCode == res?.returnLocation
            ) ?? "";
          this.$set(this, "parkingSel", parkingIndex); //set大法好
        } else if (this.datas.returnLocationType == 2) {
          const fixIndex =
            this.maintainSite.findIndex(
              (item) => item.id == res?.returnLocation
            ) ?? "";
          console.log(this.maintainSite);
          console.log(res?.returnLocation);
          console.log("fixIndex", fixIndex);
          this.$set(this, "maintainSel", fixIndex); //set大法好
        }

        console.log("res", res.depDetailCostEoList);
        this.departmentList =
          res.depDetailCostEoList.map((t) => {
            t.subjectName = this.subjectList.filter(
              (s) => s.id == t.costSubjectId
            )[0]?.name;
            t.pictureList = t.pictureList.map((p) => {
              p.url = p.path;
              p.thumb = p.compressedImagePath || p.path;
              return p;
            });
            t.attachmentList = t.attachmentList.map((p) => {
              p.url = p.path;
              return p;
            });
            return t;
          }) || [];

        // if (!res.depDetailCostEoList || res.depDetailCostEoList.length === 0) {
        //   this.addForm();
        // } else {
        //   this.departmentList = res.depDetailCostEoList; // 部门费用
        // }

        this.datas.hydrogenUnit = this.datas.take.hydrogenUnit; // 沿用交车单单位
        const authorizerList = res.contractAuthorizerInformationList;
        this.contractAuthorizerInformationList = authorizerList;
        // 如果授权人列表只有一个授权人，默认填入
        if (authorizerList && authorizerList.length == 1) {
          this.datas.takeName = authorizerList[0].authorizer;
          this.datas.takeIdNo = authorizerList[0].authorizerIdentityCard;
          this.datas.takePhone = authorizerList[0].authorizerTelephone;
        }

        // 将底盘照片从对象格式转换为字符串格式，统一处理
        this.convertChassisPicsToString();

        // 根据后端相应的相关图片字段，重新得到fileList用于前端图片预览
        this.parseFileListBack();

        // 自动获取用户当前位置，填入 "交车地点" 字段中
        //2025.1.23注释 还停车地点由用户选择车场/维修站
        //2025.3.4恢复 水印需要
        if (!this.isRead) {
          this.getLocation();
        }
        // formDataList为深度拷贝的一个对象，并不会直接影响到该车辆的交车检查单单信息
        this.formDataList = this.processFormDataList(
          this.deepClone(this.datas.dataList)
        );
        this.getSpanArr(this.formDataList);
        this.$nextTick(() => {
          //   this.$refs.costCollapse.init();
          this.$refs.trunkCollapse.init();
        });
      });
    },
    // 将底盘照片从对象格式转换为字符串格式
    convertChassisPicsToString() {
      const chassisPicKeys = [
        "frontBottomPic",
        "leftFrontBottomPic",
        "leftRearBottomPic",
        "rightFrontBottomPic",
        "rightRearBottomPic",
        "rearBottomPic",
      ];

      chassisPicKeys.forEach((key) => {
        const picData = this.datas[key];
        // 如果是对象格式，提取path作为字符串
        if (picData && typeof picData === "object" && picData.path) {
          this.datas[key] = picData.path;
        }
      });
    },
    goto(e) {
      uni.navigateTo({ url: e.target.dataset.url });
    },
    navigateBack() {
      this.isPageShow = false;
      setTimeout(() => {
        uni.navigateBack();
      }, 100);
    },
    formatDateTime(obj, type = "date") {
      if (obj == null) {
        return "";
      }
      // 精确到日
      if (type == "date") {
        let date = new Date(obj);
        let y = 1900 + date.getYear();
        let m = "0" + (date.getMonth() + 1);
        let d = "0" + date.getDate();
        return (
          y +
          "-" +
          m.substring(m.length - 2, m.length) +
          "-" +
          d.substring(d.length - 2, d.length)
        );
      }
      // 精确到小时
      else if (type == "hour") {
        const date = new Date(obj); // 将时间戳转换为毫秒
        const year = date.getFullYear();
        const month = String(date.getMonth() + 1).padStart(2, "0"); // 月份从0开始
        const day = String(date.getDate()).padStart(2, "0");
        const hour = String(date.getHours()).padStart(2, "0");
        const minute = String(date.getMinutes()).padStart(2, "0");
        return `${year}-${month}-${day}  ${hour}:${minute}`;
      }
    },
    getNowDateTime() {
      let currentTime = new Date();
      let year = currentTime.getFullYear();
      let month = currentTime.getMonth() + 1;
      let day = currentTime.getDate();
      let hours = currentTime.getHours();
      let minutes = currentTime.getMinutes();
      month = month < 10 ? "0" + month : month;
      day = day < 10 ? "0" + day : day;
      hours = hours < 10 ? "0" + hours : hours;
      minutes = minutes < 10 ? "0" + minutes : minutes;

      return `${year}-${month}-${day} ${hours}:${minutes}`;
    },
    getDic() {
      this.$api.standbyVehicle.getVehicleBrand().then((res) => {
        this.brands = res;
      });
      this.$api.standbyVehicle.getTruckType().then((res) => {
        this.truckType = res;
      });
      this.$api.returnCar.getSalesManagerDic().then((res) => {
        this.salesManagerDic = res;
      });
    },
    getBrandName(dicCode) {
      return this.getDicValue(this.brands, dicCode);
    },
    getModelName(dicCode) {
      return this.getDicValue(this.truckType, dicCode);
    },
    getSalesManagerName(dicCode) {
      return this.getDicValue(this.salesManagerDic, dicCode);
    },
    getDicValue(dic, dicCode) {
      if (dic.length == 0) {
        return "";
      }

      return dic.find((x) => x.dicCode == dicCode)?.dicName ?? "";
    },
    getInStoreList() {
      this.$api.truck.queryInStoreList({}).then((res) => {
        this.inStoreList = res;
      });
    },
    confirmAuthorizer(e) {
      this.showAuthorizerPicker = false;
      this.datas.takeName = e.value[0].authorizer;
      this.datas.takeIdNo = e.value[0].authorizerIdentityCard;
      this.datas.takePhone = e.value[0].authorizerTelephone;
    },
    confirmIsDrivingTraining(e) {
      this.datas.isDrivingTraining = e.indexs[0];
      this.showIsDrivingTrainingPicker = false;
    },
    confirmHandoverDate(e) {
      if (e.value) {
        const selectedTime = new Date(e.value);
        const now = new Date();

        // 如果选择的日期是今天，检查时间是否超过当前时间
        if (selectedTime > now) {
          this.alert("还车时间不能大于当前时间");
          this.datas.returnDate = now.getTime();
        } else {
          this.datas.returnDate = e.value;
        }
      }
      this.showHandoverDatePicker = false;
    },
    enbalbeChangeTruck() {
      this.platNumberDisabled = false;
      this.showPlateNumberPicker = true;
    },

    getLocation() {
      uni.getLocation({
        type: "wgs84",
        success: (res) => {
          const longitude = res.longitude;
          const latitude = res.latitude;
          this.$api.returnCar
            .getAddress({ longitude, latitude })
            .then((res) => {
              console.log("getLocation", res);
              this.gpsLocation = res?.data ?? "浙江省嘉兴市";
            });
        },
        fail: (err) => {
          console.log(err);
          if (
            err.errMsg.includes("auth deny") ||
            err.errMsg.includes("auth denied")
          ) {
            // 判断是临时拒绝还是永久拒绝
            // 方法：调用 wx.getSetting 检查用户授权状态
            uni.getSetting({
              success: (res) => {
                console.log("getSetting", res);
                if (res.authSetting["scope.userLocation"] === false) {
                  let that = this;
                  // 返回 false 表示用户**永久拒绝**了授权
                  uni.showModal({
                    title: "定位权限被关闭",
                    content:
                      "您已关闭定位权限，无法获取位置。请前往设置页手动开启。",
                    confirmText: "去设置",
                    showCancel: true,
                    success: function (modalRes) {
                      if (modalRes.confirm) {
                        // 跳转到小程序设置页
                        uni.openSetting({
                          success: (settingRes) => {
                            // 用户在设置页修改了权限
                            if (settingRes.authSetting["scope.userLocation"]) {
                              // 权限已开启，重新获取位置
                              uni.getLocation({
                                type: "wgs84",
                                success: (locRes) => {
                                  console.log("重新获取位置成功:", locRes);
                                  const longitude = locRes.longitude;
                                  const latitude = locRes.latitude;
                                  that.$api.returnCar
                                    .getAddress({ longitude, latitude })
                                    .then((res) => {
                                      console.log("getLocation", res);
                                      that.gpsLocation =
                                        res?.data ?? "浙江省嘉兴市";
                                    });
                                },
                                fail: (locErr) => {
                                  console.log("重新获取位置失败:", locErr);
                                  uni.showToast({
                                    title: "仍未获取到位置",
                                    icon: "none",
                                  });
                                },
                              });
                            } else {
                              uni.showToast({
                                title: "请开启定位权限",
                                icon: "none",
                              });
                            }
                          },
                        });
                      }
                    },
                  });
                } else {
                  // 返回 undefined 表示未授权（可能是临时拒绝）
                  uni.showModal({
                    title: "需要定位权限",
                    content: "请允许定位授权以使用此功能。",
                    confirmText: "去授权",
                    success: function (modalRes) {
                      if (modalRes.confirm) {
                        // 再次尝试，可能会弹出授权窗口
                        getLocation();
                      }
                    },
                  });
                }
              },
              fail: (err) => {
                console.error("获取设置失败:", err);
                uni.showToast({ title: "检查权限失败", icon: "none" });
              },
            });
          } else {
            uni.showToast({
              title: "获取位置失败: " + err.errMsg,
              icon: "none",
            });
          }
        },
      });
    },
    objectSpanMethod(row, column, rowIndex, columnIndex) {
      if (columnIndex === 0) {
        const _row = this.spanArr[rowIndex];
        const _col = _row > 0 ? 1 : 0;
        return {
          rowspan: _row,
          colspan: _col,
        };
      }
    },
    switchTakeTruck(index) {
      this.formDataList[index].returnTruck =
        !this.formDataList[index].returnTruck;
    },
    inputQuality(value, index) {
      if (
        ["证件信息", "工具信息"].includes(this.formDataList[index].dataCategory)
      ) {
        if (value) {
          this.formDataList[index].returnTruck = true;
        } else {
          this.formDataList[index].returnTruck = false;
        }
      }
      this.formDataList[index].remark = value;
    },
    inputTakeTruck(value, index) {
      this.formDataList[index].returnTruck = value;
    },
    cancelFormDataChange() {
      this.formDataList = this.processFormDataList(
        this.deepClone(this.datas.dataList)
      );
      this.getSpanArr(this.formDataList);
      this.checkListShow = false;
      uni.setNavigationBarTitle({
        title: "还车信息",
      });
    },
    getSpanArr(data) {
      this.spanArr = [];
      for (let i = 0; i < data.length; i++) {
        if (i === 0) {
          this.spanArr.push(1);
          this.pos = 0;
        } else {
          // 判断当前元素与上一个元素是否相同 dataCategory (类别字段)
          if (data[i].dataCategory === data[i - 1].dataCategory) {
            this.spanArr[this.pos] += 1;
            this.spanArr.push(0);
          } else {
            this.spanArr.push(1);
            this.pos = i;
          }
        }
      }
      console.log(data);
      console.log(this.spanArr);
    },
    deepClone(obj) {
      if (obj === null) return null;
      if (typeof obj !== "object") return obj;
      if (obj instanceof Date) {
        let date = new Date();
        date.setTime(obj.getTime());
        return date;
      }
      if (obj instanceof RegExp) {
        let re = new RegExp(obj.source);
        re.lastIndex = obj.lastIndex;
        return re;
      }
      let newObj = new obj.constructor();
      for (let key in obj) {
        if (obj.hasOwnProperty(key)) {
          newObj[key] = this.deepClone(obj[key]);
        }
      }
      return newObj;
    },
    processFormDataList(dataList) {
      dataList = dataList.filter((x) => x.dataName != "检查项目");
      for (let item of dataList) {
        if (item.dataType === 3) {
          // 当 dataType == 3 时，只显示非 "true"、非 "false" 和非空字符串的值
          if (
            item.returnTruck !== "true" &&
            item.returnTruck !== "false" &&
            item.returnTruck !== ""
          ) {
            // 保留并显示该值
            item.returnTruck = item.returnTruck;
          } else {
            // 显示空字符串
            item.returnTruck = ""; // 或者 item.returnTruck = null;
          }
        } else if (item.dataType === 1) {
          // 当 dataType == 1 时，处理 returnTruck 的值
          if (item.returnTruck === "true" || item.returnTruck === true) {
            item.returnTruck = true;
          } else {
            item.returnTruck = false;
          }
        }
      }

      return dataList;
    },
    openCheckListPopup() {
      this.checkListShow = true;
      uni.setNavigationBarTitle({
        title: "还车检查单",
      });
    },
    change(e) {
      this.datas.hydrogenUnit = e;
    },
    checkCameraPermission() {
      console.log("checkCameraPermission");
      uni.getSetting({
        success(res) {
          if (!res.authSetting["scope.camera"]) {
            console.log(`有相机权限`);
            return;
          } else {
            console.log(`没有相机权限! 开始申请获取`);
            this.requestCameraPermission();
          }
        },
        fail(e) {
          console.log(`获取setting失败:\n`, e);
        },
      });
    },
    requestCameraPermission() {
      uni.authorize({
        scope: "scope.camera",
        success() {
          console.log(`相机权限授权成功`);
        },
        fail() {
          console.log(`相机权限授权失败`);
        },
      });
    },
    // 保存备车检查单
    saveFormDataList() {
      if (!this.checkFormData()) {
        return false;
      }

      this.hasSaveCheckList = true;
      this.checkListShow = false;
      this.datas.dataList = this.deepClone(this.formDataList);
      uni.setNavigationBarTitle({
        title: "还车信息",
      });
    },
    // 检查备车检查单是否正确填写
    checkFormData(alert = true) {
      const targets = this.formDataList.filter(
        (x) => x.dataCategory == "外观检查" && x.dataName != "其他"
      );
      const target = targets?.find(
        (x) => (!x.returnTruck || x.returnTruck === "false") && !x.remark
      );
      if (target) {
        alert && this.alert(`${target.dataName} 未勾选，需填写备注!`);
        return false;
      }

      return true;
    },
    // 初始化文件列表
    initFileLists() {
      Object.keys(this.fileConfig).forEach((key) => {
        this.$set(this.fileLists, key, []);
      });
    },

    // 获取文件列表
    getFileList(name) {
      return this.fileLists[name] || [];
    },

    // 删除图片
    deletePic(event) {
      const name = event.name;
      const fileList = this.getFileList(name);

      if (fileList.some((x) => x.status == "uploading")) {
        this.alert(`请等待现有图片上传完成后再操作`);
        return;
      }

      fileList.splice(event.index, 1);
      this.updateDataFromFileList(name);
      this.save(true); //自动保存
    },

    // 根据文件列表更新数据
    updateDataFromFileList(name) {
      const config = this.fileConfig[name];
      if (!config) return;

      const fileList = this.getFileList(name);
      const urls = fileList.map((item) => item.url).filter((url) => url);

      if (config.isArray) {
        // 数组类型
        if (name === "7") {
          // 瑕疵照片
          this.datas.blemish = urls.map((url) => url);
        } else if (name === "8") {
          // 轮胎照片
          this.datas.tirePic = urls.map((url) => url);
        } else if (name === "9") {
          // 其他
          this.datas.otherPics = urls.map((url) => ({ path: url }));
        } else if (name === "10") {
          // 司机证件
          this.datas.documents = urls;
        } else if (name === "11") {
          // 电子文档
          this.datas.esignatureAttachment = urls.map((url) => ({ path: url }));
        } else if (name === "12") {
          // 相关材料
          this.datas.signAttachment = urls.map((url) => ({ path: url }));
        }
      } else {
        // 单个或多个但非数组类型
        if (name === "1") {
          // 仪表盘照片（特殊处理，最多2张）
          if (fileList.length === 0) {
            this.datas.dashboardPic = "";
            this.datas.dashboard2Pic = "";
          } else if (fileList.length === 1) {
            this.datas.dashboardPic = urls[0] || "";
            this.datas.dashboard2Pic = "";
          } else {
            this.datas.dashboardPic = urls[0] || "";
            this.datas.dashboard2Pic = urls[1] || "";
          }
        } else if (name >= 30 && name <= 35) {
          // 底盘照片，需要转换为字符串格式
          this.datas[config.key] = urls[0] || "";
        } else {
          // 其他单个图片
          this.datas[config.key] = urls[0] || "";
        }
      }
    },
    // 新增图片
    async afterRead(event) {
      const name = event.name;
      const config = this.fileConfig[name];
      if (!config) return;

      // 当设置 multiple 为 true 时, file 为数组格式，否则为对象格式
      let lists = [].concat(event.file);
      let fileList = this.getFileList(name);
      let fileListLen = fileList.length;

      // 添加上传中状态
      lists.map((item) => {
        fileList.push({
          ...item,
          status: "uploading",
          message: "上传中",
        });
      });

      for (let i = 0; i < lists.length; i++) {
        this.loading = true;
        this.loadingText = "添加水印中...";
        const fileSize = lists[i].size / 1024 ** 2; // 图片多少MB
        let waterUrl = "";

        try {
          waterUrl = await this.addWatermark(lists[i].url, fileSize);
        } catch (e) {
          console.log(
            `e:
  `,
            e
          );
          this.alert(e.toString());
          fileList.splice(fileListLen, 1);
          return;
        }

        const result = await this.uploadFilePromise(waterUrl);
        const imgUrl = result.data?.url ?? "";

        if (imgUrl) {
          this.compressPicMap.set(
            imgUrl,
            result.data?.compressedImageUrl ?? ""
          );
        }

        // 更新文件项状态
        let item = fileList[fileListLen];
        fileList.splice(
          fileListLen,
          1,
          Object.assign(item, {
            status: "success",
            message: "",
            url: imgUrl,
            thumb: waterUrl,
          })
        );
        fileListLen++;

        // 特殊处理：轮胎照片上传后显示厚度输入框
        if (config.showTireModal && imgUrl) {
          this.showTireModal(config.key);
        }

        this.$nextTick(() => {
          // 解决折叠collapse高度无法动态更新的问题
          this.$refs.uploadCollapse.init();
        });
      }

      // 更新数据
      this.updateDataFromFileList(name);
      this.save(true); //自动保存
    },

    showTireModal(tire) {
      let tireTitle = "";
      let inputName = "";
      //4.5 18t
      if (this.datas.take.truckSimple.tireNumber === 6) {
        switch (tire) {
          case "leftFrontTirePic":
            tireTitle = "左前轮";
            inputName = "左前（1轴）";
            break;
          case "leftRearTirePicIn":
            tireTitle = "左后轮(内)";
            inputName = "左后内（2轴）";
            break;
          case "leftRearTirePicOut":
            tireTitle = "左后轮(外)";
            inputName = "左后外（2轴）";
            break;
          case "rightFrontTirePic":
            tireTitle = "右前轮";
            inputName = "右前（1轴）";
            break;
          case "rightRearTirePicIn":
            tireTitle = "右后轮(内)";
            inputName = "右后内（2轴）";
            break;
          case "rightRearTirePicOut":
            tireTitle = "右后轮(外)";
            inputName = "右后外（2轴）";
            break;
        }
      } else if (this.datas.take.truckSimple.tireNumber === 10) {
        switch (tire) {
          case "leftFrontTirePic":
            tireTitle = "左前轮";
            inputName = "左前（1轴）";
            break;
          case "rightFrontTirePic":
            tireTitle = "右前轮";
            inputName = "右前（1轴）";
            break;
          case "leftMiddleTirePicIn":
            tireTitle = "左中内";
            inputName = "左中内（2轴）";
            break;
          case "leftMiddleTirePicOut":
            tireTitle = "左中外";
            inputName = "中外（2轴）";
            break;
          case "leftRearMiddleTirePicIn":
            tireTitle = "左后内";
            inputName = "左后内（3轴）";
            break;
          case "leftRearMiddleTirePicOut":
            tireTitle = "左后外";
            inputName = "左后外（3轴）";
            break;
          case "rightMiddleTirePicIn":
            tireTitle = "右中内";
            inputName = "右中内（2轴）";
            break;
          case "rightMiddleTirePicOut":
            tireTitle = "右中外";
            inputName = "右中外（2轴）";
            break;
          case "rightRearMiddleTirePicIn":
            tireTitle = "右后内";
            inputName = "右后内（3轴）";
            break;
          case "rightRearMiddleTirePicOut":
            tireTitle = "右后外";
            inputName = "右后外（3轴）";
            break;
        }
      } else if (this.datas.take.truckSimple.tireNumber === 12) {
        switch (tire) {
          case "leftFrontTirePicOut":
            tireTitle = "左前外";
            inputName = "左前外";
            break;
          case "leftFrontTirePicIn":
            tireTitle = "左前内";
            inputName = "左前内";
            break;
          case "rightFrontTirePicOut":
            tireTitle = "右前外";
            inputName = "右前外";
            break;
          case "rightFrontTirePicIn":
            tireTitle = "右前内";
            inputName = "右前内";
            break;
          case "leftMiddleTirePicIn":
            tireTitle = "左中内";
            inputName = "左中内";
            break;
          case "leftMiddleTirePicOut":
            tireTitle = "左中外";
            inputName = "左中外"; //中外（2轴）
            break;
          case "leftRearMiddleTirePicIn":
            tireTitle = "左后内";
            inputName = "左后内";
            break;
          case "leftRearMiddleTirePicOut":
            tireTitle = "左后外";
            inputName = "左后外";
            break;
          case "rightMiddleTirePicIn":
            tireTitle = "右中内";
            inputName = "右中内";
            break;
          case "rightMiddleTirePicOut":
            tireTitle = "右中外";
            inputName = "右中外";
            break;
          case "rightRearMiddleTirePicIn":
            tireTitle = "右后内";
            inputName = "右后内";
            break;
          case "rightRearMiddleTirePicOut":
            tireTitle = "右后外";
            inputName = "右后外";
            break;
        }
      }
      uni.showModal({
        title: `请输入${tireTitle}厚度`,
        confirmText: "确认",
        editable: true,
        placeholderText: "请输入轮胎厚度用于还车检查单",
        success: (res) => {
          if (res.confirm) {
            console.log(res);
            console.log(this.datas.dataList);
            const obj = this.datas.dataList.find(
              (item) => item.dataName === inputName
            );
            if (obj) {
              this.$set(obj, "returnTruck", res.content);
              this.$set(obj, "takeTruck", res.content);
            }
            this.formDataList = this.processFormDataList(
              this.deepClone(this.datas.dataList)
            );
            this.getSpanArr(this.formDataList);
          }
        },
      });
    },

    uploadFilePromise(url) {
      console.log(url);
      return new Promise((resolve, reject) => {
        let a = uni.uploadFile({
          url: "/attachment/upload",
          filePath: url,
          name: "file",
          success: (res) => {
            resolve(JSON.parse(res.data || {}));
          },
          fail: (e) => {
            reject(e);
          },
        });
      });
    },
    // 图片添加水印
    async addWatermark(img, fileSize) {
      const image = img;
      let res1 = await new Promise((resolve, reject) => {
        uni.getImageInfo({
          src: img,
          success: (res) => {
            // 设置canvas宽高等于原图片宽高
            this.canvasWidth = res.width;
            this.canvasHeight = res.height;
            // 创建 canvas 的绘图上下文
            const ctx = uni.createCanvasContext("myCanvas", this);
            // 绘制图片
            ctx.drawImage(image, 0, 0, res.width, res.height);

            //先加logo
            // const watermarkImg = this.$refs.logo;
            ctx.drawImage("/static/logo3.png", 10, res.height - 150, 200, 40.8);

            //再加时间
            ctx.font = "25px 黑体";
            ctx.fillStyle = "#fff";
            ctx.textAlign = "left";
            ctx.fillText(this.getNowDateTime(), 10, res.height - 70);

            //最后加地址
            ctx.font = "25px 黑体";
            ctx.fillStyle = "#fff";
            ctx.textAlign = "left";
            ctx.fillText(this.gpsLocation, 10, res.height - 30);
            // 画到 canvas 中
            ctx.draw(false, () => {
              // 将画布转化为图片
              // 设置延时，延时的秒数和图片体积正相关，越大的图片，延时越长
              // 如果不延时，导出的图片可能存在有黑边、只显示部分 等问题
              let timeout = 0;
              if (fileSize <= 3) {
                timeout = 1000;
              } else {
                timeout = 1000 * (fileSize / 3);
              }

              setTimeout(() => {
                uni.canvasToTempFilePath(
                  {
                    canvasId: "myCanvas",
                    fileType: "jpg",
                    quality: fileSize <= 3 ? 1 : 0.75, // 如果不到3MB，则不压缩，否则压缩
                    success: (res) => {
                      console.log(res);
                      this.loading = false;
                      resolve(res.tempFilePath);
                    },
                    fail: (err) => {
                      this.loading = false;
                      reject(err);
                    },
                  },
                  this
                );
              }, timeout);
            });
          },
        });
      });
      return res1;
    },
    // 解析后端返回的文件数据
    parseFileListBack() {
      // 初始化文件列表
      this.initFileLists();

      // 处理仪表盘照片（特殊处理，最多2张）
      this.parseDashboardPic();

      // 处理基础照片
      this.parseBasicPics();

      // 处理数组类型照片
      this.parseArrayPics();

      // 处理电子签名文档
      this.parseSignatureDoc();

      // 处理轮胎照片
      this.parseTirePics();

      // 处理底盘照片
      this.parseChassisPics();

      this.$nextTick(() => {
        this.$refs.uploadCollapse.init();
      });
    },

    // 处理仪表盘照片
    parseDashboardPic() {
      // 仪表盘1
      let picData = this.datas.dashboardPicData;
      if (picData?.path) {
        this.fileLists[1].push({
          url: picData.path,
          thumb: picData.compressedImagePath || picData.path,
        });
        this.compressPicMap.set(
          picData.path,
          picData.compressedImagePath || picData.path
        );
      }
      this.datas.dashboardPic = picData?.path ?? "";

      // 仪表盘2
      picData = this.datas.dashboard2PicData;
      if (picData?.path) {
        this.fileLists[1].push({
          url: picData.path,
          thumb: picData.compressedImagePath || picData.path,
        });
        this.compressPicMap.set(
          picData.path,
          picData.compressedImagePath || picData.path
        );
      }
      this.datas.dashboard2Pic = picData?.path ?? "";
    },

    // 处理基础照片
    parseBasicPics() {
      const basicPicKeys = [
        { dataKey: "frontPicData", fileKey: 2, targetKey: "frontPic" },
        { dataKey: "leftFrontPicData", fileKey: 3, targetKey: "leftFrontPic" },
        {
          dataKey: "rightFrontPicData",
          fileKey: 4,
          targetKey: "rightFrontPic",
        },
        { dataKey: "leftRearPicData", fileKey: 5, targetKey: "leftRearPic" },
        { dataKey: "rightRearPicData", fileKey: 6, targetKey: "rightRearPic" },
      ];

      basicPicKeys.forEach(({ dataKey, fileKey, targetKey }) => {
        const picData = this.datas[dataKey];
        if (picData?.path) {
          this.fileLists[fileKey] = [
            {
              url: picData.path,
              thumb: picData.compressedImagePath || picData.path,
            },
          ];
          this.compressPicMap.set(
            picData.path,
            picData.compressedImagePath || picData.path
          );
        }
        this.datas[targetKey] = picData?.path ?? "";
      });
    },

    // 处理数组类型照片
    parseArrayPics() {
      // 瑕疵照片
      // 处理接口返回的对象格式数据
      if (
        this.datas.blemish &&
        this.datas.blemish.length > 0 &&
        typeof this.datas.blemish[0] === "object"
      ) {
        this.fileLists[7] = this.datas.blemish.map((x) => ({
          url: x.path,
          thumb: x.compressedImagePath || x.path,
        }));
        this.datas.blemish.forEach((x) => {
          this.compressPicMap.set(x.path, x.compressedImagePath || x.path);
        });
        // 转换为字符串数组格式用于保存
        this.datas.blemish = this.datas.blemish.map((x) => x.path);
      }

      // 轮胎照片
      this.fileLists[8] = this.datas.tirePic.map((x) => ({
        url: x.path,
        thumb: x.compressedImagePath || x.path,
      }));
      this.datas.tirePic.forEach((x) => {
        this.compressPicMap.set(x.path, x.compressedImagePath || x.path);
      });
      this.datas.tirePic = this.datas.tirePic.map((x) => x.path);

      // 其他
      this.fileLists[9] = this.datas.otherPics.map((x) => ({
        url: x.path,
        thumb: x.compressedImagePath || x.path,
      }));
      this.datas.otherPics.forEach((x) => {
        this.compressPicMap.set(x.path, x.compressedImagePath || x.path);
      });

      // 司机证件
      this.fileLists[10] = this.datas.documents.map((x) => ({
        url: x.path,
        thumb: x.compressedImagePath || x.path,
      }));
      this.datas.documents.forEach((x) => {
        this.compressPicMap.set(x.path, x.compressedImagePath || x.path);
      });
      this.datas.documents = this.datas.documents.map((x) => x.path);

      // 相关材料
      this.fileLists[12] = this.datas.signAttachment.map((x) => ({
        url: x.path,
        thumb: x.compressedImagePath || x.path,
      }));
      this.datas.signAttachment.forEach((x) => {
        this.compressPicMap.set(x.path, x.compressedImagePath || x.path);
      });
    },

    // 处理电子签名文档
    parseSignatureDoc() {
      if (
        this.datas.esignatureAttachment &&
        this.datas.esignatureAttachment.length >= 1
      ) {
        this.fileLists[11] = [
          {
            url: this.datas.esignatureAttachment[0].path,
            thumb: "/static/pdf.png",
          },
        ];
        this.hasSign = true;
      }
    },

    // 处理轮胎照片
    parseTirePics() {
      // 6轮车轮胎照片
      const keysTire = [
        { key: "leftFrontTirePic", fileKey: 15 },
        { key: "leftRearTirePicIn", fileKey: 16 },
        { key: "leftRearTirePicOut", fileKey: 17 },
        { key: "rightFrontTirePic", fileKey: 18 },
        { key: "rightRearTirePicIn", fileKey: 19 },
        { key: "rightRearTirePicOut", fileKey: 20 },
        { key: "spareTirePic", fileKey: 21 }, // 备胎
      ];

      // 10轮车轮胎照片
      const keysTire2 = [
        { key: "leftMiddleTirePicIn", fileKey: 22 },
        { key: "leftMiddleTirePicOut", fileKey: 23 },
        { key: "leftRearMiddleTirePicIn", fileKey: 24 },
        { key: "leftRearMiddleTirePicOut", fileKey: 25 },
        { key: "rightMiddleTirePicIn", fileKey: 26 },
        { key: "rightMiddleTirePicOut", fileKey: 27 },
        { key: "rightRearMiddleTirePicIn", fileKey: 28 },
        { key: "rightRearMiddleTirePicOut", fileKey: 29 },
      ];

      // 12轮车轮胎照片
      const keysTire3 = [
        { key: "leftFrontTirePicOut", fileKey: 36 },
        { key: "leftFrontTirePicIn", fileKey: 37 },
        { key: "rightFrontTirePicOut", fileKey: 38 },
        { key: "rightFrontTirePicIn", fileKey: 39 },
      ];

      // 处理所有轮胎照片
      [...keysTire, ...keysTire2, ...keysTire3].forEach(({ key, fileKey }) => {
        if (this.datas[key]) {
          const picData = this.datas[key];
          if (picData?.path) {
            this.fileLists[fileKey] = [
              {
                url: picData.path,
                thumb: picData.compressedImagePath || picData.path,
              },
            ];
            this.compressPicMap.set(
              picData.path,
              picData.compressedImagePath || picData.path
            );
          }
          this.datas[key] = picData?.path ?? "";
        }
      });
    },

    // 处理底盘照片
    parseChassisPics() {
      const chassisPicKeys = [
        { dataKey: "frontBottomPic", fileKey: 30 },
        { dataKey: "leftFrontBottomPic", fileKey: 31 },
        { dataKey: "leftRearBottomPic", fileKey: 32 },
        { dataKey: "rightFrontBottomPic", fileKey: 33 },
        { dataKey: "rightRearBottomPic", fileKey: 34 },
        { dataKey: "rearBottomPic", fileKey: 35 },
      ];

      chassisPicKeys.forEach(({ dataKey, fileKey }) => {
        const picData = this.datas[dataKey];
        // 现在底盘照片已经是字符串格式
        if (picData && typeof picData === "string") {
          this.fileLists[fileKey] = [
            {
              url: picData,
              thumb: picData,
            },
          ];
          this.compressPicMap.set(picData, picData);
        }
      });
    },
    // 保存

    save(isAuto = false) {
      let parmas = { ...this.datas };
      parmas.submit = false; // 不提交，仅保存
      parmas.depDetailCostEoList = [...this.departmentList];
      if (parmas.returnLocationType == 1) {
        parmas.returnLocation =
          this.parkingList[this.parkingSel]?.dicCode || "";
      } else if (parmas.returnLocationType == 2) {
        parmas.returnLocation = this.maintainSite[this.maintainSel]?.id || "";
      }
      if (parmas.returnLocationType && !parmas.returnLocation) {
        this.alert(`请选择还车地点`);
        return;
      }
      this.$api.returnCar.addTake(parmas).then((res) => {
        if (res && !isAuto) {
          uni.showToast({
            title: "保存成功",
            icon: "success",
            duration: 1500,
            success() {},
          });
          this.isPageShow = false;
          setTimeout(() => {
            uni.navigateBack();
          }, 1500);
        }
      });
    },
    clearSign() {
      uni.showModal({
        title: "提示",
        content: "确认清除签名信息吗?",
        success: (res) => {
          if (res.confirm) {
            this.$api.returnCar.clearSignInfo({ id: this.id }).then((res) => {
              if (res) {
                this.datas.signFlowId = null;
                uni.showToast({
                  title: "清除成功",
                  icon: "success",
                  duration: 1500,
                  success() {},
                });
              }
            });
          }
        },
      });
    },
    submitConfirm() {
      uni.showModal({
        title: "提示",
        content: "确认还车?",
        success: (res) => {
          if (res.confirm) {
            this.submit();
          }
        },
      });
    },
    submit() {
      if (
        !this.datas.esignatureAttachment ||
        this.datas.esignatureAttachment.length == 0
      ) {
        this.alert(`请完成电子签名`);
        return;
      }
      let parmas = { ...this.datas };
      parmas.submit = true; //提交
      parmas.depDetailCostEoList = [...this.departmentList];
      if (parmas.returnLocationType == 1) {
        parmas.returnLocation =
          this.parkingList[this.parkingSel]?.dicCode || "";
      } else if (parmas.returnLocationType == 2) {
        parmas.returnLocation = this.maintainSite[this.maintainSel]?.id || "";
      }
      this.$api.returnCar.addTake(parmas).then((res) => {
        if (res) {
          uni.showToast({
            title: "提交成功",
            icon: "success",
            duration: 1500,
            success() {},
          });
          this.isPageShow = false;
          setTimeout(() => {
            uni.navigateBack();
          }, 1500);
        }
      });
    },
    // 在提交前检查，是否有必填字段未填写
    check() {
      if (!this.datas.returnDriver) {
        this.alert("请填写还车人");
        return false;
      }
      if (!this.datas.returneePhone) {
        this.alert("请填写还车人电话");
        return false;
      }
      if (!this.datas.identityCard) {
        this.alert("请填写还车人身份证");
        return false;
      }
      if (!this.datas.returnMileage) {
        this.alert("请填写还车里程");
        return false;
      }
      if (!this.datas.electricity) {
        this.alert("请填写还车电量");
        return false;
      }
      if (!this.datas.hydrogenMeasure) {
        this.alert("请填写还车氢量");
        return false;
      }
      if (!this.datas.hydrogenUnit) {
        this.alert("请选择还车氢量单位");
        return false;
      }
      if (!this.datas.returnDate) {
        this.alert("请填写还车时间");
        return false;
      }
      if (!this.datas.returnLocationType) {
        this.alert(`请选择还车地点类型`);
        return;
      }
      if (this.datas.returnLocationType == 1) {
        if (this.parkingSel === "" || this.parkingSel === -1) {
          this.alert(`请选择停车场`);
          return;
        }
      } else if (this.datas.returnLocationType == 2) {
        if (this.maintainSel === "" || this.maintainSel === -1) {
          this.alert(`请选择维修站`);
          return;
        }
      }
      if (!this.datas.dashboardPic) {
        this.alert("请上传仪表盘照片");
        return false;
      }
      if (!this.datas.frontPic) {
        this.alert("请上传正面照片");
        return false;
      }
      if (!this.datas.leftFrontPic) {
        this.alert("请上传左前方照片");
        return false;
      }
      if (!this.datas.rightFrontPic) {
        this.alert("请上传右前方照片");
        return false;
      }
      if (!this.datas.leftRearPic) {
        this.alert("请上传左后方照片");
        return false;
      }
      if (!this.datas.rightRearPic) {
        this.alert("请上传右后方照片");
        return false;
      }
      //   if (!this.datas.tirePic || this.datas.tirePic.length == 0) {
      //     this.alert("请上传轮胎照片");
      //     return false;
      //   }
      //   if (this.datas.tirePic.length < this.datas.take.truckSimple.tireNumber) {
      //     this.alert("轮胎照片上传数量不小于车辆轮胎数量");
      //     return false;
      //   }
      if (this.datas.take.truckSimple.tireNumber == 6) {
        if (!this.datas.leftFrontTirePic) {
          this.alert("请上传左前轮照片");
          return false;
        }
        if (!this.datas.leftRearTirePicIn) {
          this.alert("请上传左后轮(内)照片");
          return false;
        }
        if (!this.datas.leftRearTirePicOut) {
          this.alert("请上传左后轮(外)照片");
          return false;
        }
        if (!this.datas.rightFrontTirePic) {
          this.alert("请上传右前轮照片");
          return false;
        }
        if (!this.datas.rightRearTirePicIn) {
          this.alert("请上传右后轮(内)照片");
          return false;
        }
        if (!this.datas.rightRearTirePicOut) {
          this.alert("请上传右后轮(外)照片");
          return false;
        }
      } else if (
        this.datas.take.truckSimple.tireNumber == 10 ||
        this.datas.take.truckSimple.tireNumber == 12
      ) {
        if (this.datas.take.truckSimple.tireNumber == 10) {
          if (!this.datas.leftFrontTirePic) {
            this.alert("请上传左前轮照片");
            return false;
          }
          if (!this.datas.rightFrontTirePic) {
            this.alert("请上传右前轮照片");
            return false;
          }
        } else {
          if (!this.datas.leftFrontTirePicOut) {
            this.alert("请上传左前外照片");
            return false;
          }
          if (!this.datas.leftFrontTirePicIn) {
            this.alert("请上传左前内照片");
            return false;
          }
          if (!this.datas.rightFrontTirePicOut) {
            this.alert("请上传右前外照片");
            return false;
          }
          if (!this.datas.rightFrontTirePicIn) {
            this.alert("请上传右前内照片");
            return false;
          }
        }

        if (!this.datas.leftMiddleTirePicIn) {
          this.alert("请上传左中内照片");
          return false;
        }
        if (!this.datas.leftMiddleTirePicOut) {
          this.alert("请上传左中外照片");
          return false;
        }
        if (!this.datas.leftRearMiddleTirePicIn) {
          this.alert("请上传左后内照片");
          return false;
        }
        if (!this.datas.leftRearMiddleTirePicOut) {
          this.alert("请上传左后外照片");
          return false;
        }
        if (!this.datas.rightMiddleTirePicIn) {
          this.alert("请上传右中内照片");
          return false;
        }
        if (!this.datas.rightMiddleTirePicOut) {
          this.alert("请上传右中外照片");
          return false;
        }
        if (!this.datas.rightRearMiddleTirePicIn) {
          this.alert("请上传右后内照片");
          return false;
        }
        if (!this.datas.rightRearMiddleTirePicOut) {
          this.alert("请上传右后外照片");
          return false;
        }
      }
      // 底盘照片验证
      if (!this.datas.frontBottomPic) {
        this.alert("请上传正前方底部照片");
        return false;
      }
      if (!this.datas.leftFrontBottomPic) {
        this.alert("请上传左侧前部底部照片");
        return false;
      }
      if (!this.datas.leftRearBottomPic) {
        this.alert("请上传左侧后方底部照片");
        return false;
      }
      if (!this.datas.rightFrontBottomPic) {
        this.alert("请上传右侧前方底部照片");
        return false;
      }
      if (!this.datas.rightRearBottomPic) {
        this.alert("请上传右侧后方底部照片");
        return false;
      }
      if (!this.datas.rearBottomPic) {
        this.alert("请上传正后方底部照片");
        return false;
      }
      return true;
    },
    alert(msg, time = 1500) {
      uni.showToast({
        title: msg,
        icon: "none",
        duration: time,
      });
    },
    // 生成交车确认单文档
    generateWord() {
      // 若存在字段未填写，则不请求接口
      if (!this.check()) {
        return;
      }

      if (!this.hasSaveCheckList) {
        this.alert(`请填写还车检查单`);
        return;
      }

      if (!this.datas.returneePhone || !this.datas.returnDriver) {
        this.alert(`签名需要指定授权人`);
        return;
      }
      if (this.showClearTip) {
        this.alert(`当前交车单已存在签名流程，建议先清除签名信息`, 2500);
        this.showClearTip = false;
        return;
      }
      this.loading = true;
      this.loadingText = "生成签署文档中...";

      let datas = this.deepClone(this.datas);
      datas.returnDriver = datas.returnDriver.replace(/\s+/g, "");
      datas.identityCard = datas.identityCard.replace(/\s+/g, "");
      datas.returneePhone = datas.returneePhone.replace(/[^0-9]/g, "");
      this.handleDatasCompressImg(datas); // 替换为缩略图
      this.$api.returnCar.generateWordforReturn(datas).then((res) => {
        if (!res) {
          //this.alert("生成签署文档失败");
          this.loading = false;
          return;
        }
        if (res.msg === "signatureAgain") {
          this.loading = false;
          uni.navigateTo({
            url: `/pages/webview/index?url=${encodeURIComponent(res.data)}`,
          });
          return;
        }
        if (res.msg != "OK") {
          this.alert(res.msg);
          this.loading = false;
          return;
        }

        let filePath = res.data[0]?.path;
        if (!filePath) {
          this.alert("生成签署文档失败");
          this.loading = false;
          return;
        }

        this.initiateSignature(filePath);
      });
    },
    // 发起电子签章
    initiateSignature(filePath) {
      this.loading = true;
      this.loadingText = "发起电子签章中...";
      this.$api.truckRent
        .initiateSignature({
          businessType: "2",
          fileName: `${this.datas.take.truckSimple.plateNumber}还车确认单.docx`,
          filePath: filePath,
          psnAccount1: this.userInfo.phone,
          psnAccount2: this.datas.returneePhone,
          psnName1: this.userInfo.userName,
          psnName2: this.datas.returnDriver,
          signFlowTitle: `${this.datas.take.truckSimple.plateNumber}还车确认单`,
          tireNumber: this.datas.take.truckSimple.tireNumber,
        })
        .then((res) => {
          if (!res) {
            this.alert(`发起电子签章失败`);
            this.loading = false;
            return;
          }

          const signFlowId = res.data;
          if (!signFlowId) {
            this.alert(res?.msg || `发起电子签章失败`);
            this.loading = false;
            return;
          }

          this.datas.signFlowId = signFlowId;
          this.getSignatureUrl(signFlowId);
        });
    },
    // 生成签署链接
    getSignatureUrl(signFlowId) {
      this.loading = true;
      this.loadingText = "获取电子签章签署链接中...";
      this.$api.truckRent
        .getSignatureUrl({
          signFlowId: signFlowId,
          psnAccount: this.userInfo.phone,
        })
        .then((res) => {
          if (!res) {
            this.alert(`获取电子签章签署链接失败`);
            this.loading = false;
            return;
          }

          console.log(res);
          const signUrl = res.data;
          if (!signUrl) {
            this.alert(`获取电子签章签署链接失败`);
            this.loading = false;
            return;
          }

          this.loading = false;
          this.save(true); //自动保存
          uni.navigateTo({
            url: `/pages/webview/index?url=${encodeURIComponent(signUrl)}`,
          });
        });
    },
    fileDownloadUrl() {
      if (!this.datas.signFlowId) {
        uni.showToast({
          icon: "none",
          title: "请先点击签名",
          duration: 2000,
        });

        return;
      }

      this.loading = true;
      this.loadingText = "下载中...";
      this.$api.truckRent
        .fileDownloadUrl({
          signFlowId: this.datas.signFlowId,
        })
        .then((res) => {
          this.loading = false;
          if (!res) {
            this.alert(`下载失败`);
            return;
          }
          if (res.msg != "OK") {
            this.alert(res.msg);
            return;
          }

          this.datas.esignatureAttachment = res.data;
          this.fileLists[11] = res.data.map((x) => ({
            url: x.path,
            thumb: "/static/pdf.png",
          }));
          this.hasSign = true;
          this.save(true); //自动保存
        });
    },
    previewPdf() {
      if (
        !this.datas.esignatureAttachment ||
        this.datas.esignatureAttachment.length == 0
      ) {
        this.alert(`请先点击生成签署文件`);
        return;
      }

      const path = this.datas.esignatureAttachment[0].path;
      this.loading = true;
      this.loadingText = "加载中...";
      uni.downloadFile({
        url: path,
        success: function (res) {
          var filePath = res.tempFilePath;
          this.loading = false;
          uni.openDocument({
            filePath: filePath,
            success: function (res) {
              this.loading = false;
            },
            fail() {
              this.loading = false;
            },
          });
        },
        fail() {
          this.alert("预览文件失败");
          this.loading = false;
        },
      });
    },
    // 提交给生成签署文档接口的参数，其中的图片全部替换为缩略图
    handleDatasCompressImg(datas) {
      const keys1 = [
        "dashboardPic",
        "dashboard2Pic",
        "frontPic",
        "leftFrontPic",
        "rightFrontPic",
        "leftRearPic",
        "rightRearPic",
        //4.5 18T
        "leftFrontTirePic",
        "leftRearTirePicIn",
        "leftRearTirePicOut",
        "rightFrontTirePic",
        "rightRearTirePicIn",
        "rightRearTirePicOut",
        "spareTirePic",
        //49T
        "leftMiddleTirePicIn",
        "leftMiddleTirePicOut",
        "leftRearMiddleTirePicIn",
        "leftRearMiddleTirePicOut",
        "rightMiddleTirePicIn", //右中内
        "rightMiddleTirePicOut",
        "rightRearMiddleTirePicIn",
        "rightRearMiddleTirePicOut",
      ];
      for (let key of keys1) {
        if (datas[key]) {
          datas[key] = this.compressPicMap.get(datas[key]);
        }
      }

      const keys2 = ["blemish", "tirePic", "documents"];
      for (let key of keys2) {
        // 确保瑕疵照片是字符串数组格式
        if (key === "blemish") {
          datas[key] = datas[key].map((x) => this.compressPicMap.get(x) || x);
        } else {
          datas[key] = datas[key].map((x) => this.compressPicMap.get(x));
        }
      }
      //字符串数组
      const keys3 = ["signAttachment"];
      for (let key of keys3) {
        console.log(datas[key]);
        datas[key] = datas[key].map((x) => {
          return { path: this.compressPicMap.get(x.path) || x.path };
        });
      }
    },
    confirmSubject(e, index) {
      console.log(e);
      const selecItem = this.subjectList[Number(e.detail.value)];
      console.log(index);
      this.departmentList[index].subjectName = selecItem.name;
      this.departmentList[index].costSubjectId = selecItem.id;
    },
    // 删除 图片
    deletePicCost(event) {
      const index = event.name;
      const fileList = this.departmentList[index].pictureList;
      if (fileList.some((x) => x.status == "uploading")) {
        this.alert(`请等待现有图片上传完成后再操作`);
        return;
      }

      this.departmentList[index].pictureList.splice(event.index, 1);
    },
    // 删除 附件
    deletePdfCost(event) {
      const index = event.name;
      const fileList = this.departmentList[index].attachmentList;
      if (fileList.some((x) => x.status == "uploading")) {
        this.alert(`请等待现有图片上传完成后再操作`);
        return;
      }

      this.departmentList[index].attachmentList.splice(event.index, 1);
    },
    // 新增图片
    // async afterReadCost(event) {
    //   console.log(event);
    //   const index = event.name;
    //   // 当设置 multiple 为 true 时, file 为数组格式，否则为对象格式
    //   let lists = [].concat(event.file);
    //   let fileListLen = this.departmentList[index].pictureList.length;
    //   lists.map((item) => {
    //     this.departmentList[index].pictureList.push({
    //       ...item,
    //       status: "uploading",
    //       message: "上传中",
    //     });
    //   });
    //   console.log(`event.file:\n`, event.file);
    //   for (let i = 0; i < lists.length; i++) {
    //     this.loading = true;
    //     this.loadingText = "添加水印中...";
    //     const fileSize = event.file.size / 1024 ** 2; // 图片多少MB
    //     let waterUrl = "";
    //     try {
    //       waterUrl = await this.addWatermark(lists[i].url, fileSize);
    //     } catch (e) {
    //       this.alert(e.toString());
    //       this.departmentList[index].pictureList.splice(fileListLen, 1);
    //       return;
    //     }
    //     const result = await this.uploadFilePromise(waterUrl);
    //     // let result = { data: { url: waterUrl }}
    //     let item = this.departmentList[index].pictureList[fileListLen];
    //     this.departmentList[index].pictureList.splice(
    //       fileListLen,
    //       1,
    //       Object.assign(item, {
    //         status: "success",
    //         message: "",
    //         path: result.data?.url ?? item.url ?? "",
    //         thumb: waterUrl,
    //         url: result.data?.url ?? "",
    //         compressedImagePath: result.data?.compressedImageUrl ?? "",
    //       })
    //     );

    //     fileListLen++;

    //     //const imgUrl = result.data?.url ?? "";

    //     // // 司机证件
    //     // if (event.name == "13") {
    //     //   this.datas.documents.push(imgUrl);
    //     // }
    //     this.$nextTick(() => {
    //       // 解决折叠collapse高度无法动态更新的问题
    //       this.$refs.costCollapse.init();
    //     });
    //   }
    // },
    // delForm(index) {
    //   //   if (this.departmentList[depIndex].depDetailCostVoList.length <= 1) {
    //   //     this.alert(`至少保留一条数据`);
    //   //     return;
    //   //   }
    //   this.departmentList.splice(index, 1);
    //   this.$nextTick(() => {
    //     this.$refs.costCollapse.init();
    //   });
    // },

    // addForm() {
    //   this.departmentList.push({
    //     subjectName: "",
    //     costSubjectId: null,
    //     remark: "",
    //     amount: "",
    //     pictureList: [],
    //     attachmentList: [],
    //   });

    //   this.$nextTick(() => {
    //     this.$refs.costCollapse.init();
    //   });
    // },
    // 新增附件
    // async afterReadPdf(event) {
    //   const index = event.name;
    //   console.log(event);
    //   console.log(index);
    //   // 当设置 multiple 为 true 时, file 为数组格式，否则为对象格式
    //   let lists = [].concat(event.file);
    //   let fileListLen = this.departmentList[index].attachmentList.length;
    //   lists.map((item) => {
    //     this.departmentList[index].attachmentList.push({
    //       ...item,
    //       status: "uploading",
    //       message: "上传中",
    //     });
    //   });
    //   //const fileSize = event.file.size / 1024 ** 2; // 图片多少MB
    //   console.log(`event.file:\n`, event.file);
    //   for (let i = 0; i < lists.length; i++) {
    //     const result = await this.uploadFilePromise(lists[i].url);
    //     // let result = { data: { url: waterUrl }}
    //     let item = this.departmentList[index].attachmentList[fileListLen];
    //     const imgUrl = result.data?.url ?? item.url ?? "";
    //     const fileName = event.file[0]?.name ?? "";
    //     this.departmentList[index].attachmentList.splice(
    //       fileListLen,
    //       1,
    //       Object.assign(item, {
    //         status: "success",
    //         message: "",
    //         fileName: fileName,
    //         path: imgUrl,
    //         url: imgUrl,
    //         thumb: item.type === "file" ? "/static/pdf.png" : "",
    //       })
    //     );
    //     fileListLen++;
    //     console.log("fileList");
    //     console.log(result.data);
    //     // const imgUrl = result.data?.url ?? "";
    //     // const fileName = event.file[0]?.name ?? "";
    //     // this.datas.safetyTrainingAttachment.push({
    //     //   path: imgUrl,
    //     //   fileName: fileName,
    //     //   thumb: "/static/pdf.png",
    //     // });
    //     this.$nextTick(() => {
    //       // 解决折叠collapse高度无法动态更新的问题
    //       this.$refs.costCollapse.init();
    //     });
    //   }
    //   this.save(true); // 自动保存.
    // },
    // 预览附件
    previewYyPdf(data) {
      if (!data || !data.path) {
        this.alert(`文件上传异常`);
        return;
      }
      console.log(data);
      const path = data.path;
      this.loading = true;
      this.loadingText = "加载中...";
      const that = this;
      uni.downloadFile({
        url: path,
        success: function (res) {
          var filePath = res.tempFilePath;
          that.loading = false;
          uni.openDocument({
            filePath: filePath,
            success: function (res) {
              that.loading = false;
            },
            fail() {
              that.loading = false;
            },
          });
        },
        fail() {
          that.alert("预览文件失败");
          that.loading = false;
        },
      });
    },
    async getsubjectTowId() {
      await this.$api.returnCar
        .getQuerySubjectTowNames()
        .then((res) => {
          console.log("getsubject");
          console.log(res);
          this.subjectList = res;
        })
        .catch((err) => {
          console.log("error");
          this.subjectList = [];
        });
    },
  },
  computed: {
    // 大部分组件的禁用直接用 disabled：查看模式或者已完成签署
    disabled() {
      return this.isRead || this.hasSign;
    },
    //清除签名信息按钮
    clearButton: function () {
      return checkButtonPermission(
        "clearSignInfo",
        "carapplicationForDelivery"
      );
    },
  },
  async onLoad(options) {
    if (options.id) {
      this.id = options.id;
    }
    // uni.enableAlertBeforeUnload({
    //   message: "签署文件已",
    //   success: function (res) {
    //     console.log("成功：", res);
    //   },
    //   fail: function (err) {
    //     console.log("失败：", err);
    //   },
    // });
    if (options.isRead) {
      this.isRead = Number(options.isRead);
    }
    if (!this.isRead) {
      this.isPageShow = true; // 如果不是查看模式，则开启拦截
    }
    this.userInfo = getUser() || {};
    console.log(this.userInfo);
    this.checkCameraPermission(); // 检测拍照权限
    this.getDic();
    await this.getLocationTypeList(); // 获取还车地点类型列表
    await this.getParkList(); // 获取停车场列表
    await this.maintainSiteSelect(); // 获取维修站点列表
    await this.getsubjectTowId(); // 获取费用科目列表

    // 初始化文件列表
    this.initFileLists();

    this.getData();
    this.getInStoreList();
  },
  onPullDownRefresh() {
    // this.getData()
    uni.stopPullDownRefresh(); //刷新数据之后停止刷新效果
  },
  onShow() {
    if (this.loadingText != "添加水印中...") {
      this.loading = false;
    }
  },
  onHide() {},
  destroyed() {},
};
</script>
<!-- <style>
      page {
        position: relative !important;
        top: 0px !important;
      }
      </style> -->

<style lang="less" scoped>
.flexBox {
  display: flex;
  flex-wrap: wrap;

  .flexItem {
    flex: 0 0 33.3%;
    box-sizing: border-box;

    .title {
      font-size: 24rpx;
    }
  }
}

.container {
  // background-color: #d7d7d7;
  padding: 30rpx;

  .depDetailCostVoListBtns {
    display: flex;
    justify-content: flex-end;
    align-items: center;

    button {
      background-color: transparent;
      font-size: 26rpx;
      width: 100rpx;
      height: 50rpx;
      line-height: 50rpx;
      margin-left: 30rpx;
      margin-right: 0;
      padding: 0;

      &.add {
        background-color: #7ba746;
        color: white;
      }

      &.del {
        background-color: white;
        color: #7ba746;
        border: 1rpx #7ba746 solid;
      }

      &.disabled {
        opacity: 0.6;
      }
    }
  }

  .line {
    display: flex;
    align-items: center;
    margin-bottom: 15rpx;
    font-size: 14px;

    .left {
      margin-right: 50rpx;
      width: 300rpx;
    }

    .text-small {
      font-size: x-small;
    }

    .text-normal {
      font-size: small;
    }
  }

  .truckItem {
    margin-top: 30rpx;
    padding: 30rpx;
    border: #7ba746 solid 4rpx;
  }

  .item {
    margin-top: 30rpx;

    .title {
      font-size: 26rpx;
      margin-bottom: 15rpx;

      &.required::before {
        content: "*";
        color: red;
        margin-right: 3rpx;
      }
    }

    .tip {
      font-size: 26rpx;
      margin-bottom: 15rpx;
      color: #aaaaaa;
      position: relative;
    }

    .btn.checkList {
      width: 200rpx;
      height: 60rpx;
      font-size: 26rpx;
      line-height: 26rpx;
      padding: 17rpx 0;
      text-align: center;
      background-color: #7ba746;
      color: white;
      margin-left: 0;

      &.required::before {
        content: "*";
        color: red;
        margin-right: 3rpx;
      }
    }

    .unit {
      font-size: 26rpx;
    }

    .btn {
      width: 200rpx;
      height: 80rpx;
      margin-left: 0;
      font-size: 26rpx;
      line-height: 26rpx;
      padding: 27rpx 0;
      text-align: center;
      color: white;

      &.sign {
        background-color: #7ba746;
        display: inline-block;
        margin-right: 30rpx;
      }

      &.genDocument {
        background-color: #1e98d7;
      }

      &.disabled {
        opacity: 0.6;
      }
    }
  }

  .btns {
    display: flex;
    align-items: center;
    justify-content: space-around;
    margin-top: 20rpx;

    button {
      width: 200rpx;
      height: 60rpx;
      font-size: 26rpx;
      line-height: 26rpx;
      padding: 17rpx 0;
      text-align: center;
    }

    .cancel {
      background-color: white;
      color: #7ba746;
      border: 1rpx #7ba746 solid;
    }

    .save {
      background-color: #7ba746;
      color: white;
    }

    .done {
      background-color: #7ba746;
      color: white;
    }

    .disabled {
      opacity: 0.6;
    }
  }
}

/deep/ .u-textarea textarea {
  min-height: 100rpx !important;
  font-size: 26rpx !important;
}

/deep/ .u-border {
  border-width: 1rpx !important;
  border-color: gray !important;
  border-style: solid;
}

/deep/ .u-collapse-item__content__text {
  padding: unset !important;
  color: unset !important;
  font-size: unset !important;
}

/deep/ .u-cell__title-text {
  font-size: unset !important;
  line-height: unset !important;
  color: unset !important;
}

/deep/ .u-cell__body {
  padding: unset !important;
  font-size: unset !important;
  color: unset !important;
}

/deep/ .u-cell__right-icon-wrap text {
  font-size: 32rpx !important;
}

/deep/ .u-cell--clickable {
  background-color: unset !important;
}

/deep/ .u-collapse-item {
  margin-bottom: 30rpx;
}

/deep/ .uni-select {
  width: 100rpx !important;
}

/deep/ .u-upload__button text {
  font-size: 48rpx !important;
}

/deep/ .u-upload__deletable {
  height: 42rpx !important;
  width: 42rpx !important;
}

/deep/ .u-upload__deletable text {
  font-size: 32rpx !important;
  line-height: 32rpx !important;
}

/deep/ picker-view {
  height: 450rpx !important;
}

/deep/ .uni-select__input-text {
  font-size: 26rpx !important;
  text-align: right !important;
}

/deep/ .uni-select__selector-item text {
  font-size: 26rpx !important;
}

/deep/ .uni-select {
  padding-right: 18rpx !important;
  border-width: 1rpx !important;
  border-color: gray !important;
  border-style: solid !important;
  border-top-width: 0 !important;
  border-right-width: 0 !important;
  border-bottom-width: 0 !important;
}

// /deep/ picker-view picker-view-column:nth-of-type(5) {
//   display: none;
// }

.changeCarBtn {
  height: 76rpx;
  font-size: 26rpx;
  line-height: 76rpx;
  border-width: 1rpx !important;
  border-color: gray !important;
  border-style: solid !important;
  border-top-width: 0 !important;
  border-right-width: 0 !important;
  border-bottom-width: 0 !important;
}

/* 检查单样式开始 */
/deep/ .td_wrap {
  height: auto !important;
}

/deep/ checkbox-group view.td {
  width: 186rpx !important;
}

/deep/ checkbox-group view.td_wrap {
  width: 186rpx !important;
}

/deep/ .no-bad-table-wrap .td.rowspan {
  display: flex;
  align-items: center;
  justify-content: center;
}

/deep/ .div-table-head .thead .tr view {
  width: 186rpx !important;
}

/deep/ no-bad-table {
  overflow-x: hidden;
}

/deep/ .no-bad-table-wrap .thead .tr .td {
  background-color: #7ba746;
  color: white;
}

/deep/ .no-bad-table-wrap .thead .tr .td .td_wrap {
  background-color: #7ba746;
  color: white;
}

/* 检查单样式结束 */

/* loading 置于顶层 */
/deep/ .u-fade-enter-to.u-fade-enter-active {
  z-index: 10074 !important;
}
</style>
