wujianwei
7 天以前 e38b54037fb3e2a7e2014c0f1931d026ac6f6972
ui/admin-ui3/src/views/tms/tmsApBill/index.vue
@@ -1,25 +1,10 @@
<template>
  <basicContainer>
    <avue-crud
        :option="option"
        :table-loading="pageF.loading"
        :data="tableData"
        :page="page"
        :permission="permissionList"
        :before-open="beforeOpen"
        v-model="form" v-model:search="queryParams"
        ref="crudRef"
        @row-update="rowUpdate"
        @row-save="rowSave"
        @refresh-change="refreshChange"
        @row-del="rowDel"
        @search-change="searchChange"
        @search-reset="searchReset"
        @selection-change="selectionChange"
        @current-change="currentChange"
        @size-change="sizeChange"
        @on-load="onLoad"
    >
    <avue-crud :option="option" :table-loading="pageF.loading" :data="tableData" :page="page"
      :permission="permissionList" :before-open="beforeOpen" v-model="form" v-model:search="queryParams" ref="crudRef"
      @row-update="rowUpdate" @row-save="rowSave" @refresh-change="refreshChange" @row-del="rowDel"
      @search-change="searchChange" @search-reset="searchReset" @selection-change="selectionChange"
      @current-change="currentChange" @size-change="sizeChange" @on-load="onLoad">
      <template #menu-left>
        <!--        <el-button-->
        <!--            type="success"-->
@@ -36,81 +21,76 @@
        <!--            v-hasPermi="['tms:tmsApBill:remove']"-->
        <!--        >删除-->
        <!--        </el-button>-->
        <el-button
            type="warning"
            plain
            icon="Download"
            @click="handleExport"
            v-hasPermi="['tms:tmsApBill:export']"
        >导出
        <el-button type="warning" plain icon="Download" @click="handleExport" v-hasPermi="['tms:tmsApBill:export']">导出
        </el-button>
      </template>
      <template #menu="{row}">
      <template #menu="{ row }">
        <!-- <el-link size="small" type="primary" v-if="row.status != 2"
                 @click="handleJs(row)" class="link-btn" :underline="false"
                 icon="el-icon-tickets">结算
        </el-link> -->
          <el-link size="small" type="primary" v-if="row.pushStatus == '3' || row.pushStatus == '4'"
        <el-link size="small" type="primary" v-if="row.pushStatus == '3' || row.pushStatus == '4'"
          @click="handleManualPush(row)" class="link-btn" underline="never" icon="el-icon-upload">手动推送
        </el-link>
        <el-link size="small" type="primary"  v-if="row.status == 0"
                 @click="handleEdit(row)" class="link-btn" :underline="false"
                 icon="el-icon-edit">账单确认
        <el-link size="small" type="primary" v-if="row.status == 0" @click="handleEdit(row)" class="link-btn"
          :underline="false" icon="el-icon-edit">账单确认
        </el-link>
        <el-link size="small" type="primary"
                 @click="handleView(row)" class="link-btn" :underline="false"
                 icon="el-icon-view">查看
        <el-link size="small" type="primary" @click="handleView(row)" class="link-btn" :underline="false"
          icon="el-icon-view">查看
        </el-link>
        <el-link size="small" type="primary"
                 @click="handleLog(row)" class="link-btn" :underline="false"
                 icon="el-icon-tickets">日志
        <!-- <el-link size="small" type="primary" @click="handleLog(row)" class="link-btn" :underline="false"
          icon="el-icon-tickets">日志
        </el-link> -->
        <el-link size="small" type="primary" @click="handleFlow(row)" class="link-btn" underline="never"
          icon="el-icon-document">
          审核日志
        </el-link>
      </template>
    </avue-crud>
    <el-dialog :title="pageF.title" v-model="pageF.open" class="avue-dialog avue-dialog--top" width="80%">
      <avue-form v-if="opt == 'js'"  v-model="boxForm" ref="boxFormRef"
                 :option="boxFormOption">
      <avue-form v-if="opt == 'js'" v-model="boxForm" ref="boxFormRef" :option="boxFormOption">
        <template #settleAmount>
          <avue-input-number :min="0" :max="form.actualSettlementAmount" v-model="boxForm.settleAmount" placeholder="请输入结算金额"></avue-input-number>
          <avue-input-number :min="0" :max="form.actualSettlementAmount" v-model="boxForm.settleAmount"
            placeholder="请输入结算金额"></avue-input-number>
        </template>
      </avue-form>
      <el-descriptions :column="3" title="账单基本信息"  border>
        <el-descriptions-item label="账单系统编号">{{form.systemNo}}</el-descriptions-item>
      <el-descriptions :column="3" title="账单基本信息" border>
        <el-descriptions-item label="账单系统编号">{{ form.systemNo }}</el-descriptions-item>
        <el-descriptions-item label="账单名称">
          <div v-if="opt === 'edit'">
            <el-input v-model="form.billName" placeholder="请输入账单名称" />
          </div>
          <div v-else>{{form.billName}}</div>
          <div v-else>{{ form.billName }}</div>
        </el-descriptions-item>
        <el-descriptions-item label="客户名称">{{form.customerName}}</el-descriptions-item>
        <el-descriptions-item label="应结算金额">{{form.settleAmount}}</el-descriptions-item>
        <el-descriptions-item label="客户名称">{{ form.customerName }}</el-descriptions-item>
        <el-descriptions-item label="应结算金额">{{ form.settleAmount }}</el-descriptions-item>
        <el-descriptions-item label="减免金额">
          <div v-if="opt === 'edit'">
            <el-input-number :max="form.settleAmount" v-model="form.deductionAmount" placeholder="请输入减免金额" @change="deductionAmountChange" />
            <el-input-number :max="form.settleAmount" v-model="form.deductionAmount" placeholder="请输入减免金额"
              @change="deductionAmountChange" />
          </div>
          <div v-else>{{form.deductionAmount}}</div>
          <div v-else>{{ form.deductionAmount }}</div>
        </el-descriptions-item>
        <el-descriptions-item label="实际结算金额" v-if="opt == 'edit'">{{form.actualSettlementAmount}}</el-descriptions-item>
        <el-descriptions-item label="实际结算金额" v-if="opt == 'edit'">{{ form.actualSettlementAmount }}</el-descriptions-item>
        <el-descriptions-item label="减免原因" v-if="opt == 'edit'">
          <div v-if="opt === 'edit'">
            <el-input v-model="form.reasonReduction" placeholder="请输入减免原因" />
          </div>
          <div v-else>{{form.reasonReduction}}</div></el-descriptions-item>
        <el-descriptions-item label="已结算金额" v-if="opt == 'js'">{{form.settledAmount}}</el-descriptions-item>
        <el-descriptions-item label="待结算金额" v-if="opt == 'js'">{{Number(form.settleAmount) - Number(form.settledAmount)}}</el-descriptions-item>
          <div v-else>{{ form.reasonReduction }}</div>
        </el-descriptions-item>
        <el-descriptions-item label="已结算金额" v-if="opt == 'js'">{{ form.settledAmount }}</el-descriptions-item>
        <el-descriptions-item label="待结算金额" v-if="opt == 'js'">{{ Number(form.settleAmount) -
          Number(form.settledAmount)}}</el-descriptions-item>
      </el-descriptions>
      <h3>关联明细</h3>
      <avue-crud
          :option="YSGenerateTableOption" ref="itemsTableRef"
          :data="form.items"
      >
        <template #menu="{row}">
          <el-link size="small" type="primary"
                   @click="handleCancel(row)" class="link-btn" :underline="false"
                   icon="el-icon-close">取消关联
      <avue-crud :option="YSGenerateTableOption" ref="itemsTableRef" :data="form.items">
        <template #menu="{ row }">
          <el-link size="small" type="primary" @click="handleCancel(row)" class="link-btn" :underline="false"
            icon="el-icon-close">取消关联
          </el-link>
        </template>
@@ -127,10 +107,7 @@
    </el-dialog>
    <el-dialog :title="pageF.title" v-model="open2" class="avue-dialog avue-dialog--top" width="80%">
      <avue-crud
          :option="logTableOption" ref="itemsTableRef2"
          :data="logTable"
      >
      <avue-crud :option="logTableOption" ref="itemsTableRef2" :data="logTable">
      </avue-crud>
@@ -144,6 +121,7 @@
  </basicContainer>
      <flowLog ref="flowLogIshow" :isShow="false" title="审核日志" :flowParams="flowParams"></flowLog>
</template>
<script setup name="tmsApBill" lang="ts">
@@ -154,17 +132,17 @@
  exportTmsApBill,
  getTmsApBill,
  listTmsApBill,
  updateTmsApBill,manualPushTmsApBill
  updateTmsApBill, manualPushTmsApBill,getPayableAuditLog
} from "@/api/tms/tmsApBill";
import useCurrentInstance from "@/utils/useCurrentInstance";
import {computed, reactive, ref, toRefs} from "vue";
import {PagesInterface, PageQueryInterface} from "@/utils/globalInterface";
import {usePagePlus} from "@/hooks/usePagePlus";
import {hasPermission} from "@/utils/permissionUtils";
import {cancelArBill, getTmsArBill} from "@/api/tms/tmsArBill";
import {ElMessage, ElMessageBox} from "element-plus";
import { computed, reactive, ref, toRefs } from "vue";
import { PagesInterface, PageQueryInterface } from "@/utils/globalInterface";
import { usePagePlus } from "@/hooks/usePagePlus";
import { hasPermission } from "@/utils/permissionUtils";
import { cancelArBill, getTmsArBill } from "@/api/tms/tmsArBill";
import { ElMessage, ElMessageBox } from "element-plus";
const {proxy} = useCurrentInstance();
const { proxy } = useCurrentInstance();
const crudRef = ref();
const permissionList = computed(() => {
@@ -186,10 +164,10 @@
  },
  selectionList: [],
  opt: '',
  boxForm:<any> {},
  boxForm: <any>{},
  open2: false
})
const {queryParams, form, page, selectionList,opt,boxForm,open2} = toRefs(data);
const { queryParams, form, page, selectionList, opt, boxForm, open2 } = toRefs(data);
const option = ref({
  pageKey: 'TmsApBill',
  rowKey: 'id',
@@ -209,67 +187,67 @@
    // },
    systemNo: {
      label: '系统编号',
      hide: false,minWidth:150,
      hide: false, minWidth: 150,
      search: true,
    },
    billName: {
      label: '账单名称',
      hide: false,
      search: true,minWidth:220,
      search: true, minWidth: 220,
      showOverflowTooltip: true
    },
    serviceProviderName: {
      label: '供应商名称',
      hide: false,
      search: true,minWidth:220,
      search: true, minWidth: 220,
      showOverflowTooltip: true
    },
    dispatchCount: {
      label: '调度单数量',
      hide: false,
      search: false,minWidth:120,
      search: false, minWidth: 120,
    },
    settleAmount: {
      label: '应结算金额',minWidth:120,
      label: '应结算金额', minWidth: 120,
      hide: false,
      search: false,
    },
    deductionAmount: {
      label: '减免金额',minWidth:120,
      label: '减免金额', minWidth: 120,
      hide: false,
      search: false,
    },
    actualSettlementAmount: {
      label: '实际结算金额',
      hide: false,
      search: false,minWidth:120,
      search: false, minWidth: 120,
    },
    settledAmount: {
      label: '已结算金额',
      hide: false,
      search: false,minWidth:120,
      search: false, minWidth: 120,
    },
    pushTime: {
      label: '推送时间', display: false,  searchRange: true, type: 'date',
      label: '推送时间', display: false, searchRange: true, type: 'date',
      format: 'YYYY-MM-DD', hide: false, searchSpan: 6, minWidth: 150,
      valueFormat: 'YYYY-MM-DD',
    },
    invoiceStatus: {
      label: '开票状态',minWidth:120,fixed:'right',
      label: '开票状态', minWidth: 120, fixed: 'right',
      type: 'radio', dataType: 'string', dicUrl: '/system/dict/data/type/invoice_status',
      hide: false,
      search: true,
    },
    status: {
      label: '状态',minWidth:120,fixed:'right',
      label: '状态', minWidth: 120, fixed: 'right',
      type: 'radio', dataType: 'string', dicUrl: '/system/dict/data/type/ar_bill_status',
      hide: false,
      search: true,
    },
  pushStatus: {
    pushStatus: {
      label: '推送状态',
      minWidth: 120,
      type: 'radio', dataType: 'string', dicUrl: '/system/dict/data/type/sys_push_status',
@@ -318,31 +296,31 @@
  }
})
const YSGenerateTableOption= ref({
const YSGenerateTableOption = ref({
  menu: true,
  add: false,
  header:false,
  header: false,
  selection: false,
  rowKey:'id',
  editBtn:false,
  viewBtn:false,
  rowKey: 'id',
  editBtn: false,
  viewBtn: false,
  delBtn: false,
  column:{
  column: {
    projectName:{
    projectName: {
      label: '项目名称',
    },
    dispatchNo:{
    dispatchNo: {
      label: '调度单号',
    },
    orderTime:{
    orderTime: {
      label: '下单时间',
    },
    estimateAmount:{
    estimateAmount: {
      label: '预估应收金额',
    },
    currency:{
    currency: {
      label: '币制',
    }
  }
@@ -381,31 +359,31 @@
  }
})
const boxFormRef = ref();
const logTableOption= ref({
const logTableOption = ref({
  menu: false,
  add: false,
  header:false,
  header: false,
  selection: false,
  rowKey:'id',
  rowKey: 'id',
  column:{
  column: {
    settleAmount:{
    settleAmount: {
      label: '结算金额',
    },
    createBy:{
    createBy: {
      label: '处理人员',
    },
    attachment:{
    attachment: {
      label: '附件下载',
      dataType: 'string',
      type: 'img'
    },
    remark:{
    remark: {
      label: '备注',
    },
    createTime:{
    createTime: {
      label: '提交时间',
    },
  }
@@ -418,8 +396,8 @@
const handleView = (row: any) => {
  form.value.items = [];
  getTmsApBill(row.id).then((res:any) => {
    form.value = res.data ||{};
  getTmsApBill(row.id).then((res: any) => {
    form.value = res.data || {};
    pageF.open = true;
    pageF.title = '应付账单确认';
    opt.value = 'edit'
@@ -430,8 +408,8 @@
}
const handleEdit = (row: any) => {
  form.value.items = [];
  getTmsApBill(row.id).then((res:any) => {
    form.value = res.data ||{};
  getTmsApBill(row.id).then((res: any) => {
    form.value = res.data || {};
    pageF.open = true;
    pageF.title = '应付账单确认';
    opt.value = 'edit'
@@ -445,10 +423,10 @@
const editSubmit = () => {
}
const deductionAmountChange = (e:any) => {
  form.value.actualSettlementAmount =(Number(form.value.settleAmount) || 0) -( Number(form.value.deductionAmount) || 0);
const deductionAmountChange = (e: any) => {
  form.value.actualSettlementAmount = (Number(form.value.settleAmount) || 0) - (Number(form.value.deductionAmount) || 0);
}
const handleCancel = (row:any) => {
const handleCancel = (row: any) => {
  ElMessageBox.confirm("是否对调度单号" + row.dispatchNo + "的应付费用取消关联?", '系统提示', {
    confirmButtonText: '确定',
    cancelButtonText: '取消',
@@ -470,7 +448,7 @@
    type: 'info'
  }).then(() => {
    // 调用推送接口
    return manualPushTmsApBill(row.id);
    return manualPushTmsApBill(row.id);
  }).then((res) => {
    proxy.$message.success(res.msg);
    onLoad(page.value); // 刷新列表
@@ -478,4 +456,18 @@
    // 取消操作
  });
}
const flowLogIshow = ref()
const flowParams = ref([])
const handleFlow = (row: any) => {
  let data = {
    headId: row.id,
  }
  getPayableAuditLog(data).then((res) => {
    flowParams.value = res.rows
    flowLogIshow.value.openModel()
  })
}
</script>