|
@@ -0,0 +1,502 @@
|
|
|
+<template>
|
|
|
+ <flow-form :data="formData" @submit="submitNextActivity">
|
|
|
+ <card title="合同信息" style="height: auto">
|
|
|
+ <van-form required="true" ref="form">
|
|
|
+ <van-cell-group inset>
|
|
|
+ <van-field
|
|
|
+ v-model="formData.contract.name"
|
|
|
+ name="合同名称"
|
|
|
+ label="合同名称"
|
|
|
+ placeholder="合同名称"
|
|
|
+ readonly
|
|
|
+ :rules="[{ required: true, message: '未获取合同名称' }]"
|
|
|
+ />
|
|
|
+ <van-field
|
|
|
+ v-model="formData.contract.contractNumber"
|
|
|
+ name="合同编号"
|
|
|
+ label="合同编号"
|
|
|
+ placeholder="合同编号"
|
|
|
+ readonly
|
|
|
+ :rules="[{ required: true, message: '未获取合同编号' }]"
|
|
|
+ />
|
|
|
+ <van-field
|
|
|
+ v-model="formData.contract.mainTypeText"
|
|
|
+ name="合同主类型"
|
|
|
+ label="合同主类型"
|
|
|
+ placeholder="合同主类型"
|
|
|
+ readonly
|
|
|
+ :rules="[{ required: true, message: '未获取合同主类型' }]"
|
|
|
+ />
|
|
|
+ <van-field
|
|
|
+ v-model="formData.contract.secondTypeText"
|
|
|
+ name="合同次类型"
|
|
|
+ label="合同次类型"
|
|
|
+ placeholder="合同次类型"
|
|
|
+ readonly
|
|
|
+ :rules="[{ required: true, message: '未获取合同次类型' }]"
|
|
|
+ />
|
|
|
+ <van-field
|
|
|
+ v-model="formData.contractMilestoneName"
|
|
|
+ name="关联合同里程碑"
|
|
|
+ label="关联合同里程碑"
|
|
|
+ placeholder="关联合同里程碑"
|
|
|
+ readonly
|
|
|
+ :rules="[{ required: true, message: '未获取关联合同里程碑' }]"
|
|
|
+ />
|
|
|
+ </van-cell-group>
|
|
|
+ </van-form>
|
|
|
+ </card>
|
|
|
+ <card title="项目信息" style="height: auto">
|
|
|
+ <van-form required="true" ref="form">
|
|
|
+ <van-cell-group inset>
|
|
|
+ <van-field
|
|
|
+ v-model="formData.project.xmmc"
|
|
|
+ name="项目名称"
|
|
|
+ label="项目名称"
|
|
|
+ placeholder="项目名称"
|
|
|
+ readonly
|
|
|
+ :rules="[{ required: true, message: '未获取项目名称' }]"
|
|
|
+ />
|
|
|
+ <van-field
|
|
|
+ v-model="formData.project.xmbh"
|
|
|
+ name="项目编号"
|
|
|
+ label="项目编号"
|
|
|
+ placeholder="项目编号"
|
|
|
+ readonly
|
|
|
+ :rules="[{ required: true, message: '未获取项目编号' }]"
|
|
|
+ />
|
|
|
+ <van-field
|
|
|
+ v-model="formData.project.projectTypeName"
|
|
|
+ name="项目类型"
|
|
|
+ label="项目类型"
|
|
|
+ placeholder="项目类型"
|
|
|
+ readonly
|
|
|
+ :rules="[{ required: true, message: '未获取项目类型' }]"
|
|
|
+ />
|
|
|
+ <van-field
|
|
|
+ v-model="formData.project.zrbm"
|
|
|
+ name="项目责任部门"
|
|
|
+ label="项目责任部门"
|
|
|
+ placeholder="项目责任部门"
|
|
|
+ readonly
|
|
|
+ :rules="[{ required: true, message: '未获取项目责任部门' }]"
|
|
|
+ />
|
|
|
+ <van-field
|
|
|
+ v-model="formData.project.xsry"
|
|
|
+ name="销售经理"
|
|
|
+ label="销售经理"
|
|
|
+ placeholder="销售经理"
|
|
|
+ readonly
|
|
|
+ :rules="[{ required: true, message: '未获取销售经理' }]"
|
|
|
+ />
|
|
|
+ <van-field
|
|
|
+ v-model="formData.project.zrbm"
|
|
|
+ name="责任部门"
|
|
|
+ label="责任部门"
|
|
|
+ placeholder="责任部门"
|
|
|
+ readonly
|
|
|
+ :rules="[{ required: true, message: '未获取责任部门' }]"
|
|
|
+ />
|
|
|
+
|
|
|
+ </van-cell-group>
|
|
|
+ </van-form>
|
|
|
+ </card>
|
|
|
+ <card title="基本信息" style="height: auto">
|
|
|
+ <van-form required="true" ref="form">
|
|
|
+ <van-cell-group inset>
|
|
|
+ <van-field
|
|
|
+ v-model="formData.applyWorkerName"
|
|
|
+ name="开票申请人"
|
|
|
+ label="开票申请人"
|
|
|
+ placeholder="开票申请人"
|
|
|
+ readonly
|
|
|
+ :rules="[{ required: true, message: '未获取开票申请人' }]"
|
|
|
+ />
|
|
|
+ <van-field
|
|
|
+ v-model="formData.applyWorkerDept"
|
|
|
+ name="所在部门"
|
|
|
+ label="所在部门"
|
|
|
+ placeholder="所在部门"
|
|
|
+ readonly
|
|
|
+ :rules="[{ required: true, message: '未获取所在部门' }]"
|
|
|
+ />
|
|
|
+ <van-field
|
|
|
+ v-model="formData.applyDate"
|
|
|
+ name="申请时间"
|
|
|
+ label="申请时间"
|
|
|
+ placeholder="申请时间"
|
|
|
+ readonly
|
|
|
+ :rules="[{ required: true, message: '未获取申请时间' }]"
|
|
|
+ />
|
|
|
+ <van-field
|
|
|
+ v-model="formData.invoiceNumber"
|
|
|
+ name="开票单号"
|
|
|
+ label="开票单号"
|
|
|
+ placeholder="开票单号"
|
|
|
+ readonly
|
|
|
+ :rules="[{ required: true, message: '未获取开票单号' }]"
|
|
|
+ />
|
|
|
+ <van-field
|
|
|
+ v-model="formData.customerName"
|
|
|
+ name="客户名称"
|
|
|
+ label="客户名称"
|
|
|
+ placeholder="客户名称"
|
|
|
+ readonly
|
|
|
+ :rules="[{ required: true, message: '未获取客户名称' }]"
|
|
|
+ />
|
|
|
+ <van-field
|
|
|
+ v-model="formData.taxNumber"
|
|
|
+ name="税号"
|
|
|
+ label="税号"
|
|
|
+ placeholder="税号"
|
|
|
+ readonly
|
|
|
+ :rules="[{ required: true, message: '未获取税号' }]"
|
|
|
+ />
|
|
|
+ <van-field
|
|
|
+ v-model="formData.bank"
|
|
|
+ name="开户行"
|
|
|
+ label="开户行"
|
|
|
+ placeholder="开户行"
|
|
|
+ readonly
|
|
|
+ :rules="[{ required: true, message: '未获取开户行' }]"
|
|
|
+ />
|
|
|
+ <van-field
|
|
|
+ v-model="formData.bankAccount"
|
|
|
+ name="账号"
|
|
|
+ label="账号"
|
|
|
+ placeholder="账号"
|
|
|
+ readonly
|
|
|
+ :rules="[{ required: true, message: '未获取账号' }]"
|
|
|
+ />
|
|
|
+ <van-field
|
|
|
+ v-model="formData.invoiceCompany"
|
|
|
+ name="开票单位"
|
|
|
+ label="开票单位"
|
|
|
+ placeholder="开票单位"
|
|
|
+ readonly
|
|
|
+ :rules="[{ required: true, message: '未获取开票单位' }]"
|
|
|
+ />
|
|
|
+ <van-field
|
|
|
+ v-model="formData.invoiceAmount"
|
|
|
+ name="开票金额"
|
|
|
+ label="开票金额"
|
|
|
+ placeholder="开票金额"
|
|
|
+ readonly
|
|
|
+ :rules="[{ required: true, message: '未获取开票金额' }]"
|
|
|
+ />
|
|
|
+ <van-field
|
|
|
+ v-model="formData.invoiceTypeText"
|
|
|
+ name="发票类型"
|
|
|
+ label="发票类型"
|
|
|
+ placeholder="发票类型"
|
|
|
+ readonly
|
|
|
+ :rules="[{ required: true, message: '未获取发票类型' }]"
|
|
|
+ />
|
|
|
+ <van-field
|
|
|
+ v-model="formData.invoiceContent"
|
|
|
+ name="开票内容"
|
|
|
+ label="开票内容"
|
|
|
+ placeholder="开票内容"
|
|
|
+ readonly
|
|
|
+ :rules="[{ required: true, message: '未获取开票内容' }]"
|
|
|
+ />
|
|
|
+ <van-field
|
|
|
+ v-model="formData.gg"
|
|
|
+ name="规格"
|
|
|
+ label="规格"
|
|
|
+ placeholder="规格"
|
|
|
+ readonly
|
|
|
+ :rules="[{ required: true, message: '未获取规格' }]"
|
|
|
+ />
|
|
|
+ <van-field
|
|
|
+ v-model="formData.sl"
|
|
|
+ name="数量"
|
|
|
+ label="数量"
|
|
|
+ placeholder="数量"
|
|
|
+ readonly
|
|
|
+ :rules="[{ required: true, message: '未获取数量' }]"
|
|
|
+ />
|
|
|
+ <van-field
|
|
|
+ v-model="formData.dj"
|
|
|
+ name="单价"
|
|
|
+ label="单价"
|
|
|
+ placeholder="单价"
|
|
|
+ readonly
|
|
|
+ :rules="[{ required: true, message: '未获取单价' }]"
|
|
|
+ />
|
|
|
+ <van-field
|
|
|
+ v-model="formData.payCompany"
|
|
|
+ name="付款单位"
|
|
|
+ label="付款单位"
|
|
|
+ placeholder="付款单位"
|
|
|
+ readonly
|
|
|
+ :rules="[{ required: true, message: '未获取付款单位' }]"
|
|
|
+ />
|
|
|
+ <van-field
|
|
|
+ v-model="formData.payTaxNumber"
|
|
|
+ name="付款税号"
|
|
|
+ label="付款税号"
|
|
|
+ placeholder="付款税号"
|
|
|
+ readonly
|
|
|
+ :rules="[{ required: true, message: '未获取付款税号' }]"
|
|
|
+ />
|
|
|
+ <van-field
|
|
|
+ v-model="formData.payAddress"
|
|
|
+ name="付款地址及电话"
|
|
|
+ label="付款地址及电话"
|
|
|
+ placeholder="付款地址及电话"
|
|
|
+ readonly
|
|
|
+ :rules="[{ required: true, message: '未获取付款地址及电话' }]"
|
|
|
+ />
|
|
|
+ <van-field
|
|
|
+ v-model="formData.payBank"
|
|
|
+ name="付款开户行及账号"
|
|
|
+ label="付款开户行及账号"
|
|
|
+ placeholder="付款开户行及账号"
|
|
|
+ readonly
|
|
|
+ :rules="[{ required: true, message: '未获取付款开户行及账号' }]"
|
|
|
+ />
|
|
|
+ <van-field
|
|
|
+ v-model="formData.receiveBankaccount"
|
|
|
+ name="收款银行账户"
|
|
|
+ label="收款银行账户"
|
|
|
+ placeholder="收款银行账户"
|
|
|
+ readonly
|
|
|
+ :rules="[{ required: true, message: '未获取收款银行账户' }]"
|
|
|
+ />
|
|
|
+ <van-field
|
|
|
+ v-model="formData.eleInvReceivePhone"
|
|
|
+ name="电子发票接收人手机号"
|
|
|
+ label="电子发票接收人手机号"
|
|
|
+ placeholder="电子发票接收人手机号"
|
|
|
+ readonly
|
|
|
+ :rules="[{ required: true, message: '未获取电子发票接收人手机号' }]"
|
|
|
+ />
|
|
|
+ <van-field
|
|
|
+ v-model="formData.eleInvReceiveEmail"
|
|
|
+ name="电子发票接收人邮箱"
|
|
|
+ label="电子发票接收人邮箱"
|
|
|
+ placeholder="电子发票接收人邮箱"
|
|
|
+ readonly
|
|
|
+ :rules="[{ required: true, message: '未获取电子发票接收人邮箱' }]"
|
|
|
+ />
|
|
|
+ <van-field
|
|
|
+ v-model="formData.invoiceBz"
|
|
|
+ name="开票备注"
|
|
|
+ label="开票备注"
|
|
|
+ placeholder="开票备注"
|
|
|
+ readonly
|
|
|
+ :rules="[{ required: true, message: '未获取开票备注' }]"
|
|
|
+ />
|
|
|
+
|
|
|
+ </van-cell-group>
|
|
|
+ </van-form>
|
|
|
+ </card>
|
|
|
+ <card title="回款信息" style="height: auto">
|
|
|
+ <van-form required="true" ref="form">
|
|
|
+ <van-cell-group inset>
|
|
|
+ <van-field
|
|
|
+ v-model="formData.contract.contractAmount"
|
|
|
+ name="合同金额"
|
|
|
+ label="合同金额"
|
|
|
+ placeholder="合同金额"
|
|
|
+ readonly
|
|
|
+ :rules="[{ required: true, message: '未获取合同金额' }]"
|
|
|
+ />
|
|
|
+ <van-field
|
|
|
+ v-model="formData.projectAmount.invoiceAmount"
|
|
|
+ name="已开票金额"
|
|
|
+ label="已开票金额"
|
|
|
+ placeholder="已开票金额"
|
|
|
+ readonly
|
|
|
+ :rules="[{ required: true, message: '未获取已开票金额' }]"
|
|
|
+ />
|
|
|
+ <van-field
|
|
|
+ v-model="formData.projectAmount.returnAmount"
|
|
|
+ name="已回款金额"
|
|
|
+ label="已回款金额"
|
|
|
+ placeholder="已回款金额"
|
|
|
+ readonly
|
|
|
+ :rules="[{ required: true, message: '未获取已回款金额' }]"
|
|
|
+ />
|
|
|
+ <van-field
|
|
|
+ v-model="formData.projectAmount.receivableAmount"
|
|
|
+ name="应收账款"
|
|
|
+ label="应收账款"
|
|
|
+ placeholder="应收账款"
|
|
|
+ readonly
|
|
|
+ :rules="[{ required: true, message: '未获取应收账款' }]"
|
|
|
+ />
|
|
|
+ <van-field
|
|
|
+ v-model="formData.projectAmount.contractBalance"
|
|
|
+ name="合同余额"
|
|
|
+ label="合同余额"
|
|
|
+ placeholder="合同余额"
|
|
|
+ readonly
|
|
|
+ :rules="[{ required: true, message: '未获取合同余额' }]"
|
|
|
+ />
|
|
|
+ <van-field
|
|
|
+ v-model="formData.contract.paymentTerms"
|
|
|
+ name="付款条件"
|
|
|
+ label="付款条件"
|
|
|
+ placeholder="付款条件"
|
|
|
+ readonly
|
|
|
+ :rules="[{ required: true, message: '未获取付款条件' }]"
|
|
|
+ />
|
|
|
+ </van-cell-group>
|
|
|
+ </van-form>
|
|
|
+ </card>
|
|
|
+ <card title="开票信息" style="height: auto">
|
|
|
+ <van-form required="true" ref="form">
|
|
|
+ <van-cell-group inset>
|
|
|
+ <van-field
|
|
|
+ v-model="formData.invoicePerson"
|
|
|
+ name="开票人"
|
|
|
+ label="开票人"
|
|
|
+ placeholder="开票人"
|
|
|
+ readonly
|
|
|
+ :rules="[{ required: true, message: '未获取开票人' }]"
|
|
|
+ />
|
|
|
+ <van-field
|
|
|
+ v-model="formData.lpr"
|
|
|
+ name="领票人"
|
|
|
+ label="领票人"
|
|
|
+ placeholder="领票人"
|
|
|
+ readonly
|
|
|
+ :rules="[{ required: true, message: '未获取领票人' }]"
|
|
|
+ />
|
|
|
+ <van-field
|
|
|
+ v-model="formData.invoiceDate"
|
|
|
+ name="开票日期"
|
|
|
+ label="开票日期"
|
|
|
+ placeholder="开票日期"
|
|
|
+ readonly
|
|
|
+ :rules="[{ required: true, message: '未获取开票日期' }]"
|
|
|
+ />
|
|
|
+ <van-field
|
|
|
+ v-model="formData.invoiceNo"
|
|
|
+ name="发票号码"
|
|
|
+ label="发票号码"
|
|
|
+ placeholder="发票号码"
|
|
|
+ readonly
|
|
|
+ :rules="[{ required: true, message: '未获取发票号码' }]"
|
|
|
+ />
|
|
|
+ </van-cell-group>
|
|
|
+ </van-form>
|
|
|
+ </card>
|
|
|
+ <card title="子项目信息">
|
|
|
+ <template #default>
|
|
|
+ <div v-for="(item,index) in formData.contractInvoiceRelations" :key="index">
|
|
|
+ <van-swipe-cell>
|
|
|
+ <card-cell>
|
|
|
+ <van-cell title="类型" :value="item.type"/>
|
|
|
+ <van-cell title="责任部门" :value="item.zrbm"/>
|
|
|
+ <van-cell title="项目经理" :value="item.xmjl"/>
|
|
|
+ <van-cell title="合同额" :value="item.virtualAmount"/>
|
|
|
+ <van-cell title="本次开票金额" :value="item.invoiceAmount"/>
|
|
|
+ <van-cell title="回款金额" :value="item.returnAmount"/>
|
|
|
+ </card-cell>
|
|
|
+ <template #right>
|
|
|
+ <van-button square type="primary" text="编辑" @click="detailView(index,item)"/>
|
|
|
+ <van-button square type="danger" text="删除" @click="detailDelte(index)"/>
|
|
|
+ </template>
|
|
|
+ </van-swipe-cell>
|
|
|
+ </div>
|
|
|
+ </template>
|
|
|
+ </card>
|
|
|
+ </flow-form>
|
|
|
+</template>
|
|
|
+
|
|
|
+<script setup lang="ts">
|
|
|
+import {useRoute} from 'vue-router';
|
|
|
+import {FlowDTO, getNextActivity} from '@/service/flow';
|
|
|
+import reqest from "@/utils/request";
|
|
|
+import FlowForm from '@/components/flowForm.vue';
|
|
|
+import Card from '@/components/card.vue';
|
|
|
+import CardCell from '@/components/cardCell.vue';
|
|
|
+import {DICT_TYPE, getDictLabel} from "@/utils/dict";
|
|
|
+
|
|
|
+const route = useRoute();
|
|
|
+const form = ref(null);
|
|
|
+
|
|
|
+interface FormDataType {
|
|
|
+}
|
|
|
+
|
|
|
+const formData = ref<FormDataType>({
|
|
|
+ contract: {},
|
|
|
+ project: {},
|
|
|
+ projectAmount: {},
|
|
|
+ returnMoneyList: [],
|
|
|
+ contractInvoiceRelations: [],
|
|
|
+
|
|
|
+})
|
|
|
+const detailData = ref({})
|
|
|
+
|
|
|
+
|
|
|
+const {activityInstanceId, participant, flowInstanceId, read} = route.query as {
|
|
|
+ activityInstanceId: string;
|
|
|
+ participant: string;
|
|
|
+ flowInstanceId: string;
|
|
|
+ read: string;
|
|
|
+};
|
|
|
+const activityData: FlowDTO = {
|
|
|
+ activityInstanceId,
|
|
|
+ participantId: participant,
|
|
|
+ flowOpinion: ''
|
|
|
+}
|
|
|
+const submitNextActivity = async (activeOpinion: any) => {
|
|
|
+ form.value.validate().then(async () => {
|
|
|
+ //工作流转件
|
|
|
+ activityData.activityInstanceId = activityInstanceId
|
|
|
+ activityData.participantId = participant
|
|
|
+ activityData.flowOpinion = JSON.stringify(activeOpinion)
|
|
|
+ const result = await getNextActivity(jsonToFormData(activityData))
|
|
|
+ });
|
|
|
+}
|
|
|
+const jsonToFormData = (json: any): FormData | null => {
|
|
|
+ const keys: string[] = Object.keys(json)
|
|
|
+ if (keys.length > 0) {
|
|
|
+ const formData = new FormData();
|
|
|
+ keys.forEach((key) => {
|
|
|
+ formData.append(key, (json[key] instanceof Object) ? JSON.stringify(json[key]) : json[key]);
|
|
|
+ });
|
|
|
+ return formData;
|
|
|
+ }
|
|
|
+ return null;
|
|
|
+}
|
|
|
+
|
|
|
+
|
|
|
+/** 初始化表单数据 */
|
|
|
+const initFormData = async () => {
|
|
|
+ const result = await reqest.get(`/business/flow/invoice/mobileAdd?flowInstanceId=${flowInstanceId}`)
|
|
|
+
|
|
|
+
|
|
|
+ formData.value = result.data;
|
|
|
+ formData.project = result.data.project;
|
|
|
+ formData.contract = result.data.contract;
|
|
|
+ formData.projectAmount = result.data.projectAmount;
|
|
|
+
|
|
|
+
|
|
|
+ formData.contract.mainTypeText = getDictLabel(DICT_TYPE.CONTRACT_MAIN_TYPE, formData.contract.mainType);
|
|
|
+ formData.contract.secondTypeText = getDictLabel(DICT_TYPE.CONTRACT_SECOND_TYPE, formData.contract.secondType);
|
|
|
+ formData.value.invoiceTypeText = getDictLabel(DICT_TYPE.INVOICE_TYPE, formData.value.invoiceType);
|
|
|
+}
|
|
|
+
|
|
|
+
|
|
|
+/** 初始化 */
|
|
|
+onMounted(() => {
|
|
|
+ initFormData()
|
|
|
+})
|
|
|
+</script>
|
|
|
+
|
|
|
+<style lang="scss" scoped>
|
|
|
+@import "./index.scss";
|
|
|
+
|
|
|
+::v-deep .van-field__label {
|
|
|
+ width: auto;
|
|
|
+}
|
|
|
+
|
|
|
+::v-deep .van-field__control {
|
|
|
+ text-align: right;
|
|
|
+}
|
|
|
+</style>
|