This commit is contained in:
zmj 2024-03-22 16:28:54 +08:00
parent c415828eb4
commit 8d6146aba7
46 changed files with 516 additions and 839 deletions

BIN
dist.rar

Binary file not shown.

View File

@ -503,3 +503,60 @@ export const procurement_contract: Iconfig = {
{ num: "数量" },
],
};
import { paymentplanLists } from "@/api/paymentplan";
export const finance_payment_plan: Iconfig = {
fetchFn: paymentplanLists,
dictData: "pay_status",
serchList: [
{
label: "状态",
value: "status",
select: "pay_status",
},
],
tableList: [
{ supplier_name: "供应商名称" },
{ project_name: "项目名称" },
{ contract_name: "合同名称" },
{ contract_type_text: "合同类型" },
{ pay_date: "计划付款日期" },
{ amount: "金额" },
{ period_text: "期次" },
{ status_text: "状态" },
{ has_payment_amount: "已付款" },
{ not_payment_amount: "未付款" },
],
};
import { bankaccountLists } from "@/api/bank_account";
export const bank_account: Iconfig = {
fetchFn: bankaccountLists,
serchList: [
{
label: "账户编码",
value: "account_sn",
},
{
label: "账号",
value: "account",
},
{
label: "开户银行",
value: "deposit_bank",
},
{
label: "开户名称",
value: "account_name",
},
],
tableList: [
{ account_sn: "账户编码" },
{ deposit_bank: "开户银行" },
{ account_name: "开户名称" },
{ account: "账号" },
{ account_opening_date: "开户日期" },
{ opening_amount: "期初金额" },
],
};

View File

@ -1,7 +1,7 @@
<template>
<div class="detail-popup">
<popup ref="popupRef" title="银行账户详情" :async="true" width="80%" @confirm="handleSubmit" @close="handleClose">
<el-descriptions :column="3" border>
<popup ref="popupRef" title="银行账户详情" :async="true" width="30%" @confirm="handleSubmit" @close="handleClose">
<el-descriptions :column="1" border>
<el-descriptions-item label="账户编码" label-align="left" align="left" label-class-name="my-label">{{
formData.account_sn }}</el-descriptions-item>
<el-descriptions-item label="开户银行" label-align="left" align="left" label-class-name="my-label">{{

View File

@ -44,7 +44,7 @@
<el-table-column label="开户日期" prop="account_opening_date" show-overflow-tooltip />
<el-table-column label="期初金额" prop="opening_amount" show-overflow-tooltip />
<el-table-column label="备注" prop="remark" show-overflow-tooltip />
<el-table-column label="操作" width="160" fixed="right">
<el-table-column label="操作" width="160" fixed="right" align="center">
<template #default="{ row }">
<el-button v-perms="['bid.bid_result/edit']" type="primary" link @click="handleEdit(row)">
编辑

View File

@ -1,7 +1,13 @@
<template>
<div class="detail-popup">
<popup ref="popupRef" title="投标保证金详情" :async="true" width="80%" @confirm="handleSubmit" @close="handleClose">
<el-descriptions title="基本信息" :column="3" border>
<el-card>
<template #header>
基本信息
</template>
<el-descriptions :column="3" border>
<el-descriptions-item label="投标编号" label-align="left" align="left" label-class-name="my-label">{{
formData.security_apply_code }}</el-descriptions-item>
<el-descriptions-item label="客户名称" label-align="left" align="left" label-class-name="my-label">{{
@ -15,13 +21,8 @@
formData.project_name }}</el-descriptions-item>
<el-descriptions-item label="项目编码" label-align="left" align="left" label-class-name="my-label">{{
formData.project_code }}</el-descriptions-item>
<el-descriptions-item label="保证金金额" label-align="left" align="left" label-class-name="my-label">{{
formData.margin_amount }}</el-descriptions-item>
<!-- <el-descriptions-item label="大写" label-align="left" align="left" label-class-name="my-label">{{ formData.bid_opening_date }}</el-descriptions-item> -->
<el-descriptions-item label="投标时间" label-align="left" align="left" label-class-name="my-label">{{
formData.bidding_time
}}</el-descriptions-item>
@ -44,35 +45,25 @@
</el-descriptions-item>
</el-descriptions>
<el-descriptions title="收款人信息" border>
</el-card>
<el-card>
<template #header>
收款人信息
</template>
<el-descriptions border>
<el-descriptions-item label=" 开户银行" label-align="left" align="left" label-class-name="my-label">{{
formData.deposit_bank }}</el-descriptions-item>
<el-descriptions-item label="开户名称" label-align="left" align="left" label-class-name="my-label">{{
formData.account_name }}</el-descriptions-item>
<el-descriptions-item label="账号" label-align="left" align="left" label-class-name="my-label">{{
formData.account }}</el-descriptions-item>
</el-descriptions>
<!-- <el-descriptions title="付款账户信息" border>
<el-descriptions-item label="账号编码" label-align="left" align="left" label-class-name="my-label">{{}}</el-descriptions-item>
<el-descriptions-item label="开户银行" label-align="left" align="left" label-class-name="my-label">{{ formData.deposit_bank }}</el-descriptions-item>
<el-descriptions-item label="开户名称" label-align="left" align="left" label-class-name="my-label">{{ formData.account_name }}</el-descriptions-item>
<el-descriptions-item label="账号" label-align="left" align="left" label-class-name="my-label">{{ formData.account }}</el-descriptions-item>
</el-descriptions> -->
</el-card>
<flowProcess v-if="!formData?.approve_id || formData.approve_check_status == 4" :flows="flows"
:submitApi="apibid_security_applyApprove" :id="formData?.id" @off="handleClose">
</flowProcess>
<flowDetail v-else :approve_id="formData?.approve_id" @off="handleClose" />
<!-- import { apibid_security_applyApprove, apibid_security_applyFlows } from '@/api/flowSet.ts'
//
const flows = ref([])
const getbidDocumentExaminationFlows = async () => {
if (formData?.approve_id) return
let res = await apibid_security_applyFlows()
flows.value = res
} -->
</popup>
</div>

View File

@ -1,8 +1,7 @@
<template>
<div class="edit-popup">
<popup ref="popupRef" :title="popupTitle" :async="true" width="80%" @confirm="handleSubmit"
@close="handleClose">
<popup ref="popupRef" :title="popupTitle" :async="true" width="80%" @confirm="handleSubmit" @close="handleClose">
<el-form ref="formRef" :model="formData" label-width="auto" :rules="formRules">
<el-row :gutter="10">
@ -78,24 +77,7 @@
<el-col :span="24">
<el-form-item label="附件">
<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>
<uploadAnnex :formData="formData"></uploadAnnex>
</el-form-item>
</el-col>
</el-row>
@ -127,9 +109,6 @@
<biddingDecisionDialog @customEvent="customEvent" :project_id="project?.id || ''">
</biddingDecisionDialog>
</el-dialog>
<!-- <el-dialog v-model="showDialog3" title="选择收款人信息" width="70%">
<bankaccountDialog @customEvent="customEvent3"></bankaccountDialog>
</el-dialog> -->
</el-form>
</popup>
@ -159,26 +138,6 @@ const bidding_time = ref('')
const project_code = ref('')
const document_no = ref('')
const userInfo = userStore.userInfo
//
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 emit = defineEmits(['success', 'close'])
@ -245,18 +204,6 @@ const formRules = reactive<any>({
//
const setFormData = async (data: Record<any, any>) => {
if (data.annex && data.annex.length > 0) {
const arry1 = data.annex.map((item: any, index: any) => {
return {
name: `文件${index + 1}`,
uri: item
};
});
Object.assign(formDataannex, arry1)
}
for (const key in formData) {
if (data[key] != null && data[key] != undefined) {
@ -287,13 +234,7 @@ const getDetail = async (row: Record<string, any>) => {
//
const handleSubmit = async () => {
if (formDataannex.length > 0) {
formData.annex = formDataannex.map((item: any) => item.uri)
}
await formRef.value?.validate()
const data = { ...formData }
mode.value == 'edit'
? await bidapplyEdit(data)

View File

@ -1,7 +1,6 @@
<template>
<div class="edit-popup">
<popup ref="popupRef" :title="popupTitle" :async="true" width="80vw" @confirm="handleSubmit"
@close="handleClose">
<popup ref="popupRef" :title="popupTitle" :async="true" width="80vw" @confirm="handleSubmit" @close="handleClose">
<el-form ref="formRef" :model="formData" label-width="120px" :rules="formRules">
<el-row>
<el-col :span="8">
@ -32,8 +31,7 @@
</el-col>
<el-col :span="8">
<el-form-item label="行业" prop="industry">
<el-select v-model="formData.industry" clearable placeholder="请选择行业" class="flex-1"
disabled>
<el-select v-model="formData.industry" clearable placeholder="请选择行业" class="flex-1" disabled>
<el-option v-for="(
item, index
) in dictData.cost_consultation_industry_nature" :key="index" :label="item.name"
@ -43,8 +41,8 @@
</el-col>
<el-col :span="8">
<el-form-item label="所在省份" prop="province">
<el-select v-model="formData.province" clearable placeholder="请选择省"
@change="province_change" class="flex-1">
<el-select v-model="formData.province" clearable placeholder="请选择省" @change="province_change"
class="flex-1">
<el-option v-for="(item, index) in datas.provinceOptions" :key="index"
:label="item.province_name" :value="parseInt(item.province_code)" />
</el-select>
@ -55,8 +53,8 @@
<el-col :span="8">
<el-form-item label="所在市区" prop="city">
<el-select v-model="formData.city" clearable placeholder="请选择市" class="flex-1">
<el-option v-for="(item, index) in datas.cityOptions" :key="index"
:label="item.city_name" :value="parseInt(item.city_code)" />
<el-option v-for="(item, index) in datas.cityOptions" :key="index" :label="item.city_name"
:value="parseInt(item.city_code)" />
</el-select>
</el-form-item>
</el-col>
@ -308,7 +306,7 @@ const customEvent = (e) => {
formData.industry = e.industry_nature
formData.starting = e.start_date
formData.endtime = e.end_date
formData.principal = e.signing_person
formData.principal = e.project_director
formData.invest = e.project_money
formData.aunit = e.part_a
formData.generalize = e.project_scale

View File

@ -19,7 +19,8 @@
<el-col :span="8">
<el-form-item label="合同类型" prop="contract_cate"
:rules="[{ required: true, message: '不可为空', trigger: 'blur' }]">
<el-select v-model="formData.contract_cate" placeholder="请选择" @change="resetFormData">
<el-select v-model="formData.contract_cate" placeholder="请选择" @change="resetFormData"
class="flex-1">
<el-option label="采购合同" :value="1"></el-option>
<el-option label="分包合同" :value="2"></el-option>
</el-select>
@ -185,33 +186,32 @@
</el-row>
<el-dialog v-model="showDialog" title="选择供应商" width="70%">
<suppliertable @customEvent="customEvent" :project_id="project?.id || ''"></suppliertable>
<dialogTable :config="supplier_tab" :query="{ project_id: project?.id || '' }"
@customEvent="customEvent">
</dialogTable>
</el-dialog>
<div v-if="formData.contract_cate == 1 && showDialog1">
<el-dialog v-model="showDialog1" title="选择采购合同" width="70%">
<subcontractingDialog @customEvent="customEvent1" :supplier_id="formData.supplier_id">
</subcontractingDialog>
<dialogTable :config="procurement_contract" :query="{ supplier_id: formData?.supplier_id || '' }"
@customEvent="customEvent1" />
</el-dialog>
</div>
<div v-if="formData.contract_cate == 2 && showDialog1">
<el-dialog v-model="showDialog1" title="选择分包合同" width="70%">
<subcontracting @customEvent="customEvent1" :supplier_id="formData.supplier_id">
</subcontracting>
<dialogTable :config="subcontracting_contract" :query="{ supplier_id: formData?.supplier_id || '' }"
@customEvent="customEvent1" />
</el-dialog>
</div>
<div v-if="showDialog2">
<el-dialog v-model="showDialog2" title="选择待付款计划" width="70%">
<paylistDialog @customEvent="customEvent2" :contract_id="formData.contract_id"></paylistDialog>
<dialogTable :config="finance_payment_plan"
:query="{ contract_id: formData?.contract_id, status: 1 }" @customEvent="customEvent2" />
</el-dialog>
</div>
<el-dialog v-model="showDialog3" title="选择收款人信息" width="70%">
<bankaccountDialog @customEvent="customEvent3"></bankaccountDialog>
</el-dialog>
<el-dialog v-model="showDialog4" title="选择付款银行" width="70%">
<bankaccountDialog @customEvent="customEvent4"></bankaccountDialog>
<dialogTable :config="bank_account" @customEvent="customEvent4" />
</el-dialog>
</el-form>
</popup>
@ -225,31 +225,13 @@ import customDialog from '@/components/custom-dialog/index.vue'
import type { FormInstance } from 'element-plus'
import Popup from '@/components/popup/index.vue'
import { useDictData } from '@/hooks/useDictOptions'
import suppliertable from '@/components/supplier/index.vue'
import subcontractingDialog from '@/components/procurementsubcontracting_selector/index.vue'
import subcontracting from '@/components/procurementsubcontracting_selector/subcontracting.vue'
import paylistDialog from '@/components/paylist/index.vue'
import bankaccountDialog from '@/components/bankaccount/index.vue'
import { supplier_tab, procurement_contract, subcontracting_contract, finance_payment_plan, bank_account } from "@/components/dialogTable/dialogTableConfig"
import { paymentapplyAdd, paymentapplyEdit, paymentapplyDetail } from '@/api/paymentrequest'
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 configs from "@/config"
import useUserStore from "@/stores/modules/user";
const protype = reactive([])
const userStore = useUserStore();
const formDataannex = reactive([])
const contract_name = ref('')
@ -281,7 +263,6 @@ const amount_daxie = ref('')
const showDialog = ref(false)
const showDialog1 = ref(false)
const showDialog2 = ref(false)
const showDialog3 = ref(false)
const showDialog4 = ref(false)
const customEvent = (e: any) => {
@ -311,12 +292,7 @@ const customEvent2 = (e: any) => {
showDialog2.value = false;
};
const customEvent3 = (e: any) => {
formData.payee_bank = e.deposit_bank
formData.payee_account_name = e.account_name
formData.payee_account = e.account
showDialog3.value = false
};
const customEvent4 = (e: any) => {
formData.bank_account_id = e.id;
formData.bank_account_info.account_sn = e.account_sn
@ -424,11 +400,6 @@ const handleSubmit = async () => {
const open = (type = 'add') => {
mode.value = type
popupRef.value?.open()
getAllProjectTypes().then((res) => {
protype.splice('', protype.length, ...res);
})
}
//

View File

@ -14,22 +14,10 @@
:value="parseInt(item.value)" />
</el-select>
</el-form-item>
<el-form-item label="合同" prop="contract_id">
<el-select class="flex-1" v-model="queryParams.contract_id" clearable placeholder="请选择合同">
<el-option v-for="(item, index) in list" :key="index" :label="item.contract_name"
:value="parseInt(item.id)" />
</el-select>
</el-form-item>
<el-form-item label="供应商" prop="supplier_id">
<el-select class="flex-1" v-model="queryParams.contract_id" clearable placeholder="请选择合同">
<el-option v-for="(item, index) in list" :key="index" :label="item.contract_name"
:value="parseInt(item.id)" />
</el-select>
<selectRemote :formData="queryParams" model="supplier_id" :api="apiSupplierSearch"></selectRemote>
</el-form-item>
<el-form-item>
<el-button type="primary" @click="resetPage">查询</el-button>
<el-button @click="resetParams">重置</el-button>
@ -95,6 +83,7 @@ import { usePaging } from '@/hooks/usePaging'
import { useDictData } from '@/hooks/useDictOptions'
import { paymentapplyLists, paymentapplyDelete, paymentapplyDetail } from '@/api/paymentrequest'
import { apiProcurementContractLists } from '@/api/procurement_contract'
import { apiSupplierSearch } from '@/api/suppler_list'
import feedback from '@/utils/feedback'
import EditPopup from './edit.vue'
import DetailPopup from './detail.vue'

View File

@ -20,7 +20,7 @@
<el-col :span="8">
<el-form-item label="合同类型" prop="contract_cate">
<el-select v-model="formData.contract_cate" placeholder="请选择" @change="resetFormData"
class="flex-1">
class="flex-1 !flex">
<el-option label="采购合同" :value="1"></el-option>
<el-option label="分包合同" :value="2"></el-option>
</el-select>

View File

@ -2,23 +2,15 @@
<div>
<el-card class="!border-none mb-4" shadow="never">
<el-form class="mb-[-16px]" :model="queryParams" inline>
<el-form-item label="合同" prop="contract_id">
<el-select class="flex-1" v-model="queryParams.contract_id" clearable placeholder="请选择合同">
<el-option v-for="(item, index) in list" :key="index" :label="item.contract_name"
:value="parseInt(item.id)" />
</el-select>
</el-form-item>
<el-form-item label="供应商" prop="supplier_id">
<el-select class="flex-1" v-model="queryParams.contract_id" clearable placeholder="请选择合同">
<el-option v-for="(item, index) in list" :key="index" :label="item.contract_name"
:value="parseInt(item.id)" />
<selectRemote :formData="queryParams" model="supplier_id" :api="apiSupplierSearch"></selectRemote>
</el-form-item>
<el-form-item label="状态" prop="status">
<el-select class="flex-1" v-model="queryParams.status" clearable placeholder="请选择状态">
<el-option v-for="(item, index) in dictData.pay_status" :key="index" :label="item.name"
:value="parseInt(item.value)" />
</el-select>
</el-form-item>
<el-form-item>
<el-button type="primary" @click="resetPage">查询</el-button>
<el-button @click="resetParams">重置</el-button>
@ -82,7 +74,8 @@ import { useDictData } from '@/hooks/useDictOptions'
import { paymentplanLists, paymentplanDelete, paymentplanDetail } from '@/api/paymentplan'
import { apiProcurementContractLists } from '@/api/procurement_contract'
import { timeFormat } from '@/utils/util'
import { getAllProjectTypes } from '@/api/projecttype'
import { apiSupplierSearch } from '@/api/suppler_list'
const protype = reactive([])
import feedback from '@/utils/feedback'
import EditPopup from './edit.vue'
@ -101,6 +94,7 @@ const list = ref([])
const queryParams = reactive({
contract_id: '',
supplier_id: '',
status: "",
})

View File

@ -3,6 +3,10 @@
<el-card class="!border-none mb-4" shadow="never">
<el-form class="mb-[-16px]" :model="queryParams" inline>
<el-form-item label="供应商" prop="supplier_id">
<selectRemote :formData="queryParams" model="supplier_id" :api="apiSupplierSearch"></selectRemote>
</el-form-item>
<el-form-item label="发票编号" prop="invoice_no">
<el-input class="w-[280px]" v-model="queryParams.invoice_no" clearable placeholder="请输入发票编号" />
</el-form-item>
@ -80,6 +84,8 @@
import { usePaging } from '@/hooks/usePaging'
import { useDictData } from '@/hooks/useDictOptions'
import { apifinancereceiptLists, apifinancereceiptDelete, apifinancereceiptDetail } from '@/api/receiptrecord'
import { apiSupplierSearch } from '@/api/suppler_list'
import { timeFormat } from '@/utils/util'
import { getAllProjectTypes } from '@/api/projecttype'
const protype = reactive([])
@ -99,6 +105,7 @@ const showDtail = ref(false)
const queryParams = reactive({
invoice_no: '',
invoice_type: '',
supplier_id: ""
})

View File

@ -1,8 +1,7 @@
<template>
<div class="edit-popup">
<popup ref="popupRef" :title="popupTitle" :async="true" width="80%" @confirm="handleSubmit"
@close="handleClose">
<popup ref="popupRef" :title="popupTitle" :async="true" width="80%" @confirm="handleSubmit" @close="handleClose">
<el-form ref="formRef" :model="formData" label-width="auto" :rules="formRules">
<el-row :gutter="10">
@ -92,27 +91,10 @@
<el-input v-model="formData.remark" type="textarea" clearable placeholder="请输入备注" />
</el-form-item>
</el-col>
<el-col :span="24">
<el-col :span="12">
<el-form-item label="附件">
<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>
<uploadAnnex :formData="formData"></uploadAnnex>
</el-form-item>
</el-col>
</el-row>
@ -124,47 +106,49 @@
<el-form-item label="账户编码" prop="bank_account_id" @click="showDialog2 = true"
:rules="[{ required: true, message: '不可为空', trigger: 'blur' }]">
<el-input v-model="formData.bank_account_info.account_sn" readonly clearable
placeholder="请输入账户编码" />
placeholder="点击选择银行" />
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="开户银行" prop="deposit_bank">
<el-input v-model="formData.bank_account_info.deposit_bank" disabled
placeholder="请输入开户银行" />
<el-input v-model="formData.bank_account_info.deposit_bank" disabled placeholder="系统自动填写" />
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="开户名称" prop="deposit_bank">
<el-input v-model="formData.bank_account_info.account_name" disabled
placeholder="请输入开户名称" />
<el-input v-model="formData.bank_account_info.account_name" disabled placeholder="系统自动填写" />
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="开户账号" prop="bank_accnout">
<el-input v-model="formData.bank_account_info.account" disabled placeholder="请输入开户账号" />
<el-input v-model="formData.bank_account_info.account" disabled placeholder="系统自动填写" />
</el-form-item>
</el-col>
</el-row>
<el-dialog v-model="showDialog" title="选择供应商" width="70%">
<suppliertable @customEvent="customEvent" :project_id="project?.id || ''"></suppliertable>
<dialogTable :config="supplier_tab" :query="{ project_id: project?.id || '' }"
@customEvent="customEvent">
</dialogTable>
</el-dialog>
<div v-if="formData.contract_cate == 1 && showDialog1">
<el-dialog v-model="showDialog1" title="选择采购合同" width="70%">
<subcontractingDialog @customEvent="customEvent1" :supplier_id="formData.supplier_id">
</subcontractingDialog>
<dialogTable :config="procurement_contract" :query="{ supplier_id: formData?.supplier_id || '' }"
@customEvent="customEvent1" />
</el-dialog>
</div>
<div v-if="formData.contract_cate == 2 && showDialog1">
<el-dialog v-model="showDialog1" title="选择分包合同" width="70%">
<subcontracting @customEvent="customEvent1" :supplier_id="formData.supplier_id">
</subcontracting>
<dialogTable :config="subcontracting_contract" :query="{ supplier_id: formData?.supplier_id || '' }"
@customEvent="customEvent1" />
</el-dialog>
</div>
<el-dialog v-model="showDialog2" title="选择银行账户" width="70%">
<bankaccountDialog @customEvent="customEvent2"></bankaccountDialog>
<dialogTable :config="bank_account" @customEvent="customEvent2" />
</el-dialog>
</el-form>
</popup>
@ -176,10 +160,7 @@
import customDialog from '@/components/custom-dialog/index.vue'
import type { FormInstance } from 'element-plus'
import Popup from '@/components/popup/index.vue'
import suppliertable from '@/components/supplier/index.vue'
import subcontractingDialog from '@/components/procurementsubcontracting_selector/index.vue'
import subcontracting from '@/components/procurementsubcontracting_selector/subcontracting.vue'
import bankaccountDialog from '@/components/bankaccount/index.vue'
import { supplier_tab, procurement_contract, subcontracting_contract, finance_payment_plan, bank_account } from "@/components/dialogTable/dialogTableConfig"
import { apiFinancerefundAdd, apiFinancerefundEdit, apiFinancerefundDetail } from '@/api/refundrecord'
import { toChinesNum } from "@/utils/util";
import { getAllProjectTypes } from '@/api/projecttype'

View File

@ -8,20 +8,10 @@
:value="parseInt(item.value)" />
</el-select>
</el-form-item>
<el-form-item label="合同" prop="contract_id">
<el-select class="flex-1" v-model="queryParams.contract_id" clearable placeholder="请选择合同">
<el-option v-for="(item, index) in list" :key="index" :label="item.contract_name"
:value="parseInt(item.id)" />
</el-select>
</el-form-item>
<el-form-item label="供应商" prop="supplier_id">
<el-select class="flex-1" v-model="queryParams.contract_id" clearable placeholder="请选择合同">
<el-option v-for="(item, index) in list" :key="index" :label="item.contract_name"
:value="parseInt(item.id)" />
</el-select>
<selectRemote :formData="queryParams" model="supplier_id" :api="apiSupplierSearch"></selectRemote>
</el-form-item>
<el-form-item>
<el-button type="primary" @click="resetPage">查询</el-button>
<el-button @click="resetParams">重置</el-button>
@ -37,8 +27,7 @@
</template>
新增
</el-button>
<el-button v-perms="['refund.refund/delete']" :disabled="!selectData.length"
@click="handleDelete(selectData)">
<el-button v-perms="['refund.refund/delete']" :disabled="!selectData.length" @click="handleDelete(selectData)">
删除
</el-button>
@ -62,8 +51,7 @@
<el-button v-perms="['refund.refund/edit']" type="primary" link @click="handleEdit(row)">
编辑
</el-button>
<el-button v-perms="['refund.refund/delete']" type="danger" link
@click="handleDelete(row.id)">
<el-button v-perms="['refund.refund/delete']" type="danger" link @click="handleDelete(row.id)">
删除
</el-button>
<el-button v-perms="['refund.refund/detail']" link @click="handledetail(row)">
@ -88,7 +76,7 @@ import { usePaging } from '@/hooks/usePaging'
import { useDictData } from '@/hooks/useDictOptions'
import { apiFinancerefundLists, apiFinancerefundDelete, apiFinancerefundDetail } from '@/api/refundrecord'
import { timeFormat } from '@/utils/util'
import { getAllProjectTypes } from '@/api/projecttype'
import { apiSupplierSearch } from '@/api/suppler_list'
import { apiProcurementContractLists } from '@/api/procurement_contract'
const protype = reactive([])
import feedback from '@/utils/feedback'

View File

@ -0,0 +1,34 @@
const detailConfig = {
title: "项目费用模板",
config: [
{
label: "项目类型",
value: "project_type_name"
},
{
label: "科目编码",
value: "subject_code"
},
{
label: "一级科目",
value: "first_level_subject"
},
{
label: "二级科目",
value: "second_level_subject"
},
{
label: "三级科目",
value: "third_level_subject"
},
{
label: "单位",
value: "unit"
}, {
label: "是否属于差旅科目",
value: "is_travel_text"
},
]
}
export default detailConfig;

View File

@ -6,7 +6,7 @@
<el-col :span="8">
<el-form-item label="项目类型" prop="project_type_id" @click="showDialog = true"
:rules="[{ required: true, message: '不可为空', trigger: 'cahange' }]">
<el-select class="w-[280px]" v-model="formData.project_type_id" clearable placeholder="请选择项目类型">
<el-select class="flex-1" v-model="formData.project_type_id" clearable placeholder="请选择项目类型">
<el-option v-for="(item, index) in list" :key="index" :label="item.name"
:value="(item.id)" />
</el-select>
@ -36,7 +36,7 @@
<el-col :span="8">
<el-form-item label="差旅科目" prop="is_travel">
<el-select class="w-[280px]" v-model="formData.is_travel" clearable placeholder="请选择的是否属于差旅科目">
<el-select class="flex-1" v-model="formData.is_travel" clearable placeholder="请选择的是否属于差旅科目">
<el-option v-for="(item, index) in list1" :key="index" :label="item.name"
:value="parseInt(item.id)" />

View File

@ -0,0 +1,34 @@
const detailConfig = {
title: "项目文档设置",
config: [
{
label: "项目类型",
value: "project_type_name"
},
{
label: "文档大类",
value: "large_category"
},
{
label: "文档中类",
value: "middle_category"
},
{
label: "文档小类",
value: "small_category"
},
{
label: "文档名称",
value: "name"
},
{
label: "文档描述",
value: "describe"
}, {
label: "必传",
value: "is_upload_text"
},
]
}
export default detailConfig;

View File

@ -1,143 +0,0 @@
<template>
<div class="detail-popup">
<popup ref="popupRef" title="项目文档设置详情" :async="true" width="80%" @confirm="handleSubmit" @close="handleClose">
<el-form ref="formRef" :model="formData" label-width="120px">
<el-card class="mb-2">
<el-row>
<el-col :span="12">
<el-form-item label="项目类型">
{{ formData.project_type_name }}
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="文档大类">
{{ formData.large_category }}
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="文档中类">
{{ formData.middle_category
}}
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="文档小类">
{{ formData.small_category
}}
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="文档名称">
{{ formData.name }}
</el-form-item>
</el-col>
<el-col :span="24">
<el-form-item label="文档描述">
{{ formData.describe }}
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="必传">
{{ formData.is_upload == 1 ? '是' : '否' }}
</el-form-item>
</el-col>
</el-row>
</el-card>
</el-form>
</popup>
</div>
</template>
<script lang="ts" setup name="customdetail">
import type { FormInstance } from 'element-plus'
import Popup from '@/components/popup/index.vue'
import { apiCustomDetail } from '@/api/custom'
import { timeFormat } from '@/utils/util'
import type { PropType } from 'vue'
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 datas = reactive({
provinceOptions: [],
cityOptions: [],
areaOptions: [],
});
//
const formData = reactive({
})
//
const setFormData = async (data: Record<any, any>) => {
Object.assign(formData, data)
}
const getDetail = async (row: Record<string, any>) => {
const data = await apiCustomDetail({
id: row.id
})
setFormData(data)
}
//
const handleSubmit = async () => {
popupRef.value?.close()
}
//
const open = () => {
popupRef.value?.open()
}
//
const handleClose = () => {
emit('close')
}
defineExpose({
open,
setFormData,
getDetail
})
</script>
<style lang="scss" scoped>
.tit {
font-size: 1.2em;
margin-bottom: 10px;
}
:deep(.my-label) {
width: 150px;
}
</style>

View File

@ -6,7 +6,7 @@
<el-col :span="8">
<el-form-item label="项目类型" prop="project_type_id" @click="showDialog = true"
:rules="[{ required: true, message: '不可为空', trigger: 'change' }]">
<el-select class="w-[280px]" v-model="formData.project_type_id" clearable placeholder="请选择项目类型">
<el-select class=" flex-1" v-model="formData.project_type_id" clearable placeholder="请选择项目类型">
<el-option v-for="(item, index) in list" :key="index" :label="item.name"
:value="parseInt(item.id)" />
</el-select>
@ -14,8 +14,9 @@
<el-col :span="8">
<el-form-item label="文档大类" prop="large_category"
:rules="[{ required: true, message: '不可为空', trigger: 'blur' }]">
<el-input v-model="formData.large_category" clearable placeholder="请选择文档大类" />
</el-form-item> </el-col>
<el-input v-model="formData.large_category" clearable placeholder="请输入文档大类" />
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="文档中类" prop="middle_category"
:rules="[{ required: true, message: '不可为空', trigger: 'blur' }]">
@ -84,7 +85,7 @@ const project_name = ref('')
const project_code = ref('')
//
const popupTitle = computed(() => {
return mode.value == 'edit' ? '编辑项目WBS设置' : '新增项目WBS设置'
return mode.value == 'edit' ? '编辑项目文档设置' : '新增项目文档设置'
})
//

View File

@ -15,8 +15,7 @@
<el-input class="w-[280px]" v-model="queryParams.name" clearable placeholder="请输入文档小类" />
</el-form-item>
<el-form-item label="项目类型名称" prop="project_type_name" label-width="120px">
<el-input class="w-[280px]" v-model="queryParams.project_type_name" clearable
placeholder="请输入项目类型名称" />
<el-input class="w-[280px]" v-model="queryParams.project_type_name" clearable placeholder="请输入项目类型名称" />
</el-form-item>
@ -68,7 +67,7 @@
@click="handleDelete(row.id)">
删除
</el-button>
<el-button v-perms="['project.project/detail']" link @click="handledetail(row)">
<el-button v-perms="['project.project/delete']" link @click="handleDetail(row.id)">
详情
</el-button>
@ -81,7 +80,8 @@
</div>
</el-card>
<edit-popup v-if="showEdit" ref="editRef" :dict-data="dictData" @success="getLists" @close="showEdit = false" />
<detail-popup v-if="showDtail" ref="detailRef" :dict-data="dictData" @close="showDtail = false" />
<detailPage v-if="showDetail" ref="detailRef" @close="showDetail = false" :detailConfig="detailConfig" :column="1"
width="550px" />
</div>
</template>
@ -94,12 +94,15 @@ import { getAllProjectTypes } from '@/api/projecttype'
const protype = reactive([])
import feedback from '@/utils/feedback'
import EditPopup from './edit.vue'
import DetailPopup from './detail.vue'
const detailRef = shallowRef<InstanceType<typeof DetailPopup>>()
import detailConfig from './detail'
const editRef = shallowRef<InstanceType<typeof EditPopup>>()
const detailRef = ref('')
//
const showEdit = ref(false)
const showDtail = ref(false)
const showDetail = ref(false)
//
const queryParams = reactive({
@ -151,14 +154,14 @@ const handleDelete = async (id: number | any[]) => {
await apiProjectdocumentDelete({ id })
getLists()
}
const handledetail = async (data: any) => {
let res = await apiProjectdocumentDetail({ id: data.id })
showDtail.value = true
//
const handleDetail = async (id: any) => {
let res = await apiProjectdocumentDetail({ id })
showDetail.value = true
await nextTick()
detailRef.value?.open()
detailRef.value?.setFormData(res)
}
getLists()
</script>

View File

@ -1,136 +0,0 @@
<template>
<div class="detail-popup">
<popup ref="popupRef" title="项目立项详情" :async="true" width="80%" @confirm="handleSubmit" @close="handleClose">
<el-form ref="formRef" :model="formData" label-width="auto">
<el-tabs v-model="activeName" class="demo-tabs">
<el-tab-pane label="概况" name="demo-1">
<Overview :formData="formData" v-if="activeName == 'demo-1'"></Overview>
</el-tab-pane>
<el-tab-pane label="商机" name="demo-2">
<Business v-if="activeName == 'demo-2'" :project="formData"></Business>
</el-tab-pane>
<el-tab-pane label="投标" name="demo-3">
<tender v-if="activeName == 'demo-3'" :project="formData"></tender>
</el-tab-pane>
<el-tab-pane label="合同" name="demo-4">
<contract v-if="activeName == 'demo-4'" :project="formData"></contract>
</el-tab-pane>
<el-tab-pane label="预算" name="demo-5">
<budget v-if="activeName == 'demo-5'" :project="formData"></budget>
</el-tab-pane>
<el-tab-pane label="采购" name="demo-8">
<procurement v-if="activeName == 'demo-8'" :project="formData"></procurement>
</el-tab-pane>
<el-tab-pane label="分包" name="demo-9">
<subcontract v-if="activeName == 'demo-9'" :project="formData"></subcontract>
</el-tab-pane>
<el-tab-pane label="人力" name="demo-12">
<manpower v-if="activeName == 'demo-12'" :project="formData"></manpower>
</el-tab-pane>
<el-tab-pane label="收款" name="demo-14">
<Collection v-if="activeName == 'demo-14'" :project="formData"></Collection>
</el-tab-pane>
<el-tab-pane label="付款" name="demo-15">
<payment v-if="activeName == 'demo-15'" :project="formData"></payment>
</el-tab-pane>
<el-tab-pane label="文档" name="demo-16">
<documentation v-if="activeName == 'demo-16'" :project="formData"></documentation>
</el-tab-pane>
<el-tab-pane label="统计" name="demo-17">
<Statistics v-if="activeName == 'demo-17'" :project_id="project_id"></Statistics>
</el-tab-pane>
</el-tabs>
</el-form>
</popup>
</div>
</template>
<script lang="ts" setup name="customdetail">
import type { FormInstance } from 'element-plus'
import Popup from '@/components/popup/index.vue'
import { apiCustomDetail } from '@/api/custom'
import Overview from "./components/Overview.vue"
import Business from "./components/Business.vue"
import tender from "./components/tender.vue"
import contract from "./components/contract.vue"
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 Collection from "./components/Collection.vue"
import payment from "./components/payment.vue"
import documentation from "./components/documentation.vue"
import Statistics from "./components/Statistics.vue"
const activeName = ref('demo-1')
const emit = defineEmits(['success', 'close'])
const formRef = shallowRef<FormInstance>()
const popupRef = shallowRef<InstanceType<typeof Popup>>()
//
const formData = reactive({
})
const project_id = ref(0)
//
const setFormData = async (data: Record<any, any>) => {
project_id.value = data.id
Object.assign(formData, data)
}
const getDetail = async (row: Record<string, any>) => {
const data = await apiCustomDetail({
id: formData.id
})
setFormData(data)
}
//
const handleSubmit = async () => {
popupRef.value?.close()
}
//
const open = () => {
popupRef.value?.open()
}
//
const handleClose = () => {
emit('close')
}
defineExpose({
open,
setFormData,
getDetail
})
</script>
<style lang="scss" scoped>
.tit {
font-size: 1.2em;
margin-bottom: 10px;
}
:deep(.my-label) {
width: 150px;
}
</style>

View File

@ -102,9 +102,14 @@
@click="handleDelete(row.id)">
删除
</el-button> -->
<el-button v-perms="['project.project/detail']" link @click="handledetail(row)">
<router-link v-perms="['project.project/detail']"
:to="{ path: '/construction/project/project_list_detail', query: { id: row.id } }">
<el-button link>
详情
</el-button>
</router-link>
</template>
</el-table-column>
</el-table>
@ -113,9 +118,6 @@
<pagination v-model="pager" @change="getLists" />
</div>
</el-card>
<!-- <edit-popup v-if="showEdit" ref="editRef" :dict-data="dictData" @success="getLists" @close="showEdit = false" /> -->
<!-- <detail-popup v-if="showDtail" ref="detailRef" :dict-data="dictData" @close="showDtail = false" /> -->
<detail-popup v-if="showDtail" ref="detailRef" :dict-data="dictData" @close="showDtail = false" />
</div>
</template>
@ -125,10 +127,9 @@ import { usePaging } from '@/hooks/usePaging'
import { useDictData } from '@/hooks/useDictOptions'
import { apiProjectLists, apiProjectDelete, apiProjectDetail } from '@/api/project'
import { timeFormat } from '@/utils/util'
import { getAllProjectTypes } from '@/api/projecttype'
const protype = reactive([])
import feedback from '@/utils/feedback'
import DetailPopup from './detail.vue'
const detailRef = shallowRef<InstanceType<typeof DetailPopup>>()
const editRef = shallowRef<InstanceType<typeof EditPopup>>()
@ -179,21 +180,14 @@ const { pager, getLists, resetParams, resetPage } = usePaging({
params: queryParams
})
const handledetail = async (data: any) => {
let res = await apiProjectDetail({ id: data.id })
showDtail.value = true
await nextTick()
detailRef.value?.open()
detailRef.value?.setFormData(res)
}
//
const list = () => {
getAllProjectTypes().then((res) => {
protype.splice(0, protype.length, ...res);
})
}
// const handledetail = async (data: any) => {
// let res = await apiProjectDetail({ id: data.id })
// showDtail.value = true
// await nextTick()
// detailRef.value?.open()
// detailRef.value?.setFormData(res)
// }
list()
getLists()
</script>

View File

@ -1,10 +1,7 @@
<template>
<el-descriptions :column="3" title="基本信息" border>
<el-descriptions-item label="组织名称" label-align="left" align="left" label-class-name="my-label">{{
formData.org_name
}}</el-descriptions-item>
<el-descriptions-item label="部门名称" label-align="left" align="left" label-class-name="my-label">
{{ formData.dept_name }}</el-descriptions-item>
<el-descriptions-item label="项目名称" label-align="left" align="left" label-class-name="my-label">{{ formData.name
}}</el-descriptions-item>
<el-descriptions-item label="项目编码" label-align="left" align="left" label-class-name="my-label">
@ -52,7 +49,7 @@
<el-descriptions-item label="负责人" label-align="left" align="left" label-class-name="my-label">
{{ formData.person }}</el-descriptions-item>
<el-descriptions-item label="项目内容" label-align="left" align="left" label-class-name="my-label">
{{ formData.project_content }}</el-descriptions-item>
{{ formData.project_content_text }}</el-descriptions-item>
<el-descriptions-item label="竞争对手" label-align="left" align="left" label-class-name="my-label">
{{ formData.competitor }}</el-descriptions-item>
<el-descriptions-item label="项目建设资金来源" label-align="left" align="left" label-class-name="my-label"> {{

View File

@ -19,8 +19,7 @@
</div>
<el-table :data="pager.lists" style="width: 100%">
<el-table-column :label="item.label" :prop='item.prop' v-for="(item, index) in baseData.columnList"
:key="index" />
<el-table-column :label="item.label" :prop='item.prop' v-for="(item, index) in baseData.columnList" :key="index" />
<el-table-column label="操作" fixed="right" align="center" v-if="!isAction">
<template #default="{ row }">

View File

@ -0,0 +1,115 @@
<template>
<el-card>
<el-form ref="formRef" :model="formData" label-width="auto">
<el-tabs v-model="activeName" class="demo-tabs">
<el-tab-pane label="概况" name="demo-1">
<Overview :formData="formData" v-if="activeName == 'demo-1'"></Overview>
</el-tab-pane>
<el-tab-pane label="商机" name="demo-2">
<Business v-if="activeName == 'demo-2'" :project="formData"></Business>
</el-tab-pane>
<el-tab-pane label="投标" name="demo-3">
<tender v-if="activeName == 'demo-3'" :project="formData"></tender>
</el-tab-pane>
<el-tab-pane label="合同" name="demo-4">
<contract v-if="activeName == 'demo-4'" :project="formData"></contract>
</el-tab-pane>
<el-tab-pane label="预算" name="demo-5">
<budget v-if="activeName == 'demo-5'" :project="formData"></budget>
</el-tab-pane>
<el-tab-pane label="采购" name="demo-8">
<procurement v-if="activeName == 'demo-8'" :project="formData"></procurement>
</el-tab-pane>
<el-tab-pane label="分包" name="demo-9">
<subcontract v-if="activeName == 'demo-9'" :project="formData"></subcontract>
</el-tab-pane>
<el-tab-pane label="人力" name="demo-12">
<manpower v-if="activeName == 'demo-12'" :project="formData"></manpower>
</el-tab-pane>
<el-tab-pane label="收款" name="demo-14">
<Collection v-if="activeName == 'demo-14'" :project="formData"></Collection>
</el-tab-pane>
<el-tab-pane label="付款" name="demo-15">
<payment v-if="activeName == 'demo-15'" :project="formData"></payment>
</el-tab-pane>
<el-tab-pane label="文档" name="demo-16">
<documentation v-if="activeName == 'demo-16'" :project="formData"></documentation>
</el-tab-pane>
<el-tab-pane label="统计" name="demo-17">
<Statistics v-if="activeName == 'demo-17'" :project_id="project_id"></Statistics>
</el-tab-pane>
</el-tabs>
</el-form>
</el-card>
</template>
<script lang="ts" setup name="customdetail">
import type { FormInstance } from 'element-plus'
import { useRoute } from "vue-router"
import Popup from '@/components/popup/index.vue'
import { apiCustomDetail } from '@/api/custom'
import Overview from "./components/Overview.vue"
import Business from "./components/Business.vue"
import tender from "./components/tender.vue"
import contract from "./components/contract.vue"
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 Collection from "./components/Collection.vue"
import payment from "./components/payment.vue"
import documentation from "./components/documentation.vue"
import Statistics from "./components/Statistics.vue"
import { apiProjectDetail } from '@/api/project'
const route = useRoute()
const activeName = ref('demo-1')
const emit = defineEmits(['success', 'close'])
const formRef = shallowRef<FormInstance>()
const popupRef = shallowRef<InstanceType<typeof Popup>>()
//
const formData = reactive({
})
const project_id = ref(route.query.id)
//
const setFormData = async (data: Record<any, any>) => {
let res = await apiProjectDetail({ id: route.query.id })
Object.assign(formData, res)
}
setFormData()
</script>
<style lang="scss" scoped>
.tit {
font-size: 1.2em;
margin-bottom: 10px;
}
:deep(.my-label) {
width: 150px;
}
</style>

View File

@ -0,0 +1,48 @@
const detailConfig = {
title: "项目日志管理",
config: [
{
label: "项目名称",
value: "project_name"
},
{
label: "项目编号",
value: "project_code"
},
{
label: "类型",
value: "follow_type_text"
},
{
label: "主题",
value: "theme"
},
{
label: "联系人",
value: "contacts"
},
{
label: "日志详情",
value: "content",
column: 1
}, {
label: "执行人",
value: "executor"
},
{
label: "下次回访日期",
value: "next_follow_up_date"
},
{
label: "日期",
value: "date",
},
{
label: "附件",
value: "annex",
column: 1
},
]
}
export default detailConfig;

View File

@ -1,147 +0,0 @@
<template>
<div class="detail-popup">
<popup ref="popupRef" title="项目日志详情" :async="true" width="80%" @confirm="handleSubmit" @close="handleClose">
<el-form ref="formRef" :model="formData" label-width="120px">
<el-card class="mb-2">
<el-row>
<el-col :span="12">
<el-form-item label="项目名称">
{{ formData.project_name }}
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="项目编号">
{{ formData.project_code }}
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="类型">
<dict-value :options="dictData.follow_type" :value="formData.follow_type" />
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="主题">
{{ formData.theme }}
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="联系人">
{{ formData.contacts }}
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="日志详情">
{{ formData.content }}
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="执行人">
{{ formData.executor }}
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="下次回访日期">
{{ formData.next_follow_up_date }}
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="日期">
{{ formData.date }}
</el-form-item>
</el-col>
</el-row>
</el-card>
</el-form>
</popup>
</div>
</template>
<script lang="ts" setup name="customdetail">
import type { FormInstance } from 'element-plus'
import Popup from '@/components/popup/index.vue'
import { apiCustomDetail } from '@/api/custom'
import { timeFormat } from '@/utils/util'
import type { PropType } from 'vue'
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 datas = reactive({
provinceOptions: [],
cityOptions: [],
areaOptions: [],
});
//
const formData = reactive({
})
//
const setFormData = async (data: Record<any, any>) => {
Object.assign(formData, data)
}
const getDetail = async (row: Record<string, any>) => {
const data = await apiCustomDetail({
id: row.id
})
setFormData(data)
}
//
const handleSubmit = async () => {
popupRef.value?.close()
}
//
const open = () => {
popupRef.value?.open()
}
//
const handleClose = () => {
emit('close')
}
defineExpose({
open,
setFormData,
getDetail
})
</script>
<style lang="scss" scoped>
.tit {
font-size: 1.2em;
margin-bottom: 10px;
}
:deep(.my-label) {
width: 150px;
}
</style>

View File

@ -32,7 +32,7 @@
<el-col :span="8">
<el-form-item label="类型" prop="follow_type"
:rules="[{ required: true, message: '不可为空', trigger: 'blur' }]">
<el-select class="w-[280px]" v-model="formData.follow_type" clearable placeholder="请选择类型">
<el-select class="flex-1 !flex" v-model="formData.follow_type" clearable placeholder="请选择类型">
<el-option label="全部" value=""></el-option>
<el-option v-for="(item, index) in dictData.follow_type" :key="index" :label="item.name"
:value="parseInt(item.value)" />
@ -53,12 +53,16 @@
</el-date-picker>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="附件" prop="annex">
<uploadAnnex :formData="formData"></uploadAnnex>
</el-form-item>
</el-col>
<el-col :span="24">
<el-form-item label="日志详情" prop="content">
<el-input v-model="formData.content" type="textarea" clearable placeholder="请输入日志详情" />
</el-form-item> </el-col>
</el-form-item>
</el-col>
</el-row>
</el-form>
@ -118,7 +122,7 @@ const delFileFn = (index: number) => {
}
//
const popupTitle = computed(() => {
return mode.value == 'edit' ? '编辑项目WBS设置' : '新增项目WBS设置'
return mode.value == 'edit' ? '编辑项目日志管理' : '新增项目日志管理'
})
//

View File

@ -20,10 +20,9 @@
<el-table-column label="项目名称" prop="project_name" show-overflow-tooltip />
<el-table-column label="项目编码" prop="project_code" show-overflow-tooltip />
<el-table-column label="日志详情" prop="content" show-overflow-tooltip />
<el-table-column label="附件" prop="annex" show-overflow-tooltip />
<el-table-column label="添加人" prop="add_user_name" show-overflow-tooltip />
<el-table-column label="创建日期" prop="create_time" show-overflow-tooltip />
<el-table-column label="操作" width="160" fixed="right">
<el-table-column label="操作" width="160" fixed="right" align="center">
<template #default="{ row }">
<el-button v-perms="['project.project/edit']" type="primary" link @click="handleEdit(row)">
@ -33,7 +32,7 @@
@click="handleDelete(row.id)">
删除
</el-button>
<el-button v-perms="['project.project/detail']" link @click="handledetail(row)">
<el-button v-perms="['project.project/detail']" link @click="handleDetail(row.id)">
详情
</el-button>
@ -46,7 +45,8 @@
</div>
</el-card>
<edit-popup v-if="showEdit" ref="editRef" :dict-data="dictData" @success="getLists" @close="showEdit = false" />
<detail-popup v-if="showDtail" ref="detailRef" :dict-data="dictData" @close="showDtail = false" />
<detailPage v-if="showDetail" ref="detailRef" @close="showDetail = false" :detailConfig="detailConfig" :column="1"
width="550px" />
</div>
</template>
@ -59,12 +59,13 @@ import { getAllProjectTypes } from '@/api/projecttype'
const protype = reactive([])
import feedback from '@/utils/feedback'
import EditPopup from './edit.vue'
import DetailPopup from './detail.vue'
const detailRef = shallowRef<InstanceType<typeof DetailPopup>>()
const editRef = shallowRef<InstanceType<typeof EditPopup>>()
import detailConfig from './detail'
//
const showEdit = ref(false)
const showDtail = ref(false)
const showDetail = ref(false)
//
const queryParams = reactive({
@ -73,8 +74,6 @@ const queryParams = reactive({
})
//
const selectData = ref<any[]>([])
@ -114,14 +113,14 @@ const handleDelete = async (id: number | any[]) => {
await apiProjectlogsDelete({ id })
getLists()
}
const handledetail = async (data: any) => {
let res = await apiProjectlogsDetail({ id: data.id })
showDtail.value = true
//
const handleDetail = async (id: any) => {
let res = await apiProjectlogsDetail({ id })
showDetail.value = true
await nextTick()
detailRef.value?.open()
detailRef.value?.setFormData(res)
}
getLists()
</script>

View File

@ -2,12 +2,9 @@
<div>
<el-card class="!border-none mb-4" shadow="never">
<el-form class="mb-[-16px]" :model="queryParams" inline>
<el-form-item label="项目名称" prop="procurement_contract_id">
<el-form-item label="角色名称" prop="procurement_contract_id">
<el-input class="w-[280px]" v-model="queryParams.name" clearable placeholder="请输入项目名称" />
</el-form-item>
<el-form-item>
<el-button type="primary" @click="resetPage">查询</el-button>
<el-button @click="resetParams">重置</el-button>
@ -44,9 +41,9 @@
@click="handleDelete(row.id)">
删除
</el-button>
<el-button v-perms="['project.project/detail']" link @click="handledetail(row)">
<!-- <el-button v-perms="['project.project/detail']" link @click="handledetail(row)">
详情
</el-button>
</el-button> -->
</template>
</el-table-column>

View File

@ -1,22 +1,25 @@
<template>
<div class="edit-popup">
<popup ref="popupRef" :title="popupTitle" :async="true" width="80%" @confirm="handleSubmit"
@close="handleClose">
<popup ref="popupRef" :title="popupTitle" :async="true" width="80%" @confirm="handleSubmit" @close="handleClose">
<el-form ref="formRef" :model="formData" label-width="120px" :rules="formRules">
<el-row>
<el-col :span="8">
<el-form-item label="项目类型" prop="project_type_id"
:rules="[{ required: true, message: '不可为空', trigger: 'blur' }]">
<el-select class="w-[280px]" v-model="formData.project_type_id" clearable
placeholder="请选择项目类型">
<el-select class="flex-1 " v-model="formData.project_type_id" clearable placeholder="请选择项目类型">
<el-option v-for="(item, index) in list" :key="index" :label="item.name"
:value="parseInt(item.id)" />
</el-select>
</el-form-item> </el-col><el-col :span="8">
<toolTip content="项目管理-项目设置-项目类型设置添加"></toolTip>
</el-form-item>
</el-col><el-col :span="8">
<el-form-item label="父级WBS编码" prop="sup_wbs_code">
<el-input v-model="formData.sup_wbs_code" clearable placeholder="请输入父级WBS编码" />
</el-form-item> </el-col>
<el-select class="flex-1 " v-model="formData.sup_wbs_code" clearable placeholder="请选择项目类型">
<el-option v-for="(item, index) in treeToArray(tableList) " :key="index"
:label="item.wbs_code" :value="(item.wbs_code)" />
</el-select>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="WBS编码" prop="wbs_code"
:rules="[{ required: true, message: '不可为空', trigger: 'blur' }]">
@ -29,17 +32,16 @@
</el-form-item> </el-col>
<el-col :span="24">
<el-form-item label="工作标准" prop="work_standards">
<el-input v-model="formData.work_standards" type="textarea" clearable
placeholder="请输入工作标准" />
<el-input v-model="formData.work_standards" type="textarea" clearable placeholder="请输入工作标准" />
</el-form-item> </el-col>
<el-col :span="8">
<el-form-item label="负责角色" prop="wproject_role_id">
<el-select class="w-[280px]" v-model="formData.project_role_id" clearable
placeholder="请选择负责角色">
<el-select class="flex-1 " v-model="formData.project_role_id" clearable placeholder="请选择负责角色">
<el-option label="全部" value=""></el-option>
<el-option v-for="(item, index) in list1" :key="index" :label="item.name"
:value="parseInt(item.id)" />
</el-select>
<toolTip content="项目管理-项目设置-项目WBS设置添加"></toolTip>
</el-form-item>
</el-col>
@ -72,17 +74,17 @@
<script lang="ts" setup name="procurementContractEdit">
import type { FormInstance } from 'element-plus'
import Popup from '@/components/popup/index.vue'
import { apiProjectwbsAdd, apiProjectwbsEdit, apiProjectwbsDetail } from '@/api/project_wbs_set'
import { getAllProjectRoles } from '@/api/project_role_set'
import { getAllProjectTypes } from '@/api/projecttype'
import { timeFormat } from '@/utils/util'
import { timeFormat, treeToArray } from '@/utils/util'
import type { PropType } from 'vue'
defineProps({
const props = defineProps({
dictData: {
type: Object as PropType<Record<string, any[]>>,
default: () => ({})
}
},
tableList: Array
})
const emit = defineEmits(['success', 'close'])
const formRef = shallowRef<FormInstance>()

View File

@ -2,11 +2,13 @@
<div>
<el-card class="!border-none mb-4" shadow="never">
<el-form class="mb-[-16px]" :model="queryParams" inline>
<el-form-item label="项目名称" prop="procurement_contract_id">
<el-form-item label="节点名称">
<el-input class="w-[280px]" v-model="queryParams.name" clearable placeholder="请输入项目名称" />
</el-form-item>
<el-form-item label="wbs编码">
<el-input class="w-[280px]" v-model="queryParams.wbs_code" clearable placeholder="请输入项目名称" />
</el-form-item>
<el-form-item>
<el-button type="primary" @click="resetPage">查询</el-button>
@ -62,7 +64,8 @@
<pagination v-model="pager" @change="getLists" />
</div>
</el-card>
<edit-popup v-if="showEdit" ref="editRef" :dict-data="dictData" @success="getLists" @close="showEdit = false" />
<edit-popup v-if="showEdit" ref="editRef" :dict-data="dictData" @success="getLists" :tableList="pager.lists"
@close="showEdit = false" />
<detail-popup v-if="showDtail" ref="detailRef" :dict-data="dictData" @close="showDtail = false" />
</div>
</template>
@ -85,8 +88,8 @@ const showDtail = ref(false)
//
const queryParams = reactive({
name: ''
name: '',
wbs_code: "",
})

View File

@ -1,8 +1,7 @@
<template>
<div class="edit-popup">
<popup ref="popupRef" :title="popupTitle" :async="true" width="80%" @confirm="handleSubmit"
@close="handleClose">
<popup ref="popupRef" :title="popupTitle" :async="true" width="80%" @confirm="handleSubmit" @close="handleClose">
<el-form ref="formRef" :model="formData" label-width="auto" :rules="formRules">
<el-row :gutter="10">
@ -66,29 +65,8 @@
</el-form-item>
</el-col>
<el-col :span="24">
<el-form-item label="附件">
<uploadAnnex :formData="formData"></uploadAnnex>
<!-- <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>
@ -97,8 +75,8 @@
<el-col :span="8">
<el-form-item label="账户编码" prop="bank_account_info"
:rules="[{ required: true, message: '不可为空', trigger: 'blur' }]">
<el-input v-model="formData.bank_account_info.account_sn" @click="showDialog1 = true"
readonly clearable placeholder="请输入收款账号" />
<el-input v-model="formData.bank_account_info.account_sn" @click="showDialog1 = true" readonly
clearable placeholder="请输入收款账号" />
</el-form-item>
</el-col>
@ -157,14 +135,7 @@ const project_code = ref('')
const bidding_time = ref('')
const custom_name = ref('')
const handleAvatarSuccess_four = (response: any) => {
Array.isArray(formData.annex) ? '' : formData.annex = []
// @ts-ignore
response.code != 0 ? formData.annex.push({ uri: response.data.uri, name: response.data.name }) : ElMessage.error(response.msg);
};
//
const delFileFn = (index: number) => { formData.annex.splice(index, 1) }
const emit = defineEmits(['success', 'close'])
const formRef = shallowRef<FormInstance>()
@ -244,13 +215,6 @@ const formRules = reactive<any>({
//
const setFormData = async (data: Record<any, any>) => {
for (const key in formData) {
if (data[key] != null && data[key] != undefined) {
//@ts-ignore
formData[key] = data[key]
}
}
project_name.value = data.project_name
project_code.value = data.project_code
custom_name.value = data.custom_name
@ -269,12 +233,7 @@ const getDetail = async (row: Record<string, any>) => {
//
const handleSubmit = async () => {
if (formDataannex.length > 0) {
formData.return_desc = formDataannex.map((item: any) => item.uri).toString()
}
await formRef.value?.validate()
const data = { ...formData }
mode.value == 'edit'
? await bidrefundEdit(data)

View File

@ -15,8 +15,7 @@
<el-form-item>
<el-button type="primary" @click="resetPage">查询</el-button>
<el-button @click="resetParams">重置</el-button>
<export-data class="ml-2.5" :fetch-fun="bidrefundLists" :params="queryParams"
:page-size="pager.size" />
<export-data class="ml-2.5" :fetch-fun="bidrefundLists" :params="queryParams" :page-size="pager.size" />
</el-form-item>
</el-form>
</el-card>
@ -27,8 +26,7 @@
</template>
新增
</el-button>
<el-button v-perms="['refund.refund/delete']" :disabled="!selectData.length"
@click="handleDelete(selectData)">
<el-button v-perms="['refund.refund/delete']" :disabled="!selectData.length" @click="handleDelete(selectData)">
删除
</el-button>
@ -51,8 +49,7 @@
<el-button v-perms="['refund.refund/edit']" type="primary" link @click="handleEdit(row)">
编辑
</el-button>
<el-button v-perms="['refund.refund/delete']" type="danger" link
@click="handleDelete(row.id)">
<el-button v-perms="['refund.refund/delete']" type="danger" link @click="handleDelete(row.id)">
删除
</el-button>
<el-button v-perms="['refund.refund/detail']" link @click="handledetail(row)">