payable.vue 15.7 KB
Newer Older
lanbaoming's avatar
lanbaoming committed
1 2
<template>
  <div class="app-container">
lanbaoming's avatar
lanbaoming committed
3
    <div slot="header" class="card-title">{{ $t("应付款") }}</div>
lanbaoming's avatar
lanbaoming committed
4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69
    <!-- 搜索工作栏 -->
    <el-card v-show="showSearch">
      <el-form
        :model="queryParams"
        ref="queryForm"
        size="small"
        :inline="true"
        label-width="100px"
        class="card"
      >
        <el-row>
          <el-form-item :label="$t('柜号')">
            <el-input
              style="max-width: 188px"
              v-model="queryParams.containerNo"
              :placeholder="$t('请输入柜号')"
              clearable
              @keyup.enter.native="handleQuery"
            />
          </el-form-item>
          <el-form-item :label="$t('自编号')">
            <el-input
              style="max-width: 188px"
              v-model="queryParams.payableNo"
              :placeholder="$t('请输入自编号')"
              clearable
              @keyup.enter.native="handleQuery"
            />
          </el-form-item>
          <el-form-item :label="$t('始发仓')">
            <el-select
              v-model="queryParams.departureId"
              :placeholder="$t('请选择始发仓')"
              clearable
            >
              <el-option
                v-for="item in exportWarehouseList"
                :label="$l(item, 'title')"
                :value="item.id"
                :key="item.id"
              ></el-option>
            </el-select>
          </el-form-item>
          <el-form-item :label="$t('目的仓')">
            <el-select
              v-model="queryParams.objectiveId"
              :placeholder="$t('请选择目的仓')"
              clearable
            >
              <el-option
                v-for="item in importWarehouseList"
                :label="$l(item, 'title')"
                :value="item.id"
                :key="item.id"
              ></el-option>
            </el-select>
          </el-form-item>
          <el-form-item :label="$t('运输方式')">
            <dict-selector
              :type="DICT_TYPE.ECW_TRANSPORT_TYPE"
              v-model="queryParams.transportId"
              formatter="number"
              clearable
            />
          </el-form-item>
        </el-row>
lanbaoming's avatar
lanbaoming committed
70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86
        <el-row>
          <!--lanbm 2024-05-17 add-->
          <el-form-item label="时间节点" prop="dateType">
            <el-select
              v-model="queryParams.dateType"
              :placeholder="$t('请选择时间类型')"
              clearable
              size="small"
            >
              <el-option
                v-for="item in dateTypes"
                :key="item.value"
                :label="$l(item, 'label')"
                :value="item.value"
              />
            </el-select>
          </el-form-item>
lanbaoming's avatar
lanbaoming committed
87

lanbaoming's avatar
lanbaoming committed
88 89 90 91 92
          <el-form-item label="" prop="dateRangeCreateTime">
            <el-date-picker
              v-model="queryParams.dateRangeCreateTime"
              style="width: 300px"
              value-format="yyyy-MM-dd"
lanbaoming's avatar
lanbaoming committed
93
              type="daterange"
lanbaoming's avatar
lanbaoming committed
94 95 96 97 98 99 100
              range-separator="-"
              :start-placeholder="$t('开始日期')"
              :end-placeholder="$t('结束日期')"
              clearable
            />
          </el-form-item>
        </el-row>
lanbaoming's avatar
lanbaoming committed
101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118
        <el-row>
          <el-form-item :label="$t('供应商名称')">
            <el-input
              style="max-width: 188px"
              v-model="queryParams.supplierName"
              :placeholder="$t('请输入供应商名称')"
              clearable
              @keyup.enter.native="handleQuery"
            />
          </el-form-item>
          <el-form-item :label="$t('费用类型')">
            <dict-selector
              :type="DICT_TYPE.FEE_TYPE"
              v-model="queryParams.feeType"
              clearable
            ></dict-selector>
          </el-form-item>
          <el-form-item>
lanbaoming's avatar
lanbaoming committed
119 120 121
            <el-button type="primary" @click="handleQuery">{{
              $t("查找")
            }}</el-button>
lanbaoming's avatar
lanbaoming committed
122 123 124 125 126
            <el-button
              style="margin-left: 10px"
              type="success"
              v-hasPermi="['ecw:payable:create']"
              @click="handleAdd(0)"
lanbaoming's avatar
lanbaoming committed
127
              >{{ $t("新增付款单") }}</el-button
lanbaoming's avatar
lanbaoming committed
128
            >
lanbaoming's avatar
lanbaoming committed
129
            <!--lanbm 2024-05-17修改此按钮名称-->
lanbaoming's avatar
lanbaoming committed
130 131 132 133 134 135
          </el-form-item>
        </el-row>
      </el-form>
    </el-card>
    <el-table v-loading="loadings" :data="list" border class="card">
      <el-table-column :label="$t('自编号')" align="center" prop="payableNo" />
lanbaoming's avatar
lanbaoming committed
136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156
      <!--lanbm 2024-05-17 add-->
      <el-table-column
        :label="$t('自编号状态')"
        align="center"
        prop="shipmentStatusText"
      />
      <el-table-column
        :label="$t('运输方式')"
        align="center"
        prop="transportTypeName"
      />
      <el-table-column
        :label="$t('货柜号')"
        align="center"
        prop="containerNo"
      />
      <el-table-column
        :label="$t('供应商')"
        align="center"
        prop="supplierName"
      />
lanbaoming's avatar
lanbaoming committed
157 158 159 160 161 162 163 164 165 166 167
      <el-table-column :label="$t('费用类型')" align="center" prop="feeType">
        <template slot-scope="scope">
          <dict-tag
            :type="DICT_TYPE.FEE_TYPE"
            :value="scope.row.feeType"
          ></dict-tag>
        </template>
      </el-table-column>
      <el-table-column :label="$t('金额')" align="center" prop="totalAmount">
        <template slot-scope="scope">
          <span>{{ scope.row.totalAmount }}</span>
lanbaoming's avatar
lanbaoming committed
168
          <span>{{ getCurrencyLabel(scope.row.currencyId) }}</span>
lanbaoming's avatar
lanbaoming committed
169 170
        </template>
      </el-table-column>
lanbaoming's avatar
lanbaoming committed
171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191
      <el-table-column
        :label="$t('费用产生时间')"
        align="center"
        prop="freecsdate"
      />
      <!--lanbm 2024-05-17 添加字段 BaseDO -->
      <el-table-column :label="$t('创建人')" align="center" prop="creator" />
      <el-table-column
        :label="$t('创建时间')"
        align="center"
        prop="createTime"
      />
      <el-table-column :label="$t('修改人')" align="center" prop="updater" />
      <el-table-column
        :label="$t('修改时间')"
        align="center"
        prop="updateTime"
      />

      <el-table-column :label="$t('备注')" align="center" prop="remark" />

lanbaoming's avatar
lanbaoming committed
192 193 194 195 196 197 198
      <el-table-column
        :label="$t('操作')"
        align="center"
        class-name="small-padding fixed-width"
      >
        <template slot-scope="scope">
          <el-button
lanbaoming's avatar
lanbaoming committed
199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218
            size="mini"
            type="text"
            v-hasPermi="['ecw:payable:edit']"
            @click="editClick(scope.row)"
            >{{ $t("编辑") }}</el-button
          >
          <el-button
            size="mini"
            type="text"
            v-hasPermi="['ecw:payable:add']"
            @click="handleAdd(scope.row.id)"
            >{{ $t("请款") }}</el-button
          >
          <el-button
            size="mini"
            type="text"
            v-hasPermi="['ecw:payable:delete']"
            @click="deleteClick(scope.row)"
            >{{ $t("删除") }}</el-button
          >
lanbaoming's avatar
lanbaoming committed
219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236
        </template>
      </el-table-column>
    </el-table>
    <!-- 分页组件 -->
    <pagination
      v-show="total > 0"
      :total="total"
      :page.sync="queryParams.page"
      :limit.sync="queryParams.rows"
      @pagination="getList"
    />
    <!-- 对话框(添加 / 修改) -->
    <el-dialog
      :title="$t('费用登记')"
      :visible.sync="open"
      width="500px"
      append-to-body
    >
lanbaoming's avatar
lanbaoming committed
237
      <el-form ref="costForm" :model="costObj" label-width="120px">
lanbaoming's avatar
lanbaoming committed
238
        <el-form-item :label="$t('操作步骤')">
lanbaoming's avatar
lanbaoming committed
239 240 241 242 243 244 245 246 247 248
          <el-select
            v-model="costObj.stepsId"
            :placeholder="$t('请选择操作步骤')"
          >
            <el-option
              v-for="item in this.getDictDatas(DICT_TYPE.BOX_SHIPPING_PROCESS)"
              :key="item.value"
              :label="item.label"
              :value="item.value"
            ></el-option>
lanbaoming's avatar
lanbaoming committed
249 250 251 252
          </el-select>
        </el-form-item>

        <el-form-item :label="$t('费用类型')">
lanbaoming's avatar
lanbaoming committed
253 254 255 256 257 258 259 260 261 262
          <el-select
            v-model="costObj.feeType"
            :placeholder="$t('请选择费用类型')"
          >
            <el-option
              v-for="item in this.getDictDatas(DICT_TYPE.FEE_TYPE)"
              :key="item.value"
              :label="item.label"
              :value="item.value"
            ></el-option>
lanbaoming's avatar
lanbaoming committed
263 264 265 266
          </el-select>
        </el-form-item>

        <el-form-item :label="$t('供应商')">
lanbaoming's avatar
lanbaoming committed
267 268 269 270 271 272 273 274 275 276
          <el-select
            v-model="costObj.supplierId"
            :placeholder="$t('请选择供应商')"
          >
            <el-option
              v-for="supplier in allSupplier"
              :key="supplier.id"
              :label="supplier.companyZh"
              :value="supplier.id"
            ></el-option>
lanbaoming's avatar
lanbaoming committed
277 278
          </el-select>
        </el-form-item>
lanbaoming's avatar
lanbaoming committed
279 280 281 282 283 284 285 286 287 288 289
        <!--lanbm 2024-05-17 添加字段-->
        <el-form-item :label="$t('费用产生时间')" prop="freecsdate">
          <el-date-picker
            v-model="costObj.freecsdate"
            style="width: 200px"
            value-format="yyyy-MM-dd"
            format="yyyy-MM-dd"
            type="datetime"
            placeholder="费用产生时间"
          />
        </el-form-item>
lanbaoming's avatar
lanbaoming committed
290 291 292

        <el-row class="two-element">
          <el-form-item :label="$t('金额')">
lanbaoming's avatar
lanbaoming committed
293 294 295 296 297
            <el-input-number
              v-model="costObj.totalAmount"
              controls-position="right"
              :min="1"
            ></el-input-number>
lanbaoming's avatar
lanbaoming committed
298 299
          </el-form-item>
          <el-form-item label="" label-width="0px">
lanbaoming's avatar
lanbaoming committed
300 301 302 303 304 305 306 307 308 309
            <el-select
              v-model="costObj.currencyId"
              :placeholder="$t('请选择单位')"
            >
              <el-option
                v-for="item in currencyList"
                :key="item.id"
                :label="$i18n.locale == 'zh_CN' ? item.titleZh : item.titleEn"
                :value="item.id"
              ></el-option>
lanbaoming's avatar
lanbaoming committed
310 311 312 313 314
            </el-select>
          </el-form-item>
        </el-row>

        <el-form-item :label="$t('备注')">
lanbaoming's avatar
lanbaoming committed
315 316 317 318 319 320
          <el-input
            v-model="costObj.remark"
            type="textarea"
            rows="2"
            :placeholder="$t('请输入备注')"
          ></el-input>
lanbaoming's avatar
lanbaoming committed
321 322 323
        </el-form-item>
      </el-form>
      <div slot="footer" class="operate-button">
lanbaoming's avatar
lanbaoming committed
324 325 326 327
        <el-button type="primary" @click="submitEditForm">{{
          $t("确定")
        }}</el-button>
        <el-button @click="cancelEditForm">{{ $t("取消") }}</el-button>
lanbaoming's avatar
lanbaoming committed
328 329 330 331 332 333 334 335 336
      </div>
    </el-dialog>
  </div>
</template>

<script>
import { userList } from "@/api/system/user";
import { DICT_TYPE } from "@/utils/dict";
import { getTradeCityList } from "@/api/ecw/region";
lanbaoming's avatar
lanbaoming committed
337 338 339 340 341
import {
  getPayableList,
  deletePayable,
  updatePayable,
} from "@/api/ecw/financial";
lanbaoming's avatar
lanbaoming committed
342 343
import { getSupplierPage } from "@/api/ecw/supplier";
import { getCurrencyPage } from "@/api/ecw/currency";
lanbaoming's avatar
lanbaoming committed
344
import { getWarehouseList } from "@/api/ecw/warehouse";
lanbaoming's avatar
lanbaoming committed
345

lanbaoming's avatar
lanbaoming committed
346 347 348
/*
应付款
*/
lanbaoming's avatar
lanbaoming committed
349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370
export default {
  name: "EcwFinancialPayable",
  components: {},
  data() {
    return {
      open: false,
      showSearch: true,
      loadings: false,
      tradeCityList: [],
      costObj: {},
      creatorData: [],
      list: [],
      total: 0,
      dateType: [],
      loading: "",
      params: {
        page: 1,
        rows: 20,
      },
      queryParams: {
        page: 1,
        rows: 20,
lanbaoming's avatar
lanbaoming committed
371
        dateRangeCreateTime: undefined,
lanbaoming's avatar
lanbaoming committed
372 373
        beginCreateTime: undefined,
        endCreateTime: undefined,
lanbaoming's avatar
lanbaoming committed
374 375
      },
      allSupplier: [],
lanbaoming's avatar
lanbaoming committed
376 377 378 379
      currencyList: [],
      warehouseList: [],
      //lanbm 2024-05-17 add
      dateTypes: [
lanbaoming's avatar
lanbaoming committed
380
        { value: "7", label: this.$t("费用产生时间") },
lanbaoming's avatar
lanbaoming committed
381 382 383 384 385 386 387
        { value: "1", label: this.$t("预装时间") },
        { value: "2", label: this.$t("装柜时间") },
        { value: "3", label: this.$t("起运时间") },
        { value: "4", label: this.$t("到港时间") },
        { value: "5", label: this.$t("清关时间") },
        { value: "6", label: this.$t("卸柜时间") },
      ],
lanbaoming's avatar
lanbaoming committed
388 389 390 391 392 393 394 395 396
    };
  },
  computed: {
    expoerCityList() {
      return this.tradeCityList.filter((item) => item.type == 2);
    },
    importCityList() {
      return this.tradeCityList.filter((item) => item.type == 1);
    },
lanbaoming's avatar
lanbaoming committed
397
    exportWarehouseList() {
lanbaoming's avatar
lanbaoming committed
398
      /* tradeType 1 进口,2出口,3进出口 */
lanbaoming's avatar
lanbaoming committed
399 400 401
      return this.warehouseList.filter(
        (item) => item.tradeType == 2 || item.tradeType == 3
      );
lanbaoming's avatar
lanbaoming committed
402
    },
lanbaoming's avatar
lanbaoming committed
403 404 405 406
    importWarehouseList() {
      return this.warehouseList.filter(
        (item) => item.tradeType == 1 || item.tradeType == 3
      );
lanbaoming's avatar
lanbaoming committed
407 408
    },
  },
lanbaoming's avatar
lanbaoming committed
409 410
  activated() {
    this.handleQuery();
lanbaoming's avatar
lanbaoming committed
411 412 413
  },
  created() {
    let that = this;
lanbaoming's avatar
lanbaoming committed
414 415 416 417
    getWarehouseList().then((res) => (this.warehouseList = res.data));
    getCurrencyPage(this.params).then(
      (res) => (this.currencyList = res.data.list)
    );
lanbaoming's avatar
lanbaoming committed
418 419
    userList("salesman").then((res) => (that.creatorData = res.data));
    getTradeCityList().then((res) => (that.tradeCityList = res.data));
lanbaoming's avatar
lanbaoming committed
420
    this.getList();
lanbaoming's avatar
lanbaoming committed
421 422 423 424 425 426 427 428 429 430 431 432 433
    getSupplierPage({ pageNo: "1", pageSize: "10000" }).then((res) => {
      const { data } = res;
      this.allSupplier = data.list;
    });
  },
  methods: {
    /** 查询列表 */
    getList() {
      this.loading = true;
      // 处理查询参数
      let params = { ...this.queryParams };
      this.addBeginAndEndTime(params, this.dateRangeCreateTime, "createTime");
      // 执行查询
lanbaoming's avatar
lanbaoming committed
434 435 436 437 438 439 440
      if (
        params.dateRangeCreateTime != null &&
        params.dateRangeCreateTime.length == 2
      ) {
        params.beginCreateTime = params.dateRangeCreateTime[0];
        params.endCreateTime = params.dateRangeCreateTime[1];
      }
lanbaoming's avatar
lanbaoming committed
441 442 443 444 445 446
      getPayableList(params).then((response) => {
        this.list = response.data.list;
        this.total = response.data.total;
        this.loading = false;
      });
    },
lanbaoming's avatar
lanbaoming committed
447 448 449 450 451 452 453
    getCurrencyLabel(id) {
      var 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 "";
lanbaoming's avatar
lanbaoming committed
454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472
    },
    /** 搜索按钮操作 */
    handleQuery() {
      this.queryParams.pageNo = 1;
      this.getList();
    },
    /** 新增按钮操作 */
    handleAdd(id) {
      return this.$router.push("creatPayment?payableId=" + id);
    },
    submitEditForm() {
      const params = {
        invoiceNumber: this.costObj.invoiceNumber,
        id: this.costObj.id,
        stepsId: this.costObj.stepsId,
        feeType: this.costObj.feeType,
        supplierId: this.costObj.supplierId,
        totalAmount: this.costObj.totalAmount,
        currencyId: this.costObj.currencyId,
lanbaoming's avatar
lanbaoming committed
473 474 475 476
        remark: this.costObj.remark,
      };
      updatePayable(params).then((res) => {
        this.$modal.msgSuccess(this.$t("修改成功"));
lanbaoming's avatar
lanbaoming committed
477 478
        this.getList();
        this.open = false;
lanbaoming's avatar
lanbaoming committed
479
      });
lanbaoming's avatar
lanbaoming committed
480 481 482 483 484 485
    },
    /** 取消按钮 */
    cancelEditForm() {
      this.open = false;
    },
    editClick(row) {
lanbaoming's avatar
lanbaoming committed
486 487 488 489 490
      row.stepsId = String(row.stepsId);
      row.feeType = String(row.feeType);
      row.currencyId = row.currencyId;
      console.log(row);
      this.costObj = { ...row };
lanbaoming's avatar
lanbaoming committed
491 492 493 494
      this.open = true;
    },
    deleteClick(row) {
      const id = row.id;
lanbaoming's avatar
lanbaoming committed
495 496 497 498 499 500 501 502 503 504
      this.$modal
        .confirm(this.$t("是否确认删除该应付款") + "?")
        .then(function () {
          return deletePayable(id);
        })
        .then(() => {
          this.getList();
          this.$modal.msgSuccess(this.$t("删除成功"));
        })
        .catch(() => {});
lanbaoming's avatar
lanbaoming committed
505 506 507 508 509 510
    },
  },
};
</script>

<style lang="scss" scoped>
lanbaoming's avatar
lanbaoming committed
511 512 513 514 515 516
.small-padding ::v-deep .el-button {
}
// 页面内元素弹窗form控件宽度设置
::v-deep .el-form-item__content {
  > div:not(.el-input-number) {
    width: 100%;
lanbaoming's avatar
lanbaoming committed
517
  }
lanbaoming's avatar
lanbaoming committed
518 519 520 521 522 523 524 525 526
}
.operate-button {
  text-align: center;
}
.two-element {
  display: flex;
  > :last-child {
    width: 100%;
    margin-left: 10px;
lanbaoming's avatar
lanbaoming committed
527
  }
lanbaoming's avatar
lanbaoming committed
528 529 530 531 532 533 534 535 536 537 538
}
.card {
  margin-top: 20px;
}
.dialog-footer {
  padding: 40px;
}
.card-title {
  font-size: 18px;
  font-weight: bold;
}
lanbaoming's avatar
lanbaoming committed
539
</style>