|
@@ -0,0 +1,264 @@
|
|
|
+
|
|
|
+<template>
|
|
|
+ <flow-form :data="formData" @submit="submitNextActivity">
|
|
|
+ <card title="基础信息">
|
|
|
+ <van-form required="auto" ref="form" :readonly="formRead">
|
|
|
+ <van-cell-group inset>
|
|
|
+ <van-field
|
|
|
+ v-model="formData.userNickname"
|
|
|
+ name="报销人"
|
|
|
+ label="报销人"
|
|
|
+ placeholder="报销人"
|
|
|
+ readonly
|
|
|
+ :rules="[{ required: true, message: '未获取报销人' }]"
|
|
|
+ />
|
|
|
+ <van-field
|
|
|
+ v-model="formData.deptName"
|
|
|
+ name="所在部门"
|
|
|
+ label="所在部门"
|
|
|
+ placeholder="所在部门"
|
|
|
+ readonly
|
|
|
+ :rules="[{ required: true, message: '未获取所在部门' }]"
|
|
|
+ />
|
|
|
+ <van-field
|
|
|
+ v-model="formData.applyTime"
|
|
|
+ :formatter="formatDate"
|
|
|
+ name="申请时间"
|
|
|
+ label="申请时间"
|
|
|
+ placeholder="申请时间"
|
|
|
+ readonly
|
|
|
+ :rules="[{ required: true, message: '请填写申请时间' }]"
|
|
|
+ />
|
|
|
+ <van-field
|
|
|
+ v-model="formData.commonCostNo"
|
|
|
+ name="报销单号"
|
|
|
+ label="报销单号"
|
|
|
+ placeholder="报销单号"
|
|
|
+ readonly
|
|
|
+ :rules="[{ required: true, message: '未获取报销单号' }]"
|
|
|
+ />
|
|
|
+ <van-field
|
|
|
+ v-model="formData.paymentCompanyName"
|
|
|
+ name="付款单位"
|
|
|
+ label="付款单位"
|
|
|
+ placeholder="付款单位"
|
|
|
+ :rules="[{ required: true, message: '未获取付款单位' }]"
|
|
|
+ />
|
|
|
+ <van-field
|
|
|
+ v-model="formData.payment"
|
|
|
+ name="付款方式"
|
|
|
+ label="付款方式"
|
|
|
+ placeholder="付款方式"
|
|
|
+ :rules="[{ required: true, message: '未获取付款方式' }]"
|
|
|
+ />
|
|
|
+ <van-field
|
|
|
+ v-model="formData.totalAmount"
|
|
|
+ name="报销总金额"
|
|
|
+ label="报销总金额(元)"
|
|
|
+ placeholder="报销总金额"
|
|
|
+ :rules="[{ required: true, message: '未获取报销总金额' }]"
|
|
|
+ />
|
|
|
+ <van-field
|
|
|
+ v-model="formData.totalAmountCn"
|
|
|
+ name="大写单据总金额"
|
|
|
+ label="大写单据总金额"
|
|
|
+ placeholder="大写单据总金额"
|
|
|
+ :rules="[{ required: true, message: '未获取大写单据总金额' }]"
|
|
|
+ />
|
|
|
+ <van-field name="是否抵用借款" label="是否抵用借款">
|
|
|
+ <template #input>
|
|
|
+ <van-checkbox v-model="formData.dybyCheckBox" shape="square" />
|
|
|
+ </template>
|
|
|
+ </van-field>
|
|
|
+ <van-field
|
|
|
+ v-model="formData.bz1"
|
|
|
+ name="报销备注"
|
|
|
+ label="报销备注"
|
|
|
+ placeholder="报销备注"
|
|
|
+ type="textarea"
|
|
|
+ rows="3"
|
|
|
+ autosize
|
|
|
+ :rules="[{ required: true, message: '未获取报销备注' }]"
|
|
|
+ />
|
|
|
+ </van-cell-group>
|
|
|
+ </van-form>
|
|
|
+ </card>
|
|
|
+ <card title="单据详情">
|
|
|
+ <template #right>
|
|
|
+ <button class="add_btn" @click="popupShow = true" v-if="!formRead">
|
|
|
+ 新增
|
|
|
+ </button>
|
|
|
+ </template>
|
|
|
+ <template #default>
|
|
|
+ <div v-for="(item, index) in formData.detailList" :key="index">
|
|
|
+ <van-swipe-cell :disabled="formRead">
|
|
|
+ <card-cell>
|
|
|
+ <van-cell
|
|
|
+ title="项目名称"
|
|
|
+ :value="item.projectName"
|
|
|
+ />
|
|
|
+ <van-cell title="项目部门" :value="item.projectDeptName" />
|
|
|
+ <van-cell
|
|
|
+ title="发生日期"
|
|
|
+ :value="formatDate(item.costDate, 'YYYY-MM-DD')"
|
|
|
+ />
|
|
|
+ <van-cell
|
|
|
+ title="费用实际所属类型"
|
|
|
+ :value="
|
|
|
+ getDictLabel(
|
|
|
+ DICT_TYPE.WF_COMMON_COST_TYPE,
|
|
|
+ item.costType
|
|
|
+ )
|
|
|
+ "
|
|
|
+ />
|
|
|
+ <van-cell title="发票内容" :value="item.costContent" />
|
|
|
+ <van-cell title="单据张数" :value="item.invoiceNums" />
|
|
|
+ <van-cell title="金额" :value="item.amount" />
|
|
|
+ <van-cell title="备注" :value="item.bz1" />
|
|
|
+ </card-cell>
|
|
|
+ </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 { showSuccessToast, showFailToast } from "vant";
|
|
|
+import { formatDate } from "@/utils/formatTime";
|
|
|
+import { getDictOptions, getDictLabel, DICT_TYPE } from "@/utils/dict";
|
|
|
+
|
|
|
+const popupShow = ref<boolean>(false);
|
|
|
+const form = ref(null);
|
|
|
+const route = useRoute();
|
|
|
+interface FormDataType {
|
|
|
+ instanceId: string;
|
|
|
+ id: string;
|
|
|
+ userNickname: string;
|
|
|
+ deptName: string;
|
|
|
+ applyTime: any;
|
|
|
+ commonCostNo: string;
|
|
|
+ projectName: string;
|
|
|
+ paymentCompanyName: string;
|
|
|
+ paymentMethod: any;
|
|
|
+ payment: string;
|
|
|
+ dybx: any;
|
|
|
+ dybyCheckBox: boolean;
|
|
|
+ totalAmount: number | null;
|
|
|
+ totalAmountCn: string;
|
|
|
+ bz1: string;
|
|
|
+ detailList: {
|
|
|
+ commonCostId: string;
|
|
|
+ projectName: any;
|
|
|
+ projectDeptName: string;
|
|
|
+ costDate: any;
|
|
|
+ costType: string;
|
|
|
+ costContent: string;
|
|
|
+ invoiceNums: number;
|
|
|
+ amount: number;
|
|
|
+ bz1: string;
|
|
|
+ }[];
|
|
|
+}
|
|
|
+const formData = ref<FormDataType>({
|
|
|
+ instanceId: "",
|
|
|
+ id: "",
|
|
|
+ userNickname: "",
|
|
|
+ deptName: "",
|
|
|
+ applyTime: null,
|
|
|
+ commonCostNo: "",
|
|
|
+ projectName: "",
|
|
|
+ paymentCompanyName: "",
|
|
|
+ paymentMethod: null,
|
|
|
+ payment: "银行",
|
|
|
+ dybx: null,
|
|
|
+ dybyCheckBox: false,
|
|
|
+ totalAmount: null,
|
|
|
+ totalAmountCn: "",
|
|
|
+ boatCarAmout: "",
|
|
|
+ otherAmount: "",
|
|
|
+ carAmount: "",
|
|
|
+ bz1: "",
|
|
|
+ detailList: [],
|
|
|
+});
|
|
|
+
|
|
|
+const formRead = ref(false);
|
|
|
+const { activityInstanceId, participant, flowInstanceId, read, _o } =
|
|
|
+ route.query as {
|
|
|
+ activityInstanceId: string;
|
|
|
+ participant: string;
|
|
|
+ flowInstanceId: string;
|
|
|
+ read: string;
|
|
|
+ _o: 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));
|
|
|
+ // getNextActivity(activityData).then(result => {
|
|
|
+ // console.log(result)
|
|
|
+ // }).catch((err) => {
|
|
|
+ // console.error(err)
|
|
|
+ // })
|
|
|
+ });
|
|
|
+};
|
|
|
+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/CommonCost/mobileAdd?flowInstanceId=${flowInstanceId}`
|
|
|
+ );
|
|
|
+ formData.value = result.data;
|
|
|
+ formData.value.applyTime = formatDate(formData.value.applyTime);
|
|
|
+ if (formData.value.dybx === 1) {
|
|
|
+ formData.value.dybyCheckBox = true;
|
|
|
+ } else {
|
|
|
+ formData.value.dybyCheckBox = false;
|
|
|
+ }
|
|
|
+ if (formData.value.paymentMethod === 1) {
|
|
|
+ formData.value.payment = '银行';
|
|
|
+ } else {
|
|
|
+ formData.value.payment = '现金';
|
|
|
+ }
|
|
|
+};
|
|
|
+
|
|
|
+/** 初始化 */
|
|
|
+onMounted(() => {
|
|
|
+ initFormData();
|
|
|
+ if (read === "1" || _o === "v") {
|
|
|
+ formRead.value = true;
|
|
|
+ }
|
|
|
+});
|
|
|
+</script>
|
|
|
+
|
|
|
+<style lang="scss" scoped>
|
|
|
+@import "./index.scss";
|
|
|
+</style>
|