index.vue 35.2 KB
Newer Older
lanbaoming's avatar
lanbaoming committed
1
<template>
lanbaoming's avatar
lanbaoming committed
2 3 4 5 6 7 8 9 10
  <div class="app-container">
    <el-form
      :model="queryParams"
      ref="queryForm"
      size="small"
      :inline="true"
      v-show="showSearch"
      label-width="120px"
    >
lanbaoming's avatar
lanbaoming committed
11
      <el-form-item label="收款单编号" prop="receiptNo">
lanbaoming's avatar
lanbaoming committed
12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
        <el-input
          v-model="queryParams.receiptNo"
          placeholder="收款单编号"
          clearable
        />
      </el-form-item>
      <el-form-item label="订单号" prop="orderNo">
        <el-input
          v-model="queryParams.orderNo"
          placeholder="订单号"
          clearable
        />
      </el-form-item>
      <el-form-item label="提单号" prop="tidanNo">
        <el-input
          v-model="queryParams.tidanNo"
          placeholder="提单号"
          clearable
        />
      </el-form-item>
lanbaoming's avatar
lanbaoming committed
32
      <el-form-item label="创建人" prop="creator">
lanbaoming's avatar
lanbaoming committed
33
        <el-input
lanbaoming's avatar
lanbaoming committed
34
          v-model="queryParams.creator"
lanbaoming's avatar
lanbaoming committed
35 36 37 38
          placeholder="创建人"
          clearable
        />
      </el-form-item>
lanbaoming's avatar
lanbaoming committed
39
      <el-form-item label="创建时间" prop="createDate">
lanbaoming's avatar
lanbaoming committed
40
        <el-date-picker
lanbaoming's avatar
lanbaoming committed
41 42
          v-model="queryParams.sDate1"
          type="date"
lanbaoming's avatar
lanbaoming committed
43
          style="width: 150px"
lanbaoming's avatar
lanbaoming committed
44
          value-format="yyyy-MM-dd"
lanbaoming's avatar
lanbaoming committed
45 46 47 48
          clearable
          placeholder="请输起始月"
        />
        <el-date-picker
lanbaoming's avatar
lanbaoming committed
49 50
          v-model="queryParams.eDate1"
          type="date"
lanbaoming's avatar
lanbaoming committed
51
          style="width: 150px"
lanbaoming's avatar
lanbaoming committed
52
          value-format="yyyy-MM-dd"
lanbaoming's avatar
lanbaoming committed
53 54 55 56
          clearable
          placeholder="请输截止月"
        />
      </el-form-item>
lanbaoming's avatar
lanbaoming committed
57
      <el-form-item label="提交审批时间" prop="spDate">
lanbaoming's avatar
lanbaoming committed
58
        <el-date-picker
lanbaoming's avatar
lanbaoming committed
59 60
          v-model="queryParams.sDate2"
          type="date"
lanbaoming's avatar
lanbaoming committed
61
          style="width: 150px"
lanbaoming's avatar
lanbaoming committed
62
          value-format="yyyy-MM-dd"
lanbaoming's avatar
lanbaoming committed
63 64 65 66
          clearable
          placeholder="请输起始月"
        />
        <el-date-picker
lanbaoming's avatar
lanbaoming committed
67 68
          v-model="queryParams.eDate2"
          type="date"
lanbaoming's avatar
lanbaoming committed
69
          style="width: 150px"
lanbaoming's avatar
lanbaoming committed
70
          value-format="yyyy-MM-dd"
lanbaoming's avatar
lanbaoming committed
71 72 73 74
          clearable
          placeholder="请输截止月"
        />
      </el-form-item>
lanbaoming's avatar
lanbaoming committed
75
      <el-form-item label="审批通过时间" prop="tgDate">
lanbaoming's avatar
lanbaoming committed
76
        <el-date-picker
lanbaoming's avatar
lanbaoming committed
77 78
          v-model="queryParams.sDate3"
          type="date"
lanbaoming's avatar
lanbaoming committed
79
          style="width: 150px"
lanbaoming's avatar
lanbaoming committed
80
          value-format="yyyy-MM-dd"
lanbaoming's avatar
lanbaoming committed
81 82 83 84
          clearable
          placeholder="请输起始月"
        />
        <el-date-picker
lanbaoming's avatar
lanbaoming committed
85 86
          v-model="queryParams.eDate3"
          type="date"
lanbaoming's avatar
lanbaoming committed
87
          style="width: 150px"
lanbaoming's avatar
lanbaoming committed
88
          value-format="yyyy-MM-dd"
lanbaoming's avatar
lanbaoming committed
89 90 91 92
          clearable
          placeholder="请输截止月"
        />
      </el-form-item>
lanbaoming's avatar
lanbaoming committed
93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110
      <el-form-item label="实收日期" prop="ssDate">
        <el-date-picker
          v-model="queryParams.sDate4"
          type="date"
          style="width: 150px"
          value-format="yyyy-MM-dd"
          clearable
          placeholder="请输起始月"
        />
        <el-date-picker
          v-model="queryParams.eDate4"
          type="date"
          style="width: 150px"
          value-format="yyyy-MM-dd"
          clearable
          placeholder="请输截止月"
        />
      </el-form-item>
lanbaoming's avatar
lanbaoming committed
111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127
      <el-form-item :label="$t('收款账户')" prop="accountNo">
        <el-select
          filterable
          clear
          v-model="queryParams.accountNo"
          :placeholder="$t('请选择收款账户')"
          style="width: 220px"
          v-el-select-loadmore="loadmore"
        >
          <el-option
            v-for="item in bankData"
            :key="item.id"
            :label="item.baAccountName"
            :value="item.baAccountName"
          />
        </el-select>
      </el-form-item>
lanbaoming's avatar
lanbaoming committed
128 129 130 131 132 133 134 135 136 137 138 139 140 141
      <el-form-item label="状态" prop="creator">
        <el-select
          v-model="queryParams.status"
          clearable
          style="width: 100px"
        >
        <el-option
            v-for="dict in getDictDatas(DICT_TYPE.RECEIPT_ITEM_STATE)"
            :key="dict.value"
            :label="isChinese ? dict.label : dict.labelEn"
            :value="parseInt(dict.value)"
          />
        </el-select>
      </el-form-item>
lanbaoming's avatar
lanbaoming committed
142 143 144 145 146
      <el-form-item>
        <el-button type="primary" icon="el-icon-search" @click="handleQuery"
          >搜索</el-button
        >
        <el-button icon="el-icon-refresh" @click="resetQuery">重置</el-button>
lanbaoming's avatar
lanbaoming committed
147 148 149
        <el-button type="primary" @click="handleAdd">
          {{ $t("批量提交审核") }}</el-button
        >
lanbaoming's avatar
lanbaoming committed
150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178
      </el-form-item>
    </el-form>
    <el-row :gutter="10" class="mb8">
      <el-col :span="1.5"> </el-col>
      <right-toolbar
        :showSearch.sync="showSearch"
        @queryTable="getList"
      ></right-toolbar>
    </el-row>
    <el-table
      ref="multipleTable"
      v-loading="loading"
      :data="list"
      border
      row-key="id"
      @selection-change="handleSelectionChange"
    >
      <el-table-column type="selection" width="50" :reserve-selection="true">
      </el-table-column>
      <el-table-column
        :label="$t('序号')"
        type="index"
        align="center"
        width="50"
      ></el-table-column>
      <el-table-column
        :label="$t('收款单编号')"
        align="center"
        prop="receiptNo"
lanbaoming's avatar
lanbaoming committed
179
      >
lanbaoming's avatar
lanbaoming committed
180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220
        <template slot-scope="scope">
          <span style="color: #1890ff" @click="paymentDetail1(scope.row)">{{
            scope.row.receiptNo
          }}</span>
        </template>
      </el-table-column>
      <el-table-column :label="$t('订单编号')" align="center" prop="orderNo">
        <template slot-scope="scope">
          <span style="color: #1890ff" @click="paymentDetail2(scope.row)">{{
            scope.row.orderNo
          }}</span>
        </template>
      </el-table-column>
      <el-table-column :label="$t('提单编号')" align="center" prop="tidanNo">
        <template slot-scope="scope">
          <span style="color: #1890ff" @click="paymentDetail3(scope.row)">{{
            scope.row.tidanNo
          }}</span>
        </template>
      </el-table-column>
      <el-table-column
        :label="$t('收款账户')"
        align="center"
        prop="accountName"
      />
      <el-table-column :label="$t('实收金额')" align="center" prop="amount" />
      <el-table-column :label="$t('实收币种')" align="center" prop="marks">
        <template slot-scope="scope">
          {{ getCurrencyLabel(scope.row.currencyId) }}
        </template>
      </el-table-column>
      <el-table-column :label="$t('汇率')" align="center" prop="rate" />
      <el-table-column align="center" prop="writeOffAmount">
        <template #header>
          {{ $t("兑核销基准金额") }}{{ getCurrencyLabel(showCurrencyId) }}
        </template>
      </el-table-column>
      <el-table-column :label="$t('实收日期')" align="center" prop="amountDate">
      </el-table-column>
      <el-table-column :label="$t('水单号')" align="center" prop="billNo" />
      <el-table-column :label="$t('水单附件')" align="center" prop="attr">
lanbaoming's avatar
lanbaoming committed
221 222
        <template slot-scope="scope" v-if="scope.row.attrList">
          <div v-for="(v, i) in scope.row.attrList" :key="i">
lanbaoming's avatar
lanbaoming committed
223 224 225 226 227 228 229 230 231 232 233
            <el-link :href="v.url" type="primary" target="_blank">{{
              v.name
            }}</el-link>
          </div>
        </template>
      </el-table-column>
      <el-table-column :label="$t('状态')" align="center" prop="status">
        <template slot-scope="scope">
          <dict-tag
            :type="DICT_TYPE.RECEIPT_ITEM_STATE"
            :value="scope.row.status"
lanbaoming's avatar
lanbaoming committed
234
          />
lanbaoming's avatar
lanbaoming committed
235 236
        </template>
      </el-table-column>
lanbaoming's avatar
lanbaoming committed
237 238 239 240 241 242
      <el-table-column :label="$t('创建人')" align="center" prop="creator" />
      <el-table-column
        :label="$t('创建时间')"
        align="center"
        prop="createTime"
      />
lanbaoming's avatar
lanbaoming committed
243
      <el-table-column
lanbaoming's avatar
lanbaoming committed
244
        :label="$t('提交审批人')"
lanbaoming's avatar
lanbaoming committed
245 246 247
        align="center"
        prop="createBpm"
      />
lanbaoming's avatar
lanbaoming committed
248 249 250 251 252 253 254 255 256 257
      <el-table-column
        :label="$t('提交审批时间')"
        align="center"
        prop="createTimeBpm"
      />
      <el-table-column
        :label="$t('审批通过时间')"
        align="center"
        prop="updateTimeBpm"
      />
lanbaoming's avatar
lanbaoming committed
258 259 260 261 262 263 264 265
      <el-table-column :label="$t('操作')" align="center" width="200">
        <template slot-scope="scope">
          <el-button
            v-if="scope.row.status == 0"
            v-hasPermi="['ecw:payment:detail:delete']"
            type="text"
            @click="deleteClick(scope.row)"
            >{{ $t("删除") }}</el-button
lanbaoming's avatar
lanbaoming committed
266 267
          >
          <el-button
lanbaoming's avatar
lanbaoming committed
268 269 270 271
            type="text"
            @click="detailClick(scope.row)"
            v-hasPermi="['ecw:payment:detail:detail']"
            >{{ $t("详情") }}</el-button
lanbaoming's avatar
lanbaoming committed
272
          >
lanbaoming's avatar
lanbaoming committed
273 274 275 276
          <el-button
            v-if="scope.row.status == 0"
            type="text"
            @click="
lanbaoming's avatar
lanbaoming committed
277 278 279 280 281 282
              $router.push(
                `bankDetail?id=` +
                  scope.row.receiptId +
                  `&bankId=` +
                  scope.row.id
              )
lanbaoming's avatar
lanbaoming committed
283 284
            "
            v-hasPermi="['ecw:payment:detail:writeOff']"
lanbaoming's avatar
lanbaoming committed
285
            >{{ $t("提交") }}</el-button
lanbaoming's avatar
lanbaoming committed
286 287
          >
          <el-button
lanbaoming's avatar
lanbaoming committed
288 289 290 291 292
            v-if="scope.row.status == 1"
            type="text"
            @click="showCancel(scope.$index)"
            v-hasPermi="['ecw:payment:detail:cancelWriteOff']"
            >{{ $t("反核销") }}</el-button
lanbaoming's avatar
lanbaoming committed
293
          >
lanbaoming's avatar
lanbaoming committed
294

lanbaoming's avatar
lanbaoming committed
295 296 297 298 299 300
          <el-button
            v-if="scope.row.status == 0"
            type="text"
            @click="editClick(scope.row)"
            v-hasPermi="['ecw:payment:detail:bankEdit']"
            >{{ $t("编辑") }}</el-button
lanbaoming's avatar
lanbaoming committed
301
          >
lanbaoming's avatar
lanbaoming committed
302
          <el-button
lanbaoming's avatar
lanbaoming committed
303 304 305 306 307
            v-if="scope.row.status == 2"
            type="text"
            @click="cancelClick(scope.$index, 1)"
            v-hasPermi="['ecw:payment:detail:cancelDetailApproval']"
            >{{ $t("取消审核") }}</el-button
lanbaoming's avatar
lanbaoming committed
308
          >
lanbaoming's avatar
lanbaoming committed
309 310 311 312 313 314
          <el-button
            v-if="scope.row.status == 3"
            type="text"
            @click="cancelClick(scope.$index, 2)"
            v-hasPermi="['ecw:payment:detail:cancelWriteOffNo']"
            >{{ $t("取消反核销审核") }}</el-button
lanbaoming's avatar
lanbaoming committed
315
          >
lanbaoming's avatar
lanbaoming committed
316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334
          <el-button
            v-if="scope.row.status == 3 || scope.row.status == 2"
            type="text"
            @click="
              $router.push(`/bpm/process-instance/detail?id=` + scope.row.bmpId)
            "
            v-hasPermi="['ecw:payment:detail:approval']"
            >{{ $t("审核详情") }}</el-button
          >
        </template>
      </el-table-column>
    </el-table>
    <pagination
      v-show="total > 0"
      :total="total"
      :page.sync="queryParams.pageNo"
      :limit.sync="queryParams.pageSize"
      @pagination="getList"
    />
lanbaoming's avatar
lanbaoming committed
335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378
    <el-dialog :title="cancelTitle" :visible.sync="cancelShow" width="30%">
      <div class="cancel_content">
        <span>{{ $t("申请理由") }}</span>
        <el-input
          type="textarea"
          :rows="6"
          v-model="cancelReason"
          :placeholder="$t('请输入取消理由')"
        ></el-input>
      </div>
      <span slot="footer" class="dialog-footers">
        <el-button type="primary" @click="cancelWriteOffClick()">{{
          $t("提交")
        }}</el-button>
        <el-button @click="cancelShow = false">{{ $t("取消") }}</el-button>
      </span>
    </el-dialog>
    <el-dialog
      :title="$t('收款单银行实收明细反核销-未提交')"
      :visible.sync="dialogVisible"
      width="30%"
    >
      <div class="cancel_content">
        <span>{{ $t("申请理由") }}</span>
        <el-input
          type="textarea"
          :rows="6"
          v-model="reason"
          :placeholder="$t('请输入理由')"
        ></el-input>
      </div>
      <span slot="footer" class="dialog-footer">
        <el-button type="primary" @click="verificationCancelClick()">{{
          $t("提交反核销")
        }}</el-button>
        <el-button @click="dialogVisible = false">{{ $t("取消") }}</el-button>
      </span>
    </el-dialog>
    <el-dialog
      :visible.sync="openAddDialog"
      :title="dialogTitle"
      width="50%"
      append-to-body
    >
lanbaoming's avatar
lanbaoming committed
379 380 381 382 383 384 385 386
      <el-form ref="form" :model="form" label-width="250px">
        <el-form-item :label="$t('收款单号')">
          <el-input
            disabled
            v-model="form.receipt_no"
            style="width: 220px"
          ></el-input>
        </el-form-item>
lanbaoming's avatar
lanbaoming committed
387

lanbaoming's avatar
lanbaoming committed
388
        <el-form-item :label="$t('剩余应收金额')">
lanbaoming's avatar
lanbaoming committed
389
          <span> {{ form.syValue }}</span>
lanbaoming's avatar
lanbaoming committed
390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452
        </el-form-item>
        <el-form-item :label="$t('收款账户')" prop="accountNo">
          <el-select
            :disabled="isEdit"
            filterable
            clear
            v-model="form.accountId"
            :placeholder="$t('请选择收款账户')"
            style="width: 250px"
            @change="accountChange"
            v-el-select-loadmore="loadmore"
          >
            <el-option
              v-for="item in bankData"
              :key="item.id"
              :label="item.baAccountName + '(' + item.baAccountNum + ')'"
              :value="item.id"
            />
          </el-select>
        </el-form-item>
        <el-form-item :label="$t('实收日期')" prop="amountDate">
          <el-date-picker
            :disabled="isEdit"
            v-model="form.amountDate"
            type="date"
            style="width: 150px"
            value-format="yyyy-MM-dd"
          ></el-date-picker>
        </el-form-item>

        <el-form-item :label="$t('实收')" prop="amount">
          <el-input
            v-model="form.amount"
            :disabled="isEdit"
            style="width: 100px"
          ></el-input>

          <el-select
            v-model="form.currencyId"
            :disabled="isEdit"
            :placeholder="$t('请选择')"
            @change="(val) => currencyIdChange(val)"
          >
            <el-option
              v-for="item in currencyList"
              :key="item.id"
              :label="$i18n.locale == 'zh_CN' ? item.titleZh : item.titleEn"
              :value="item.id"
            />
          </el-select>
        </el-form-item>

        <el-form-item prop="rate">
          <template slot="label">
            <span
              :title="
                $t(
                  '实收币种与核销基准币种一样时,无需填写汇率,不一样需要填写汇率'
                )
              "
              >{{ $t("兑核销基准币种汇率") }}{{
                getCurrencyLabel(showCurrencyId)
              }}</span
lanbaoming's avatar
lanbaoming committed
453
            >
lanbaoming's avatar
lanbaoming committed
454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494
          </template>
          <el-input
            v-model="form.rate"
            :disabled="isEdit"
            style="width: 220px"
          ></el-input>
        </el-form-item>
        <el-form-item>
          <template slot="label">
            {{ $t("兑核销基准币种金额") }}{{
              getCurrencyLabel(showCurrencyId)
            }}
          </template>
          <el-input
            :disabled="isEdit"
            v-model="form.writeOffAmount"
            style="width: 220px"
          ></el-input>
        </el-form-item>
        <el-form-item :label="$t('水单附件')" prop="attr">
          <el-upload
            v-if="!isView"
            class="upload-demo"
            :action="uploadFileUrl"
            :headers="headers"
            :on-success="handleUploadSuccess"
            :before-upload="handleBeforeUpload"
            :on-error="handleUploadError"
            :before-remove="beforeRemove"
            :file-list="form.attr"
            multiple
          >
            <el-button size="small" type="primary">{{
              $t("上传附件")
            }}</el-button>
          </el-upload>
          <div v-else>
            <div v-for="(v, i) in form.attr" :key="i">
              <el-link :href="v.url" type="primary" target="_blank">{{
                v.name
              }}</el-link>
lanbaoming's avatar
lanbaoming committed
495
            </div>
lanbaoming's avatar
lanbaoming committed
496 497 498 499 500 501 502 503 504
          </div>
        </el-form-item>
        <el-form-item :label="$t('水单号')" prop="billNo">
          <el-input
            v-model="form.billNo"
            :disabled="isEdit"
            style="width: 220px"
          ></el-input>
        </el-form-item>
lanbaoming's avatar
lanbaoming committed
505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541
        <!--lanbm 2024-06-12 add-->
        <el-form-item :label="$t('创建人')" v-show="isEdit" prop="creator">
          <el-input
            v-model="form.creator"
            style="width: 220px"
          ></el-input>
        </el-form-item>
        <el-form-item :label="$t('创建时间')" v-show="isEdit" prop="createTime">
          <el-input
            v-model="form.createTime"
            style="width: 220px"
          ></el-input>
        </el-form-item>
        <el-form-item :label="$t('最后更新人')" v-show="isEdit" prop="updater">
          <el-input         
            v-model="form.updater"
            style="width: 220px"
          ></el-input>
        </el-form-item>
        <el-form-item :label="$t('最后更新时间')" v-show="isEdit" prop="updateTime">
          <el-input
            v-model="form.updateTime"
            style="width: 220px"
          ></el-input>
        </el-form-item>
        <el-form-item :label="$t('提交审批人')" v-show="isEdit" prop="createBpm">
          <el-input
            v-model="form.createBpm"
            style="width: 220px"
          ></el-input>
        </el-form-item>
        <el-form-item :label="$t('审批通过时间')" v-show="isEdit" prop="updateTimeBpm">
          <el-input
            v-model="form.updateTimeBpm"
            style="width: 220px"
          ></el-input>
        </el-form-item>
lanbaoming's avatar
lanbaoming committed
542 543
      </el-form>
      <div slot="footer">
lanbaoming's avatar
lanbaoming committed
544
        <el-button type="primary" v-show="!isEdit" @click="saveFrom">{{
lanbaoming's avatar
lanbaoming committed
545 546 547
          saveBtnText
        }}</el-button>
        <el-button @click="hiddenDialog">{{ $t("取消") }}</el-button>
lanbaoming's avatar
lanbaoming committed
548 549 550 551
      </div>
    </el-dialog>
  </div>
</template>
lanbaoming's avatar
lanbaoming committed
552
  
lanbaoming's avatar
lanbaoming committed
553 554
<script>
import { getPageList } from "@/api/report/bankReceiptDetail";
lanbaoming's avatar
lanbaoming committed
555
import { getReceivableItem2 } from "@/api/ecw/financial";
lanbaoming's avatar
lanbaoming committed
556 557
import Treeselect from "@riophae/vue-treeselect";
import "@/assets/styles/vue-treeselect.css";
lanbaoming's avatar
lanbaoming committed
558
import { getBankAccountPage } from "@/api/ecw/bankAccount";
lanbaoming's avatar
lanbaoming committed
559
import { getCurrencyPage } from "@/api/ecw/currency";
lanbaoming's avatar
lanbaoming committed
560 561
import { getToken } from "@/utils/auth";
import { getExchangeRatePage } from "@/api/ecw/exchangeRate";
lanbaoming's avatar
lanbaoming committed
562 563
import {
  deleteReceiptItem, //删除收款单明细
lanbaoming's avatar
lanbaoming committed
564 565
  updateReceiptItem,
  receiptItemCreate,
lanbaoming's avatar
lanbaoming committed
566 567 568 569 570 571 572
  financeReceiptItemWriteOff2,
  cancelFinanceReceiptApproval,
  cancelFinanceReceiptApprovalNo,
  cancelFinanceReceiptWriteOffNo,
  cancelFinanceReceiptWriteOff,
  financeReceiptItemWriteOffNo,
} from "@/api/ecw/financial";
lanbaoming's avatar
lanbaoming committed
573 574 575 576 577 578 579 580 581

//2024-05-14 银行收款明细列表
export default {
  name: "ReportBankReceiptDetailsIndex",
  components: {
    Treeselect,
  },
  data() {
    return {
lanbaoming's avatar
lanbaoming committed
582 583 584 585 586
      uploadFileUrl: process.env.VUE_APP_BASE_API + "/app-api/file/upload",
      //上传的图片服务器地址
      headers: {
        Authorization: "Bearer " + getToken(),
      },
lanbaoming's avatar
lanbaoming committed
587 588
      // 遮罩层
      loading: true,
lanbaoming's avatar
lanbaoming committed
589
      UpLoading: undefined,
lanbaoming's avatar
lanbaoming committed
590 591 592 593 594 595 596 597 598 599 600
      // 导出遮罩层
      exportLoading: false,
      // 显示搜索条件
      showSearch: true,
      // 总条数
      total: 0,
      list: [],
      // 弹出层标题
      title: "",
      //是否显示弹出层
      open: false,
lanbaoming's avatar
lanbaoming committed
601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617
      form: {},
      dialogVisible: false,
      reason: "", //审核理由
      cancelShow: false,
      cancelTitle: "",
      cancelReason: "",
      cancelIndex: 0,
      selectIndex: 0,
      dialogTitle: this.$t("添加银行实收明细"),
      saveBtnText: this.$t("添加"),
      isView: false,
      openAddDialog: false,
      surplusData: [],
      addForm: {},
      detailed: [],
      deptData: [],
      deptArr: [],
lanbaoming's avatar
lanbaoming committed
618 619 620 621 622 623 624
      // 查询参数
      queryParams: {
        pageNo: 1,
        pageSize: 10,
        receiptNo: undefined, //收款单编号
        orderNo: undefined, //订单编号
        tidanNo: undefined, //提单编号
lanbaoming's avatar
lanbaoming committed
625 626 627 628 629 630
        sDate1: undefined,
        eDate1: undefined, //收款明细创建日期
        sDate2: undefined,
        eDate2: undefined, //提交审批日期
        sDate3: undefined,
        eDate3: undefined, //审批通过日期
lanbaoming's avatar
lanbaoming committed
631 632
        sDate4: undefined,
        eDate4: undefined, //实收日期
lanbaoming's avatar
lanbaoming committed
633
        creator: undefined, //创建人
lanbaoming's avatar
lanbaoming committed
634
        accountNo: undefined, //收款账号 lanbm 2024-06-12 add
lanbaoming's avatar
lanbaoming committed
635
        status:undefined,//审批状态 lanbm 2024-06-13 add
lanbaoming's avatar
lanbaoming committed
636
      },
lanbaoming's avatar
lanbaoming committed
637 638 639 640
      params: {
        page: 1,
        rows: 100,
      },
lanbaoming's avatar
lanbaoming committed
641 642 643 644 645
      currencyList: [],
      // 非单个禁用
      single: true,
      // 非多个禁用
      multiple: true,
lanbaoming's avatar
lanbaoming committed
646 647
      //选中数组
      ids: [],
lanbaoming's avatar
lanbaoming committed
648 649
      // 表单参数
      form: {},
lanbaoming's avatar
lanbaoming committed
650 651 652 653 654 655 656
      isEdit: false, //是否编辑
      bankData: [],
      codePage: {
        pageNo: 1,
        pageSize: 20,
      },
      pages: 1,
lanbaoming's avatar
lanbaoming committed
657
      rateList: [],
lanbaoming's avatar
lanbaoming committed
658 659 660
    };
  },
  async created() {
lanbaoming's avatar
lanbaoming committed
661
    await getBankAccountPage(this.codePage).then((res) => {
lanbaoming's avatar
lanbaoming committed
662 663 664 665
      this.bankData = res.data.list;
      this.pages = res.data.total / this.codePage.pageSize + 1;
    });

lanbaoming's avatar
lanbaoming committed
666
    // 获取汇率
lanbaoming's avatar
lanbaoming committed
667 668 669 670 671
    await getExchangeRatePage(this.params).then(
      (res) => (this.rateList = res.data.list)
    );

    //币种
lanbaoming's avatar
lanbaoming committed
672 673 674 675 676 677 678 679 680 681 682 683 684 685 686 687 688 689 690 691 692 693 694 695 696 697 698
    await getCurrencyPage(this.params).then(
      (res) => (this.currencyList = res.data.list)
    );
    this.getList();
  },
  computed: {
    showCurrencyId() {
      let fieldList = [];
      let groupList = [];
      this.list.map((element) => {
        if (fieldList.indexOf(element["currencyId"]) === -1) {
          fieldList.push(element["currencyId"]);
        }
      });
      for (let i = 0; i < fieldList.length; i++) {
        let arr = this.list.filter((element) => {
          return element["currencyId"] === fieldList[i];
        });
        groupList.push({
          currencyId: arr[0].currencyId,
          list: arr,
        });
      }
      if (groupList.length === 1) return groupList[0].currencyId;
      else return 1;
    },
  },
lanbaoming's avatar
lanbaoming committed
699 700 701 702 703
  watch: {
    "form.rate"() {
      this.setWriteOffAmount();
    },
  },
lanbaoming's avatar
lanbaoming committed
704
  methods: {
lanbaoming's avatar
lanbaoming committed
705 706 707 708
    isChinese() {
      //基础函数,判断系统显示语言是中文还是英文
      return this.$i18n.locale === "zh_CN";
    },
lanbaoming's avatar
lanbaoming committed
709 710 711 712 713 714 715 716 717
    // 懒加载
    loadmore() {
      this.codePage.pageNo++;
      // 大于页码不请求了
      if (this.codePage.pageNo > this.pages) {
        return;
      }
      this.getCodeList();
    },
lanbaoming's avatar
lanbaoming committed
718 719 720 721 722 723 724 725 726 727 728 729
    /** 查询列表 */
    getList() {
      this.loading = true;
      // 处理查询参数
      let params = { ...this.queryParams };
      // 执行查询
      getPageList(params).then((response) => {
        this.list = response.data.list;
        this.total = response.data.total;
        this.loading = false;
      });
    },
lanbaoming's avatar
lanbaoming committed
730 731 732 733 734 735 736 737 738 739 740 741 742 743 744 745 746 747 748 749 750 751 752 753 754 755 756 757 758
    currencyIdChange(val) {
      val = Number(val);
      let rate;
      if (val === this.showCurrencyId) {
        rate = 1;
      } else {
        rate = this.getRate(val, 1);
      }
      this.$set(this.form, "rate", rate);
      var sR = (rate * this.form.amount).toFixed(6);
      this.$set(this.form, "writeOffAmount", sR);
    },
    accountChange(val) {
      let data = this.bankData.find((item) => item.id == val);
      this.$set(this.form, "accountName", data.baAccountName || "");
      this.$set(this.form, "accountNo", data.baAccountNum || "");
      this.$set(this.form, "accountBankName", data.baBankName || "");
    },
    //获取汇率
    getRate(sourceCurrencyId, targetCurrencyId) {
      //let json1 = JSON.stringify(this.rateList);
      //alert(json1);
      let rate = this.rateList.find(
        (v) =>
          v.sourceCurrencyId === sourceCurrencyId &&
          v.targetCurrencyId === targetCurrencyId
      );
      if (rate) return rate.currencyRate;
      return "";
lanbaoming's avatar
lanbaoming committed
759 760 761
    },
    /** 表单重置 */
    reset() {
lanbaoming's avatar
lanbaoming committed
762 763 764 765 766 767 768 769 770 771 772 773 774
      this.queryParams = {
        pageNo: 1,
        pageSize: 10,
        receiptNo: undefined, //收款单编号
        orderNo: undefined, //订单编号
        tidanNo: undefined, //提单编号
        sDate1: undefined,
        eDate1: undefined, //收款明细创建日期
        sDate2: undefined,
        eDate2: undefined, //提交审批日期
        sDate3: undefined,
        eDate3: undefined, //审批通过日期
        creator: undefined, //创建人
lanbaoming's avatar
lanbaoming committed
775 776
      };
    },
lanbaoming's avatar
lanbaoming committed
777 778 779
    /** 搜索按钮操作 */
    handleQuery() {
      this.queryParams.pageNo = 1;
lanbaoming's avatar
lanbaoming committed
780 781
      this.getList();
    },
lanbaoming's avatar
lanbaoming committed
782 783
    /** 重置按钮操作 */
    resetQuery() {
lanbaoming's avatar
lanbaoming committed
784 785
      this.reset();
    },
lanbaoming's avatar
lanbaoming committed
786 787 788 789 790 791 792 793 794 795 796 797 798 799 800 801 802 803 804 805 806 807 808 809 810 811 812 813 814 815 816 817
    hiddenDialog() {
      this.openAddDialog = false;
    },
    saveFrom() {
      this.$refs.form.validate((valid) => {
        if (valid) {
          if (this.form.id) {
            const params = { ...this.form };
            /*
            params.attr &&
              (params.attr = params.attr.map((v) => v.url).join(","));
              */

            updateReceiptItem(params).then((res) => {
              this.$modal.msgSuccess(this.$t("修改成功"));
              this.openAddDialog = false;
              this.getList();
            });
            return;
          }
          const params = { ...this.form };
          params.attr &&
            (params.attr = params.attr.map((v) => v.url).join(","));
          params.receiptId = this.id;
          receiptItemCreate(params).then((res) => {
            this.$modal.msgSuccess(this.$t("新增成功"));
            this.openAddDialog = false;
            this.getList();
          });
        }
      });
    },
lanbaoming's avatar
lanbaoming committed
818 819 820 821 822 823 824 825 826 827 828 829 830 831 832 833 834 835 836 837 838 839 840 841 842 843 844 845 846 847 848 849 850 851 852 853 854 855 856 857 858 859 860 861 862 863 864 865 866 867 868 869 870 871 872 873 874 875 876 877 878 879 880 881 882 883 884 885 886 887 888 889 890 891 892 893 894 895 896 897 898 899 900 901 902 903
    //银行明细反核销
    verificationCancelClick() {
      if (!this.reason) {
        this.$modal.msgError(this.$t("请输入申请理由"));
        return;
      }
      //银行收款明细ID
      const s_id = this.list[this.selectIndex].id;
      //收款单ID
      const s_receiptId = this.list[this.selectIndex].receiptId;
      const s_receiptNo = this.list[this.selectIndex].receiptNo;
      this.$modal
        .confirm(this.$t("您确认要反核销吗") + "?")
        .then(() => {
          financeReceiptItemWriteOffNo({
            receiptId: s_receiptId, //收款单ID
            receiptNo: s_receiptNo, //收款单编号
            receiptItemId: s_id, //银行收款明细项ID
            remark: this.reason,
          }).then((res) => {
            this.getList();
            this.$message.success(this.$t("提交成功"));
            this.dialogVisible = false;
          });
        })
        .catch(() => {
          this.dialogVisible = false;
        });
    },
    //取消审核
    cancelWriteOffClick() {
      if (!this.cancelReason) {
        this.$modal.msgError(this.$t("请输入申请理由"));
        return;
      }
      //银行收款明细ID
      const s_id = this.list[this.selectIndex].id;
      //收款单ID
      var s_receiptId = this.list[this.selectIndex].receiptId;
      if (this.cancelIndex == 1) {
        //取消审核
        cancelFinanceReceiptApproval({
          receiptId: s_receiptId,
          remark: this.cancelReason,
        }).then((res) => {
          this.cancelShow = false;
          this.getList();
          this.$message.success(this.$t("提交成功"));
        });
      } else if (this.cancelIndex == 2) {
        //取消反审核
        cancelFinanceReceiptApprovalNo({
          receiptId: s_receiptId,
          remark: this.cancelReason,
        }).then((res) => {
          this.cancelShow = false;
          this.getList();
          this.$message.success(this.$t("提交成功"));
        });
      } else if (this.cancelIndex == 3) {
        //取消反核销审核
        cancelFinanceReceiptWriteOffNo({
          receiptId: s_receiptId,
          remark: this.cancelReason,
        }).then((res) => {
          this.cancelShow = false;
          this.getList();
          this.$message.success(this.$t("提交成功"));
        });
      } else {
        //取消全部核销审核
        cancelFinanceReceiptWriteOff({
          receiptId: s_receiptId,
          remark: this.cancelReason,
        }).then((res) => {
          this.cancelShow = false;
          this.getList();
          this.$message.success(this.$t("提交成功"));
        });
      }
    },
    //显示反核销弹窗
    showCancel(index) {
      this.selectIndex = index;
      this.reason = "";
      this.dialogVisible = true;
lanbaoming's avatar
lanbaoming committed
904
    },
lanbaoming's avatar
lanbaoming committed
905 906 907 908 909 910 911 912 913 914 915 916 917 918 919 920 921
    //显示取消审核弹窗
    cancelClick(index, type) {
      this.selectIndex = index;
      this.cancelIndex = type;
      this.cancelReason = "";
      if (this.cancelIndex == 1) {
        this.cancelTitle = this.$t("取消审核");
      } else if (this.cancelIndex == 2) {
        this.cancelTitle = this.$t("取消反审核");
      } else if (this.cancelIndex == 3) {
        this.cancelTitle = this.$t("取消反核销审核");
      } else {
        this.cancelTitle = this.$t("取消全部核销审核");
      }
      this.cancelShow = true;
    },
    /** 批量提交审核 */
lanbaoming's avatar
lanbaoming committed
922
    handleAdd() {
lanbaoming's avatar
lanbaoming committed
923 924 925 926 927 928 929 930 931 932 933 934 935 936 937 938 939 940 941 942 943 944 945 946 947 948 949 950
      if (this.ids.length == 0) {
        this.$message.error(this.$t("请选择需要批量提交的收款明细。"));
        return;
      }
      let objDataList = [];
      for (var i = 0; i < this.ids.length; i++) {
        //选中项中都是待提交的记录
        if (this.ids[i].status != 0) {
          this.$message.error(this.$t("选择中有不符合提交条件的收款明细。"));
          return;
        }
        var objData = {
          receiptId: this.ids[i].receiptId, //收款单ID
          receiptNo: this.ids[i].receiptNo, //收款单编号
          receiptItemId: this.ids[i].id, //收款明细ID
        };
        objDataList.push(objData);
      }
      this.$modal
        .confirm(this.$t("您确认要提交审核吗" + "?"))
        .then(() => {
          financeReceiptItemWriteOff2(objDataList).then((res) => {
            this.$message.success(this.$t("提交成功"));
            //刷新列表
            this.getList();
          });
        })
        .catch(() => {});
lanbaoming's avatar
lanbaoming committed
951 952 953 954 955 956 957 958 959 960 961 962
    },
    /** 提交按钮 */
    submitForm() {
      this.$refs["form"].validate((valid) => {
        if (!valid) {
          return;
        }

        // 修改的提交
        if (this.form.id != null) {
          update(this.form).then((response) => {
            this.$modal.msgSuccess("修改成功");
lanbaoming's avatar
lanbaoming committed
963 964 965
            this.open = false;
            this.getList();
          });
lanbaoming's avatar
lanbaoming committed
966
          return;
lanbaoming's avatar
lanbaoming committed
967
        }
lanbaoming's avatar
lanbaoming committed
968 969 970 971 972 973 974 975 976 977 978 979 980 981 982 983 984 985 986
        // 添加的提交
        create(this.form).then((response) => {
          this.$modal.msgSuccess("新增成功");
          this.open = false;
          this.getList();
        });
      });
    },
    paymentDetail1(row) {
      //到收款单详情 lanbm 2024-05-18 add
      const id = row.receiptId;
      return this.$router.push("/financial/receiptDetail?id=" + id);
    },
    paymentDetail2(row) {
      //到订单详情 lanbm 2024-05-18 add
      const id = row.id;
      return this.$router.push("/financial/receiptDetail?id=" + id);
    },
    paymentDetail3(row) {
lanbaoming's avatar
lanbaoming committed
987
      //到提单详情 lanbm 2024-05-18 add
lanbaoming's avatar
lanbaoming committed
988 989 990 991 992 993 994 995 996 997 998 999
      const id = row.id;
      return this.$router.push("/financial/receiptDetail?id=" + id);
    },
    getCurrencyLabel(id) {
      let label = this.currencyList.filter((item) => item.id == id);
      if (label.length > 0)
        return this.$i18n.locale == "zh_CN"
          ? label[0].titleZh
          : label[0].titleEn;
      return "";
    },
    handleSelectionChange(selection) {
lanbaoming's avatar
lanbaoming committed
1000 1001 1002
      //表格多选函数 lanbm 2024-05-30 add
      this.ids = [];
      this.ids = selection;
lanbaoming's avatar
lanbaoming committed
1003 1004 1005 1006 1007 1008 1009 1010 1011 1012 1013 1014
      this.single = selection.length !== 1;
      this.multiple = !selection.length;
    },
    normalizer(node) {
      if (node.children && !node.children.length) {
        delete node.children;
      }
      return {
        id: node.id,
        label: node.name,
        children: node.children,
      };
lanbaoming's avatar
lanbaoming committed
1015
    },
lanbaoming's avatar
lanbaoming committed
1016 1017 1018 1019 1020 1021 1022 1023 1024 1025 1026 1027 1028 1029 1030 1031 1032 1033 1034 1035 1036 1037 1038 1039 1040 1041 1042 1043 1044 1045 1046 1047 1048 1049 1050 1051 1052 1053 1054 1055 1056 1057 1058 1059 1060 1061 1062 1063 1064
    getsurplusData() {
      // 已收
      this.surplusData = [];
      let recepted = [];
      this.detailed.forEach((item) => {
        if (!recepted[item.currencyId]) {
          recepted[item.currencyId] = item.amount;
        } else
          recepted[item.currencyId] = NP.plus(
            recepted[item.currencyId],
            item.amount
          );
      });
      // 应收
      let collom = [];
      // 从期望收费金额中提取应收币种和金额
      this.form.receiptAccountList
        .find((item) => item.type == "total")
        .collectionAmount.forEach((item) => {
          collom[item.currencyId] = item.amount;
        });
      recepted.forEach((amount, currency) => {
        if (amount) {
          if (collom[currency]) {
            if (collom[currency] - amount != 0)
              this.surplusData[currency] = +parseFloat(
                (collom[currency] - amount).toPrecision(12)
              );
          } else {
            this.surplusData[currency] = -amount;
          }
        }
      });
      collom.forEach((amount, currency) => {
        if (amount) {
          if (!this.surplusData[currency]) {
            if (recepted[currency]) {
              if (amount - recepted[currency] != 0)
                this.surplusData[currency] = +parseFloat(
                  (amount - recepted[currency]).toPrecision(12)
                );
            } else {
              this.surplusData[currency] = amount;
            }
          }
        }
      });
    },
    detailClick(row) {
lanbaoming's avatar
lanbaoming committed
1065
      //查看详情
lanbaoming's avatar
lanbaoming committed
1066
      let id = row.id;
lanbaoming's avatar
lanbaoming committed
1067
      this.isEdit = true;
lanbaoming's avatar
lanbaoming committed
1068 1069 1070 1071 1072 1073
      getReceivableItem2(id).then((response) => {
        this.form = response.data;
        //收款单号
        this.form.receipt_no = row.receiptNo;
        //实收币种
        this.form.currencyName = this.getCurrencyLabel(row.currencyId);
lanbaoming's avatar
lanbaoming committed
1074 1075 1076 1077 1078 1079
        //水单附件 分解附件路径
        this.form.attr = response.data.attr
          ? response.data.attr
              .split(",")
              .map((t) => ({ name: t.slice(t.lastIndexOf("/") + 1), url: t }))
          : [];
lanbaoming's avatar
lanbaoming committed
1080 1081 1082 1083
        this.openAddDialog = true;
        this.dialogTitle = this.$t("银行实收明细详情");
        this.isView = true;
      });
lanbaoming's avatar
lanbaoming committed
1084 1085
    },
    editClick(row) {
lanbaoming's avatar
lanbaoming committed
1086 1087 1088 1089 1090 1091 1092 1093 1094 1095
      let id = row.id;
      this.isEdit = false;
      getReceivableItem2(id).then((response) => {
        this.form = response.data;
        //收款单号
        this.form.receipt_no = row.receiptNo;
        //实收币种
        this.form.currencyName = this.getCurrencyLabel(row.currencyId);
        //水单附件
        this.form.attr = row.attr;
lanbaoming's avatar
lanbaoming committed
1096 1097 1098 1099 1100 1101

        let bank = this.bankData.find(
          (v) => v.baAccountNum == this.form.accountNo
        );
        if (bank) this.form.accountId = bank.id;

lanbaoming's avatar
lanbaoming committed
1102 1103 1104 1105 1106
        this.openAddDialog = true;
        this.dialogTitle = this.$t("编辑银行实收明细");
        this.saveBtnText = this.$t("提交");
        this.isView = false;
      });
lanbaoming's avatar
lanbaoming committed
1107 1108 1109 1110 1111 1112 1113 1114 1115 1116 1117 1118 1119 1120
    },
    deleteClick(row) {
      const id = row.id;
      this.$modal
        .confirm(this.$t("是否确认删除该收款单") + "?")
        .then(function () {
          return deleteReceiptItem(id);
        })
        .then(() => {
          this.getList();
          this.$modal.msgSuccess(this.$t("删除成功"));
        })
        .catch(() => {});
    },
lanbaoming's avatar
lanbaoming committed
1121 1122 1123 1124 1125 1126 1127 1128 1129 1130 1131 1132 1133 1134 1135 1136 1137 1138 1139 1140 1141 1142 1143 1144 1145 1146 1147 1148 1149 1150 1151 1152 1153 1154 1155 1156 1157
    handleUploadSuccess(res, file, fileList) {
      let arr = [];
      setTimeout(() => {
        fileList.forEach((item) => {
          arr.push({
            name: item.name,
            url: item.response ? item.response.data : item.url,
          });
        });
        this.form.attr = arr;
      }, 300);
      this.UpLoading.close();
    },
    handleBeforeUpload() {
      this.UpLoading = this.$loading({
        lock: true,
        text: this.$t("上传中"),
        background: "rgba(0, 0, 0, 0.7)",
      });
    },
    handleUploadError() {
      this.$message({
        type: "error",
        message: this.$t("上传失败"),
      });
      this.UpLoading.close();
    },
    beforeRemove(file, fileList) {
      return this.$confirm(this.$t("确定移除") + "?").then((res) => {
        setTimeout(() => {
          this.form.attr = fileList.map((v) => ({
            name: v.name,
            url: v.response ? v.response.data : v.url,
          }));
        }, 300);
      });
    },
lanbaoming's avatar
lanbaoming committed
1158 1159 1160
  },
};
</script>
lanbaoming's avatar
lanbaoming committed
1161