feeApplication.vue 11.6 KB
Newer Older
lanbaoming's avatar
lanbaoming committed
1
<template>
lanbaoming's avatar
lanbaoming committed
2 3 4 5 6 7 8 9 10
  <el-dialog
    :visible.sync="dialogVisible"
    width="80%"
    :before-close="
      () => {
        $emit('update:dialogVisible', false);
      }
    "
  >
lanbaoming's avatar
lanbaoming committed
11
    <div class="fee-application">
lanbaoming's avatar
lanbaoming committed
12
      <h1>{{ $t("费用申请") }}-{{ orderDetails.orderNo }}</h1>
lanbaoming's avatar
lanbaoming committed
13 14
      <el-divider></el-divider>
      <el-form label-width="100px" inline>
lanbaoming's avatar
lanbaoming committed
15
        <el-form-item :label="$t('订单号') + ':'"
16 17
        >
          <div class="content">
lanbaoming's avatar
lanbaoming committed
18
            {{ orderDetails.orderNo }}
19 20
          </div>
        </el-form-item
lanbaoming's avatar
lanbaoming committed
21 22
        >
        <el-form-item :label="$t('发货人') + ':'"
23 24
        >
          <div class="content">
lanbaoming's avatar
lanbaoming committed
25
            {{ orderDetails.consignorVO ? orderDetails.consignorVO.name : "" }}
26 27
          </div>
        </el-form-item
lanbaoming's avatar
lanbaoming committed
28 29
        >
        <el-form-item :label="$t('唛头')"
30 31 32
        >
          <div class="content">{{ orderDetails.marks }}</div>
        </el-form-item
lanbaoming's avatar
lanbaoming committed
33 34 35
        >
        <el-form-item>
          <el-button
36
            :disabled="!!processInstanceId "
lanbaoming's avatar
lanbaoming committed
37
            @click="addCost"
38 39 40 41
          >{{ $t("添加申请") }}
          </el-button
          >
        </el-form-item
lanbaoming's avatar
lanbaoming committed
42
        >
lanbaoming's avatar
lanbaoming committed
43 44
      </el-form>
      <el-table :data="list">
lanbaoming's avatar
lanbaoming committed
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 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115
        <el-table-column :label="$t('序号')" type="index"></el-table-column>
        <el-table-column :label="$t('费用类型')">
          <template v-slot:default="scope">
            <dict-selector
              :disabled="!scope.row.editMode && !!scope.row.status"
              :type="DICT_TYPE.FEE_TYPE"
              v-model="scope.row.feeType"
            />
          </template>
        </el-table-column>
        <el-table-column :label="$t('金额')">
          <template v-slot:default="scope">
            <el-input
              :disabled="!scope.row.editMode && !!scope.row.status"
              v-model.number="scope.row.applicationFee"
            ></el-input>
          </template>
        </el-table-column>
        <el-table-column :label="$t('货币类型')">
          <template v-slot:default="scope">
            <el-select
              :disabled="!scope.row.editMode && !!scope.row.status"
              v-model="scope.row.applicationFeeCurrency"
            >
              <el-option
                v-for="item in JSON.parse(currencys)"
                :key="item.id"
                :label="isChinese ? item.titleZh : item.titleEn"
                :value="item.id"
              />
            </el-select>
          </template>
        </el-table-column>
        <el-table-column :label="$t('付款类型')">
          <template v-slot="{ row }">
            <dict-selector
              :disabled="!row.editMode && !!row.status"
              :type="DICT_TYPE.PAYMENT_TYPE"
              v-model="row.payType"
            />
          </template>
        </el-table-column>
        <el-table-column :label="$t('备注')">
          <template v-slot:default="scope">
            <el-input
              :disabled="!scope.row.editMode && !!scope.row.status"
              v-model="scope.row.remarks"
              type="textarea"
            ></el-input>
          </template>
        </el-table-column>
        <el-table-column :label="$t('确认收款')">
          <template v-slot:default="scope">
            <dict-tag
              :type="DICT_TYPE.ECW_RECEIVABLE_STATE"
              :value="scope.row.receiveFlag"
            />
          </template>
        </el-table-column>
        <el-table-column :label="$t('申请人')">
          <template v-slot:default="scope">
            {{
              scope.row.status === 0
                ? $t("未提交")
                : scope.row.applicationAuthor
            }}
          </template>
        </el-table-column>
        <el-table-column :label="$t('操作')">
          <template v-slot:default="scope">
            <el-tag v-if="scope.row.status !== 0 && !scope.row.editMode">{{
116 117 118
                STATUS[scope.row.status]
              }}
            </el-tag>
lanbaoming's avatar
lanbaoming committed
119 120 121
            <!--el-button type="text" v-if="scope.row.status == 1" @click="examineFn">{{$t('审核中')}}</el-button-->
            <el-button
              type="text"
122
              v-if="scope.row.id && modifable(scope.row)"
lanbaoming's avatar
lanbaoming committed
123
              @click="modify(scope.row)"
124 125
            >{{ $t("修改") }}
            </el-button
lanbaoming's avatar
lanbaoming committed
126 127 128 129 130
            >
            <el-button
              type="text"
              v-if="scope.row.status === 0"
              @click="del(scope.$index)"
131 132 133 134 135
            >删除
            </el-button
            >
            <el-button
              type="text"
136
              v-if="scope.row.id && scope.row.applicationFee === 0 && scope.row.status === 2 && !scope.row.editMode"
137 138 139
              @click="deleteByFeeIsZero(scope.row.id)"
            >删除
            </el-button
lanbaoming's avatar
lanbaoming committed
140 141 142
            >
          </template>
        </el-table-column>
lanbaoming's avatar
lanbaoming committed
143 144
      </el-table>
      <div style="padding: 20px">
145
        <work-flow xmlkey="free_apply" v-model="selectedUsers"/>
lanbaoming's avatar
lanbaoming committed
146
      </div>
lanbaoming's avatar
lanbaoming committed
147 148 149 150 151 152 153
      <div style="text-align: center; margin-top: 20px">
        <el-button
          type="primary"
          v-if="!processInstanceId"
          style="margin-right: 30px"
          :disabled="!feeList.length && !editMode"
          @click="submit"
154 155
        >{{ $t("提交") }}
        </el-button
lanbaoming's avatar
lanbaoming committed
156 157 158 159 160 161
        >
        <el-button
          type="primary"
          v-if="processInstanceId"
          style="margin-right: 30px"
          @click="goProcessDetail"
162 163
        >{{ $t("审核中") }}
        </el-button
lanbaoming's avatar
lanbaoming committed
164 165 166 167 168 169
        >
        <el-button
          type="primary"
          v-if="processInstanceId"
          style="margin-right: 30px"
          @click="cancel"
170 171
        >{{ $t("取消审核") }}
        </el-button
lanbaoming's avatar
lanbaoming committed
172 173
        >
        <el-button @click="$emit('update:dialogVisible', false)">{{
174 175 176
            $t("返回")
          }}
        </el-button>
lanbaoming's avatar
lanbaoming committed
177 178 179 180 181 182 183 184 185 186 187 188 189 190 191
      </div>
    </div>
  </el-dialog>
</template>

<script>
import {
  getOrder,
  feeApplicationCreateBatch,
  ApplicationListByOrderId,
  applicationUpdate,
  feeApplicationListByOrderId,
  feeApplicationCancel,
  getFeeApplicationApproveByOrderId,
  getBatchFeeByProcessId,
lanbaoming's avatar
lanbaoming committed
192
  qetBatchFeeByBusinessId,
193
  getBatchFeeByBusinessId, feeApplicationDelete,
lanbaoming's avatar
lanbaoming committed
194
} from "@/api/ecw/order";
195
import {getDictDatas, DICT_TYPE} from "@/utils/dict";
lanbaoming's avatar
lanbaoming committed
196
import workFlow from "@/components/WorkFlow";
197

lanbaoming's avatar
lanbaoming committed
198 199
export default {
  name: "feeApplication",
200
  components: {workFlow},
lanbaoming's avatar
lanbaoming committed
201 202 203 204 205
  props: {
    orderId: [Number, String],
    dialogVisible: {
      type: Boolean,
      default: false,
lanbaoming's avatar
lanbaoming committed
206
    },
lanbaoming's avatar
lanbaoming committed
207
    currencys: String,
lanbaoming's avatar
lanbaoming committed
208
  },
lanbaoming's avatar
lanbaoming committed
209
  data() {
lanbaoming's avatar
lanbaoming committed
210
    return {
lanbaoming's avatar
lanbaoming committed
211
      orderDetails: {},
lanbaoming's avatar
lanbaoming committed
212
      // 费用列表
lanbaoming's avatar
lanbaoming committed
213
      list: [],
lanbaoming's avatar
lanbaoming committed
214 215 216 217 218
      // 审核ID,没有则表示不在审核中
      processInstanceId: null,

      DICT_TYPE,
      getDictDatas,
lanbaoming's avatar
lanbaoming committed
219 220 221
      STATUS: {},
      selectedUsers: [],
    };
lanbaoming's avatar
lanbaoming committed
222
  },
lanbaoming's avatar
lanbaoming committed
223 224 225 226 227
  computed: {
    isChinese() {
      return this.$i18n.locale === "zh_CN";
    },
    feeList() {
228 229
      // return this.list.filter((item) => item.status === 0);
      return this.list;
lanbaoming's avatar
lanbaoming committed
230 231 232 233 234 235 236 237 238 239
    },
    // 正在编辑的费用申请
    currentItem() {
      return this.list.find((item) => item.editMode);
    },
    // 是否修改模式
    editMode() {
      return !!this.currentItem;
    },
    modifable() {
240
      return (item) => {
lanbaoming's avatar
lanbaoming committed
241 242 243
        // 审核中不允许修改
        if (this.processInstanceId) return false;
        // 有未提交的不允许修改
244
        // if (this.feeList.length) return false;
245 246
        // 修改中的不允许修改
        if (item.editMode) return false;
lanbaoming's avatar
lanbaoming committed
247
        return true;
lanbaoming's avatar
lanbaoming committed
248
      }
249
    }
lanbaoming's avatar
lanbaoming committed
250
  },
lanbaoming's avatar
lanbaoming committed
251
  created() {
lanbaoming's avatar
lanbaoming committed
252 253 254
    this.getDictDatas(this.DICT_TYPE.AUDIT_STATUS).forEach((e) => {
      this.STATUS[e.value] = e.label;
    });
lanbaoming's avatar
lanbaoming committed
255

lanbaoming's avatar
lanbaoming committed
256 257 258
    getOrder(this.orderId).then((res) => {
      this.orderDetails = res.data;
    });
lanbaoming's avatar
lanbaoming committed
259

lanbaoming's avatar
lanbaoming committed
260
    // 查询历史申请
261
    feeApplicationListByOrderId({orderId: this.orderId}).then((res) => {
lanbaoming's avatar
lanbaoming committed
262 263
      this.list = res.data;
    });
lanbaoming's avatar
lanbaoming committed
264 265

    // 查询是否有审核中的费用申请
lanbaoming's avatar
lanbaoming committed
266
    getFeeApplicationApproveByOrderId(this.orderId).then((res) => {
zhengyi's avatar
zhengyi committed
267
      if (res.data) {
lanbaoming's avatar
lanbaoming committed
268
        this.processInstanceId = res.data.formId;
lanbaoming's avatar
lanbaoming committed
269 270 271 272
        /*getBatchFeeByBusinessId(res.data.orderApprovalId).then(res => {
          this.list = res.data
        })*/
      }
lanbaoming's avatar
lanbaoming committed
273
    });
lanbaoming's avatar
lanbaoming committed
274
  },
lanbaoming's avatar
lanbaoming committed
275 276
  methods: {
    del(index) {
lanbaoming's avatar
lanbaoming committed
277
      this.$confirm(this.$t("确定要删除此条费用申请么?")).then(() => {
lanbaoming's avatar
lanbaoming committed
278 279
        this.list.splice(index, 1);
      });
lanbaoming's avatar
lanbaoming committed
280 281
    },
    // 修改
lanbaoming's avatar
lanbaoming committed
282 283
    modify(item) {
      this.$set(item, "editMode", true);
lanbaoming's avatar
lanbaoming committed
284
    },
lanbaoming's avatar
lanbaoming committed
285 286 287 288 289 290 291 292 293 294 295
    addCost() {
      this.list.push({
        orderId: this.orderId,
        feeType: undefined, //费用申请类型
        applicationFee: undefined, //金额
        applicationFeeCurrency: undefined, //	费用申请货币类型
        remarks: undefined,
        receiveFlag: 0,
        applicationAuthor: undefined,
        status: 0,
      });
lanbaoming's avatar
lanbaoming committed
296
    },
297 298 299 300 301 302 303 304 305 306 307
    deleteByFeeIsZero(id) {
      this.$confirm(this.$t("确定要删除此条费用申请么?")).then(() => {
        feeApplicationDelete(id).then((r) => {
          this.$message({
            type: "success",
            message: this.$t("删除成功"),
          });
          this.$emit("update:dialogVisible", false);
        });
      });
    },
lanbaoming's avatar
lanbaoming committed
308 309
    submit() {
      // 判断费用申请是否有未填项
310
      // console.log("提交的费用信息列表", this.feeList)
lanbaoming's avatar
lanbaoming committed
311 312 313
      const errList = this.feeList.filter((item) => {
        return (
          !item["feeType"] ||
zhengyi's avatar
zhengyi committed
314
          item.applicationFee == null || item.applicationFee == undefined ||
lanbaoming's avatar
lanbaoming committed
315 316 317 318 319 320 321
          !item["applicationFeeCurrency"] ||
          !item["payType"]
        );
      });
      if (errList.length) {
        return this.$message.error("请填写完整费用申请信息");
      }
322 323 324 325 326 327 328 329 330 331 332 333
      // if (this.editMode) {
      //   // 要提交status=1,否则保持原状态
      //   const data = {
      //     ...this.currentItem,
      //     status: 1,
      //     copyUserId: this.selectedUsers,
      //   };
      //   return applicationUpdate(data).then((r) => {
      //     this.$message.success(this.$t("修改成功"));
      //     this.$emit("update:dialogVisible", false);
      //   });
      // }
lanbaoming's avatar
lanbaoming committed
334

lanbaoming's avatar
lanbaoming committed
335 336 337 338 339 340 341 342 343
      feeApplicationCreateBatch({
        orderFeeApplicationCreateReqVOList: this.feeList,
        copyUserId: this.selectedUsers,
        orderId: this.orderId,
      }).then((r) => {
        if (r.code === 0) {
          this.$emit("update:dialogVisible", false);
          this.$message.success(this.$t("添加成功"));
          this.selectedUsers = [];
344
          this.$emit("refresh")
lanbaoming's avatar
lanbaoming committed
345 346
        }
      });
lanbaoming's avatar
lanbaoming committed
347
    },
lanbaoming's avatar
lanbaoming committed
348 349 350 351 352
    goProcessDetail() {
      this.$emit("update:dialogVisible", false);
      this.$router.push(
        "/bpm/process-instance/detail?id=" + this.processInstanceId
      );
lanbaoming's avatar
lanbaoming committed
353
    },
lanbaoming's avatar
lanbaoming committed
354 355 356 357 358
    cancel() {
      this.$prompt(this.$t("请输入取消原因"), this.$t("提示"), {
        confirmButtonText: this.$t("确定"),
        cancelButtonText: this.$t("取消"),
      })
359
        .then(({value}) => {
lanbaoming's avatar
lanbaoming committed
360 361 362 363 364 365 366 367 368 369
          let item = this.list.find((e) => e.status === 1);
          feeApplicationCancel({
            huifu: value,
            bpmProcessId: this.processInstanceId,
          }).then((r) => {
            this.$message({
              type: "success",
              message: this.$t("取消成功"),
            });
            this.$emit("update:dialogVisible", false);
lanbaoming's avatar
lanbaoming committed
370 371
          });
        })
372 373
        .catch(() => {
        });
lanbaoming's avatar
lanbaoming committed
374
    },
lanbaoming's avatar
lanbaoming committed
375
  },
lanbaoming's avatar
lanbaoming committed
376 377 378 379 380 381 382 383 384 385
  watch: {
    dialogVisible(val) {
      if (val) {
        this.getOrderList();
        getOrder(this.orderId).then((r) => {
          if (r.code === 0) {
            this.orderDetails = r.data;
          }
        });
      }
lanbaoming's avatar
lanbaoming committed
386
    },
lanbaoming's avatar
lanbaoming committed
387 388
  },
};
lanbaoming's avatar
lanbaoming committed
389 390 391 392 393
</script>

<style scoped lang="scss">
.fee-application {
  padding: 0 20px;
394

lanbaoming's avatar
lanbaoming committed
395
  h1 {
lanbaoming's avatar
lanbaoming committed
396 397 398
    font-weight: 600;
    font-size: 20px;
  }
399

lanbaoming's avatar
lanbaoming committed
400
  .content {
lanbaoming's avatar
lanbaoming committed
401 402 403
    width: 200px;
  }
}
404

lanbaoming's avatar
lanbaoming committed
405 406 407 408 409 410 411 412 413
.my-process-designer {
  height: calc(100vh - 200px);
}

.box-card {
  width: 100%;
  margin-bottom: 20px;
}
</style>