add
This commit is contained in:
parent
c415828eb4
commit
8d6146aba7
dist.rar
src
components/dialogTable
views
bank_account
bidbbond
cost_projects
finance_payment_apply
finance_payment_plan
finance_receipt_record
finance_refund_record
project_cost_temp_set
project_document_set
project_list
project_list_detail
components
Business.vueCollection.vueOverview.vueStatistics.vuebudget.vuecontract.vuedocumentation.vuemanpower.vuemyTable.vueoperateMenu.vuepayment.vueprocurement.vuesubcontract.vuetender.vue
index.vueproject_logs
project_role_set
project_wbs_set
refundbidDeposit
BIN
dist.rar
BIN
dist.rar
Binary file not shown.
@ -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: "期初金额" },
|
||||
],
|
||||
};
|
||||
|
@ -1,17 +1,17 @@
|
||||
<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>
|
||||
formData.account_sn }}</el-descriptions-item>
|
||||
<el-descriptions-item label="开户银行" label-align="left" align="left" label-class-name="my-label">{{
|
||||
formData.deposit_bank }}</el-descriptions-item>
|
||||
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>
|
||||
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>
|
||||
formData.account }}</el-descriptions-item>
|
||||
<el-descriptions-item label="开户日期" label-align="left" align="left" label-class-name="my-label">{{
|
||||
formData.account_opening_date }}</el-descriptions-item>
|
||||
formData.account_opening_date }}</el-descriptions-item>
|
||||
<el-descriptions-item label="备注" label-align="left" align="left" label-class-name="my-label">{{
|
||||
formData.remark }}</el-descriptions-item>
|
||||
</el-descriptions>
|
||||
|
@ -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)">
|
||||
编辑
|
||||
|
@ -1,78 +1,69 @@
|
||||
<template>
|
||||
<div class="detail-popup">
|
||||
<popup ref="popupRef" title="投标保证金详情" :async="true" width="80%" @confirm="handleSubmit" @close="handleClose">
|
||||
<el-descriptions title="基本信息" :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">{{
|
||||
formData.custom_name }}</el-descriptions-item>
|
||||
<el-descriptions-item label="申请人" label-align="left" align="left" label-class-name="my-label">{{
|
||||
formData.applier }}</el-descriptions-item>
|
||||
<el-descriptions-item label="付款方式" label-align="left" align="left" label-class-name="my-label">{{
|
||||
formData.pay_type_text }}</el-descriptions-item>
|
||||
|
||||
<el-descriptions-item label="项目名称" label-align="left" align="left" label-class-name="my-label">{{
|
||||
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-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">{{
|
||||
formData.custom_name }}</el-descriptions-item>
|
||||
<el-descriptions-item label="申请人" label-align="left" align="left" label-class-name="my-label">{{
|
||||
formData.applier }}</el-descriptions-item>
|
||||
<el-descriptions-item label="付款方式" label-align="left" align="left" label-class-name="my-label">{{
|
||||
formData.pay_type_text }}</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.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.bidding_time
|
||||
}}</el-descriptions-item>
|
||||
|
||||
<el-descriptions-item label="投标时间" label-align="left" align="left" label-class-name="my-label">{{
|
||||
formData.bidding_time
|
||||
}}</el-descriptions-item>
|
||||
<el-descriptions-item label="预计退还时间" label-align="left" align="left" label-class-name="my-label">{{
|
||||
formData.refund_date }}</el-descriptions-item>
|
||||
|
||||
<el-descriptions-item label="预计退还时间" label-align="left" align="left" label-class-name="my-label">{{
|
||||
formData.refund_date }}</el-descriptions-item>
|
||||
<el-descriptions-item label="备注" label-align="left" align="left" label-class-name="my-label">{{
|
||||
formData.remark }}</el-descriptions-item>
|
||||
<el-descriptions-item label="附件" label-align="left" align="left" label-class-name="my-label">
|
||||
|
||||
<el-descriptions-item label="备注" label-align="left" align="left" label-class-name="my-label">{{
|
||||
formData.remark }}</el-descriptions-item>
|
||||
<el-descriptions-item label="附件" label-align="left" align="left" label-class-name="my-label">
|
||||
|
||||
<div v-if="formData.annex.length > 0">
|
||||
<div v-for="(item, index) in formData.annex" style="margin-left: 5px;display: block;">
|
||||
<a style="margin-left: 10px; color: #4a5dff; align-self: flex-start" :href="item"
|
||||
target="_blank">文件{{ index + 1 }}查看</a>
|
||||
<div v-if="formData.annex.length > 0">
|
||||
<div v-for="(item, index) in formData.annex" style="margin-left: 5px;display: block;">
|
||||
<a style="margin-left: 10px; color: #4a5dff; align-self: flex-start" :href="item"
|
||||
target="_blank">文件{{ index + 1 }}查看</a>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div v-else> 暂无附件</div>
|
||||
</el-descriptions-item>
|
||||
<div v-else> 暂无附件</div>
|
||||
</el-descriptions-item>
|
||||
|
||||
</el-descriptions>
|
||||
<el-descriptions title="收款人信息" border>
|
||||
</el-descriptions>
|
||||
</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-card>
|
||||
|
||||
<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> -->
|
||||
<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>
|
||||
|
@ -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)
|
||||
|
@ -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>
|
||||
@ -88,8 +86,8 @@
|
||||
</el-col>
|
||||
<el-col :span="8">
|
||||
<el-form-item label="组织" :rules="[
|
||||
{ required: true, message: '不可为空', trigger: 'blur' },
|
||||
]">
|
||||
{ required: true, message: '不可为空', trigger: 'blur' },
|
||||
]">
|
||||
<el-select class="flex-1" v-model="formData.org_id" clearable placeholder="请选择组织"
|
||||
@change="deptrmt">
|
||||
<el-option v-for="(item, index) in list1" :key="index" :label="item.name"
|
||||
@ -101,8 +99,8 @@
|
||||
<el-row>
|
||||
<el-col :span="8">
|
||||
<el-form-item label="部门" prop="depar" :rules="[
|
||||
{ required: true, message: '不可为空', trigger: 'blur' },
|
||||
]">
|
||||
{ required: true, message: '不可为空', trigger: 'blur' },
|
||||
]">
|
||||
<el-select class="flex-1" v-model="formData.depar" clearable placeholder="请选择部门">
|
||||
<el-option v-for="(item, index) in list2" :key="index" :label="item.name"
|
||||
:value="item.id" />
|
||||
@ -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
|
||||
|
@ -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);
|
||||
})
|
||||
}
|
||||
|
||||
// 关闭回调
|
||||
|
@ -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'
|
||||
|
@ -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>
|
||||
|
@ -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: "",
|
||||
|
||||
})
|
||||
|
||||
|
@ -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: ""
|
||||
|
||||
})
|
||||
|
||||
|
@ -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'
|
||||
|
@ -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'
|
||||
|
34
src/views/project_cost_temp_set/detail.js
Normal file
34
src/views/project_cost_temp_set/detail.js
Normal 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;
|
@ -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)" />
|
||||
|
34
src/views/project_document_set/detail.js
Normal file
34
src/views/project_document_set/detail.js
Normal 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;
|
@ -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>
|
@ -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' ? '编辑项目文档设置' : '新增项目文档设置'
|
||||
})
|
||||
|
||||
// 表单数据
|
||||
|
@ -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>
|
||||
|
@ -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>
|
@ -102,9 +102,14 @@
|
||||
@click="handleDelete(row.id)">
|
||||
删除
|
||||
</el-button> -->
|
||||
<el-button v-perms="['project.project/detail']" link @click="handledetail(row)">
|
||||
详情
|
||||
</el-button>
|
||||
|
||||
<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>
|
||||
|
@ -1,12 +1,9 @@
|
||||
<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>
|
||||
<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">
|
||||
@ -33,10 +30,10 @@
|
||||
<el-descriptions-item label="预计工期" label-align="left" align="left" label-class-name="my-label">
|
||||
{{ formData.estimated_construction }}</el-descriptions-item>
|
||||
<el-descriptions-item label="项目估算(元)" label-align="left" align="left" label-class-name="my-label"> {{
|
||||
formData.project_estimation }}</el-descriptions-item>
|
||||
formData.project_estimation }}</el-descriptions-item>
|
||||
<el-descriptions-item label="项目估算(外币)" label-align="left" align="left" label-class-name="my-label"> {{
|
||||
formData.name
|
||||
}}</el-descriptions-item>
|
||||
formData.name
|
||||
}}</el-descriptions-item>
|
||||
<el-descriptions-item label="联系人" label-align="left" align="left" label-class-name="my-label">
|
||||
{{ formData.contacts }}</el-descriptions-item>
|
||||
<el-descriptions-item label="联系人部门" label-align="left" align="left" label-class-name="my-label">
|
||||
@ -52,12 +49,12 @@
|
||||
<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"> {{
|
||||
formData.construction_funds_sources_text
|
||||
}}</el-descriptions-item>
|
||||
formData.construction_funds_sources_text
|
||||
}}</el-descriptions-item>
|
||||
<el-descriptions-item label="建设单位付款方式" label-align="left" align="left" label-class-name="my-label"> {{
|
||||
formData.construction_payment_method
|
||||
}}</el-descriptions-item>
|
0
src/views/project_list/components/budget.vue → src/views/project_list_detail/components/budget.vue
0
src/views/project_list/components/budget.vue → src/views/project_list_detail/components/budget.vue
3
src/views/project_list/components/myTable.vue → src/views/project_list_detail/components/myTable.vue
3
src/views/project_list/components/myTable.vue → src/views/project_list_detail/components/myTable.vue
@ -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 }">
|
0
src/views/project_list/components/payment.vue → src/views/project_list_detail/components/payment.vue
0
src/views/project_list/components/payment.vue → src/views/project_list_detail/components/payment.vue
0
src/views/project_list/components/tender.vue → src/views/project_list_detail/components/tender.vue
0
src/views/project_list/components/tender.vue → src/views/project_list_detail/components/tender.vue
115
src/views/project_list_detail/index.vue
Normal file
115
src/views/project_list_detail/index.vue
Normal 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>
|
||||
|
48
src/views/project_logs/detail.js
Normal file
48
src/views/project_logs/detail.js
Normal 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;
|
@ -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>
|
@ -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' ? '编辑项目日志管理' : '新增项目日志管理'
|
||||
})
|
||||
|
||||
// 表单数据
|
||||
|
@ -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>
|
||||
|
@ -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>
|
||||
|
@ -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>()
|
||||
|
@ -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: "",
|
||||
|
||||
})
|
||||
|
||||
|
@ -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)
|
||||
|
@ -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)">
|
||||
|
Loading…
x
Reference in New Issue
Block a user