feeApplication.vue 8.36 KB
Newer Older
dcy's avatar
dcy committed
1
<template>
2 3 4 5
    <el-dialog :visible.sync="dialogVisible"    width="80%" :before-close="()=>{
    $emit('update:dialogVisible',false)
  }">
    <div class="fee-application">
dcy's avatar
dcy committed
6
      <h1>{{$t('费用申请')}}-{{orderDetails.orderNo}}
7 8 9
      </h1>
      <el-divider></el-divider>
      <el-form label-width="100px" inline>
dcy's avatar
dcy committed
10
        <el-form-item :label="$t('订单号')+':'"><div class="content">
11
          {{orderDetails.orderNo}}
12
        </div></el-form-item>
dcy's avatar
dcy committed
13 14 15
        <el-form-item :label="$t('发货人')+':'"><div class="content">{{orderDetails.consignorVO ? orderDetails.consignorVO.name :''}}</div></el-form-item>
        <el-form-item :label="$t('唛头')"><div class="content">{{orderDetails.marks}}</div></el-form-item>
        <el-form-item> <el-button @click="addCost">{{$t('添加申请')}}</el-button></el-form-item>
16 17
      </el-form>
      <el-table :data="list">
dcy's avatar
dcy committed
18 19
         <el-table-column :label="$t('序号')" type="index"></el-table-column>
         <el-table-column :label="$t('费用类型')">
20 21 22 23
           <template  v-slot:default = "scope">
             <dict-selector  :disabled="isModify[forbidden(scope.row)]"  :type="DICT_TYPE.FEE_TYPE" v-model="scope.row.feeType" />
           </template>
         </el-table-column>
dcy's avatar
dcy committed
24
         <el-table-column :label="$t('金额')">
25 26 27 28
           <template v-slot:default = 'scope'>
             <el-input  :disabled="isModify[forbidden(scope.row)]" v-model="scope.row.applicationFee" ></el-input>
           </template>
         </el-table-column>
dcy's avatar
dcy committed
29
         <el-table-column :label="$t('货币类型')">
30
           <template v-slot:default = 'scope'>
我在何方's avatar
我在何方 committed
31 32 33
             <el-select   :disabled="isModify[forbidden(scope.row)]"  v-model="scope.row.applicationFeeCurrency">
               <el-option v-for="item in JSON.parse(currencys)" :key="item.id" :label="item.titleZh" :value="item.id" />
             </el-select>
34 35
           </template>
         </el-table-column>
dcy's avatar
dcy committed
36
         <el-table-column :label="$t('付款类型')">
37 38 39 40
           <template v-slot = {row}>
             <dict-selector  :disabled="isModify[forbidden(row)]" :type="DICT_TYPE.PAYMENT_TYPE" v-model="row.payType" />
           </template>
         </el-table-column>
dcy's avatar
dcy committed
41
         <el-table-column :label="$t('备注')">
42 43 44 45
           <template v-slot:default="scope">
             <el-input  :disabled="isModify[forbidden(scope.row)]" v-model="scope.row.remarks" type="textarea"></el-input>
           </template>
         </el-table-column>
dcy's avatar
dcy committed
46
         <el-table-column :label="$t('确认收款')">
47
           <template v-slot:default ="scope">
48
             <dict-tag :type="DICT_TYPE.ECW_RECEIVABLE_STATE" :value="scope.row.receiveFlag" />
49 50
           </template>
         </el-table-column>
dcy's avatar
dcy committed
51
         <el-table-column :label="$t('申请人')">
52
           <template v-slot:default ="scope">
dcy's avatar
dcy committed
53
             {{scope.row.status === 0 ? $t('未提交'): scope.row.applicationAuthor}}
54 55
           </template>
         </el-table-column>
dcy's avatar
dcy committed
56
         <el-table-column :label="$t('操作')">
57 58
           <template v-slot:default = 'scope'>
             <el-button type="text" v-if="scope.row.status !== 0">{{STATUS[scope.row.status]}}</el-button>
dcy's avatar
dcy committed
59
             <el-button type="text" v-if="scope.row.status === 2" @click="modify(scope.row)">{{$t('修改')}}</el-button>
60 61
           </template>
         </el-table-column>
62 63 64 65 66
      </el-table>
      <div style="padding: 20px">
        <work-flow xmlkey="free_apply" v-model="selectedUsers"  />
      </div>
      <div style="text-align: center;margin-top: 20px;">
dcy's avatar
dcy committed
67 68 69 70
        <el-button v-if="!IsExamine" style="margin-right: 30px;" @click="submit">{{$t('提交')}}</el-button>
        <el-button v-if="IsExamine" style="margin-right: 30px;" @click="examineFn">{{$t('审核中')}}</el-button>
        <el-button v-if="IsExamine" style="margin-right: 30px;" @click="cancel">{{$t('取消审核')}}</el-button>
        <el-button @click="$emit('update:dialogVisible',false)">{{$t('返回')}}</el-button>
71
      </div>
dcy's avatar
dcy committed
72
    </div>
73 74
  </el-dialog>

dcy's avatar
dcy committed
75 76 77
</template>

<script>
dcy's avatar
dcy committed
78 79 80 81 82 83 84
import {
  getOrder,
  feeApplicationCreate,
  ApplicationListByOrderId,
  applicationUpdate,
  feeApplicationListByOrderId, feeApplicationCancel
} from "@/api/ecw/order";
85 86
import { getDictDatas, DICT_TYPE } from '@/utils/dict';
import Template from "@/views/cms/template";
dcy's avatar
dcy committed
87
import workFlow from "@/components/WorkFlow";
dcy's avatar
dcy committed
88
export default {
89
  name: "feeApplication",
dcy's avatar
dcy committed
90
  components: {Template,workFlow},
91 92
  props:{
    orderId:[Number, String],
93 94 95
    dialogVisible:{
      type:Boolean,
      default:false,
我在何方's avatar
我在何方 committed
96 97
    },
    currencys:String
98 99 100 101 102 103 104
  },
  data(){
    return {
      orderDetails:{},
      list:[],
      DICT_TYPE,
      getDictDatas,
dcy's avatar
dcy committed
105 106
      STATUS:{},
      isModify:[],
107
      isModifyIf:false,
dcy's avatar
dcy committed
108
      selectedUsers:[]
109 110 111
    }
  },
  created() {
dcy's avatar
dcy committed
112 113
    this.getDictDatas(this.DICT_TYPE.AUDIT_STATUS).forEach( e =>{
      this.STATUS[e.value] = e.label
dcy's avatar
dcy committed
114 115
    })

dcy's avatar
dcy committed
116 117 118 119
  },
  computed:{
    forbidden(){
      return (row)=>{
120
        return this.list.findIndex(e => e.id === row.id)
dcy's avatar
dcy committed
121
      }
dcy's avatar
dcy committed
122 123 124
    },
    IsExamine(){
      return this.list.some(e => e.status === 1)
dcy's avatar
dcy committed
125
    }
126 127 128
  },
  methods:{
    addCost(){
dcy's avatar
dcy committed
129
      if(this.list.some(e => e.status === 0 || e.status === 1)){
dcy's avatar
dcy committed
130
        return this.$message.success(this.$t('当前有申请费用为审核中或未提交,请审核后在申请'));
dcy's avatar
dcy committed
131
      }
132 133 134 135 136 137 138 139 140 141 142 143
        this.list.push(
          {
            orderId:this.orderId,
            feeType:undefined,//费用申请类型
            applicationFee:undefined,//金额
            applicationFeeCurrency:undefined,//	费用申请货币类型
            remarks:undefined,
            receiveFlag:0,
            applicationAuthor:undefined,
            status:0,
          }
        )
dcy's avatar
dcy committed
144 145
      this.isModify.push(false)
      this.isModifyIf = false;
146 147
    },
    submit(){
dcy's avatar
dcy committed
148 149 150
      if(this.isModifyIf){
        applicationUpdate({...this.list[this.isModify.findIndex(e => e === false)],status:1}).then(r => {
          if(r.code === 0){
151
            this.$emit('update:dialogVisible',false)
dcy's avatar
dcy committed
152
            this.$message.success(this.$t('修改成功'));
dcy's avatar
dcy committed
153 154 155
          }
        })
      }else {
dcy's avatar
dcy committed
156
        if(this.list[this.list.length - 1].status === 0){
157
          feeApplicationCreate( {...this.list[this.list.length - 1],status:1,copyUserId:this.selectedUsers}).then(r=>{
dcy's avatar
dcy committed
158
            if(r.code === 0){
159
              this.$emit('update:dialogVisible',false)
dcy's avatar
dcy committed
160
              this.$message.success(this.$t('添加成功'));
dcy's avatar
dcy committed
161
              this.selectedUsers = [];
dcy's avatar
dcy committed
162 163
            }
          })
dcy's avatar
dcy committed
164
        }else {
dcy's avatar
dcy committed
165
          this.$message.success(this.$t('当前有申请费用为审核中或未提交,请审核后在申请'));
dcy's avatar
dcy committed
166 167 168 169 170 171 172 173
        }
      }
    },
    getOrderList(){
      ApplicationListByOrderId({orderId: this.orderId}).then(r => {
        if(r.code === 0){
          this.list = r.data;
          this.list.forEach(()=>this.isModify.push(true))
174
          let p = this.list.find(e => e.status === 1)
dcy's avatar
dcy committed
175
        }
176
      })
dcy's avatar
dcy committed
177 178
    },
    modify(row){
dcy's avatar
dcy committed
179
      if(this.list.some(i => i.status === 0 || i.status === 1))return this.$message.warning(this.$t('当前有未提交的数据或审核中的数据不能修改'))
dcy's avatar
dcy committed
180
      this.isModifyIf = true;
181 182 183
      this.isModify.forEach((item,index)=>{
        this.$set(this.isModify, index, true )
      })
184
       this.$set(this.isModify, this.list.findIndex(e => e.id === row.id), false )
dcy's avatar
dcy committed
185 186 187 188
    },
    examineFn(){
     let item =  this.list.find(e => e.status === 1);
      this.$router.push({path:'/bpm/process-instance/detail',query:{id:item.bpmProcessId}})
189
    },
dcy's avatar
dcy committed
190
    cancel(){
dcy's avatar
dcy committed
191 192 193
      this.$prompt(this.$t('请输入取消原因'), this.$t('提示'), {
        confirmButtonText: this.$t('确定'),
        cancelButtonText: this.$t('取消'),
dcy's avatar
dcy committed
194 195 196 197 198
      }).then(({ value }) => {
        let item =  this.list.find(e => e.status === 1);
        feeApplicationCancel({huifu:value,bpmProcessId:item.bpmProcessId}).then(r => {
          this.$message({
            type: 'success',
dcy's avatar
dcy committed
199
            message:this.$t('取消成功')
dcy's avatar
dcy committed
200 201 202 203 204 205
          });
          this.$emit('update:dialogVisible',false)
        })
      }).catch(() => {
      });
    }
206 207 208 209
  },
  watch:{
    dialogVisible(val){
       if(val){
210
         this.isModify = []
211 212 213 214 215 216 217 218
         this.getOrderList()
         getOrder(this.orderId).then(r =>{
           if(r.code === 0){
             this.orderDetails = r.data
           }
         })
       }
    },
219
  }
dcy's avatar
dcy committed
220 221 222 223 224 225 226 227 228 229 230 231 232 233
}
</script>

<style scoped lang="scss">
.fee-application {
  padding: 0 20px;
  h1{
    font-weight: 600;
    font-size: 20px;
  }
  .content{
    width: 200px;
  }
}
234 235 236 237 238 239 240 241
.my-process-designer {
  height: calc(100vh - 200px);
}

.box-card {
  width: 100%;
  margin-bottom: 20px;
}
dcy's avatar
dcy committed
242
</style>