2023-12-21 18:00:52 +08:00

367 lines
13 KiB
Vue
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<template>
<div class="edit-popup">
<popup ref="popupRef" :title="popupTitle" :async="true" width="80%" @confirm="handleSubmit" @close="handleClose">
<el-form ref="formRef" :model="formData" label-width="auto" :rules="formRules">
<div style="display: flex; flex-direction: row-reverse; justify-content: flex-start;margin-bottom: 30px;">
<el-select class="w-[180px]" v-model="formData.dept_id" clearable placeholder="请选择部门">
<el-option v-for="(item, index) in list2" :key="index" :label="item.name" :value="item.id" />
</el-select>
<el-select class="w-[180px]" v-model="formData.org_id" clearable placeholder="请选择组织" @change="deptrmt">
<el-option v-for="(item, index) in list1" :key="index" :label="item.name" :value="item.id" />
</el-select>
</div>
<el-row :gutter="10">
<el-col :span="8">
<el-form-item label="合同编号" prop="administrative_contract_id" @click="showDialog1 = true" :rules="[{ required: true, message: '不可为空', trigger: 'blur' }]">
<el-input v-model="contract_no" clearable placeholder="请输入合同编号" />
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="合同名称" prop="administrative_contract_id">
<el-input v-model="contract_name" clearable placeholder="请输入合同名称" />
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="供应商名称" rop="administrative_contract_id" :rules="[{ required: true, message: '不可为空', trigger: 'blur' }]">
<el-input v-model="supplier_name" readonly clearable placeholder="请选择客户" />
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="供应商编码" rop="administrative_contract_id">
<el-input v-model="supplier_no" readonly clearable placeholder="请选择客户" />
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="申请人" prop="applier">
<el-input v-model="formData.applier" clearable placeholder="请输入提交人" />
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="申请日期" prop="apply_date">
<el-date-picker class="flex-1 !flex" v-model="formData.apply_date" clearable type="datetime" value-format="YYYY-MM-DD HH:mm:ss" placeholder="选择开票日期">
</el-date-picker>
</el-form-item>
</el-col>
<el-col :span="24">
<el-form-item label="付款方式" prop="pay_type" :rules="[{ required: true, message: '不可为空', trigger: 'change' }]">
<el-radio-group v-model="formData.pay_type" placeholder="请选择付款方式">
<el-radio v-for="(item, index) in dictData.pay_type" :key="index" :label="parseInt(item.value)">
{{ item.name }}
</el-radio>
</el-radio-group>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="合计已付款" prop="invoice_sn">
<el-input v-model="formData.invoice_sn" readonly clearable placeholder="请输入合计已付款" />
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="本次支付比例(%" prop="payment_rate">
<el-input v-model="formData.payment_rate" clearable placeholder="请输入本次支付比例(%" />
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="本次支付金额" prop="payment_amount">
<el-input v-model="formData.payment_amount" clearable placeholder="请输入金额大写" @input="amountinput" />
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="金额大写" prop="invoice_amount_daxie">
<el-input v-model="invoice_amount_daxie" readonly clearable placeholder="请输入金额大写" />
</el-form-item>
</el-col>
<el-col :span="24">
<el-form-item label="备注" prop="remark">
<el-input v-model="formData.remark" type="textarea" clearable placeholder="请输入备注" />
</el-form-item>
</el-col>
<el-col :span="24">
<el-form-item label="附件" prop="field87">
<el-upload accept="doc, docx, xls, xlsx, ppt, pptx, pdf, txt, zip, rar, tar, jpg, png, gif, jpeg, webp, wmv, avi, mpg, mpeg, 3gp, mov, mp4, flv, f4v, rmvb, mkv" class="upload-demo" :show-file-list="false" aria-hidden="true" :headers="{ Token: userStore.token }" :action="base_url + '/upload/file'" :on-success="handleAvatarSuccess_four" ref="upload">
<el-button type="primary">
上传
</el-button>
</el-upload>
<div>
<div v-for="(item, index) in formDataannex" style="margin-left: 5px;display: block;">
<a style="margin-left: 10px; color: #4a5dff; align-self: flex-start" :href="item.uri" target="_blank">{{ item.name }}</a>
<span style="cursor: pointer;margin-left: 5px;" @click="delFileFn(index)">x</span>
</div>
</div>
</el-form-item>
</el-col>
</el-row>
<div class="tit">收款人信息</div>
<el-row>
<el-col :span="8">
<el-form-item label="开户名称" prop="account_name">
<el-input v-model="formData.account_name" clearable placeholder="请输入开户名称" />
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="开户银行" prop="deposit_bank">
<el-input v-model="formData.deposit_bank" clearable placeholder="请输入开户银行" />
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="账号" prop="account">
<el-input v-model="formData.account" clearable placeholder="请输入账号" />
</el-form-item>
</el-col>
</el-row>
<el-dialog v-model="showDialog1" title="选择合同" width="70%">
<salescontractDialog @customEvent="customEvent1"></salescontractDialog>
</el-dialog>
</el-form>
</popup>
</div>
</template>
<script lang="ts" setup name="projectEdit">
import customDialog from '@/components/custom-dialog/index.vue'
import type { FormInstance } from 'element-plus'
import Popup from '@/components/popup/index.vue'
import salescontractDialog from '@/components/administrative/index.vue'
import { adminpaymentsAdd, adminpaymentsEdit, adminpaymentsDetail } from '@/api/administrativePayments'
import { toChinesNum } from "@/utils/util";
import { getAllProjectTypes } from '@/api/projecttype'
import { timeFormat } from '@/utils/util'
import { isEmail, isIdCard, isPhone } from '@/utils/validate'
import type { PropType } from 'vue'
import { deptAll } from '@/api/org/department'
import { getAll } from '@/api/org/organization'
import configs from "@/config"
import useUserStore from "@/stores/modules/user";
const base_url = configs.baseUrl + configs.urlPrefix
const userStore = useUserStore();
const active = ref(0)
const formDataannex = reactive([])
const contract_name = ref('')
const invoice_amount_daxie = ref('')
const contract_no = ref('')
const supplier_name = ref('')
const supplier_no = ref('')
const list1 = reactive([])
const list2 = reactive([])
const userInfo = userStore.userInfo
console.log(userInfo, '222222')
// 上传文件
const handleAvatarSuccess_four = (
response,
uploadFile
) => {
if (response.code == 0) {
ElMessage.error(response.msg);
return;
}
formDataannex.push(
{ uri: response.data.uri, name: response.data.name }
);
};
// 删除上传的文件
const delFileFn = (index: number) => {
formDataannex.splice(index, 1)
}
defineProps({
dictData: {
type: Object as PropType<Record<string, any[]>>,
default: () => ({})
}
})
const emit = defineEmits(['success', 'close'])
const formRef = shallowRef<FormInstance>()
const popupRef = shallowRef<InstanceType<typeof Popup>>()
const mode = ref('add')
const amount_daxie = ref('')
const showDialog1 = ref(false)
const customEvent1 = (e: any) => {
formData.administrative_contract_id = e.id;
contract_name.value = e.contract_name;
contract_no.value = e.contract_no;
supplier_name.value = e.contract_name;
supplier_no.value = e.contract_no;
showDialog1.value = false;
};
//获取所有组织
const getlist = () => {
getAll().then((res) => {
Object.assign(list1, res)
if (res.length > 0) {
formData.org_id = res[0].id
deptAll({ 'org_id': res[0].id }).then((res) => {
if (res.length > 0) {
Object.assign(list2, res)
formData.dept_id = res[0].id
}
})
}
})
}
//获取部门
const deptrmt = (e) => {
getlist1(e)
}
//获取所有部门
const getlist1 = (id: any) => {
deptAll({ 'org_id': id }).then((res) => {
Object.assign(list2, res)
})
}
//监听输入
const amountinput = (e) => {
// console.log(e)
if (e && e > 0) {
invoice_amount_daxie.value = toChinesNum(e)
}
}
// 弹窗标题
const popupTitle = computed(() => {
return mode.value == 'edit' ? '编辑行政收票表' : '新增行政收票表'
})
// 表单数据
const formData = reactive({
id: '',
org_id: 0,
dept_id: 0,
approve_id: 0,
administrative_contract_id: 0,
applier: "",
apply_date: "",
pay_type: 0,
payment_rate: "",
payment_amount: "",
deposit_bank: "",
account_name: "",
account: "",
remark: "",
annex: ""
})
// 表单验证
const formRules = reactive<any>({
})
// 获取详情
const setFormData = async (data: Record<any, any>) => {
if (data.return_desc && data.return_desc.length > 0) {
if (data.return_desc.includes(",")) {
const arry1 = data.return_desc.split(',').map((item: any, index: any) => {
return {
name: `文件${index + 1}`,
uri: item
};
});
Object.assign(formDataannex, arry1)
} else {
const arry1 = [{ name: `文件1`, uri: data.return_desc }]
Object.assign(formDataannex, arry1)
console.log(formDataannex)
}
}
for (const key in formData) {
if (data[key] != null && data[key] != undefined) {
//@ts-ignore
formData[key] = data[key]
}
}
supplier_name.value = data.contract.contract_name;
supplier_no.value = data.contract.contract_no;
contract_name.value = data.contract.contract_no;
contract_no.value = data.contract.contract_no
}
const getDetail = async (row: Record<string, any>) => {
const data = await adminpaymentsDetail({
id: row.id
})
setFormData(data)
}
// 提交按钮
const handleSubmit = async () => {
if (formDataannex.length > 0) {
formData.return_desc = formDataannex.map((item: any) => item.uri).toString()
}
console.log(formRef.value?.validate(), '22222222')
await formRef.value?.validate()
const data = { ...formData }
mode.value == 'edit'
? await adminpaymentsEdit(data)
: await adminpaymentsAdd(data)
popupRef.value?.close()
emit('success')
}
//打开弹窗
const open = (type = 'add') => {
mode.value = type
popupRef.value?.open()
getlist()
}
// 关闭回调
const handleClose = () => {
emit('close')
}
defineExpose({
open,
setFormData,
getDetail
})
</script>