bug修复

This commit is contained in:
lxz 2024-01-15 18:20:06 +08:00
parent be9fefb9dc
commit 01d777c60f
14 changed files with 417 additions and 292 deletions

View File

@ -30,7 +30,7 @@
</el-table>
</div>
<div class="flex mt-4 justify-end">
<div class="flex justify-end mt-4">
<pagination v-model="pager" @change="getLists" />
</div>
</el-card>
@ -41,11 +41,18 @@
import { usePaging } from "@/hooks/usePaging"
import { useDictData } from "@/hooks/useDictOptions"
import { apiBidBiddingDecisionLists } from '@/api/bid_bidding_decision'
import { defineEmits } from "vue"
import { defineEmits, defineProps } from "vue"
const props = defineProps({
project_id: Number
})
//
const queryParams = reactive({
custom_name: ''
custom_name: '',
project_id: props.project_id
});
//

View File

@ -65,7 +65,8 @@
<div v-for="(item, i) in deparmetlist" :key="i">
<div class="lad">{{ i }}</div>
<div class="lads">
<div class="flex " v-for="(items, k) in item" style="justify-content: space-between;" @click="deparmetclck(items)">
<div class="flex " v-for="(items, k) in item" style="justify-content: space-between;"
@click="deparmetclck(items)">
<div>{{ items.name }}</div>
<div class="Collapsebj">{{ items.admin_num }}</div>
</div>
@ -102,7 +103,8 @@
<div v-if="isCollapse == 3">
<div v-if="isshow1">
<div class="lads ">
<div class="flex " v-for="(item, j) in jobslist" :key="j" style="justify-content: space-between;" @click="gwclck(item)">
<div class="flex " v-for="(item, j) in jobslist" :key="j"
style="justify-content: space-between;" @click="gwclck(item)">
<div>{{ item.name }}</div>
<div class="Collapsebj">{{ item.admin_num }}</div>
</div>
@ -216,7 +218,6 @@ const getlist = () => {
//
const deparmet = () => {
getAllDept().then((res) => {
console.log(res)
Object.assign(deparmetlist, res)
})
}
@ -236,7 +237,6 @@ const deparmetclck = (item: { id: any }) => {
const Jobs = () => {
getAllJobs().then((res) => {
console.log(res)
Object.assign(jobslist, res)
})
}

View File

@ -253,3 +253,97 @@ export const toChinesNum = (money: any) => {
}
return chineseStr
}
// 转换每个小节的函数
function convertSection(section) {
const cnNums = ["零", "壹", "贰", "叁", "肆", "伍", "陆", "柒", "捌", "玖"];
const cnIntUnits = ["", "拾", "佰", "仟"];
let sectionStr = "";
let unitPos = 0; // 记录当前位置的单位
let zero = true; // 连续的零
while (section > 0) {
let num = section % 10;
if (num === 0) {
if (!zero) {
zero = true;
sectionStr = cnNums[num] + sectionStr;
}
} else {
zero = false;
sectionStr = cnNums[num] + cnIntUnits[unitPos] + sectionStr;
}
section = Math.floor(section / 10);
unitPos++;
}
return sectionStr;
}
/**
*
* @params num
*/
export const convertToChinese = (num: any) => {
const cnNums = ["零", "壹", "贰", "叁", "肆", "伍", "陆", "柒", "捌", "玖"];
const cnIntUnits = ["", "拾", "佰", "仟"];
const cnDecUnits = ["角", "分"];
const cnInteger = "整";
const cnIntLast = "元";
const cnIntWan = "万";
const cnIntYi = "亿";
let integerNum = Math.floor(num); // 整数部分
let decimalNum = Math.round((num - integerNum) * 100); // 小数部分
let cnIntStr = ""; // 中文整数字符串
let cnDecStr = ""; // 中文小数字符串
// 处理亿位
let yuan = Math.floor(integerNum / 100000000);
if (yuan > 0) {
cnIntStr += convertSection(yuan) + cnIntYi;
integerNum %= 100000000;
}
// 处理万位
let wan = Math.floor(integerNum / 10000);
if (wan > 0) {
cnIntStr += convertSection(wan) + cnIntWan;
integerNum %= 10000;
}
// 处理其他部分
if (integerNum === 0) {
cnIntStr += cnNums[0];
} else {
cnIntStr += convertSection(integerNum);
}
// 处理小数部分
if (decimalNum === 0) {
cnDecStr = cnInteger;
} else {
let decIndex = 0;
while (decimalNum > 0 && decIndex < cnDecUnits.length) {
let num = decimalNum % 10;
if (num !== 0) {
cnDecStr += cnNums[num] + cnDecUnits[decIndex];
}
decimalNum = Math.floor(decimalNum / 10);
decIndex++;
}
}
return cnIntStr + cnIntLast + cnDecStr;
}

View File

@ -38,6 +38,12 @@
:rules="[{ required: true, message: '不可为空', trigger: 'blur' }]">
<el-input v-model="formData.bid_company_name" clearable placeholder="请输入投标公司名称" />
</el-form-item></el-col>
<el-col :span="8">
<el-form-item label="投标决策信息" prop="bid_decision_id"
:rules="[{ required: true, message: '不可为空', trigger: 'blur' }]" @click="showDialog2 = true">
<el-input v-model="formData.bid_document_no" clearable placeholder="请选择" />
</el-form-item></el-col>
<el-col :span="8">
<el-form-item label="购买人员" prop="buyer" @click="userclick">
<el-input v-model="buyer_name" clearable placeholder="请输入购买人员" />
@ -62,7 +68,7 @@
<el-col :span="8">
<el-form-item label="购买标书时间" prop="buy_date">
<el-date-picker class="flex-1 !flex" v-model="formData.buy_date" clearable type="datetime"
value-format="YYYY-MM-DD HH:mm:ss" placeholder="选择购买标书时间">
value-format="YYYY-MM-DD" placeholder="选择购买标书时间">
</el-date-picker>
</el-form-item>
</el-col>
@ -122,6 +128,11 @@
<el-dialog v-model="showDialog" title="选择项目" width="70%">
<projectTable @customEvent="customEvent"></projectTable>
</el-dialog>
<el-dialog v-model="showDialog2" title="选择投标决策" width="70%">
<biddingDecisionSelector @customEvent="customEvent2" :project_id="formData.project_id">
</biddingDecisionSelector>
</el-dialog>
</div>
</template>
@ -130,6 +141,7 @@ import type { FormInstance } from 'element-plus'
import reviewprocess from '@/components/reviewprocess/index.vue'
import Popup from '@/components/popup/index.vue'
import personnelselector from '@/components/personnelselector/index.vue'
import biddingDecisionSelector from '@/components/biddingDecision/index.vue'
import projectTable from "@/components/biddingDecision/index.vue"
import { apiBidBuyBiddingDocumentAdd, apiBidBuyBiddingDocumentDetail } from '@/api/bid_buy_bidding_document'
@ -156,29 +168,9 @@ import { getAll } from '@/api/org/organization'
import configs from "@/config"
const base_url = configs.baseUrl + configs.urlPrefix
import useUserStore from "@/stores/modules/user";
const userStore = useUserStore();
const formDataannex = reactive([])
const showDialog = ref(false)
const showDialog2 = ref(false)
const buyer_name = ref('')
// //
// 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)
// }
//
const popupTitle = computed(() => {
return mode.value == 'edit' ? '编辑购买标书' : '新增购买标书'
@ -186,18 +178,18 @@ const popupTitle = computed(() => {
//
const formData = reactive({
id: '',
dept_id: '',
org_id: '',
project_id: '',
bid_decision_id: '',
bid_document_no: '',
invite_tenders_company_name: '',
bid_company_name: '',
buyer: '',
amount: '',
buy_date: '',
bid_address: '',
"org_id": 0,
"dept_id": 0,
"project_id": 0,
"bid_decision_id": 0,
bid_decision_code: "",
"bid_document_no": "",
"invite_tenders_company_name": "",
"bid_company_name": "",
"buyer": "",
"amount": 0,
"buy_date": 0,
"bid_address": ""
})
//
@ -246,9 +238,6 @@ const getlist1 = (id: any) => {
}
//
const customEvent = (e: any) => {
console.log(e, 'e')
formData.project_id = e.project_id;
matsname.value = e.custom_name
project_name.value = e.project_name
@ -256,6 +245,13 @@ const customEvent = (e: any) => {
showDialog.value = false;
};
const customEvent2 = (e: any) => {
console.log(e, 'e')
formData.bid_document_no = e.code;
formData.bid_decision_id = e.id;
showDialog2.value = false;
};
//
const setFormData = async (data: Record<any, any>) => {
matsname.value = data.project.person

View File

@ -26,13 +26,13 @@
<el-col :span="12">
<el-form-item label="客户名称" prop="project_id"
:rules="[{ required: true, message: '不可为空', trigger: 'blur' }]">
<el-input v-model="custom_name" disabled clearable placeholder="系统自动填写" />
<el-input v-model="formData.custom_name" disabled clearable placeholder="系统自动填写" />
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="合同号" prop="contract_id" @click="showDialog2 = true">
<el-input v-model="contract_id" clearable readonly placeholder="系统自动填写" />
<el-form-item label="合sd同号" prop="contract_id" @click="showDialog2 = true">
<el-input v-model="formData.contract_code" clearable readonly placeholder="系统自动填写" />
</el-form-item>
</el-col>
<!-- <el-col :span="12">
@ -87,7 +87,7 @@
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="指定处理人" prop="processed_admin_id" @click="userclick"
<el-form-item label="指定处理人" prop="processed_user" @click="userclick"
:rules="[{ required: true, message: '不可为空', trigger: 'blur' }]">
<el-input v-model="processed_admin_name" clearable readonly placeholder="请输入指定处理人" />
</el-form-item>
@ -149,7 +149,8 @@
<customDialog @customEvent="customEvent1"></customDialog>
</el-dialog>
<el-dialog v-model="showDialog2" title="选择销售合同" width="70%">
<salescontractDialog @customEvent="customEvent2" contract_type="2"></salescontractDialog>
<salescontractDialog @customEvent="customEvent2" contract_type="2" :project_id="formData.project_id">
</salescontractDialog>
</el-dialog>
<personnelselector ref="personnel" @confirm="submituser" type="1"></personnelselector>
</div>
@ -187,14 +188,12 @@ const processed_admin_name = ref('')
const personnel = ref<any>()
const formDataannex = reactive([])
const customEvent = (e: any) => {
// console.log(e)
console.log(e)
formData.project_id = e.id
custom_name.value = e.name
project_name.value = e.custom_name
formData.custom_name = e.name
project_name.value = e.name
project_code.value = e.project_code
showDialog.value = false;
};
const customEvent1 = (e: any) => {
formData.custom_id = e.id
@ -204,8 +203,8 @@ const customEvent1 = (e: any) => {
};
const customEvent2 = (e: any) => {
console.log(e)
formData.contract_id = e.id
formData.contract_code = e.contract_code
showDialog2.value = false;
@ -250,7 +249,7 @@ const userclick = () => {
}
//
const submituser = (e: any) => {
formData.processed_admin_id = e.id;
formData.processed_user = e.id;
processed_admin_name.value = e.name;
}
//
@ -307,12 +306,15 @@ const formData = reactive({
classification: '',
urgency: '',
receiver: '',
processed_admin_id: '',
processed_user: '',
name: '',
description: '',
notes: '',
annex: [],
status: '',
contract_code: "",
contract_id: "",
custom_name: ""
})
@ -364,6 +366,7 @@ const handleSubmit = async () => {
}
await formRef.value?.validate()
const data = { ...formData, }
data.date = data.date.substring(0, 10)
await apiCustomServiceAdd(data)
popupRef.value?.close()
emit('success')

View File

@ -4,25 +4,29 @@
<el-form class="mb-[-16px]" :model="queryParams" label-width="auto" inline>
<el-form-item label="项目" prop="project_id">
<el-select class="w-[280px]" v-model="queryParams.project_id" clearable placeholder="请选择项目">
<el-option v-for="(item, index) in projectList" :key="index" :label="item.name" :value="parseInt(item.id)" />
<el-option v-for="(item, index) in projectList" :key="index" :label="item.name"
:value="parseInt(item.id)" />
</el-select>
</el-form-item>
<el-form-item label="客户" prop="custom_id">
<el-select class="w-[280px]" v-model="queryParams.custom_id" clearable placeholder="请选择项目">
<el-option v-for="(item, index) in customList" :key="index" :label="item.name" :value="parseInt(item.id)" />
<el-option v-for="(item, index) in customList" :key="index" :label="item.name"
:value="parseInt(item.id)" />
</el-select>
</el-form-item>
<el-form-item label="紧急程度" prop="urgency">
<el-select class="w-[280px]" v-model="queryParams.urgency" clearable placeholder="请选择紧急程度">
<el-option label="全部" value=""></el-option>
<el-option v-for="(item, index) in dictData.urgency" :key="index" :label="item.name" :value="item.value" />
<el-option v-for="(item, index) in dictData.urgency" :key="index" :label="item.name"
:value="item.value" />
</el-select>
</el-form-item>
<el-form-item label="分类" prop="classification">
<el-select class="w-[280px]" v-model="queryParams.classification" clearable placeholder="请选择紧急程度">
<el-option label="全部" value=""></el-option>
<el-option v-for="(item, index) in dictData.classification" :key="index" :label="item.name" :value="item.value" />
<el-option v-for="(item, index) in dictData.classification" :key="index" :label="item.name"
:value="item.value" />
</el-select>
</el-form-item>
@ -62,8 +66,6 @@
<el-table :data="pager.lists" @selection-change="handleSelectionChange">
<el-table-column type="selection" width="55" />
<el-table-column label="序号" type="index" width="55" />
<el-table-column label="流程编号" prop="" />
<el-table-column label="流程步骤" prop="" />
<el-table-column label="客户名称" prop="custom_name" />
<el-table-column label="项目名称" prop="project_name" />
<el-table-column label="项目编码" prop="project_code" show-overflow-tooltip />
@ -82,7 +84,8 @@
<el-table-column label="评分" prop="score" show-overflow-tooltip />
<el-table-column label="操作" width="110" fixed="right">
<template #default="{ row }">
<el-button v-perms="['custom_service.custom_service/edit']" type="primary" link @click="handleEdit(row)" v-if="row.is_solve != 1">
<el-button v-perms="['custom_service.custom_service/edit']" type="primary" link
@click="handleEdit(row)" v-if="row.is_solve != 1">
处理
</el-button>
<!-- <el-button v-perms="['custom_service.custom_service/delete']" type="danger" link @click="handleDelete(row.id)">
@ -95,12 +98,13 @@
</el-table-column>
</el-table>
</div>
<div class="flex mt-4 justify-end">
<div class="flex justify-end mt-4">
<pagination v-model="pager" @change="getLists" />
</div>
</el-card>
<edit-popup v-if="showEdit" ref="editRef" :dict-data="dictData" @success="getLists" @close="showEdit = false" />
<handle-popup v-if="showHandle" ref="handleRef" :dict-data="dictData" @success="getLists" @close="showEdit = false" />
<handle-popup v-if="showHandle" ref="handleRef" :dict-data="dictData" @success="getLists"
@close="showEdit = false" />
<detail-popup v-if="showDtail" ref="detailRef" :dict-data="dictData" @close="showDtail = false" />
</div>
</template>

View File

@ -33,7 +33,7 @@
</el-form-item>
<el-form-item label="提交时间" prop="submission_time">
<el-date-picker class="flex-1 !flex" v-model="formData.submission_time" clearable type="datetime"
value-format="YYYY-MM-DD HH:mm:ss" placeholder="选择提交时间">
value-format="YYYY-MM-DD" placeholder="选择提交时间">
</el-date-picker>
</el-form-item>
@ -214,9 +214,8 @@ const setFormData = async (data: Record<any, any>) => {
formData[key] = data[key]
}
}
//@ts-ignore
formData.submission_time = timeFormat(formData.submission_time, 'yyyy-mm-dd hh:MM:ss')
formData.submission_time = timeFormat(formData.submission_time, 'yyyy-mm-dd')
}
const getDetail = async (row: Record<string, any>) => {
@ -232,6 +231,7 @@ const handleSubmit = async () => {
if (formDataannex.length > 0) {
formData.annex = formDataannex.map((item) => item.uri)
}
await formRef.value?.validate()
const data = { ...formData, }
mode.value == 'edit'

View File

@ -8,7 +8,7 @@
<el-table :data="pager.lists" @selection-change="handleSelectionChange">
<el-table-column type="selection" width="55" />
<el-table-column label="序号" type="index" width="55" />
<el-table-column label="客户" prop="采购申请单号" show-overflow-tooltip />
<el-table-column label="客户" prop="custom_name" show-overflow-tooltip />
<el-table-column label="项目名称" prop="project_name" show-overflow-tooltip />
@ -31,13 +31,15 @@
<el-table-column label="操作" width="160" fixed="right">
<template #default="{ row }">
<el-button v-perms="['InvoicingRequests.InvoicingRequests/edit']" type="primary" link @click="handleEdit(row)">
<el-button v-perms="['InvoicingRequests.InvoicingRequests/edit']" type="primary" link
@click="handleEdit(row)">
编辑
</el-button>
<!-- <el-button v-perms="['InvoicingRequests.InvoicingRequests/delete']" type="danger" link @click="handleDelete(row.id)">
删除
</el-button> -->
<el-button v-perms="['InvoicingRequests.InvoicingRequests/detail']" link @click="handledetail(row)">
<el-button v-perms="['InvoicingRequests.InvoicingRequests/detail']" link
@click="handledetail(row)">
详情
</el-button>
</template>

View File

@ -1,5 +1,8 @@
<template>
<myTable :baseData="baseData"></myTable>
<myTable :baseData="baseData1"></myTable>
<myTable :baseData="baseData2"></myTable>
<myTable :baseData="baseData3"></myTable>
</template>
@ -8,29 +11,80 @@
import { ref, reactive, defineProps } from "vue"
import myTable from "./myTable.vue"
import { subpackagdetailLists } from '@/api/project_subpackage_budget_detail'
import { apiinvoiceapplyLists } from '@/api/InvoicingRequests'
import { apireturnedLists } from '@/api/remittance'
import { apireturnedrecordLists } from '@/api/recordsPayment'
import { apirefundapplyLists } from '@/api/refund'
const props = defineProps({
project_id: Number
})
const baseData = reactive({
fetchFun: subpackagdetailLists,
tit: "竞争对手",
fetchFun: apiinvoiceapplyLists,
tit: "开票记录",
queryParams: { project_id: props.project_id },
columnList: [
{ label: '工作类型', prop: 'work_type' },
{ label: '工作内容', prop: 'work_content' },
{ label: '项目特征', prop: 'project_features' },
{ label: '单位', prop: 'unit' },
{ label: '预算工作量', prop: 'num' },
{ label: '单价', prop: 'price' },
{ label: '开票单号', prop: 'invoicing_code' },
{ label: '合同编号', prop: 'contract_code' },
{ label: '合同名称', prop: 'contract_name' },
{ label: '开票日期', prop: 'invoicing_date' },
{ label: '期次', prop: 'period' },
{ label: '发票类型', prop: 'invoice_type' },
{ label: '发票编号', prop: 'tax' },
{ label: '开票金额(含税)', prop: 'amount_including_tax' },
{ label: '税率', prop: 'tax_rate' },
{ label: '税额', prop: 'tax_amount' },
]
})
const baseData1 = reactive({
fetchFun: apireturnedLists,
tit: "回款计划",
queryParams: { project_id: props.project_id },
columnList: [
{ label: '合同编号', prop: 'contract_code' },
{ label: '合同名称', prop: 'contract_name' },
{ label: '期次', prop: 'period' },
{ label: '计划日期', prop: 'return_date' },
{ label: '状态', prop: 'return_status' },
{ label: '金额', prop: 'amount' },
{ label: '已分包量', prop: 'has_subcontract_num' },
{ label: '剩余工作量', prop: 'residue_num' },
{ label: '已回款', prop: 'has_return_amount' },
{ label: '未回款', prop: 'not_return_amount' },
]
})
const baseData2 = reactive({
fetchFun: apireturnedrecordLists,
tit: "回款记录",
queryParams: { project_id: props.project_id },
columnList: [
{ label: '合同名称', prop: 'contract_name' },
{ label: '合同编号', prop: 'contract_code' },
{ label: '期次', prop: 'period' },
{ label: '日期', prop: 'return_date' },
{ label: '金额', prop: 'amount' },
{ label: '收款人', prop: 'receiver' },
]
})
const baseData3 = reactive({
fetchFun: apirefundapplyLists,
tit: "退款记录",
queryParams: { project_id: props.project_id },
columnList: [
{ label: '退款单号', prop: 'refund_code' },
{ label: '合同编号', prop: 'contract_code' },
{ label: '合同名称', prop: 'contract_name' },
{ label: '退款日期', prop: 'refund_date' },
{ label: '退款原因', prop: 'reason' },
{ label: '退款方式', prop: 'refund_type' },
{ label: '退款金额', prop: 'amount' },
{ label: '备注', prop: 'remark' },
]
})
</script>

View File

@ -0,0 +1,35 @@
<template>
<myTable :baseData="baseData"></myTable>
</template>
<script setup>
import { ref, reactive, defineProps } from "vue"
import myTable from "./myTable.vue"
import { subpackagdetailLists } from '@/api/project_subpackage_budget_detail'
const props = defineProps({
project_id: Number
})
const baseData = reactive({
fetchFun: subpackagdetailLists,
tit: "竞争对手",
queryParams: { project_id: props.project_id },
columnList: [
{ label: '工作类型', prop: 'work_type' },
{ label: '工作内容', prop: 'work_content' },
{ label: '项目特征', prop: 'project_features' },
{ label: '单位', prop: 'unit' },
{ label: '预算工作量', prop: 'num' },
{ label: '单价', prop: 'price' },
{ label: '金额', prop: 'amount' },
{ label: '已分包量', prop: 'has_subcontract_num' },
{ label: '剩余工作量', prop: 'residue_num' },
]
})
</script>

View File

@ -0,0 +1,89 @@
<template>
<myTable :baseData="baseData"></myTable>
<myTable :baseData="baseData1"></myTable>
<myTable :baseData="baseData2"></myTable>
<myTable :baseData="baseData3"></myTable>
</template>
<script setup>
import { ref, reactive, defineProps } from "vue"
import myTable from "./myTable.vue"
import { apifinancereceiptLists } from '@/api/receiptrecord'
import { paymentplanLists } from '@/api/paymentplan'
import { paymentapplyLists } from '@/api/paymentrequest'
import { apiFinancerefundLists } from '@/api/refundrecord'
const props = defineProps({
project_id: Number
})
const baseData = reactive({
fetchFun: apifinancereceiptLists,
tit: "收票记录",
queryParams: { project_id: props.project_id },
columnList: [
{ label: '开票日期', prop: 'invoicing_date' },
{ label: '提交人', prop: 'commitor' },
{ label: '发票类型', prop: 'invoice_type' },
{ label: '发票编号', prop: 'invoice_no' },
{ label: '发票税率(%)', prop: 'invoice_tax_rate' },
{ label: '发票金额', prop: 'invoice_amount' },
{ label: '不含税金额', prop: 'amount_excluding_tax' },
{ label: '税额', prop: 'tax_amount' },
]
})
const baseData1 = reactive({
fetchFun: paymentplanLists,
tit: "付款计划",
queryParams: { project_id: props.project_id },
columnList: [
{ label: '计划付款日期', prop: 'pay_date' },
{ label: '期次', prop: 'period' },
{ label: '状态', prop: 'status' },
{ label: '金额', prop: 'amount' },
{ label: '已付款', prop: 'has_payment_amount' },
{ label: '未付款', prop: 'not_payment_amoun' },
{ label: '备注', prop: 'amount_excluding_tax' },
{ label: '税额', prop: 'remark' },
]
})
const baseData2 = reactive({
fetchFun: paymentapplyLists,
tit: "付款记录",
queryParams: { project_id: props.project_id },
columnList: [
{ label: '付款单号', prop: 'competitor_name' },
{ label: '合同编号', prop: 'contract_no' },
{ label: '供应商名称', prop: 'supplier_name' },
{ label: '合同类型', prop: 'contract_type' },
{ label: '期次', prop: 'period' },
{ label: '付款日期', prop: 'pay_date' },
{ label: '付款性质', prop: 'payment_natrue' },
{ label: '付款方式', prop: 'pay_type' },
{ label: '付款金额', prop: 'amount' },
]
})
const baseData3 = reactive({
fetchFun: apiFinancerefundLists,
tit: "退款记录",
queryParams: { project_id: props.project_id },
columnList: [
{ label: '合同编号', prop: 'contract_no' },
{ label: '合同名称', prop: 'contract_name' },
{ label: '供应商名称', prop: 'supplier_name' },
{ label: '合同类型', prop: 'contract_type' },
{ label: '期次', prop: 'period' },
{ label: '退款日期', prop: 'refund_date' },
{ label: '退款原因', prop: 'reason' },
{ label: '退款方式', prop: 'refund_type' },
{ label: '退款金额', prop: 'refund_amount' },
]
})
</script>

View File

@ -36,187 +36,18 @@
<el-tab-pane label="收款" name="demo-14">
<!-- <div class='tit'>开票记录</div>
<div>
<el-table :data="tableData29" stripe style="width: 100%">
<el-table-column label="开票单号" prop='invoicing_code' width="180" />
<el-table-column label="合同编号" prop='contract_code' width="180" />
<el-table-column label="合同名称" prop='contract_name' />
<el-table-column label="开票日期" prop='invoicing_date' width="180" />
<el-table-column label="期次" prop='period' width="180" />
<el-table-column label="发票类型" prop='invoice_type' />
<el-table-column label="发票编号" prop='tax' />
<el-table-column label="开票金额(含税) " prop='amount_including_tax' />
<el-table-column label="开票金额(非税)" prop='invoicing_amount' />
<el-table-column label="税率" prop='tax_rate' />
<el-table-column label="税额" prop='tax_amount' />
</el-table>
</div>
<div style="margin: 10px 0;">
<el-pagination v-model:current-page="pager29.page_no" v-model:page-size="pager29.page_size"
:page-sizes="[10, 20, 30, 40]" layout="total, sizes, prev, pager, next, jumper"
:total="total28" @size-change="handleSizeChange29"
@current-change="handleCurrentChange29" />
</div>
<div class='tit' style="margin:20px 0">回款计划</div>
<div>
<el-table :data="tableData30" stripe style="width: 100%">
<el-table-column label="合同编号" prop='contract_code' width="180" />
<el-table-column label="合同名称" prop='contract_name' width="180" />
<el-table-column label="期次" prop='period' />
<el-table-column label="计划日期" prop='return_date' />
<el-table-column label="状态" prop='return_status' />
<el-table-column label="金额" prop='amount' />
<el-table-column label="已回款" prop='has_return_amount' />
<el-table-column label="未回款" prop='not_return_amount' />
</el-table>
</div>
<div style="margin: 10px 0;">
<el-pagination v-model:current-page="pager30.page_no" v-model:page-size="pager30.page_size"
:page-sizes="[10, 20, 30, 40]" layout="total, sizes, prev, pager, next, jumper"
:total="total29" @size-change="handleSizeChange30"
@current-change="handleCurrentChange30" />
</div>
<div class='tit' style="margin:20px 0">回款记录</div>
<div>
<el-table :data="tableData31" stripe style="width: 100%">
<el-table-column label="合同名称" prop='contract_name' width="180" />
<el-table-column label="合同编号" prop='contract_code' width="180" />
<el-table-column label="期次" prop='period' />
<el-table-column label="日期" prop='return_date' />
<el-table-column label="金额" prop='amount' />
<el-table-column label="收款人" prop='receiver' />
</el-table>
</div>
<div style="margin: 10px 0;">
<el-pagination v-model:current-page="pager31.page_no" v-model:page-size="pager31.page_size"
:page-sizes="[10, 20, 30, 40]" layout="total, sizes, prev, pager, next, jumper"
:total="total30" @size-change="handleSizeChange31"
@current-change="handleCurrentChange31" />
</div>
<div class='tit' style="margin:20px 0">退款记录</div>
<div>
<el-table :data="tableData32" stripe style="width: 100%">
<el-table-column label="退款单号" prop='refund_code' width="180" />
<el-table-column label="合同编号" prop='contract_code' width="180" />
<el-table-column label="合同名称" prop='contract_nanme' width="180" />
<el-table-column label="退款日期" prop='refund_date' width="180" />
<el-table-column label="退款原因" prop='reason' />
<el-table-column label="退款方式" prop='refund_type' />
<el-table-column label="退款金额" prop='amount' />
<el-table-column label="备注" prop='remark' />
</el-table>
</div>
<div style="margin: 10px 0;">
<el-pagination v-model:current-page="pager32.page_no" v-model:page-size="pager32.page_size"
:page-sizes="[10, 20, 30, 40]" layout="total, sizes, prev, pager, next, jumper"
:total="total31" @size-change="handleSizeChange32"
@current-change="handleCurrentChange32" />
</div>-->
<Collection v-if="activeName == 'demo-14'" :project_id="project_id"></Collection>
</el-tab-pane>
<el-tab-pane label="付款" name="demo-15">
<payment v-if="activeName == 'demo-15'" :project_id="project_id"></payment>
</el-tab-pane>
<!-- <el-tab-pane label="付款" name="demo-15">
<div class='tit'>收票记录</div>
<div>
<el-table :data="tableData22" stripe style="width: 100%">
<el-table-column label="开票日期" prop='invoicing_date' width="180" />
<el-table-column label="提交人" prop='commitor' width="180" />
<el-table-column label="发票类型" prop='invoice_type' />
<el-table-column label="发票编号" prop='invoice_no' width="180" />
<el-table-column label="发票税率(%)" prop='invoice_tax_rate' width="180" />
<el-table-column label="发票金额" prop='invoice_amount' />
<el-table-column label="不含税金额" prop='amount_excluding_tax' />
<el-table-column label="税额" prop='tax' />
</el-table>
</div>
<div style="margin: 10px 0;">
<el-pagination v-model:current-page="pager22.page_no" v-model:page-size="pager22.page_size"
:page-sizes="[10, 20, 30, 40]" layout="total, sizes, prev, pager, next, jumper"
:total="total21" @size-change="handleSizeChange22"
@current-change="handleCurrentChange22" />
</div>
<el-tab-pane label="文档" name="demo-16">
<documentation v-if="activeName == 'demo-16'" :project_id="project_id"></documentation>
</el-tab-pane>
<div class='tit' style="margin:20px 0">付款计划</div>
<div>
<el-table :data="tableData23" stripe style="width: 100%">
<el-table-column label="计划付款日期" prop='pay_date' width="180" />
<el-table-column label="期次" prop='period' width="180" />
<el-table-column label="状态" prop='status' />
<el-table-column label="金额" prop='amount' />
<el-table-column label="已付款" prop='has_payment_amount' />
<el-table-column label="未付款" prop='not_payment_amoun' />
<el-table-column label="备注" prop='remark' />
</el-table>
</div>
<div style="margin: 10px 0;">
<el-pagination v-model:current-page="pager23.page_no" v-model:page-size="pager23.page_size"
:page-sizes="[10, 20, 30, 40]" layout="total, sizes, prev, pager, next, jumper"
:total="total22" @size-change="handleSizeChange23"
@current-change="handleCurrentChange23" />
</div>
<div class='tit' style="margin:20px 0">付款记录</div>
<div>
<el-table :data="tableData24" stripe style="width: 100%">
<el-table-column label="付款单号" prop='competitor_name' width="180" />
<el-table-column label="合同编号" prop='contract_no' width="180" />
<el-table-column label="供应商名称" prop='supplier_name' />
<el-table-column label="合同类型" prop='contract_type' />
<el-table-column label="期次" prop='period' />
<el-table-column label="付款日期" prop='pay_date' />
<el-table-column label="付款性质" prop='payment_natrue' />
<el-table-column label="付款方式" prop='pay_type' />
<el-table-column label="开票状态" prop='' />
<el-table-column label="付款金额" prop='amount' />
</el-table>
</div>
<div style="margin: 10px 0;">
<el-pagination v-model:current-page="pager24.page_no" v-model:page-size="pager24.page_size"
:page-sizes="[10, 20, 30, 40]" layout="total, sizes, prev, pager, next, jumper"
:total="total23" @size-change="handleSizeChange24"
@current-change="handleCurrentChange24" />
</div>
<div class='tit' style="margin:20px 0">退款记录</div>
<div>
<el-table :data="tableData25" stripe style="width: 100%">
<el-table-column label="合同编号" prop='contract_no' width="180" />
<el-table-column label="合同名称" prop='contract_nanme' width="180" />
<el-table-column label="供应商名称" prop='supplier_name' width="180" />
<el-table-column label="合同类型" prop='contract_type' width="180" />
<el-table-column label="退款日期" prop='refund_date' width="180" />
<el-table-column label="退款原因" prop='reason' />
<el-table-column label="退款方式" prop='refund_type' />
<el-table-column label="退款金额" prop='refund_amount' />
</el-table>
</div>
<div style="margin: 10px 0;">
<el-pagination v-model:current-page="pager25.page_no" v-model:page-size="pager25.page_size"
:page-sizes="[10, 20, 30, 40]" layout="total, sizes, prev, pager, next, jumper"
:total="total24" @size-change="handleSizeChange25"
@current-change="handleCurrentChange25" />
</div>
</el-tab-pane> -->
<!-- <el-tab-pane label="人力" name="demo-12">
<el-tabs v-model="active" class="demo-tabs">
@ -437,14 +268,6 @@ import { apiProjectEstimateLists } from '@/api/project_estimate'
import { apiCompetitorLists } from '@/api/competitor'
import { apiCustomServiceLists } from '@/api/custom_service'
import { subpackagdetailLists } from '@/api/project_subpackage_budget_detail'
import { paymentplanLists } from '@/api/paymentplan'
import { apifinancereceiptLists } from '@/api/receiptrecord'
import { paymentapplyLists } from '@/api/paymentrequest'
import { apiFinancerefundLists } from '@/api/refundrecord'
import { apiinvoiceapplyLists } from '@/api/InvoicingRequests'
import { apireturnedLists } from '@/api/remittance'
import { apireturnedrecordLists } from '@/api/recordsPayment'
import { apirefundapplyLists } from '@/api/refund'
import Overview from "./components/Overview.vue"
import Business from "./components/Business.vue"
import tender from "./components/tender.vue"
@ -453,9 +276,9 @@ import budget from "./components/budget.vue"
import procurement from "./components/procurement.vue"
import subcontract from "./components/subcontract.vue"
import manpower from "./components/manpower.vue"
// import manpower from "./components/manpower.vue"
// import manpower from "./components/manpower.vue"
// import manpower from "./components/manpower.vue"
import Collection from "./components/Collection.vue"
import payment from "./components/payment.vue"
import documentation from "./components/documentation.vue"
// import manpower from "./components/manpower.vue"

View File

@ -234,7 +234,6 @@ const getlist = () => {
//
const deparmet = () => {
getAllDept().then((res) => {
console.log(res)
Object.assign(deparmetlist, res)
})
}
@ -254,7 +253,6 @@ const deparmetclck = (item: { id: any }) => {
const Jobs = () => {
getAllJobs().then((res) => {
console.log(res)
Object.assign(jobslist, res)
})
}
@ -339,22 +337,24 @@ const userclick = () => {
//
const removeTag1 = (tag) => {
technician.value.splice(tag, 1)
if (technician.value.length > 0) {
if (technician.value.length >= 0) {
formData.technician_ids = technician.value.map((item) => item.id).toString()
}
console.log(formData)
}
const removeTag2 = (tag) => {
business_people.value.splice(tag, 1)
if (business_people.value.length > 0) {
if (business_people.value.length >= 0) {
formData.business_people_ids = business_people.value.map((item) => item.id).toString()
}
}
const removeTag3 = (tag) => {
cross_departmental_personnel.value.splice(tag, 1)
if (cross_departmental_personnel.value.length > 0) {
if (cross_departmental_personnel.value.length >= 0) {
formData.cross_departmental_personnel_ids = cross_departmental_personnel.value.map((item) => item.id).toString()
}
}
@ -555,4 +555,5 @@ defineExpose({
color: #f7f7f7;
}
}</style>
}
</style>

View File

@ -15,7 +15,7 @@
<el-col :span="8">
<el-form-item label="客户" prop="custom_id"
:rules="[{ required: true, message: '不可为空', trigger: 'change' }]">
<el-input v-model="customer_name" clearable placeholder="请输入客户" readonly
<el-input v-model="customer_name" clearable placeholder="点击选择客户" readonly
@click="showDialog = true" />
</el-form-item>
</el-col>
@ -54,7 +54,7 @@
</el-col> <el-col :span="8">
<el-form-item label="含税金额" prop="amount_including_tax"
:rules="[{ required: true, message: '不可为空', trigger: 'change' }]">
<el-input v-model="formData.amount_including_tax" clearable placeholder="请输入含税金额"
<el-input v-model="formData.amount_including_tax" disabled clearable placeholder="请输入含税金额"
@input="amountinput" />
</el-form-item></el-col>
<el-col :span="8">
@ -66,17 +66,18 @@
<el-col :span="8">
<el-form-item label="运费" prop="freight"
:rules="[{ required: true, message: '不可为空', trigger: 'blur' }]">
<el-input v-model="formData.freight" clearable placeholder="请输入运费" />
<el-input v-model="formData.freight" clearable placeholder="请输入运费" type="number" />
</el-form-item></el-col><el-col :span="8">
<el-form-item label="其他费用" prop="other_fee"
:rules="[{ required: true, message: '不可为空', trigger: 'blur' }]">
<el-input v-model="formData.other_fee" clearable placeholder="请输入其他费用" />
<el-input v-model="formData.other_fee" clearable type="number" placeholder="请输入其他费用" />
</el-form-item></el-col>
<el-col :span="8">
<el-form-item label="合计金额" prop="total_amount">
<el-input v-model="formData.total_amount" clearable placeholder="请输入合计金额"
<el-input v-model="formData.total_amount" disabled clearable placeholder="请输入合计金额"
@input="amountinput1" />
<div v-show="false">{{ totalPrice }}</div>
</el-form-item></el-col>
<el-col :span="8">
<el-form-item label="合计金额大写" prop="total_amount">
@ -158,7 +159,8 @@
<el-table-column label="税率(%)" prop="tax_rate">
<template #default="{ row }">
<el-select class="flex-1" v-model="row.tax_rate" clearable placeholder="请选择税率">
<el-select class="flex-1" v-model="row.tax_rate" clearable placeholder="请选择税率"
@change="test(row)">
<el-option v-for="(item, index) in dictData.tax_rate" :key="index" :label="item.name"
:value="item.value" />
</el-select>
@ -213,7 +215,7 @@
import type { FormInstance } from 'element-plus'
import Popup from '@/components/popup/index.vue'
import { apiQuotationAdd, apiQuotationEdit, apiQuotationDetail } from '@/api/quotation'
import { timeFormat } from '@/utils/util'
import { timeFormat, convertToChinese } from '@/utils/util'
import { toChinesNum } from "@/utils/util";
import customDialog1 from '@/components/product/index.vue'
import reviewprocess from '@/components/reviewprocess/index.vue'
@ -222,7 +224,9 @@ const list2 = reactive([])
import { deptAll } from '@/api/org/department'
import { getAll } from '@/api/org/organization'
import type { PropType } from 'vue'
defineProps({
import { computed, watch } from "vue"
const props = defineProps({
dictData: {
type: Object as PropType<Record<string, any[]>>,
default: () => ({})
@ -327,7 +331,6 @@ const formData = reactive({
customer_require: '',
remark: '',
annex: [],
quotation_detail: [],
})
@ -346,18 +349,18 @@ const customEvent1 = (e: any) => {
specs: e.specs,
brand: e.brand,
parameter_description: e.parameter_description,
product_num: 0,
product_num: 1,
tax_rate: '',
price: 0,
price: e.sales_price,
remark: '',
amount: 0,
amount_including: 0
amount: e.sales_price,
amount_including: e.sales_price
})
console.log(e)
// formData.customer_id = e.id;
// customer_name.value = e.name;
showDialog1.value = false;
console.log(tableData.value)
};
//
const formRules = reactive<any>({
@ -464,7 +467,21 @@ const handleClose = () => {
emit('close')
}
//
const totalPrice = computed(() => {
formData.total_amount = Number(formData.amount_including_tax) + Number(formData.freight || 0) + Number(formData.other_fee || 0)
total_amount_daxie.value = convertToChinese(formData.total_amount)
return Number(formData.amount_including_tax) + Number(formData.freight || 0) + Number(formData.other_fee || 0)
})
watch(tableData.value, (newVal, oldVal) => {
let num = 0;
tableData.value.forEach(item => {
num += item.price * item.product_num
})
formData.amount_including_tax = num
amount_including_daxie.value = convertToChinese(num)
})
defineExpose({
open,