add
This commit is contained in:
parent
bb46964ee8
commit
7f50fc08c3
@ -16,7 +16,7 @@
|
|||||||
<el-table :data="pager.lists" @cell-click="handleCurrentChange">
|
<el-table :data="pager.lists" @cell-click="handleCurrentChange">
|
||||||
<el-table-column type="selection" width="55" />
|
<el-table-column type="selection" width="55" />
|
||||||
<el-table-column label="序号" type="index" width="55" />
|
<el-table-column label="序号" type="index" width="55" />
|
||||||
<el-table-column label="组织" prop="custom_id" show-overflow-tooltip />
|
<el-table-column label="组织" prop="org_name" show-overflow-tooltip />
|
||||||
<el-table-column label="姓名" prop="name" show-overflow-tooltip />
|
<el-table-column label="姓名" prop="name" show-overflow-tooltip />
|
||||||
<el-table-column label="职位" prop="position" show-overflow-tooltip />
|
<el-table-column label="职位" prop="position" show-overflow-tooltip />
|
||||||
<el-table-column label="手机" prop="phone" show-overflow-tooltip />
|
<el-table-column label="手机" prop="phone" show-overflow-tooltip />
|
||||||
@ -34,7 +34,7 @@
|
|||||||
</el-card>
|
</el-card>
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script lang="ts" setup>
|
<script lang="ts" setup>
|
||||||
import { usePaging } from "@/hooks/usePaging"
|
import { usePaging } from "@/hooks/usePaging"
|
||||||
import { useDictData } from "@/hooks/useDictOptions"
|
import { useDictData } from "@/hooks/useDictOptions"
|
||||||
|
@ -25,18 +25,6 @@
|
|||||||
<el-table-column label="重要程度" prop="importance_text" show-overflow-tooltip />
|
<el-table-column label="重要程度" prop="importance_text" show-overflow-tooltip />
|
||||||
<el-table-column label="记录时间" prop="recording_time" show-overflow-tooltip />
|
<el-table-column label="记录时间" prop="recording_time" show-overflow-tooltip />
|
||||||
<el-table-column label="需求内容" prop="demand_content" show-overflow-tooltip />
|
<el-table-column label="需求内容" prop="demand_content" show-overflow-tooltip />
|
||||||
<el-table-column label="附件" prop="annex" show-overflow-tooltip>
|
|
||||||
<template #default="{ row }">
|
|
||||||
<div v-if="row.annex && row.annex.length > 0">
|
|
||||||
<div v-for="(item, i) in row.annex " :key='i'>
|
|
||||||
<el-link :href="item" target="_blank">文件{{ i + 1 }}查看</el-link>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div v-else>
|
|
||||||
暂无文件
|
|
||||||
</div>
|
|
||||||
</template>
|
|
||||||
</el-table-column>
|
|
||||||
</el-table>
|
</el-table>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
@ -46,14 +34,12 @@
|
|||||||
</el-card>
|
</el-card>
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script lang="ts" setup>
|
<script lang="ts" setup>
|
||||||
import { usePaging } from "@/hooks/usePaging"
|
import { usePaging } from "@/hooks/usePaging"
|
||||||
import { useDictData } from "@/hooks/useDictOptions"
|
import { useDictData } from "@/hooks/useDictOptions"
|
||||||
|
|
||||||
import { apiCustomerDemandLists } from '@/api/customer_demand'
|
import { apiCustomerDemandLists } from '@/api/customer_demand'
|
||||||
import { defineEmits } from "vue"
|
import { defineEmits } from "vue"
|
||||||
import { timeFormat } from '@/utils/util'
|
|
||||||
const props = defineProps({
|
const props = defineProps({
|
||||||
productid: {
|
productid: {
|
||||||
type: String
|
type: String
|
||||||
|
@ -32,7 +32,7 @@
|
|||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
<script lang="ts" setup>
|
<script lang="ts" setup>
|
||||||
import { defineProps } from "vue"
|
import { defineProps, onMounted, ref } from "vue"
|
||||||
import { useDictData } from '@/hooks/useDictOptions'
|
import { useDictData } from '@/hooks/useDictOptions'
|
||||||
|
|
||||||
/** config参数说明
|
/** config参数说明
|
||||||
@ -55,14 +55,10 @@ const props = defineProps({
|
|||||||
config: {
|
config: {
|
||||||
type: Object,
|
type: Object,
|
||||||
require: true
|
require: true
|
||||||
}
|
},
|
||||||
|
dictData: Object
|
||||||
})
|
})
|
||||||
|
|
||||||
// 生成字典名称
|
|
||||||
const dictValue = props.config.tableConfig.map(item => Array.isArray(item.select) ? null : item.select).filter(item => item).join(',')
|
|
||||||
const { dictData } = useDictData(dictValue)
|
|
||||||
|
|
||||||
|
|
||||||
// 生成table的每一列的初始对象
|
// 生成table的每一列的初始对象
|
||||||
const list = props.config.tableConfig.map(item => item.value)
|
const list = props.config.tableConfig.map(item => item.value)
|
||||||
const getInitialData = () => {
|
const getInitialData = () => {
|
||||||
@ -87,4 +83,12 @@ const handleDelete = async (row: any) => {
|
|||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
// 生成字典名称
|
||||||
|
// const dictValue = props.config.tableConfig.map(item => Array.isArray(item.select) ? null : item.select).filter(item => item).join(',')
|
||||||
|
// if (!props.dictData) {
|
||||||
|
// props.dictData = useDictData(dictValue)
|
||||||
|
// }
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
</script>
|
</script>
|
||||||
|
32
src/components/toolTip/index.vue
Normal file
32
src/components/toolTip/index.vue
Normal file
@ -0,0 +1,32 @@
|
|||||||
|
<template>
|
||||||
|
<el-tooltip :content="content" v-if="settingStore.showToolTip">
|
||||||
|
<el-icon :class="class">
|
||||||
|
<InfoFilled />
|
||||||
|
</el-icon>
|
||||||
|
</el-tooltip>
|
||||||
|
|
||||||
|
</template>
|
||||||
|
<script setup lang="ts">
|
||||||
|
import { defineProps } from 'vue';
|
||||||
|
import useSettingStore from '@/stores/modules/setting'
|
||||||
|
const settingStore = useSettingStore()
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
defineProps({
|
||||||
|
class: {
|
||||||
|
type: String,
|
||||||
|
default: "ml-2 mt-4"
|
||||||
|
},
|
||||||
|
content: {
|
||||||
|
type: String
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
</script>
|
@ -1,6 +1,7 @@
|
|||||||
const defaultSetting = {
|
const defaultSetting = {
|
||||||
showCrumb: true, // 是否显示面包屑
|
showCrumb: true, // 是否显示面包屑
|
||||||
showLogo: true, // 是否显示logo
|
showLogo: true, // 是否显示logo
|
||||||
|
showToolTip:false,//是否开启文字提示
|
||||||
isUniqueOpened: true, //只展开一个一级菜单
|
isUniqueOpened: true, //只展开一个一级菜单
|
||||||
sideWidth: 250, //侧边栏宽度
|
sideWidth: 250, //侧边栏宽度
|
||||||
sideTheme: 'dark', //侧边栏主题
|
sideTheme: 'dark', //侧边栏主题
|
||||||
|
@ -1,27 +1,13 @@
|
|||||||
<template>
|
<template>
|
||||||
<div class="setting-drawer">
|
<div class="setting-drawer">
|
||||||
<el-drawer
|
<el-drawer v-model="showSetting" append-to-body direction="rtl" size="250px" title="主题设置">
|
||||||
v-model="showSetting"
|
|
||||||
append-to-body
|
|
||||||
direction="rtl"
|
|
||||||
size="250px"
|
|
||||||
title="主题设置"
|
|
||||||
>
|
|
||||||
<div class="setting-item mb-5">
|
<div class="setting-item mb-5">
|
||||||
<span class="text-tx-secondary">风格设置</span>
|
<span class="text-tx-secondary">风格设置</span>
|
||||||
<div class="flex mt-4 cursor-pointer">
|
<div class="flex mt-4 cursor-pointer">
|
||||||
<div
|
<div class="mr-4 flex relative text-primary" v-for="item in sideThemeList" :key="item.type"
|
||||||
class="mr-4 flex relative text-primary"
|
@click="sideTheme = item.type">
|
||||||
v-for="item in sideThemeList"
|
|
||||||
:key="item.type"
|
|
||||||
@click="sideTheme = item.type"
|
|
||||||
>
|
|
||||||
<img :src="item.image" width="52" height="36" />
|
<img :src="item.image" width="52" height="36" />
|
||||||
<icon
|
<icon v-if="sideTheme == item.type" class="icon-select" name="el-icon-Select" />
|
||||||
v-if="sideTheme == item.type"
|
|
||||||
class="icon-select"
|
|
||||||
name="el-icon-Select"
|
|
||||||
/>
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@ -40,21 +26,13 @@
|
|||||||
<div class="setting-item mb-5 flex justify-between items-center">
|
<div class="setting-item mb-5 flex justify-between items-center">
|
||||||
<span class="text-tx-secondary">开启多页签栏</span>
|
<span class="text-tx-secondary">开启多页签栏</span>
|
||||||
<div>
|
<div>
|
||||||
<el-switch
|
<el-switch v-model="openMultipleTabs" :active-value="true" :inactive-value="false" />
|
||||||
v-model="openMultipleTabs"
|
|
||||||
:active-value="true"
|
|
||||||
:inactive-value="false"
|
|
||||||
/>
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="setting-item mb-5 flex justify-between items-center">
|
<div class="setting-item mb-5 flex justify-between items-center">
|
||||||
<span class="text-tx-secondary">只展开一个一级菜单</span>
|
<span class="text-tx-secondary">只展开一个一级菜单</span>
|
||||||
<div>
|
<div>
|
||||||
<el-switch
|
<el-switch v-model="isUniqueOpened" :active-value="true" :inactive-value="false" />
|
||||||
v-model="isUniqueOpened"
|
|
||||||
:active-value="true"
|
|
||||||
:inactive-value="false"
|
|
||||||
/>
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="setting-item mb-5 flex justify-between items-center">
|
<div class="setting-item mb-5 flex justify-between items-center">
|
||||||
@ -75,6 +53,12 @@
|
|||||||
<el-switch v-model="showCrumb" :active-value="true" :inactive-value="false" />
|
<el-switch v-model="showCrumb" :active-value="true" :inactive-value="false" />
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
<div class="setting-item mb-5 flex justify-between items-center">
|
||||||
|
<div class="text-tx-secondary flex-none mr-3">显示Tooltip</div>
|
||||||
|
<div>
|
||||||
|
<el-switch v-model="showToolTip" :active-value="true" :inactive-value="false" />
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
<div class="setting-item mb-5 flex justify-between items-center">
|
<div class="setting-item mb-5 flex justify-between items-center">
|
||||||
<el-button @click="resetTheme">重置主题</el-button>
|
<el-button @click="resetTheme">重置主题</el-button>
|
||||||
</div>
|
</div>
|
||||||
@ -196,6 +180,21 @@ const showCrumb = computed({
|
|||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
|
|
||||||
|
const showToolTip = computed({
|
||||||
|
get() {
|
||||||
|
return settingStore.showToolTip
|
||||||
|
},
|
||||||
|
set(value) {
|
||||||
|
settingStore.setSetting({
|
||||||
|
key: 'showToolTip',
|
||||||
|
value
|
||||||
|
})
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
const isDark = useDark()
|
const isDark = useDark()
|
||||||
const themeChange = () => {
|
const themeChange = () => {
|
||||||
settingStore.setTheme(isDark.value)
|
settingStore.setTheme(isDark.value)
|
||||||
|
@ -2,195 +2,228 @@
|
|||||||
<div class="edit-popup">
|
<div class="edit-popup">
|
||||||
<popup ref="popupRef" :title="popupTitle" :async="true" width="80%" @confirm="handleSubmit"
|
<popup ref="popupRef" :title="popupTitle" :async="true" width="80%" @confirm="handleSubmit"
|
||||||
@close="handleClose">
|
@close="handleClose">
|
||||||
<el-form ref="formRef" :model="formData" label-width="auto" :rules="formRules" inline>
|
<el-form ref="formRef" :model="formData" label-width="150px" :rules="formRules">
|
||||||
|
<el-card>
|
||||||
|
<template #header>
|
||||||
|
标书信息
|
||||||
|
</template>
|
||||||
|
<el-row>
|
||||||
|
<el-col :span="8">
|
||||||
|
<el-form-item label="标书编号" prop="buy_bidding_document_id" @click="showDialog = true"
|
||||||
|
:rules="[{ required: true, message: '不可为空', trigger: 'blur' }]">
|
||||||
|
<el-input v-model="bid_document_no" clearable readonly placeholder="请选择标书编号" />
|
||||||
|
</el-form-item>
|
||||||
|
</el-col>
|
||||||
|
<el-col :span="8">
|
||||||
|
<el-form-item label="购买人员" prop="buy_bidding_document_id">
|
||||||
|
<el-input v-model="buyer" clearable disabled placeholder="系统自动填写" />
|
||||||
|
</el-form-item>
|
||||||
|
</el-col>
|
||||||
|
<el-col :span="8">
|
||||||
|
<el-form-item label="客户名称" prop="buy_bidding_document_id"
|
||||||
|
:rules="[{ required: true, message: '不可为空', trigger: 'blur' }]">
|
||||||
|
<el-input v-model="formData.custom_name" clearable disabled placeholder="系统自动填写" />
|
||||||
|
</el-form-item>
|
||||||
|
</el-col>
|
||||||
|
<el-col :span="8">
|
||||||
|
<el-form-item label="项目名称" prop="buy_bidding_document_id"
|
||||||
|
:rules="[{ required: true, message: '不可为空', trigger: 'blur' }]">
|
||||||
|
<el-input v-model="formData.project_name" clearable disabled placeholder="系统自动填写" />
|
||||||
|
</el-form-item>
|
||||||
|
</el-col>
|
||||||
|
|
||||||
<el-row>
|
<el-col :span="8">
|
||||||
<el-col :span="8">
|
<el-form-item label="招标公司名称" prop="buy_bidding_document_id">
|
||||||
<el-form-item label="标书编号" prop="buy_bidding_document_id" @click="showDialog = true"
|
<el-input v-model="invite_tenders_company_name" clearable disabled
|
||||||
:rules="[{ required: true, message: '不可为空', trigger: 'blur' }]">
|
placeholder="系统自动填写" />
|
||||||
<el-input v-model="bid_document_no" clearable readonly placeholder="请选择标书编号" />
|
</el-form-item>
|
||||||
</el-form-item>
|
</el-col>
|
||||||
</el-col>
|
<el-col :span="8">
|
||||||
<el-col :span="8">
|
<el-form-item label="投标公司名称" prop="buy_bidding_document_id">
|
||||||
<el-form-item label="购买人员" prop="buy_bidding_document_id">
|
<el-input v-model="bid_company_name" clearable disabled placeholder="系统自动填写" />
|
||||||
<el-input v-model="buyer" clearable disabled placeholder="系统自动填写" />
|
</el-form-item>
|
||||||
</el-form-item>
|
</el-col>
|
||||||
</el-col>
|
<el-col :span="8">
|
||||||
<el-col :span="8">
|
<el-form-item label="购买标书金额" prop="buy_bidding_document_id">
|
||||||
<el-form-item label="客户名称" prop="buy_bidding_document_id"
|
<el-input v-model="amount" clearable disabled placeholder="系统自动填写" />
|
||||||
:rules="[{ required: true, message: '不可为空', trigger: 'blur' }]">
|
</el-form-item>
|
||||||
<el-input v-model="formData.custom_name" clearable disabled placeholder="系统自动填写" />
|
</el-col>
|
||||||
</el-form-item>
|
<el-col :span="8">
|
||||||
</el-col>
|
|
||||||
<el-col :span="8">
|
|
||||||
<el-form-item label="项目名称" prop="buy_bidding_document_id"
|
|
||||||
:rules="[{ required: true, message: '不可为空', trigger: 'blur' }]">
|
|
||||||
<el-input v-model="formData.project_name" clearable disabled placeholder="系统自动填写" />
|
|
||||||
</el-form-item>
|
|
||||||
</el-col>
|
|
||||||
|
|
||||||
<el-col :span="8">
|
<el-form-item label="招标项目资金来源" prop="buy_bidding_document_id">
|
||||||
<el-form-item label="招标公司名称" prop="buy_bidding_document_id">
|
<el-input v-model="bidding_project_fund_source" clearable disabled
|
||||||
<el-input v-model="invite_tenders_company_name" clearable disabled placeholder="系统自动填写" />
|
placeholder="系统自动填写" />
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
</el-col>
|
</el-col>
|
||||||
<el-col :span="8">
|
<el-col :span="8">
|
||||||
<el-form-item label="投标公司名称" prop="buy_bidding_document_id">
|
<el-form-item label="投标时间" prop="buy_bidding_document_id">
|
||||||
<el-input v-model="bid_company_name" clearable disabled placeholder="系统自动填写" />
|
<el-input v-model="bid_date" clearable disabled placeholder="系统自动填写" />
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
</el-col>
|
</el-col>
|
||||||
<el-col :span="8">
|
<el-col :span="8">
|
||||||
<el-form-item label="购买标书金额" prop="buy_bidding_document_id">
|
<el-form-item label="购买标书时间" prop="buy_bidding_document_id">
|
||||||
<el-input v-model="amount" clearable disabled placeholder="系统自动填写" />
|
<el-input v-model="buy_date" clearable disabled placeholder="系统自动填写" />
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
</el-col>
|
</el-col>
|
||||||
<el-col :span="8">
|
<el-col :span="8">
|
||||||
|
<el-form-item label="招标方式" prop="buy_bidding_document_id">
|
||||||
|
<el-input v-model="invite_tenders_type" clearable disabled placeholder="系统自动填写" />
|
||||||
|
</el-form-item>
|
||||||
|
</el-col>
|
||||||
|
|
||||||
<el-form-item label="招标项目资金来源" prop="buy_bidding_document_id">
|
<el-col :span="8">
|
||||||
<el-input v-model="bidding_project_fund_source" clearable disabled placeholder="系统自动填写" />
|
<el-form-item label="是否需要保证金" prop="is_margin">
|
||||||
</el-form-item>
|
<el-input v-model="formData.is_margin" clearable disabled placeholder="系统自动填写" />
|
||||||
</el-col>
|
|
||||||
<el-col :span="8">
|
|
||||||
<el-form-item label="投标时间" prop="buy_bidding_document_id">
|
|
||||||
<el-input v-model="bid_date" clearable disabled placeholder="系统自动填写" />
|
|
||||||
</el-form-item>
|
|
||||||
</el-col>
|
|
||||||
<el-col :span="8">
|
|
||||||
<el-form-item label="购买标书时间" prop="buy_bidding_document_id">
|
|
||||||
<el-input v-model="buy_date" clearable disabled placeholder="系统自动填写" />
|
|
||||||
</el-form-item>
|
|
||||||
</el-col>
|
|
||||||
<el-col :span="8">
|
|
||||||
<el-form-item label="招标方式" prop="buy_bidding_document_id">
|
|
||||||
<el-input v-model="invite_tenders_type" clearable disabled placeholder="系统自动填写" />
|
|
||||||
</el-form-item>
|
|
||||||
</el-col>
|
|
||||||
|
|
||||||
<el-col :span="8">
|
</el-form-item>
|
||||||
<el-form-item label="是否需要保证金" prop="is_margin">
|
</el-col>
|
||||||
<el-input v-model="formData.is_margin" clearable disabled placeholder="系统自动填写" />
|
</el-row>
|
||||||
|
|
||||||
</el-form-item>
|
</el-card>
|
||||||
</el-col>
|
|
||||||
</el-row>
|
|
||||||
<div class="tit">技术审查</div>
|
|
||||||
<el-row>
|
|
||||||
|
|
||||||
<el-col :span="8">
|
<el-card>
|
||||||
<el-form-item label="技术协议偏差" prop="technical_protocol_deviation">
|
<template #header>技术审查</template>
|
||||||
<el-input v-model="formData.technical_protocol_deviation" clearable
|
<el-row>
|
||||||
placeholder="请输入技术协议偏差" />
|
<el-col :span="8">
|
||||||
</el-form-item>
|
<el-form-item label="技术协议偏差" prop="technical_protocol_deviation">
|
||||||
</el-col>
|
<el-input v-model="formData.technical_protocol_deviation" clearable
|
||||||
<el-col :span="8">
|
placeholder="请输入技术协议偏差" />
|
||||||
<el-form-item label="协议偏差处理方案" prop="protocol_deviation_handling_plan">
|
</el-form-item>
|
||||||
<el-input v-model="formData.protocol_deviation_handling_plan" clearable
|
</el-col>
|
||||||
placeholder="请输入协议偏差处理方案" />
|
<el-col :span="8">
|
||||||
</el-form-item></el-col>
|
<el-form-item label="协议偏差处理方案" prop="protocol_deviation_handling_plan">
|
||||||
<el-col :span="8">
|
<el-input v-model="formData.protocol_deviation_handling_plan" clearable
|
||||||
<el-form-item label="技术审查附件" prop="technical_review_annex">
|
placeholder="请输入协议偏差处理方案" />
|
||||||
<uploadAnnex :formData="formData" value="technical_review_annex"></uploadAnnex>
|
</el-form-item></el-col>
|
||||||
</el-form-item>
|
<el-col :span="8">
|
||||||
</el-col>
|
<el-form-item label="技术审查附件" prop="technical_review_annex">
|
||||||
</el-row>
|
<uploadAnnex :formData="formData" value="technical_review_annex"></uploadAnnex>
|
||||||
<div class="tit">商务审查</div>
|
</el-form-item>
|
||||||
<el-row>
|
</el-col>
|
||||||
<el-col :span="8">
|
</el-row>
|
||||||
<el-form-item label="总金额" prop="business_review_total_amount">
|
</el-card>
|
||||||
<el-input v-model="formData.business_review_total_amount" clearable placeholder="系统自动计算"
|
<el-card>
|
||||||
disabled />
|
<template #header>
|
||||||
</el-form-item></el-col> <el-col :span="8">
|
商务审查
|
||||||
<el-form-item label="税率" prop="tax_rate">
|
</template>
|
||||||
<el-select class="flex-1" v-model="formData.tax_rate" clearable placeholder="请选择税率">
|
<el-row>
|
||||||
<el-option v-for="(item, index) in dictData.tax_rate" :key="index" :label="item.name"
|
<el-col :span="8">
|
||||||
:value="parseInt(item.value)" />
|
<el-form-item label="总金额" prop="business_review_total_amount">
|
||||||
</el-select>
|
<el-input v-model="formData.business_review_total_amount" clearable placeholder="系统自动计算"
|
||||||
</el-form-item></el-col> <el-col :span="8">
|
disabled />
|
||||||
<el-form-item label="付款方式" prop="pay_type">
|
</el-form-item>
|
||||||
<el-select class="flex-1" v-model="formData.pay_type" clearable placeholder="请选择付款方式">
|
</el-col>
|
||||||
<el-option v-for="(item, index) in dictData.pay_type" :key="index" :label="item.name"
|
<el-col :span="8">
|
||||||
:value="parseInt(item.value)" />
|
<el-form-item label="税率" prop="tax_rate">
|
||||||
</el-select>
|
<el-select class="flex-1 " v-model="formData.tax_rate" clearable placeholder="请选择税率">
|
||||||
</el-form-item></el-col> <el-col :span="8">
|
<el-option v-for="(item, index) in dictData.tax_rate" :key="index"
|
||||||
<el-form-item label="付款比例" prop="pay_rate">
|
:label="item.name" :value="parseInt(item.value)" />
|
||||||
<el-input v-model="formData.pay_rate" clearable placeholder="请输入付款比例" />
|
</el-select>
|
||||||
</el-form-item></el-col> <el-col :span="8">
|
</el-form-item>
|
||||||
<el-form-item label="商务合同偏差" prop="business_contract_deviation">
|
</el-col>
|
||||||
<el-input v-model="formData.business_contract_deviation" clearable
|
<el-col :span="8">
|
||||||
placeholder="请输入商务合同偏差" />
|
<el-form-item label="付款方式" prop="pay_type">
|
||||||
</el-form-item></el-col> <el-col :span="8">
|
<el-select class="flex-1" v-model="formData.pay_type" clearable placeholder="请选择付款方式">
|
||||||
<el-form-item label="偏差处理方案" prop="business_contract_deviation_handling_plan">
|
<el-option v-for="(item, index) in dictData.pay_type" :key="index"
|
||||||
<el-input v-model="formData.business_contract_deviation_handling_plan" clearable
|
:label="item.name" :value="parseInt(item.value)" />
|
||||||
placeholder="请输入偏差处理方案" />
|
</el-select>
|
||||||
</el-form-item></el-col> <el-col :span="24">
|
</el-form-item>
|
||||||
<el-form-item label="商务审查附件" prop="business_contract_deviation_annex">
|
</el-col>
|
||||||
<uploadAnnex :formData="formData" value="business_contract_deviation_annex"></uploadAnnex>
|
<el-col :span="8">
|
||||||
</el-form-item>
|
<el-form-item label="付款比例" prop="pay_rate">
|
||||||
</el-col>
|
<el-input v-model="formData.pay_rate" clearable placeholder="请输入付款比例" />
|
||||||
</el-row>
|
</el-form-item>
|
||||||
<div class="tit">审查明细</div>
|
</el-col>
|
||||||
<div style="margin-bottom: 30px;">
|
<el-col :span="8">
|
||||||
<el-table :data="tableData">
|
<el-form-item label="商务合同偏差" prop="business_contract_deviation">
|
||||||
<el-table-column label="序号">
|
<el-input v-model="formData.business_contract_deviation" clearable
|
||||||
<template #default="{ row }">
|
placeholder="请输入商务合同偏差" />
|
||||||
|
</el-form-item>
|
||||||
|
</el-col>
|
||||||
|
<el-col :span="8">
|
||||||
|
<el-form-item label="偏差处理方案" prop="business_contract_deviation_handling_plan">
|
||||||
|
<el-input v-model="formData.business_contract_deviation_handling_plan" clearable
|
||||||
|
placeholder="请输入偏差处理方案" />
|
||||||
|
</el-form-item>
|
||||||
|
</el-col>
|
||||||
|
<el-col :span="24">
|
||||||
|
<el-form-item label="商务审查附件" prop="business_contract_deviation_annex">
|
||||||
|
<uploadAnnex :formData="formData" value="business_contract_deviation_annex">
|
||||||
|
</uploadAnnex>
|
||||||
|
</el-form-item>
|
||||||
|
</el-col>
|
||||||
|
</el-row>
|
||||||
|
</el-card>
|
||||||
|
|
||||||
<el-button @click="handleAdd(row)" size="small">+</el-button>
|
<el-card>
|
||||||
<el-button @click="handleDelete(row)" size="small">-</el-button>
|
<template #header>
|
||||||
</template>
|
审查明细
|
||||||
</el-table-column>
|
</template>
|
||||||
<el-table-column label="产品名称" prop="name">
|
<div style="margin-bottom: 30px;">
|
||||||
<template #default="{ row, $index }">
|
<el-table :data="tableData">
|
||||||
<el-input v-model="row.product_name" readonly @click="productDiag(row, $index)"
|
<el-table-column label="序号">
|
||||||
placeholder="请选择产品">
|
<template #default="{ row }">
|
||||||
<template #suffix>
|
|
||||||
<icon name="el-icon-Search" />
|
|
||||||
</template>
|
|
||||||
</el-input>
|
|
||||||
</template>
|
|
||||||
</el-table-column>
|
|
||||||
<el-table-column label="型号规格" prop="specs">
|
|
||||||
<template #default="{ row }">
|
|
||||||
<el-input v-model="row.product_specs" />
|
|
||||||
</template></el-table-column>
|
|
||||||
<el-table-column label="单位" prop="unit">
|
|
||||||
<template #default="{ row }">
|
|
||||||
<el-input v-model="row.product_unit" /> </template>
|
|
||||||
</el-table-column>
|
|
||||||
<el-table-column label="数量" prop="num">
|
|
||||||
<template #default="{ row, $index }">
|
|
||||||
<el-input v-model="row.num" type="number" @change="calcTotalAmount"
|
|
||||||
@input="jiprice1(row, $index)" /> </template>
|
|
||||||
</el-table-column>
|
|
||||||
|
|
||||||
<el-table-column label="成本单价" prop="cost_price">
|
<el-button @click="handleAdd(row)" size="small">+</el-button>
|
||||||
<template #default="{ row, $index }">
|
<el-button @click="handleDelete(row)" size="small">-</el-button>
|
||||||
<el-input v-model="row.cost_price" @change="calcTotalAmount" type="number"
|
</template>
|
||||||
@input="jiprice2(row, $index)" />
|
</el-table-column>
|
||||||
</template>
|
<el-table-column label="产品名称" prop="name">
|
||||||
</el-table-column>
|
<template #default="{ row, $index }">
|
||||||
|
<el-input v-model="row.product_name" readonly @click="productDiag(row, $index)"
|
||||||
|
placeholder="请选择产品">
|
||||||
|
<template #suffix>
|
||||||
|
<icon name="el-icon-Search" />
|
||||||
|
</template>
|
||||||
|
</el-input>
|
||||||
|
</template>
|
||||||
|
</el-table-column>
|
||||||
|
<el-table-column label="型号规格" prop="specs">
|
||||||
|
<template #default="{ row }">
|
||||||
|
<el-input v-model="row.product_specs" />
|
||||||
|
</template></el-table-column>
|
||||||
|
<el-table-column label="单位" prop="unit">
|
||||||
|
<template #default="{ row }">
|
||||||
|
<el-input v-model="row.product_unit" /> </template>
|
||||||
|
</el-table-column>
|
||||||
|
<el-table-column label="数量" prop="num">
|
||||||
|
<template #default="{ row, $index }">
|
||||||
|
<el-input v-model="row.num" type="number" @change="calcTotalAmount"
|
||||||
|
@input="jiprice1(row, $index)" /> </template>
|
||||||
|
</el-table-column>
|
||||||
|
|
||||||
|
<el-table-column label="成本单价" prop="cost_price">
|
||||||
|
<template #default="{ row, $index }">
|
||||||
|
<el-input v-model="row.cost_price" @change="calcTotalAmount" type="number"
|
||||||
|
@input="jiprice2(row, $index)" />
|
||||||
|
</template>
|
||||||
|
</el-table-column>
|
||||||
|
|
||||||
|
<el-table-column label="成本金额" prop="cost_amount">
|
||||||
|
<template #default="{ row }">
|
||||||
|
<el-input v-model="row.cost_amount" type="number" disabled placeholder="系统自动计算" />
|
||||||
|
</template>
|
||||||
|
</el-table-column>
|
||||||
|
<el-table-column label="点数" prop="points">
|
||||||
|
<template #default="{ row }">
|
||||||
|
<el-input v-model="row.points" type="number" @change="calcTotalAmount" />
|
||||||
|
</template>
|
||||||
|
</el-table-column>
|
||||||
|
<el-table-column label="报价单价" prop="sale_price">
|
||||||
|
<template #default="{ row, $index }">
|
||||||
|
<el-input v-model="row.sale_price" type="number" @change="calcTotalAmount"
|
||||||
|
@input="jiprice3(row, $index)" />
|
||||||
|
</template>
|
||||||
|
</el-table-column>
|
||||||
|
<el-table-column label="报价金额" prop="total_amount">
|
||||||
|
<template #default="{ row }">
|
||||||
|
<el-input v-model="row.sale_amount" type="number" disabled placeholder="系统自动计算" />
|
||||||
|
</template>
|
||||||
|
</el-table-column>
|
||||||
|
</el-table>
|
||||||
|
</div>
|
||||||
|
</el-card>
|
||||||
|
|
||||||
<el-table-column label="成本金额" prop="cost_amount">
|
|
||||||
<template #default="{ row }">
|
|
||||||
<el-input v-model="row.cost_amount" type="number" disabled placeholder="系统自动计算" />
|
|
||||||
</template>
|
|
||||||
</el-table-column>
|
|
||||||
<el-table-column label="点数" prop="points">
|
|
||||||
<template #default="{ row }">
|
|
||||||
<el-input v-model="row.points" type="number" @change="calcTotalAmount" /> </template>
|
|
||||||
</el-table-column>
|
|
||||||
<el-table-column label="报价单价" prop="sale_price">
|
|
||||||
<template #default="{ row, $index }">
|
|
||||||
<el-input v-model="row.sale_price" type="number" @change="calcTotalAmount"
|
|
||||||
@input="jiprice3(row, $index)" />
|
|
||||||
</template>
|
|
||||||
</el-table-column>
|
|
||||||
<el-table-column label="报价金额" prop="total_amount">
|
|
||||||
<template #default="{ row }">
|
|
||||||
<el-input v-model="row.sale_amount" type="number" disabled placeholder="系统自动计算" />
|
|
||||||
</template>
|
|
||||||
</el-table-column>
|
|
||||||
</el-table>
|
|
||||||
</div>
|
|
||||||
</el-form>
|
</el-form>
|
||||||
<el-dialog v-model="showDialog" title="选择标书" width="70%">
|
<el-dialog v-model="showDialog" title="选择标书" width="70%">
|
||||||
<biddocumentTable @customEvent="customEvent" :project_id="project?.id || ''"></biddocumentTable>
|
<biddocumentTable @customEvent="customEvent" :project_id="project?.id || ''"></biddocumentTable>
|
||||||
|
@ -37,7 +37,7 @@
|
|||||||
<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.add_user_name }}</el-descriptions-item>
|
formData.add_user_name }}</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.create_time }}</el-descriptions-item>
|
formData.create_time }}</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.update_user_name }}</el-descriptions-item>
|
formData.update_user_name }}</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">{{
|
||||||
|
@ -1,13 +1,15 @@
|
|||||||
<template>
|
<template>
|
||||||
<div class="edit-popup">
|
<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="90px" :rules="formRules">
|
<el-form ref="formRef" :model="formData" label-width="90px" :rules="formRules">
|
||||||
<el-row>
|
<el-row>
|
||||||
|
|
||||||
<el-col :span="8">
|
<el-col :span="8">
|
||||||
<el-form-item label="标书审查" prop="bid_document_examination_id"
|
<el-form-item label="标书审查" prop="bid_document_examination_id"
|
||||||
:rules="[{ required: true, message: '不可为空', trigger: 'blur' }]" @click="showDialog = true">
|
:rules="[{ required: true, message: '不可为空', trigger: 'blur' }]" @click="showDialog = true">
|
||||||
<el-input v-model="formData.code" readonly clearable placeholder="请选择标书审查" />
|
<el-input v-model="formData.bid_document_examination_code" readonly clearable
|
||||||
|
placeholder="请选择标书审查" />
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
</el-col>
|
</el-col>
|
||||||
|
|
||||||
@ -84,8 +86,6 @@ import Popup from '@/components/popup/index.vue'
|
|||||||
import biddocumentTable from "@/components/document_examination/index.vue"
|
import biddocumentTable from "@/components/document_examination/index.vue"
|
||||||
import prodctTable from '@/components/product/index.vue'
|
import prodctTable from '@/components/product/index.vue'
|
||||||
import { apiBidDocumentExaminationDetailAdd, apiBidDocumentExaminationDetailEdit, apiBidDocumentExaminationDetailDetail } from '@/api/bid_document_examination_detail'
|
import { apiBidDocumentExaminationDetailAdd, apiBidDocumentExaminationDetailEdit, apiBidDocumentExaminationDetailDetail } from '@/api/bid_document_examination_detail'
|
||||||
import { timeFormat } from '@/utils/util'
|
|
||||||
import projectTable from "@/components/project/index.vue"
|
|
||||||
import type { PropType } from 'vue'
|
import type { PropType } from 'vue'
|
||||||
defineProps({
|
defineProps({
|
||||||
dictData: {
|
dictData: {
|
||||||
@ -114,6 +114,7 @@ const popupTitle = computed(() => {
|
|||||||
const formData = reactive({
|
const formData = reactive({
|
||||||
id: '',
|
id: '',
|
||||||
bid_document_examination_id: '',
|
bid_document_examination_id: '',
|
||||||
|
bid_document_examination_code: "",
|
||||||
product_id: '',
|
product_id: '',
|
||||||
num: '',
|
num: '',
|
||||||
points: '',
|
points: '',
|
||||||
@ -138,7 +139,7 @@ const customEvent = (e: any) => {
|
|||||||
project_name.value = e.project_name
|
project_name.value = e.project_name
|
||||||
project_code.value = e.project_code
|
project_code.value = e.project_code
|
||||||
formData.bid_document_examination_id = e.id
|
formData.bid_document_examination_id = e.id
|
||||||
formData.code = e.code
|
formData.bid_document_examination_code = e.code
|
||||||
showDialog.value = false;
|
showDialog.value = false;
|
||||||
|
|
||||||
|
|
||||||
|
@ -121,10 +121,11 @@ const handleAdd = async () => {
|
|||||||
|
|
||||||
// 编辑
|
// 编辑
|
||||||
const handleEdit = async (data: any) => {
|
const handleEdit = async (data: any) => {
|
||||||
|
let res = await apiBidDocumentExaminationDetailDetail({ id: data.id })
|
||||||
showEdit.value = true
|
showEdit.value = true
|
||||||
await nextTick()
|
await nextTick()
|
||||||
editRef.value?.open('edit')
|
editRef.value?.open('edit')
|
||||||
editRef.value?.setFormData(data)
|
editRef.value?.setFormData(res)
|
||||||
}
|
}
|
||||||
|
|
||||||
// 删除
|
// 删除
|
||||||
@ -144,4 +145,3 @@ const handledetail = async (data: any) => {
|
|||||||
}
|
}
|
||||||
getLists()
|
getLists()
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
|
@ -1,7 +1,8 @@
|
|||||||
<template>
|
<template>
|
||||||
<div class="edit-popup">
|
<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-form ref="formRef" :model="formData" label-width="auto" :rules="formRules">
|
||||||
|
|
||||||
@ -10,25 +11,29 @@
|
|||||||
<el-row :gutter="10">
|
<el-row :gutter="10">
|
||||||
|
|
||||||
<el-col :span="8">
|
<el-col :span="8">
|
||||||
<el-form-item label="分部工程" prop="division_engineering" :rules="[{ required: true, message: '不可为空', trigger: 'blur' }]">
|
<el-form-item label="分部工程" prop="division_engineering"
|
||||||
|
:rules="[{ required: true, message: '不可为空', trigger: 'blur' }]">
|
||||||
<el-input v-model="formData.division_engineering" clearable placeholder="请输入分部工程" />
|
<el-input v-model="formData.division_engineering" clearable placeholder="请输入分部工程" />
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
</el-col>
|
</el-col>
|
||||||
<el-col :span="8">
|
<el-col :span="8">
|
||||||
<el-form-item label="子分部工程" prop="sub_division_engineering" :rules="[{ required: true, message: '不可为空', trigger: 'blur' }]">
|
<el-form-item label="子分部工程" prop="sub_division_engineering"
|
||||||
|
:rules="[{ required: true, message: '不可为空', trigger: 'blur' }]">
|
||||||
<el-input v-model="formData.sub_division_engineering" clearable placeholder="请输入子分部工程" />
|
<el-input v-model="formData.sub_division_engineering" clearable placeholder="请输入子分部工程" />
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
</el-col>
|
</el-col>
|
||||||
|
|
||||||
<el-col :span="8">
|
<el-col :span="8">
|
||||||
<el-form-item label="分项工程" prop="subentry_engineering" :rules="[{ required: true, message: '不可为空', trigger: 'blur' }]">
|
<el-form-item label="分项工程" prop="subentry_engineering"
|
||||||
|
:rules="[{ required: true, message: '不可为空', trigger: 'blur' }]">
|
||||||
<el-input v-model="formData.subentry_engineering" clearable placeholder="请输入分项工程" />
|
<el-input v-model="formData.subentry_engineering" clearable placeholder="请输入分项工程" />
|
||||||
|
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
</el-col>
|
</el-col>
|
||||||
|
|
||||||
<el-col :span="8">
|
<el-col :span="8">
|
||||||
<el-form-item label="分项工程编码" prop="subentry_engineering_code" :rules="[{ required: true, message: '不可为空', trigger: 'blur' }]">
|
<el-form-item label="分项工程编码" prop="subentry_engineering_code"
|
||||||
|
:rules="[{ required: true, message: '不可为空', trigger: 'blur' }]">
|
||||||
<el-input v-model="formData.subentry_engineering_code" clearable placeholder="请输入分项工程编码" />
|
<el-input v-model="formData.subentry_engineering_code" clearable placeholder="请输入分项工程编码" />
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
</el-col>
|
</el-col>
|
||||||
|
@ -42,22 +42,7 @@
|
|||||||
<el-input v-model="formData.remark" clearable placeholder="请输入备注" />
|
<el-input v-model="formData.remark" clearable placeholder="请输入备注" />
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<el-form-item label="附件">
|
<el-form-item label="附件">
|
||||||
<el-upload
|
<uploadAnnex :formData="formData"></uploadAnnex>
|
||||||
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-form-item>
|
||||||
</el-form>
|
</el-form>
|
||||||
<el-dialog v-model="showDialog" title="选择项目" width="70%">
|
<el-dialog v-model="showDialog" title="选择项目" width="70%">
|
||||||
@ -85,11 +70,7 @@ let props = defineProps({
|
|||||||
const emit = defineEmits(['success', 'close'])
|
const emit = defineEmits(['success', 'close'])
|
||||||
const formRef = shallowRef<FormInstance>()
|
const formRef = shallowRef<FormInstance>()
|
||||||
const popupRef = shallowRef<InstanceType<typeof Popup>>()
|
const popupRef = shallowRef<InstanceType<typeof Popup>>()
|
||||||
|
|
||||||
|
|
||||||
const mode = ref('add')
|
const mode = ref('add')
|
||||||
const orglist = reactive([])
|
|
||||||
const jobs = reactive([])
|
|
||||||
const project_name
|
const project_name
|
||||||
= ref('')
|
= ref('')
|
||||||
const project_code
|
const project_code
|
||||||
@ -99,29 +80,9 @@ const custom_name
|
|||||||
const customer_demand_name = ref('')
|
const customer_demand_name = ref('')
|
||||||
const formDataannex = reactive([])
|
const formDataannex = reactive([])
|
||||||
import configs from "@/config"
|
import configs from "@/config"
|
||||||
const base_url = configs.baseUrl + configs.urlPrefix
|
|
||||||
import useUserStore from "@/stores/modules/user";
|
import useUserStore from "@/stores/modules/user";
|
||||||
import feedback from '@/utils/feedback'
|
import feedback from '@/utils/feedback'
|
||||||
|
|
||||||
const userStore = useUserStore();
|
|
||||||
// 上传文件
|
|
||||||
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 formData = reactive({
|
const formData = reactive({
|
||||||
@ -191,15 +152,7 @@ const formRules = reactive<any>({
|
|||||||
|
|
||||||
// 获取详情
|
// 获取详情
|
||||||
const setFormData = async (data: Record<any, 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)
|
|
||||||
}
|
|
||||||
project_name.value = data.project_name
|
project_name.value = data.project_name
|
||||||
custom_name.value = data.custom_name
|
custom_name.value = data.custom_name
|
||||||
project_code.value = data.project_code
|
project_code.value = data.project_code
|
||||||
@ -225,9 +178,7 @@ const getDetail = async (row: Record<string, any>) => {
|
|||||||
|
|
||||||
// 提交按钮
|
// 提交按钮
|
||||||
const handleSubmit = async () => {
|
const handleSubmit = async () => {
|
||||||
if (formDataannex.length > 0) {
|
|
||||||
formData.annex = formDataannex.map((item) => item.uri)
|
|
||||||
}
|
|
||||||
await formRef.value?.validate()
|
await formRef.value?.validate()
|
||||||
const data = { ...formData, }
|
const data = { ...formData, }
|
||||||
mode.value == 'edit'
|
mode.value == 'edit'
|
||||||
|
@ -33,6 +33,7 @@
|
|||||||
<el-col :span="8">
|
<el-col :span="8">
|
||||||
<el-form-item label="合同类型" prop="contract_type"
|
<el-form-item label="合同类型" prop="contract_type"
|
||||||
:rules="[{ required: true, message: '不可为空', trigger: 'change' }]">
|
:rules="[{ required: true, message: '不可为空', trigger: 'change' }]">
|
||||||
|
|
||||||
<el-select class="flex-1" v-model="formData.contract_type" clearable placeholder="请选择合同类型">
|
<el-select class="flex-1" v-model="formData.contract_type" clearable placeholder="请选择合同类型">
|
||||||
<el-option v-for="(item, index) in dictData.contract_type" :key="index"
|
<el-option v-for="(item, index) in dictData.contract_type" :key="index"
|
||||||
:label="item.name" :value="parseInt(item.value)" />
|
:label="item.name" :value="parseInt(item.value)" />
|
||||||
@ -100,7 +101,6 @@
|
|||||||
<el-input v-model="business_director_name" readonly clearable placeholder="请输入业务负责人" />
|
<el-input v-model="business_director_name" readonly clearable placeholder="请输入业务负责人" />
|
||||||
</el-form-item></el-col>
|
</el-form-item></el-col>
|
||||||
<el-col :span="24">
|
<el-col :span="24">
|
||||||
|
|
||||||
<el-form-item label="合同状态" prop="contract_status"
|
<el-form-item label="合同状态" prop="contract_status"
|
||||||
:rules="[{ required: true, message: '不可为空', trigger: 'change' }]">
|
:rules="[{ required: true, message: '不可为空', trigger: 'change' }]">
|
||||||
<el-radio-group v-model="formData.contract_status" placeholder="请选择合同状态">
|
<el-radio-group v-model="formData.contract_status" placeholder="请选择合同状态">
|
||||||
@ -119,13 +119,14 @@
|
|||||||
value-format="YYYY-MM-DD" placeholder="选择合同有效期">
|
value-format="YYYY-MM-DD" placeholder="选择合同有效期">
|
||||||
</el-date-picker>
|
</el-date-picker>
|
||||||
</el-form-item></el-col><el-col :span="8">
|
</el-form-item></el-col><el-col :span="8">
|
||||||
|
|
||||||
<el-form-item label="签约日期" prop="contract_date"
|
<el-form-item label="签约日期" prop="contract_date"
|
||||||
:rules="[{ required: true, message: '不可为空', trigger: 'change' }]">
|
:rules="[{ required: true, message: '不可为空', trigger: 'change' }]">
|
||||||
<el-date-picker class="flex-1 !flex" v-model="formData.contract_date" clearable type="date"
|
<el-date-picker class="flex-1 !flex" v-model="formData.contract_date" clearable type="date"
|
||||||
value-format="YYYY-MM-DD" placeholder="选择签约日期">
|
value-format="YYYY-MM-DD" placeholder="选择签约日期">
|
||||||
</el-date-picker>
|
</el-date-picker>
|
||||||
</el-form-item></el-col><el-col :span="8">
|
</el-form-item>
|
||||||
|
</el-col>
|
||||||
|
<el-col :span="8">
|
||||||
|
|
||||||
<el-form-item label="主要条款" prop="main_content">
|
<el-form-item label="主要条款" prop="main_content">
|
||||||
<el-input v-model="formData.main_content" clearable placeholder="请输入主要条款" />
|
<el-input v-model="formData.main_content" clearable placeholder="请输入主要条款" />
|
||||||
@ -134,64 +135,12 @@
|
|||||||
<el-input v-model="formData.remark" clearable placeholder="请输入备注" />
|
<el-input v-model="formData.remark" clearable placeholder="请输入备注" />
|
||||||
</el-form-item></el-col><el-col :span="24">
|
</el-form-item></el-col><el-col :span="24">
|
||||||
<el-form-item label="附件">
|
<el-form-item label="附件">
|
||||||
<el-upload
|
<uploadAnnex :formData="formData"></uploadAnnex>
|
||||||
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-form-item>
|
||||||
</el-col>
|
</el-col>
|
||||||
</el-row>
|
</el-row>
|
||||||
<div style="margin-bottom: 30px;">回款计划</div>
|
<formTable :formData="formData.returned_money" :config="tableConfig" :dictData="dictData"></formTable>
|
||||||
<div style="margin-bottom: 30px;">
|
|
||||||
<el-table :data="paymentList">
|
|
||||||
<el-table-column label="序号">
|
|
||||||
<template #default="{ row }">
|
|
||||||
<el-button @click="handleAdd(row)">+</el-button>
|
|
||||||
<el-button @click="handleDelete(row)">-</el-button>
|
|
||||||
</template>
|
|
||||||
</el-table-column>
|
|
||||||
<el-table-column label="期次" prop="name1">
|
|
||||||
|
|
||||||
<template #default="{ row }">
|
|
||||||
<el-select v-model="row.period" clearable placeholder="请选择期次">
|
|
||||||
<el-option v-for="(item, index) in dictData.pay_period " :key="index"
|
|
||||||
:label="item.name" :value="item.value" />
|
|
||||||
</el-select>
|
|
||||||
</template>
|
|
||||||
</el-table-column>
|
|
||||||
<el-table-column label="计划回款日期" prop="return_date">
|
|
||||||
|
|
||||||
<template #default="{ row }">
|
|
||||||
<el-date-picker v-model="row.return_date" clearable type="date"
|
|
||||||
value-format="YYYY-MM-DD" placeholder="选择签订日期">
|
|
||||||
</el-date-picker>
|
|
||||||
</template></el-table-column>
|
|
||||||
<el-table-column label="金额" prop="amount">
|
|
||||||
|
|
||||||
<template #default="{ row }"> <el-input v-model="row.amount" />
|
|
||||||
</template></el-table-column>
|
|
||||||
|
|
||||||
<el-table-column label="备注" prop="remark">
|
|
||||||
|
|
||||||
<template #default="{ row }">
|
|
||||||
<el-input v-model="row.remark" />
|
|
||||||
</template>
|
|
||||||
</el-table-column>
|
|
||||||
</el-table>
|
|
||||||
</div>
|
|
||||||
</el-form>
|
</el-form>
|
||||||
<el-dialog v-model="showDialog" title="选择客户" width="70%">
|
<el-dialog v-model="showDialog" title="选择客户" width="70%">
|
||||||
<customDialog @customEvent="customEvent"></customDialog>
|
<customDialog @customEvent="customEvent"></customDialog>
|
||||||
@ -207,7 +156,6 @@
|
|||||||
</el-dialog>
|
</el-dialog>
|
||||||
</div>
|
</div>
|
||||||
<personnelselector ref="personnel" @confirm="submituser" type="1"></personnelselector>
|
<personnelselector ref="personnel" @confirm="submituser" type="1"></personnelselector>
|
||||||
<!-- <reviewprocess /> -->
|
|
||||||
</popup>
|
</popup>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
@ -220,23 +168,21 @@ import biddocumentTable from "@/components/biddocument/index.vue"
|
|||||||
import projectTable from "@/components/project/index.vue"
|
import projectTable from "@/components/project/index.vue"
|
||||||
import personnelselector from '@/components/personnelselector/index.vue'
|
import personnelselector from '@/components/personnelselector/index.vue'
|
||||||
import { apiContractAdd, apiContractEdit, apiContractDetail } from '@/api/contract'
|
import { apiContractAdd, apiContractEdit, apiContractDetail } from '@/api/contract'
|
||||||
import { apireturnedLists } from "@/api/remittance.ts"
|
import { apireturnedLists, apireturnedDelete } from "@/api/remittance.ts"
|
||||||
import { useDictData } from '@/hooks/useDictOptions'
|
import { useDictData } from '@/hooks/useDictOptions'
|
||||||
|
import { toChinesNum } from "@/utils/util";
|
||||||
|
import feedback from '@/utils/feedback'
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
let props = defineProps({
|
let props = defineProps({
|
||||||
project: Object
|
project: Object
|
||||||
})
|
})
|
||||||
const { dictData } = useDictData('contract_type,contract_pricing_method,contract_status,pay_period')
|
|
||||||
|
|
||||||
const emit = defineEmits(['success', 'close'])
|
const emit = defineEmits(['success', 'close'])
|
||||||
const formRef = shallowRef<FormInstance>()
|
const formRef = shallowRef<FormInstance>()
|
||||||
const popupRef = shallowRef<InstanceType<typeof Popup>>()
|
const popupRef = shallowRef<InstanceType<typeof Popup>>()
|
||||||
const mode = ref('add')
|
const mode = ref('add')
|
||||||
const formDataannex = reactive([])
|
|
||||||
import configs from "@/config"
|
|
||||||
const base_url = configs.baseUrl + configs.urlPrefix
|
|
||||||
import useUserStore from "@/stores/modules/user";
|
|
||||||
import { toChinesNum } from "@/utils/util";
|
|
||||||
const showDialog = ref(false)
|
const showDialog = ref(false)
|
||||||
const showDialog1 = ref(false)
|
const showDialog1 = ref(false)
|
||||||
const showDialog2 = ref(false)
|
const showDialog2 = ref(false)
|
||||||
@ -247,12 +193,7 @@ const bidding_code = ref('')
|
|||||||
const amount_daxie = ref('')
|
const amount_daxie = ref('')
|
||||||
const project_id = ref('')
|
const project_id = ref('')
|
||||||
const business_director_name = ref('')
|
const business_director_name = ref('')
|
||||||
const list1 = reactive([])
|
|
||||||
const list2 = reactive([])
|
|
||||||
const paymentList = reactive([{}])
|
|
||||||
const personnel = ref<any>()
|
const personnel = ref<any>()
|
||||||
import feedback from '@/utils/feedback'
|
|
||||||
const userStore = useUserStore();
|
|
||||||
//验证
|
//验证
|
||||||
const checkPhone = (rule: any, value: any, callback: (arg0: Error) => any) => {
|
const checkPhone = (rule: any, value: any, callback: (arg0: Error) => any) => {
|
||||||
|
|
||||||
@ -272,36 +213,10 @@ const userEmail = (rule: any, value: string, callback: (arg0: Error | undefined)
|
|||||||
}
|
}
|
||||||
|
|
||||||
};
|
};
|
||||||
const handleAdd = (row: any) => {
|
|
||||||
// 在 row 后面插入一行数据
|
|
||||||
const index = paymentList.indexOf(row);
|
|
||||||
paymentList.splice(index + 1, 0, {});
|
|
||||||
};
|
|
||||||
|
|
||||||
const handleDelete = (row: any) => {
|
const { dictData } = useDictData('contract_type,contract_pricing_method,contract_status,pay_period')
|
||||||
// 删除 row
|
|
||||||
const index = paymentList.indexOf(row);
|
|
||||||
paymentList.splice(index, 1);
|
|
||||||
};
|
|
||||||
// 上传文件
|
|
||||||
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 formData = reactive({
|
const formData = reactive({
|
||||||
id: '',
|
id: '',
|
||||||
@ -336,6 +251,40 @@ const formData = reactive({
|
|||||||
annex: [],
|
annex: [],
|
||||||
})
|
})
|
||||||
|
|
||||||
|
|
||||||
|
const tableConfig = reactive(
|
||||||
|
{
|
||||||
|
title: "回款计划",
|
||||||
|
tableConfig: [
|
||||||
|
|
||||||
|
{
|
||||||
|
label: "期次",
|
||||||
|
value: 'period',
|
||||||
|
select: "pay_period"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
label: "计划回款日期",
|
||||||
|
value: 'return_date',
|
||||||
|
date: true
|
||||||
|
},
|
||||||
|
|
||||||
|
{
|
||||||
|
label: "金额",
|
||||||
|
value: 'amount',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
label: "备注",
|
||||||
|
value: 'remark',
|
||||||
|
},
|
||||||
|
|
||||||
|
|
||||||
|
],
|
||||||
|
deleteApi: apireturnedDelete,
|
||||||
|
dictData
|
||||||
|
}
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
//打开弹窗
|
//打开弹窗
|
||||||
|
|
||||||
const userclick = () => {
|
const userclick = () => {
|
||||||
@ -415,18 +364,6 @@ const formRules = reactive<any>({
|
|||||||
|
|
||||||
// 获取详情
|
// 获取详情
|
||||||
const setFormData = async (data: Record<any, 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) {
|
for (const key in formData) {
|
||||||
if (data[key] != null && data[key] != undefined) {
|
if (data[key] != null && data[key] != undefined) {
|
||||||
//@ts-ignore
|
//@ts-ignore
|
||||||
@ -442,11 +379,7 @@ const setFormData = async (data: Record<any, any>) => {
|
|||||||
bidding_code.value = data.bid_document_no
|
bidding_code.value = data.bid_document_no
|
||||||
business_director_name.value = data.business_director_name
|
business_director_name.value = data.business_director_name
|
||||||
let res = await apireturnedLists({ contract_id: data.id })
|
let res = await apireturnedLists({ contract_id: data.id })
|
||||||
paymentList.splice(0, 9999)
|
formData.returned_money = res.lists
|
||||||
res.lists.forEach((item: any) => {
|
|
||||||
paymentList.push(item)
|
|
||||||
})
|
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -460,18 +393,6 @@ const getDetail = async (row: Record<string, any>) => {
|
|||||||
|
|
||||||
// 提交按钮
|
// 提交按钮
|
||||||
const handleSubmit = async () => {
|
const handleSubmit = async () => {
|
||||||
if (formDataannex.length > 0) {
|
|
||||||
formData.annex = formDataannex.map((item) => item.uri)
|
|
||||||
}
|
|
||||||
if (paymentList.length > 0) {
|
|
||||||
formData.returned_money = paymentList.map((item) => ({
|
|
||||||
'id': item.id,
|
|
||||||
'period': item.period,
|
|
||||||
'remark': item.remark,
|
|
||||||
'amount': item.amount,
|
|
||||||
'return_date': item.return_date,
|
|
||||||
}))
|
|
||||||
}
|
|
||||||
await formRef.value?.validate()
|
await formRef.value?.validate()
|
||||||
const data = { ...formData, }
|
const data = { ...formData, }
|
||||||
mode.value == 'edit'
|
mode.value == 'edit'
|
||||||
|
@ -26,7 +26,7 @@
|
|||||||
<el-col :span="8">
|
<el-col :span="8">
|
||||||
<el-form-item label="合同类型" prop="contract_id"
|
<el-form-item label="合同类型" prop="contract_id"
|
||||||
:rules="[{ required: true, message: '不可为空', trigger: 'blur' }]">
|
:rules="[{ required: true, message: '不可为空', trigger: 'blur' }]">
|
||||||
<el-select v-model="contract_type" clearable disabled placeholder="请选择合同类型">
|
<el-select v-model="contract_type" clearable disabled placeholder="请选择合同类型" class=" flex-1">
|
||||||
<el-option v-for="(item, index) in dictData.contract_type" :key="index"
|
<el-option v-for="(item, index) in dictData.contract_type" :key="index"
|
||||||
:label="item.name" :value="parseInt(item.value)" />
|
:label="item.name" :value="parseInt(item.value)" />
|
||||||
</el-select>
|
</el-select>
|
||||||
@ -95,44 +95,10 @@
|
|||||||
<el-input v-model="formData.negotiation_detail" clearable placeholder="请输入具体说明" />
|
<el-input v-model="formData.negotiation_detail" clearable placeholder="请输入具体说明" />
|
||||||
</el-form-item></el-col><el-col :span="24">
|
</el-form-item></el-col><el-col :span="24">
|
||||||
<el-form-item label="签证报价表" prop="negotiation_quotation">
|
<el-form-item label="签证报价表" prop="negotiation_quotation">
|
||||||
<!-- <el-input v-model="formData.negotiation_quotation" clearable placeholder="请输入签证报价表" /> -->
|
<uploadAnnex :formData="formData" value="negotiation_quotation"></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_four1" ref="upload">
|
|
||||||
<el-button type="primary">
|
|
||||||
上传
|
|
||||||
</el-button>
|
|
||||||
</el-upload>
|
|
||||||
|
|
||||||
<div>
|
|
||||||
<div v-for="(item, index) in formDataannex1" 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="delFileFn1(index)">x</span>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</el-form-item></el-col><el-col :span="24">
|
</el-form-item></el-col><el-col :span="24">
|
||||||
<el-form-item label="洽商依据" prop="negotiation_basis">
|
<el-form-item label="洽商依据" prop="negotiation_basis">
|
||||||
|
<uploadAnnex :formData="formData" value="negotiation_basis"></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_four2" ref="upload">
|
|
||||||
<el-button type="primary">
|
|
||||||
上传
|
|
||||||
</el-button>
|
|
||||||
</el-upload>
|
|
||||||
|
|
||||||
<div>
|
|
||||||
<div v-for="(item, index) in formDataannex2" 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="delFileFn2(index)">x</span>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</el-form-item></el-col>
|
</el-form-item></el-col>
|
||||||
</el-row>
|
</el-row>
|
||||||
|
|
||||||
@ -154,17 +120,10 @@ import { useDictData } from '@/hooks/useDictOptions'
|
|||||||
let props = defineProps({
|
let props = defineProps({
|
||||||
project: Object
|
project: Object
|
||||||
})
|
})
|
||||||
|
|
||||||
const { dictData } = useDictData('negotiation_type,contract_type,contract_pricing_method')
|
const { dictData } = useDictData('negotiation_type,contract_type,contract_pricing_method')
|
||||||
|
|
||||||
const emit = defineEmits(['success', 'close'])
|
const emit = defineEmits(['success', 'close'])
|
||||||
const formRef = shallowRef<FormInstance>()
|
const formRef = shallowRef<FormInstance>()
|
||||||
const popupRef = shallowRef<InstanceType<typeof Popup>>()
|
const popupRef = shallowRef<InstanceType<typeof Popup>>()
|
||||||
|
|
||||||
import configs from "@/config"
|
|
||||||
const base_url = configs.baseUrl + configs.urlPrefix
|
|
||||||
import useUserStore from "@/stores/modules/user";
|
|
||||||
const userStore = useUserStore();
|
|
||||||
const mode = ref('add')
|
const mode = ref('add')
|
||||||
const showDialog = ref(false)
|
const showDialog = ref(false)
|
||||||
const contract_name = ref('')
|
const contract_name = ref('')
|
||||||
@ -176,50 +135,13 @@ const contract_type = ref('')
|
|||||||
const profit_rate = ref(0)
|
const profit_rate = ref(0)
|
||||||
const negotiation_no = ref('')
|
const negotiation_no = ref('')
|
||||||
const profit = ref(0)
|
const profit = ref(0)
|
||||||
const formDataannex1 = reactive([])
|
|
||||||
const formDataannex2 = reactive([])
|
|
||||||
const contract_pricing_method = ref('')
|
const contract_pricing_method = ref('')
|
||||||
|
|
||||||
// 弹窗标题
|
// 弹窗标题
|
||||||
const popupTitle = computed(() => {
|
const popupTitle = computed(() => {
|
||||||
return mode.value == 'edit' ? '编辑合同洽商' : '新增合同洽商'
|
return mode.value == 'edit' ? '编辑合同洽商' : '新增合同洽商'
|
||||||
})
|
})
|
||||||
// 上传文件
|
|
||||||
const handleAvatarSuccess_four1 = (
|
|
||||||
response,
|
|
||||||
uploadFile
|
|
||||||
) => {
|
|
||||||
if (response.code == 0) {
|
|
||||||
ElMessage.error(response.msg);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
formDataannex1.push(
|
|
||||||
{ uri: response.data.uri, name: response.data.name }
|
|
||||||
|
|
||||||
);
|
|
||||||
};
|
|
||||||
// 删除上传的文件
|
|
||||||
const delFileFn1 = (index: number) => {
|
|
||||||
formDataannex1.splice(index, 1)
|
|
||||||
}
|
|
||||||
// 上传文件
|
|
||||||
const handleAvatarSuccess_four2 = (
|
|
||||||
response,
|
|
||||||
uploadFile
|
|
||||||
) => {
|
|
||||||
if (response.code == 0) {
|
|
||||||
ElMessage.error(response.msg);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
formDataannex2.push(
|
|
||||||
{ uri: response.data.uri, name: response.data.name }
|
|
||||||
|
|
||||||
);
|
|
||||||
};
|
|
||||||
// 删除上传的文件
|
|
||||||
const delFileFn2 = (index: number) => {
|
|
||||||
formDataannex2.splice(index, 1)
|
|
||||||
}
|
|
||||||
// 表单数据
|
// 表单数据
|
||||||
const formData = reactive({
|
const formData = reactive({
|
||||||
id: '',
|
id: '',
|
||||||
@ -304,28 +226,6 @@ watch(
|
|||||||
|
|
||||||
// 获取详情
|
// 获取详情
|
||||||
const setFormData = async (data: Record<any, any>) => {
|
const setFormData = async (data: Record<any, any>) => {
|
||||||
if (data.negotiation_quotation && data.negotiation_quotation.length > 0) {
|
|
||||||
|
|
||||||
const arry1 = data.negotiation_quotation.map((item: any, index: any) => {
|
|
||||||
return {
|
|
||||||
name: `文件${index + 1}`,
|
|
||||||
uri: item
|
|
||||||
};
|
|
||||||
});
|
|
||||||
Object.assign(formDataannex1, arry1)
|
|
||||||
|
|
||||||
}
|
|
||||||
if (data.negotiation_basis && data.negotiation_basis.length > 0) {
|
|
||||||
|
|
||||||
const arry1 = data.negotiation_basis.map((item: any, index: any) => {
|
|
||||||
return {
|
|
||||||
name: `文件${index + 1}`,
|
|
||||||
uri: item
|
|
||||||
};
|
|
||||||
});
|
|
||||||
Object.assign(formDataannex2, arry1)
|
|
||||||
|
|
||||||
}
|
|
||||||
for (const key in formData) {
|
for (const key in formData) {
|
||||||
if (data[key] != null && data[key] != undefined) {
|
if (data[key] != null && data[key] != undefined) {
|
||||||
//@ts-ignore
|
//@ts-ignore
|
||||||
@ -353,12 +253,7 @@ const getDetail = async (row: Record<string, any>) => {
|
|||||||
|
|
||||||
// 提交按钮
|
// 提交按钮
|
||||||
const handleSubmit = async () => {
|
const handleSubmit = async () => {
|
||||||
if (formDataannex1.length > 0) {
|
|
||||||
formData.negotiation_quotation = formDataannex1.map((item) => item.uri)
|
|
||||||
}
|
|
||||||
if (formDataannex2.length > 0) {
|
|
||||||
formData.negotiation_basis = formDataannex2.map((item) => item.uri)
|
|
||||||
}
|
|
||||||
await formRef.value?.validate()
|
await formRef.value?.validate()
|
||||||
const data = { ...formData, }
|
const data = { ...formData, }
|
||||||
mode.value == 'edit'
|
mode.value == 'edit'
|
||||||
|
@ -196,7 +196,7 @@
|
|||||||
</div>
|
</div>
|
||||||
</el-tab-pane>
|
</el-tab-pane>
|
||||||
<!-- <el-tab-pane label="订单" name="new_name_5">Task</el-tab-pane> -->
|
<!-- <el-tab-pane label="订单" name="new_name_5">Task</el-tab-pane> -->
|
||||||
<el-tab-pane label="发票" name="new_name_6">Task</el-tab-pane>
|
<!-- <el-tab-pane label="发票" name="new_name_6">Task</el-tab-pane> -->
|
||||||
<el-tab-pane label="回款" name="new_name_7">
|
<el-tab-pane label="回款" name="new_name_7">
|
||||||
<div class="tit" style="margin:20px 0">回款计划</div>
|
<div class="tit" style="margin:20px 0">回款计划</div>
|
||||||
<div>
|
<div>
|
||||||
|
@ -3,34 +3,30 @@
|
|||||||
<popup ref="popupRef" :title="popupTitle" :async="true" width="550px" @confirm="handleSubmit"
|
<popup ref="popupRef" :title="popupTitle" :async="true" width="550px" @confirm="handleSubmit"
|
||||||
@close="handleClose">
|
@close="handleClose">
|
||||||
<el-form ref="formRef" :model="formData" label-width="90px" :rules="formRules">
|
<el-form ref="formRef" :model="formData" label-width="90px" :rules="formRules">
|
||||||
<el-row>
|
<el-form-item label="客户名称" prop="custom_name">
|
||||||
<el-form-item label="客户名称" prop="custom_name">
|
<el-input v-model="formData.custom_name" clearable placeholder="请选择客户" @click="showDialog = true" />
|
||||||
<el-input v-model="formData.custom_name" clearable placeholder="请选择客户"
|
</el-form-item>
|
||||||
@click="showDialog = true" />
|
<el-form-item label="姓名" prop="name">
|
||||||
</el-form-item>
|
<el-input v-model="formData.name" clearable placeholder="请输入姓名" />
|
||||||
<el-form-item label="姓名" prop="name">
|
</el-form-item>
|
||||||
<el-input v-model="formData.name" clearable placeholder="请输入姓名" />
|
<el-form-item label="职位" prop="position">
|
||||||
</el-form-item>
|
<el-input v-model="formData.position" clearable placeholder="请输入职位" />
|
||||||
<el-form-item label="职位" prop="position">
|
</el-form-item>
|
||||||
<el-input v-model="formData.position" clearable placeholder="请输入职位" />
|
<el-form-item label="手机" prop="phone">
|
||||||
</el-form-item>
|
<el-input v-model="formData.phone" clearable placeholder="请输入手机" />
|
||||||
<el-form-item label="手机" prop="phone">
|
</el-form-item>
|
||||||
<el-input v-model="formData.phone" clearable placeholder="请输入手机" />
|
<el-form-item label="电话" prop="telephone">
|
||||||
</el-form-item>
|
<el-input v-model="formData.telephone" clearable placeholder="请输入电话" />
|
||||||
<el-form-item label="电话" prop="telephone">
|
</el-form-item>
|
||||||
<el-input v-model="formData.telephone" clearable placeholder="请输入电话" />
|
<el-form-item label="邮箱" prop="email">
|
||||||
</el-form-item>
|
<el-input v-model="formData.email" clearable placeholder="请输入邮箱" />
|
||||||
<el-form-item label="邮箱" prop="email">
|
</el-form-item>
|
||||||
<el-input v-model="formData.email" clearable placeholder="请输入邮箱" />
|
<el-form-item label="备注" prop="notes">
|
||||||
</el-form-item>
|
<el-input v-model="formData.notes" clearable placeholder="请输入备注" type="textarea" />
|
||||||
<el-form-item label="备注" prop="notes">
|
</el-form-item>
|
||||||
<el-input v-model="formData.notes" clearable placeholder="请输入备注" />
|
<el-form-item label="附件">
|
||||||
</el-form-item>
|
<uploadAnnex :formData="formData"></uploadAnnex>
|
||||||
<el-form-item label="附件">
|
</el-form-item>
|
||||||
<uploadAnnex :formData="formData"></uploadAnnex>
|
|
||||||
|
|
||||||
</el-form-item>
|
|
||||||
</el-row>
|
|
||||||
<el-dialog v-model="showDialog" title="选择客户" width="70%">
|
<el-dialog v-model="showDialog" title="选择客户" width="70%">
|
||||||
<customDialog @customEvent="customEvent"></customDialog>
|
<customDialog @customEvent="customEvent"></customDialog>
|
||||||
</el-dialog>
|
</el-dialog>
|
||||||
@ -48,16 +44,6 @@ import { apiCustomContactsAdd, apiCustomContactsEdit, apiCustomContactsDetail }
|
|||||||
import { apiCustomLists } from '@/api/custom'
|
import { apiCustomLists } from '@/api/custom'
|
||||||
import type { PropType } from 'vue'
|
import type { PropType } from 'vue'
|
||||||
|
|
||||||
const handleAvatarSuccess_four = (response: any) => {
|
|
||||||
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) }
|
|
||||||
|
|
||||||
|
|
||||||
defineProps({
|
defineProps({
|
||||||
dictData: {
|
dictData: {
|
||||||
type: Object as PropType<Record<string, any[]>>,
|
type: Object as PropType<Record<string, any[]>>,
|
||||||
@ -147,12 +133,6 @@ const handleSubmit = async () => {
|
|||||||
emit('success')
|
emit('success')
|
||||||
}
|
}
|
||||||
|
|
||||||
// 选择客户
|
|
||||||
const handleCurrentChange = (e: any) => {
|
|
||||||
formData.custom_name = e.name
|
|
||||||
formData.custom_id = e.id
|
|
||||||
showDialog.value = false
|
|
||||||
}
|
|
||||||
|
|
||||||
//打开弹窗
|
//打开弹窗
|
||||||
const open = (type = 'add') => {
|
const open = (type = 'add') => {
|
||||||
|
@ -1,8 +1,8 @@
|
|||||||
<template>
|
<template>
|
||||||
<div class="edit-popup">
|
<div class="edit-popup">
|
||||||
<popup ref="popupRef" :title="popupTitle" :async="true" width="60%" @confirm="handleSubmit"
|
<popup ref="popupRef" :title="popupTitle" :async="true" width="550px" @confirm="handleSubmit"
|
||||||
@close="handleClose">
|
@close="handleClose">
|
||||||
<el-form ref="formRef" :model="formData" label-width="90px" :rules="formRules">
|
<el-form ref="formRef" :model="formData" label-width="100px" :rules="formRules">
|
||||||
<el-form-item label="主题" prop="name">
|
<el-form-item label="主题" prop="name">
|
||||||
<el-input v-model="formData.name" clearable placeholder="请输入主题" />
|
<el-input v-model="formData.name" clearable placeholder="请输入主题" />
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
@ -28,9 +28,9 @@
|
|||||||
<el-input v-model="formData.executor" clearable placeholder="请输入执行人" />
|
<el-input v-model="formData.executor" clearable placeholder="请输入执行人" />
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<el-form-item label="行动描述" prop="description">
|
<el-form-item label="行动描述" prop="description">
|
||||||
<el-input v-model="formData.description" clearable placeholder="请输入行动描述" />
|
<el-input v-model="formData.description" clearable placeholder="请输入行动描述" type="textarea" />
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<el-form-item label="附件/现场照片" prop="annex">
|
<el-form-item label="附件" prop="annex">
|
||||||
<uploadAnnex :formData="formData"></uploadAnnex>
|
<uploadAnnex :formData="formData"></uploadAnnex>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<el-form-item label="位置" prop="coordinate">
|
<el-form-item label="位置" prop="coordinate">
|
||||||
@ -54,7 +54,6 @@
|
|||||||
import type { FormInstance } from 'element-plus'
|
import type { FormInstance } from 'element-plus'
|
||||||
import Popup from '@/components/popup/index.vue'
|
import Popup from '@/components/popup/index.vue'
|
||||||
import { apiCustomFollowAdd, apiCustomFollowEdit, apiCustomFollowDetail } from '@/api/custom_follow'
|
import { apiCustomFollowAdd, apiCustomFollowEdit, apiCustomFollowDetail } from '@/api/custom_follow'
|
||||||
import { timeFormat } from '@/utils/util'
|
|
||||||
import type { PropType } from 'vue'
|
import type { PropType } from 'vue'
|
||||||
import { usePaging } from '@/hooks/usePaging'
|
import { usePaging } from '@/hooks/usePaging'
|
||||||
import { apiCustomLists } from '@/api/custom'
|
import { apiCustomLists } from '@/api/custom'
|
||||||
|
@ -43,18 +43,6 @@
|
|||||||
<el-table-column label="提交时间" prop="submission_time" show-overflow-tooltip />
|
<el-table-column label="提交时间" prop="submission_time" show-overflow-tooltip />
|
||||||
<el-table-column label="方案内容" prop="solution_content" show-overflow-tooltip />
|
<el-table-column label="方案内容" prop="solution_content" show-overflow-tooltip />
|
||||||
<el-table-column label="客户反馈" prop="customer_feedback" show-overflow-tooltip />
|
<el-table-column label="客户反馈" prop="customer_feedback" show-overflow-tooltip />
|
||||||
<el-table-column label="附件" prop="annex" show-overflow-tooltip>
|
|
||||||
<template #default="{ row }">
|
|
||||||
<div v-if="row.annex && row.annex.length > 0">
|
|
||||||
<div v-for="(item, i) in row.annex " :key='i'>
|
|
||||||
<el-link :href="item" target="_blank">文件{{ i + 1 }}查看</el-link>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div v-else>
|
|
||||||
暂无文件
|
|
||||||
</div>
|
|
||||||
</template>
|
|
||||||
</el-table-column>
|
|
||||||
<el-table-column label="操作" width="160" fixed="right">
|
<el-table-column label="操作" width="160" fixed="right">
|
||||||
<template #default="{ row }">
|
<template #default="{ row }">
|
||||||
<el-button v-perms="['custom.customer_demand_solution/edit']" type="primary" link
|
<el-button v-perms="['custom.customer_demand_solution/edit']" type="primary" link
|
||||||
@ -154,4 +142,3 @@ const handledetail = async (data: any) => {
|
|||||||
|
|
||||||
getLists()
|
getLists()
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
|
@ -21,7 +21,7 @@
|
|||||||
|
|
||||||
<el-col :span="8">
|
<el-col :span="8">
|
||||||
<el-form-item label="项目名称" prop="project_id" @click="showDialog1 = true">
|
<el-form-item label="项目名称" prop="project_id" @click="showDialog1 = true">
|
||||||
<el-input v-model="project_name" clearable readonly placeholder="系统自动填写" />
|
<el-input v-model="project_name" clearable readonly placeholder="点击选择项目" />
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
</el-col> <el-col :span="8">
|
</el-col> <el-col :span="8">
|
||||||
<el-form-item label="项目编码" prop="contract_id">
|
<el-form-item label="项目编码" prop="contract_id">
|
||||||
@ -53,29 +53,9 @@
|
|||||||
<el-input v-model="formData.remark" type="textarea" clearable placeholder="请输入备注" />
|
<el-input v-model="formData.remark" type="textarea" clearable placeholder="请输入备注" />
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
</el-col>
|
</el-col>
|
||||||
|
|
||||||
|
|
||||||
<el-col :span="24">
|
<el-col :span="24">
|
||||||
|
|
||||||
<el-form-item label="附件">
|
<el-form-item label="附件">
|
||||||
<el-upload
|
<uploadAnnex :formData="formData"></uploadAnnex>
|
||||||
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-form-item>
|
||||||
</el-col>
|
</el-col>
|
||||||
</el-row>
|
</el-row>
|
||||||
@ -84,7 +64,7 @@
|
|||||||
<el-col :span="24" v-if="mode == 'add'">
|
<el-col :span="24" v-if="mode == 'add'">
|
||||||
<div style=" display: flex;justify-content: flex-end;margin-bottom: 30px;">
|
<div style=" display: flex;justify-content: flex-end;margin-bottom: 30px;">
|
||||||
<el-button @click="showDialog = true" type="primary" plain>选择材料</el-button>
|
<el-button @click="showDialog = true" type="primary" plain>选择材料</el-button>
|
||||||
|
<toolTip content="可在项目管理-项目预算-材料预算-材料预算添加"></toolTip>
|
||||||
</div>
|
</div>
|
||||||
</el-col>
|
</el-col>
|
||||||
<el-row v-if="mode == 'add'">
|
<el-row v-if="mode == 'add'">
|
||||||
@ -169,50 +149,24 @@
|
|||||||
import materialDialog from '@/components/material_budget_detail/index.vue'
|
import materialDialog from '@/components/material_budget_detail/index.vue'
|
||||||
import type { FormInstance } from 'element-plus'
|
import type { FormInstance } from 'element-plus'
|
||||||
import Popup from '@/components/popup/index.vue'
|
import Popup from '@/components/popup/index.vue'
|
||||||
import { toChinesNum } from "@/utils/util";
|
|
||||||
import projectDialog from '@/components/project/index.vue'
|
import projectDialog from '@/components/project/index.vue'
|
||||||
import { materialrequestAdd, materialrequestEdit, materialrequestDetail } from '@/api/material_purchase_request'
|
import { materialrequestAdd, materialrequestEdit, materialrequestDetail } from '@/api/material_purchase_request'
|
||||||
import { materialrequestDetailLists } from '@/api/material_purchase_request_detail'
|
import { materialrequestDetailLists } from '@/api/material_purchase_request_detail'
|
||||||
|
|
||||||
import { getAllProjectTypes } from '@/api/projecttype'
|
|
||||||
import { timeFormat } from '@/utils/util'
|
|
||||||
import { isEmail, isIdCard, isPhone } from '@/utils/validate'
|
|
||||||
import type { PropType } from 'vue'
|
import type { PropType } from 'vue'
|
||||||
import configs from "@/config"
|
|
||||||
import useUserStore from "@/stores/modules/user";
|
|
||||||
const list1 = reactive([])
|
const list1 = reactive([])
|
||||||
const list2 = reactive([])
|
const list2 = reactive([])
|
||||||
import { deptAll } from '@/api/org/department'
|
import { deptAll } from '@/api/org/department'
|
||||||
import { getAll } from '@/api/org/organization'
|
import { getAll } from '@/api/org/organization'
|
||||||
|
|
||||||
|
|
||||||
const base_url = configs.baseUrl + configs.urlPrefix
|
|
||||||
const userStore = useUserStore();
|
|
||||||
const active = ref(0)
|
const active = ref(0)
|
||||||
const formDataannex = reactive([])
|
const formDataannex = reactive([])
|
||||||
const project_name = ref('')
|
const project_name = ref('')
|
||||||
const project_code = ref('')
|
const project_code = ref('')
|
||||||
|
|
||||||
const tablist1 = reactive([])
|
const tablist1 = reactive([])
|
||||||
const next = () => {
|
|
||||||
if (active.value++ > 3) active.value = 0
|
|
||||||
}
|
|
||||||
// 上传文件
|
|
||||||
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 handleAdd = (row: any) => {
|
const handleAdd = (row: any) => {
|
||||||
// 在 row 后面插入一行数据
|
// 在 row 后面插入一行数据
|
||||||
const index = tablist1.indexOf(row);
|
const index = tablist1.indexOf(row);
|
||||||
|
@ -90,29 +90,14 @@
|
|||||||
<el-input v-model="formData.remark" clearable placeholder="请输入备注" />
|
<el-input v-model="formData.remark" clearable placeholder="请输入备注" />
|
||||||
</el-form-item> </el-col> <el-col :span="8">
|
</el-form-item> </el-col> <el-col :span="8">
|
||||||
<el-form-item label="附件">
|
<el-form-item label="附件">
|
||||||
<el-upload
|
<uploadAnnex :formData="formData"></uploadAnnex>
|
||||||
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-form-item>
|
||||||
</el-col>
|
</el-col>
|
||||||
</el-row>
|
</el-row>
|
||||||
<div style=" display: flex;justify-content: flex-end;margin-bottom: 30px;">
|
<div style=" display: flex;justify-content: flex-end;margin-bottom: 30px;">
|
||||||
<el-button @click="showDialog2 = true" type="primary" :disabled="!formData.project_id"
|
<el-button @click="showDialog2 = true" type="primary" :disabled="!formData.project_id"
|
||||||
plain>选择采购申请</el-button>
|
plain>选择采购申请</el-button>
|
||||||
|
<toolTip content="可在材料管理-采购申请-采购申请添加"></toolTip>
|
||||||
</div>
|
</div>
|
||||||
<el-row>
|
<el-row>
|
||||||
<el-col :span="24">
|
<el-col :span="24">
|
||||||
@ -121,7 +106,6 @@
|
|||||||
<el-table :data="materialList">
|
<el-table :data="materialList">
|
||||||
<el-table-column label="序号">
|
<el-table-column label="序号">
|
||||||
<template #default="{ row }">
|
<template #default="{ row }">
|
||||||
<!-- <el-button @click="handleAdd1(row)">+</el-button> -->
|
|
||||||
<el-button @click="handleDelete1(row)">-</el-button>
|
<el-button @click="handleDelete1(row)">-</el-button>
|
||||||
</template>
|
</template>
|
||||||
</el-table-column>
|
</el-table-column>
|
||||||
@ -267,9 +251,8 @@ import projectTable from '@/components/project/index.vue'
|
|||||||
import suppliertable from '@/components/supplier/index.vue'
|
import suppliertable from '@/components/supplier/index.vue'
|
||||||
import { useDictData } from '@/hooks/useDictOptions'
|
import { useDictData } from '@/hooks/useDictOptions'
|
||||||
import prodctTable from '@/components/Materialprocurement_details/index.vue'
|
import prodctTable from '@/components/Materialprocurement_details/index.vue'
|
||||||
|
import { paymentplanLists, paymentplanDelete } from '@/api/paymentplan'
|
||||||
import { paymentplanLists } from '@/api/paymentplan'
|
import { apiProcurementContractDetailLists, apiProcurementContractDetailDelete } from '@/api/procurement_contract_detail'
|
||||||
import { apiProcurementContractDetailLists } from '@/api/procurement_contract_detail'
|
|
||||||
import { apiProcurementContractAdd, apiProcurementContractEdit, apiProcurementContractDetail } from '@/api/procurement_contract'
|
import { apiProcurementContractAdd, apiProcurementContractEdit, apiProcurementContractDetail } from '@/api/procurement_contract'
|
||||||
const { dictData } = useDictData('procurement_contract_type,pay_type,tax_rate,account_period,pay_period')
|
const { dictData } = useDictData('procurement_contract_type,pay_type,tax_rate,account_period,pay_period')
|
||||||
let props = defineProps({
|
let props = defineProps({
|
||||||
@ -304,38 +287,17 @@ const paymentList = reactive([
|
|||||||
|
|
||||||
|
|
||||||
])
|
])
|
||||||
const formDataannex = reactive([])
|
|
||||||
import feedback from '@/utils/feedback'
|
|
||||||
import configs from "@/config"
|
|
||||||
const base_url = configs.baseUrl + configs.urlPrefix
|
|
||||||
import useUserStore from "@/stores/modules/user";
|
|
||||||
const userStore = useUserStore();
|
|
||||||
// 上传文件
|
|
||||||
const handleAvatarSuccess_four = (
|
|
||||||
response,
|
|
||||||
uploadFile
|
|
||||||
) => {
|
|
||||||
if (response.code == 0) {
|
|
||||||
feedback.msgError(response.msg);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
formDataannex.push(
|
|
||||||
{ uri: response.data.uri, name: response.data.name }
|
|
||||||
|
|
||||||
);
|
|
||||||
};
|
|
||||||
// 删除上传的文件
|
|
||||||
const delFileFn = (index: number) => {
|
|
||||||
formDataannex.splice(index, 1)
|
|
||||||
}
|
|
||||||
const handleAdd = (row: any) => {
|
const handleAdd = (row: any) => {
|
||||||
// 在 row 后面插入一行数据
|
// 在 row 后面插入一行数据
|
||||||
const index = paymentList.indexOf(row);
|
const index = paymentList.indexOf(row);
|
||||||
paymentList.splice(index + 1, 0, {});
|
paymentList.splice(index + 1, 0, {});
|
||||||
};
|
};
|
||||||
|
|
||||||
const handleDelete = (row: any) => {
|
const handleDelete = async (row: any) => {
|
||||||
if (paymentList.length <= 1) return
|
// if (paymentList.length <= 1) return
|
||||||
|
if (row.id) await paymentplanDelete({ id: row.id })
|
||||||
// 删除 row
|
// 删除 row
|
||||||
const index = paymentList.indexOf(row);
|
const index = paymentList.indexOf(row);
|
||||||
paymentList.splice(index, 1);
|
paymentList.splice(index, 1);
|
||||||
@ -346,7 +308,8 @@ const handleAdd1 = (row: any) => {
|
|||||||
materialList.splice(index + 1, 0, {});
|
materialList.splice(index + 1, 0, {});
|
||||||
};
|
};
|
||||||
|
|
||||||
const handleDelete1 = (row: any) => {
|
const handleDelete1 = async (row: any) => {
|
||||||
|
if (row.id) await apiProcurementContractDetailDelete({ id: row.id })
|
||||||
// 删除 row
|
// 删除 row
|
||||||
const index = materialList.indexOf(row);
|
const index = materialList.indexOf(row);
|
||||||
materialList.splice(index, 1);
|
materialList.splice(index, 1);
|
||||||
@ -381,6 +344,7 @@ const procurementList = (id) => {
|
|||||||
const paymentplanList = (id: any) => {
|
const paymentplanList = (id: any) => {
|
||||||
paymentplanLists({ 'page_no': 1, 'page_size': 5000, 'contract_type': 1, 'contract_id': id }).then((res) => {
|
paymentplanLists({ 'page_no': 1, 'page_size': 5000, 'contract_type': 1, 'contract_id': id }).then((res) => {
|
||||||
const data = res.lists.map((item: any) => ({
|
const data = res.lists.map((item: any) => ({
|
||||||
|
id: item.id,
|
||||||
'period': item.period,
|
'period': item.period,
|
||||||
'pay_date': item.pay_date,
|
'pay_date': item.pay_date,
|
||||||
'amount': item.amount,
|
'amount': item.amount,
|
||||||
@ -476,15 +440,6 @@ const formRules = reactive<any>({
|
|||||||
|
|
||||||
// 获取详情
|
// 获取详情
|
||||||
const setFormData = async (data: Record<any, 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) {
|
for (const key in formData) {
|
||||||
if (data[key] != null && data[key] != undefined) {
|
if (data[key] != null && data[key] != undefined) {
|
||||||
//@ts-ignore
|
//@ts-ignore
|
||||||
@ -498,6 +453,8 @@ const setFormData = async (data: Record<any, any>) => {
|
|||||||
contract_no.value = data.contract_no
|
contract_no.value = data.contract_no
|
||||||
supplier_name.value = data.supplier_name
|
supplier_name.value = data.supplier_name
|
||||||
supplier_code.value = data.supplier_code
|
supplier_code.value = data.supplier_code
|
||||||
|
let res = await apiProcurementContractDetailLists({ contract_id: data.id })
|
||||||
|
Object.assign(materialList, res.lists)
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -91,8 +91,6 @@ const editRef = shallowRef<InstanceType<typeof EditPopup>>()
|
|||||||
// 是否显示编辑框
|
// 是否显示编辑框
|
||||||
const showEdit = ref(false)
|
const showEdit = ref(false)
|
||||||
const showDtail = ref(false)
|
const showDtail = ref(false)
|
||||||
const projectList = ref([])
|
|
||||||
const supplierList = ref([])
|
|
||||||
// 查询条件
|
// 查询条件
|
||||||
const queryParams = reactive({
|
const queryParams = reactive({
|
||||||
supplier_id: '',
|
supplier_id: '',
|
||||||
@ -147,21 +145,5 @@ const handleDetail = async (data: any) => {
|
|||||||
detailRef.value?.setFormData(res)
|
detailRef.value?.setFormData(res)
|
||||||
}
|
}
|
||||||
|
|
||||||
//获取项目
|
|
||||||
|
|
||||||
const projectlist = async () => {
|
|
||||||
let res = await apiProjectLists({ page_no: 1, page_size: 9999 })
|
|
||||||
projectList.value = res.lists
|
|
||||||
|
|
||||||
}
|
|
||||||
//获取供应商
|
|
||||||
const supplierlist = async () => {
|
|
||||||
let res = await apisupplierLists({ page_no: 1, page_size: 9999 })
|
|
||||||
supplierList.value = res.lists
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
projectlist()
|
|
||||||
supplierlist()
|
|
||||||
getLists()
|
getLists()
|
||||||
</script>
|
</script>
|
||||||
|
@ -44,10 +44,10 @@
|
|||||||
<el-table-column label="参数说明" prop="material_parameter_description" show-overflow-tooltip />
|
<el-table-column label="参数说明" prop="material_parameter_description" show-overflow-tooltip />
|
||||||
<el-table-column label="操作" width="160" fixed="right">
|
<el-table-column label="操作" width="160" fixed="right">
|
||||||
<template #default="{ row }">
|
<template #default="{ row }">
|
||||||
<el-button v-perms="['procurement_contract_detail/edit']" type="primary" link
|
<!-- <el-button v-perms="['procurement_contract_detail/edit']" type="primary" link
|
||||||
@click="handleEdit(row)">
|
@click="handleEdit(row)">
|
||||||
编辑
|
编辑
|
||||||
</el-button>
|
</el-button> -->
|
||||||
<el-button v-perms="['procurement_contract_detail/delete']" type="danger" link
|
<el-button v-perms="['procurement_contract_detail/delete']" type="danger" link
|
||||||
@click="handleDelete(row.id)">
|
@click="handleDelete(row.id)">
|
||||||
删除
|
删除
|
||||||
@ -71,7 +71,7 @@
|
|||||||
<script lang="ts" setup name="procurementContractDetailLists">
|
<script lang="ts" setup name="procurementContractDetailLists">
|
||||||
import { usePaging } from '@/hooks/usePaging'
|
import { usePaging } from '@/hooks/usePaging'
|
||||||
import { useDictData } from '@/hooks/useDictOptions'
|
import { useDictData } from '@/hooks/useDictOptions'
|
||||||
import { apiProcurementContractDetailLists, apiProcurementContractDetailDetail } from '@/api/procurement_contract_detail'
|
import { apiProcurementContractDetailLists, apiProcurementContractDetailDetail, apiProcurementContractDetailDelete } from '@/api/procurement_contract_detail'
|
||||||
import { apiProcurementContractSearch } from '@/api/procurement_contract'
|
import { apiProcurementContractSearch } from '@/api/procurement_contract'
|
||||||
import feedback from '@/utils/feedback'
|
import feedback from '@/utils/feedback'
|
||||||
import EditPopup from './edit.vue'
|
import EditPopup from './edit.vue'
|
||||||
|
@ -47,7 +47,7 @@
|
|||||||
<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.person }}</el-descriptions-item>
|
{{ formData.person }}</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.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">
|
<el-descriptions-item label="竞争对手" label-align="left" align="left" label-class-name="my-label">
|
||||||
{{ formData.competitor }}</el-descriptions-item>
|
{{ formData.competitor }}</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"> {{
|
||||||
|
@ -3,12 +3,12 @@
|
|||||||
<popup ref="popupRef" :title="popupTitle" :async="true" width="80%" @confirm="handleSubmit"
|
<popup ref="popupRef" :title="popupTitle" :async="true" width="80%" @confirm="handleSubmit"
|
||||||
@close="handleClose">
|
@close="handleClose">
|
||||||
<el-form ref="formRef" :model="formData" label-width="auto" :rules="formRules">
|
<el-form ref="formRef" :model="formData" label-width="auto" :rules="formRules">
|
||||||
<el-row :gutter="10">
|
<el-row>
|
||||||
<el-col :span="8">
|
<el-col :span="8">
|
||||||
<el-form-item label="客户名称" prop="custom_name"
|
<el-form-item label="客户名称" prop="custom_name"
|
||||||
:rules="[{ required: true, message: '不可为空', trigger: 'blur' }]">
|
:rules="[{ required: true, message: '不可为空', trigger: 'blur' }]">
|
||||||
<el-input v-model="formData.custom_name" @click="showDialog = true" clearable
|
<el-input v-model="formData.custom_name" @click="showDialog = true" clearable
|
||||||
placeholder="请选择客户" />
|
placeholder="请选择客户" class="flex-1" />
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
</el-col>
|
</el-col>
|
||||||
<el-col :span="8">
|
<el-col :span="8">
|
||||||
@ -18,6 +18,7 @@
|
|||||||
<el-option v-for="(item, index) in protype" :key="index" :label="item.name"
|
<el-option v-for="(item, index) in protype" :key="index" :label="item.name"
|
||||||
:value="parseInt(item.id)" />
|
:value="parseInt(item.id)" />
|
||||||
</el-select>
|
</el-select>
|
||||||
|
<ToolTip content="可在项目管理--项目设置--项目类型设置里面添加项目类型"></ToolTip>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
</el-col>
|
</el-col>
|
||||||
<el-col :span="8">
|
<el-col :span="8">
|
||||||
@ -34,7 +35,7 @@
|
|||||||
<el-col :span="24">
|
<el-col :span="24">
|
||||||
<el-form-item label="项目内容" prop="project_content">
|
<el-form-item label="项目内容" prop="project_content">
|
||||||
<el-checkbox-group v-model="formData.project_content" placeholder="请选择项目内容">
|
<el-checkbox-group v-model="formData.project_content" placeholder="请选择项目内容">
|
||||||
<el-checkbox v-for="(item, index) in dictData.project_content" :key="index"
|
<el-checkbox v-for="( item, index ) in dictData.project_content " :key="index"
|
||||||
:label="item.value">
|
:label="item.value">
|
||||||
{{ item.name }}
|
{{ item.name }}
|
||||||
</el-checkbox>
|
</el-checkbox>
|
||||||
@ -66,7 +67,7 @@
|
|||||||
<el-col :span="24">
|
<el-col :span="24">
|
||||||
<el-form-item label="招标方式" prop="bidding_method">
|
<el-form-item label="招标方式" prop="bidding_method">
|
||||||
<el-radio-group v-model="formData.bidding_method" placeholder="请选择招标方式">
|
<el-radio-group v-model="formData.bidding_method" placeholder="请选择招标方式">
|
||||||
<el-radio v-for="(item, index) in dictData.bidding_method" :key="index"
|
<el-radio v-for="( item, index ) in dictData.bidding_method " :key="index"
|
||||||
:label="parseInt(item.value)">
|
:label="parseInt(item.value)">
|
||||||
{{ item.name }}
|
{{ item.name }}
|
||||||
</el-radio>
|
</el-radio>
|
||||||
@ -112,7 +113,7 @@
|
|||||||
:rules="[{ required: true, message: '不可为空', trigger: 'blur' }]">
|
:rules="[{ required: true, message: '不可为空', trigger: 'blur' }]">
|
||||||
<el-select class="flex-1" v-model="formData.information_sources" clearable
|
<el-select class="flex-1" v-model="formData.information_sources" clearable
|
||||||
placeholder="请选择信息来源">
|
placeholder="请选择信息来源">
|
||||||
<el-option v-for="(item, index) in dictData.information_sources" :key="index"
|
<el-option v-for="( item, index ) in dictData.information_sources " :key="index"
|
||||||
:label="item.name" :value="parseInt(item.value)" />
|
:label="item.name" :value="parseInt(item.value)" />
|
||||||
</el-select>
|
</el-select>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
@ -131,7 +132,7 @@
|
|||||||
<el-col :span="12">
|
<el-col :span="12">
|
||||||
<el-form-item label="关系度" prop="relationship">
|
<el-form-item label="关系度" prop="relationship">
|
||||||
<el-radio-group v-model="formData.relationship" placeholder="请选择关系度">
|
<el-radio-group v-model="formData.relationship" placeholder="请选择关系度">
|
||||||
<el-radio v-for="(item, index) in dictData.relationship" :key="index"
|
<el-radio v-for="( item, index ) in dictData.relationship " :key="index"
|
||||||
:label="parseInt(item.value)">
|
:label="parseInt(item.value)">
|
||||||
{{ item.name }}
|
{{ item.name }}
|
||||||
</el-radio>
|
</el-radio>
|
||||||
@ -141,7 +142,7 @@
|
|||||||
<el-col :span="12">
|
<el-col :span="12">
|
||||||
<el-form-item label="项目建设资金来源" prop="construction_funds_sources">
|
<el-form-item label="项目建设资金来源" prop="construction_funds_sources">
|
||||||
<el-radio-group v-model="formData.construction_funds_sources" placeholder="请选择项目建设资金来源">
|
<el-radio-group v-model="formData.construction_funds_sources" placeholder="请选择项目建设资金来源">
|
||||||
<el-radio v-for="(item, index) in dictData.construction_funds_sources" :key="index"
|
<el-radio v-for="( item, index ) in dictData.construction_funds_sources " :key="index"
|
||||||
:label="parseInt(item.value)">
|
:label="parseInt(item.value)">
|
||||||
{{ item.name }}
|
{{ item.name }}
|
||||||
</el-radio>
|
</el-radio>
|
||||||
@ -152,8 +153,8 @@
|
|||||||
<el-col :span="12">
|
<el-col :span="12">
|
||||||
<el-form-item label="建设方财务状况" prop="construction_financial_status">
|
<el-form-item label="建设方财务状况" prop="construction_financial_status">
|
||||||
<el-radio-group v-model="formData.construction_financial_status" placeholder="请选择建设方财务状况">
|
<el-radio-group v-model="formData.construction_financial_status" placeholder="请选择建设方财务状况">
|
||||||
<el-radio v-for="(item, index) in dictData.construction_financial_status" :key="index"
|
<el-radio v-for="( item, index ) in dictData.construction_financial_status "
|
||||||
:label="parseInt(item.value)">
|
:key="index" :label="parseInt(item.value)">
|
||||||
{{ item.name }}
|
{{ item.name }}
|
||||||
</el-radio>
|
</el-radio>
|
||||||
</el-radio-group>
|
</el-radio-group>
|
||||||
@ -162,7 +163,7 @@
|
|||||||
<el-col :span="12">
|
<el-col :span="12">
|
||||||
<el-form-item label="建设方对我方认可度" prop="construction_recognition">
|
<el-form-item label="建设方对我方认可度" prop="construction_recognition">
|
||||||
<el-radio-group v-model="formData.construction_recognition" placeholder="请选择建设方对我方认可度">
|
<el-radio-group v-model="formData.construction_recognition" placeholder="请选择建设方对我方认可度">
|
||||||
<el-radio v-for="(item, index) in dictData.construction_recognition" :key="index"
|
<el-radio v-for="( item, index ) in dictData.construction_recognition " :key="index"
|
||||||
:label="parseInt(item.value)">
|
:label="parseInt(item.value)">
|
||||||
{{ item.name }}
|
{{ item.name }}
|
||||||
</el-radio>
|
</el-radio>
|
||||||
@ -172,7 +173,7 @@
|
|||||||
<el-col :span="12">
|
<el-col :span="12">
|
||||||
<el-form-item label="我方对建设方认可度" prop="my_construction_recognition">
|
<el-form-item label="我方对建设方认可度" prop="my_construction_recognition">
|
||||||
<el-radio-group v-model="formData.my_construction_recognition" placeholder="请选择我方对建设方认可度">
|
<el-radio-group v-model="formData.my_construction_recognition" placeholder="请选择我方对建设方认可度">
|
||||||
<el-radio v-for="(item, index) in dictData.my_construction_recognition" :key="index"
|
<el-radio v-for="( item, index ) in dictData.my_construction_recognition " :key="index"
|
||||||
:label="parseInt(item.value)">
|
:label="parseInt(item.value)">
|
||||||
{{ item.name }}
|
{{ item.name }}
|
||||||
</el-radio>
|
</el-radio>
|
||||||
@ -182,7 +183,7 @@
|
|||||||
<el-col :span="12">
|
<el-col :span="12">
|
||||||
<el-form-item label="战略意义" prop="strategic_significance">
|
<el-form-item label="战略意义" prop="strategic_significance">
|
||||||
<el-radio-group v-model="formData.strategic_significance" placeholder="请选择战略意义">
|
<el-radio-group v-model="formData.strategic_significance" placeholder="请选择战略意义">
|
||||||
<el-radio v-for="(item, index) in dictData.strategic_significance" :key="index"
|
<el-radio v-for="( item, index ) in dictData.strategic_significance " :key="index"
|
||||||
:label="parseInt(item.value)">
|
:label="parseInt(item.value)">
|
||||||
{{ item.name }}
|
{{ item.name }}
|
||||||
</el-radio>
|
</el-radio>
|
||||||
@ -192,7 +193,7 @@
|
|||||||
<el-col :span="12">
|
<el-col :span="12">
|
||||||
<el-form-item label="所属行业" prop="industry">
|
<el-form-item label="所属行业" prop="industry">
|
||||||
<el-radio-group v-model="formData.industry" placeholder="请选择所属行业">
|
<el-radio-group v-model="formData.industry" placeholder="请选择所属行业">
|
||||||
<el-radio v-for="(item, index) in dictData.industry" :key="index"
|
<el-radio v-for="( item, index ) in dictData.industry " :key="index"
|
||||||
:label="parseInt(item.value)">
|
:label="parseInt(item.value)">
|
||||||
{{ item.name }}
|
{{ item.name }}
|
||||||
</el-radio>
|
</el-radio>
|
||||||
@ -202,7 +203,7 @@
|
|||||||
<el-col :span="12">
|
<el-col :span="12">
|
||||||
<el-form-item label="单位性质" prop="unit_nature">
|
<el-form-item label="单位性质" prop="unit_nature">
|
||||||
<el-radio-group v-model="formData.unit_nature" placeholder="请选择单位性质">
|
<el-radio-group v-model="formData.unit_nature" placeholder="请选择单位性质">
|
||||||
<el-radio v-for="(item, index) in dictData.unit_nature" :key="index"
|
<el-radio v-for="( item, index ) in dictData.unit_nature " :key="index"
|
||||||
:label="parseInt(item.value)">
|
:label="parseInt(item.value)">
|
||||||
{{ item.name }}
|
{{ item.name }}
|
||||||
</el-radio>
|
</el-radio>
|
||||||
|
@ -7,8 +7,7 @@
|
|||||||
<el-col :span="12">
|
<el-col :span="12">
|
||||||
<el-form-item label="项目名称" prop="project_id" @click="showDialog = true"
|
<el-form-item label="项目名称" prop="project_id" @click="showDialog = true"
|
||||||
:rules="[{ required: true, message: '不可为空', trigger: 'change' }]">
|
:rules="[{ required: true, message: '不可为空', trigger: 'change' }]">
|
||||||
<el-input v-model="project_name" readonly clearable placeholder="请输入项目名称"
|
<el-input v-model="project_name" readonly clearable placeholder="请输入项目名称" />
|
||||||
:disabled="project" />
|
|
||||||
</el-form-item></el-col><el-col :span="12">
|
</el-form-item></el-col><el-col :span="12">
|
||||||
<el-form-item label="项目编码" prop="project_id">
|
<el-form-item label="项目编码" prop="project_id">
|
||||||
<el-input v-model="project_code" disabled clearable placeholder="系统自动填写" />
|
<el-input v-model="project_code" disabled clearable placeholder="系统自动填写" />
|
||||||
@ -27,7 +26,7 @@
|
|||||||
<el-form-item label="联系电话" prop="contact_phone"
|
<el-form-item label="联系电话" prop="contact_phone"
|
||||||
:rules="[{ validator: checkPhone, trigger: 'blur' }]">
|
:rules="[{ validator: checkPhone, trigger: 'blur' }]">
|
||||||
<el-input v-model="contact_phone" clearable disabled placeholder="系统自动填写" />
|
<el-input v-model="contact_phone" clearable disabled placeholder="系统自动填写" />
|
||||||
</el-form-item></el-col><el-col :span="24">
|
</el-form-item></el-col><el-col :span="12">
|
||||||
<el-form-item label="概算来源" prop="estimate_source">
|
<el-form-item label="概算来源" prop="estimate_source">
|
||||||
<el-radio-group v-model="formData.estimate_source" placeholder="请选择概算来源">
|
<el-radio-group v-model="formData.estimate_source" placeholder="请选择概算来源">
|
||||||
<el-radio v-for="(item, index) in dictData.estimate_source" :key="index"
|
<el-radio v-for="(item, index) in dictData.estimate_source" :key="index"
|
||||||
@ -35,17 +34,21 @@
|
|||||||
{{ item.name }}
|
{{ item.name }}
|
||||||
</el-radio>
|
</el-radio>
|
||||||
</el-radio-group>
|
</el-radio-group>
|
||||||
</el-form-item></el-col><el-col :span="12">
|
</el-form-item>
|
||||||
|
</el-col>
|
||||||
|
<el-col :span="12">
|
||||||
<el-form-item label="制单人" prop="create_user">
|
<el-form-item label="制单人" prop="create_user">
|
||||||
<el-input v-model="formData.create_user" clearable placeholder="请输入制单人" />
|
<el-input v-model="formData.create_user" clearable placeholder="请输入制单人" />
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
|
</el-col>
|
||||||
|
<el-col :span="12">
|
||||||
<el-form-item label="报价日期" prop="quotation_date">
|
<el-form-item label="报价日期" prop="quotation_date">
|
||||||
<el-date-picker class="flex-1 !flex" v-model="formData.quotation_date" clearable type="date"
|
<el-date-picker class="flex-1 !flex" v-model="formData.quotation_date" clearable type="date"
|
||||||
value-format="YYYY-MM-DD" placeholder="选择报价日期">
|
value-format="YYYY-MM-DD" placeholder="选择报价日期">
|
||||||
</el-date-picker>
|
</el-date-picker>
|
||||||
</el-form-item></el-col>
|
</el-form-item>
|
||||||
<el-col :span="24">
|
</el-col>
|
||||||
|
<el-col :span="12">
|
||||||
<el-form-item label="发票类型" prop="invoice_type">
|
<el-form-item label="发票类型" prop="invoice_type">
|
||||||
<el-radio-group v-model="formData.invoice_type" placeholder="请选择发票类型">
|
<el-radio-group v-model="formData.invoice_type" placeholder="请选择发票类型">
|
||||||
<el-radio v-for="(item, index) in dictData.invoice_type" :key="index"
|
<el-radio v-for="(item, index) in dictData.invoice_type" :key="index"
|
||||||
@ -55,37 +58,27 @@
|
|||||||
</el-radio-group>
|
</el-radio-group>
|
||||||
</el-form-item></el-col><el-col :span="12">
|
</el-form-item></el-col><el-col :span="12">
|
||||||
<el-form-item label="技术人员" prop="technician">
|
<el-form-item label="技术人员" prop="technician">
|
||||||
|
<!-- <el-select class="flex-1" v-model="formData.technician" clearable placeholder="点击选择技术人员">
|
||||||
<el-select class="flex-1" v-model="formData.technician" clearable placeholder="点击选择技术人员">
|
|
||||||
<el-option v-for="(item, index) in jlist" :key="index" :label="item.name"
|
<el-option v-for="(item, index) in jlist" :key="index" :label="item.name"
|
||||||
:value="parseInt(item.id)" />
|
:value="parseInt(item.id)" />
|
||||||
</el-select>
|
</el-select> -->
|
||||||
<!-- <el-input v-model="formData.technician" clearable placeholder="请输入技术人员id" /> -->
|
<el-input v-model="formData.technician_name" @click="openUserList" clearable
|
||||||
</el-form-item></el-col><el-col :span="12">
|
placeholder="点击选择技术人员" readonly />
|
||||||
|
</el-form-item>
|
||||||
|
</el-col>
|
||||||
|
<el-col :span="12">
|
||||||
<el-form-item label="概算金额" prop="estimate_amount">
|
<el-form-item label="概算金额" prop="estimate_amount">
|
||||||
<el-input v-model="formData.estimate_amount" clearable placeholder="请输入概算金额" />
|
<el-input v-model="formData.estimate_amount" clearable placeholder="请输入概算金额" />
|
||||||
</el-form-item></el-col><el-col :span="12">
|
</el-form-item>
|
||||||
|
</el-col>
|
||||||
|
<el-col :span="12">
|
||||||
<el-form-item label="要求" prop="ask">
|
<el-form-item label="要求" prop="ask">
|
||||||
<el-input v-model="formData.ask" clearable placeholder="请输入要求" />
|
<el-input v-model="formData.ask" clearable placeholder="请输入要求" type="textarea" />
|
||||||
</el-form-item></el-col><el-col :span="24">
|
</el-form-item>
|
||||||
|
</el-col>
|
||||||
|
<el-col :span="12">
|
||||||
<el-form-item label="附件">
|
<el-form-item label="附件">
|
||||||
<el-upload
|
<uploadAnnex :formData="formData"></uploadAnnex>
|
||||||
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-form-item>
|
||||||
|
|
||||||
</el-col>
|
</el-col>
|
||||||
@ -104,6 +97,10 @@
|
|||||||
<contactsTable @customEvent="customEvent2" :custom_id="customid"></contactsTable>
|
<contactsTable @customEvent="customEvent2" :custom_id="customid"></contactsTable>
|
||||||
</el-dialog>
|
</el-dialog>
|
||||||
</div>
|
</div>
|
||||||
|
<div v-if="showDialog3">
|
||||||
|
<personnelselector ref="personnel" @confirm="submituser" :type="1">
|
||||||
|
</personnelselector>
|
||||||
|
</div>
|
||||||
</popup>
|
</popup>
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
@ -114,8 +111,11 @@ import Popup from '@/components/popup/index.vue'
|
|||||||
import projectTable from "@/components/project/index.vue"
|
import projectTable from "@/components/project/index.vue"
|
||||||
import contactsTable from "@/components/contacts/index.vue"
|
import contactsTable from "@/components/contacts/index.vue"
|
||||||
import { useDictData } from '@/hooks/useDictOptions'
|
import { useDictData } from '@/hooks/useDictOptions'
|
||||||
import { getAdminsByDept } from '@/api/common'
|
|
||||||
import { apiProjectEstimateAdd, apiProjectEstimateEdit, apiProjectEstimateDetail } from '@/api/project_estimate'
|
import { apiProjectEstimateAdd, apiProjectEstimateEdit, apiProjectEstimateDetail } from '@/api/project_estimate'
|
||||||
|
import feedback from '@/utils/feedback'
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
let props = defineProps({
|
let props = defineProps({
|
||||||
project: Object
|
project: Object
|
||||||
})
|
})
|
||||||
@ -125,8 +125,6 @@ const { dictData } = useDictData('estimate_source,invoice_type')
|
|||||||
const formRef = shallowRef<FormInstance>()
|
const formRef = shallowRef<FormInstance>()
|
||||||
const popupRef = shallowRef<InstanceType<typeof Popup>>()
|
const popupRef = shallowRef<InstanceType<typeof Popup>>()
|
||||||
const mode = ref('add')
|
const mode = ref('add')
|
||||||
const orglist = reactive([])
|
|
||||||
const jobs = reactive([])
|
|
||||||
const jlist = reactive([])
|
const jlist = reactive([])
|
||||||
const project_name
|
const project_name
|
||||||
= ref('')
|
= ref('')
|
||||||
@ -138,31 +136,9 @@ const customer_demand_name = ref('')
|
|||||||
const contact_name = ref('')
|
const contact_name = ref('')
|
||||||
const contact_phone = ref('')
|
const contact_phone = ref('')
|
||||||
const customid = ref('')
|
const customid = ref('')
|
||||||
const formDataannex = reactive([])
|
const personnel = ref<any>();
|
||||||
import configs from "@/config"
|
|
||||||
const base_url = configs.baseUrl + configs.urlPrefix
|
|
||||||
import useUserStore from "@/stores/modules/user";
|
|
||||||
import feedback from '@/utils/feedback'
|
|
||||||
|
|
||||||
const userStore = useUserStore();
|
|
||||||
// 上传文件
|
|
||||||
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 formData = reactive({
|
const formData = reactive({
|
||||||
id: '',
|
id: '',
|
||||||
@ -173,16 +149,22 @@ const formData = reactive({
|
|||||||
quotation_date: '',
|
quotation_date: '',
|
||||||
invoice_type: '',
|
invoice_type: '',
|
||||||
technician: '',
|
technician: '',
|
||||||
|
technician_name: "",
|
||||||
estimate_amount: '',
|
estimate_amount: '',
|
||||||
ask: '',
|
ask: '',
|
||||||
annex: [],
|
annex: [],
|
||||||
contact_id: ''
|
contact_id: ''
|
||||||
})
|
})
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// dialog
|
// dialog
|
||||||
const showDialog = ref(false)
|
const showDialog = ref(false)
|
||||||
const showDialog1 = ref(false)
|
const showDialog1 = ref(false)
|
||||||
const showDialog2 = ref(false)
|
const showDialog2 = ref(false)
|
||||||
|
const showDialog3 = ref(false)
|
||||||
|
|
||||||
|
|
||||||
const customEvent = (e: any) => {
|
const customEvent = (e: any) => {
|
||||||
@ -210,6 +192,23 @@ const customEvent2 = (e: any) => {
|
|||||||
showDialog2.value = false;
|
showDialog2.value = false;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
const openUserList = async () => {
|
||||||
|
showDialog3.value = true;
|
||||||
|
await nextTick();
|
||||||
|
personnel.value.open();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
//确认
|
||||||
|
const submituser = (e: any) => {
|
||||||
|
|
||||||
|
formData.technician_name = e.name
|
||||||
|
formData.technician = e.id
|
||||||
|
console.log(e)
|
||||||
|
showDialog3.value = false;
|
||||||
|
};
|
||||||
|
|
||||||
//打开弹窗
|
//打开弹窗
|
||||||
const demandclck = () => {
|
const demandclck = () => {
|
||||||
if (formData.project_id) {
|
if (formData.project_id) {
|
||||||
@ -222,11 +221,11 @@ const demandclck = () => {
|
|||||||
//验证
|
//验证
|
||||||
const checkPhone = (rule: any, value: any, callback: (arg0: Error) => any) => {
|
const checkPhone = (rule: any, value: any, callback: (arg0: Error) => any) => {
|
||||||
|
|
||||||
if (value && !/^1\d{10}$/.test(value)) {
|
// if (value && !/^1\d{10}$/.test(value)) {
|
||||||
callback(new Error('请输入正确的手机号码'));
|
// callback(new Error('请输入正确的手机号码'));
|
||||||
} else {
|
// } else {
|
||||||
callback()
|
// callback()
|
||||||
}
|
// }
|
||||||
|
|
||||||
}
|
}
|
||||||
// 弹窗标题
|
// 弹窗标题
|
||||||
@ -257,15 +256,6 @@ const setFormData = async (data: Record<any, any>) => {
|
|||||||
formData[key] = data[key]
|
formData[key] = data[key]
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
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)
|
|
||||||
}
|
|
||||||
//@ts-ignore
|
//@ts-ignore
|
||||||
// formData.quotation_date = timeFormat(formData.quotation_date, 'YYYY-MM-DD ')
|
// formData.quotation_date = timeFormat(formData.quotation_date, 'YYYY-MM-DD ')
|
||||||
}
|
}
|
||||||
@ -280,10 +270,7 @@ const getDetail = async (row: Record<string, any>) => {
|
|||||||
|
|
||||||
// 提交按钮
|
// 提交按钮
|
||||||
const handleSubmit = async () => {
|
const handleSubmit = async () => {
|
||||||
if (formDataannex.length > 0) {
|
// await formRef.value?.validate()
|
||||||
formData.annex = formDataannex.map((item) => item.uri)
|
|
||||||
}
|
|
||||||
await formRef.value?.validate()
|
|
||||||
const data = { ...formData, }
|
const data = { ...formData, }
|
||||||
mode.value == 'edit'
|
mode.value == 'edit'
|
||||||
? await apiProjectEstimateEdit(data)
|
? await apiProjectEstimateEdit(data)
|
||||||
|
@ -2,7 +2,7 @@
|
|||||||
<div class="edit-popup">
|
<div class="edit-popup">
|
||||||
<popup ref="popupRef" :title="popupTitle" :async="true" width="80%" @confirm="handleSubmit"
|
<popup ref="popupRef" :title="popupTitle" :async="true" width="80%" @confirm="handleSubmit"
|
||||||
@close="handleClose">
|
@close="handleClose">
|
||||||
<el-form ref="formRef" :model="formData" label-width="120px" :rules="formRules" inline>
|
<el-form ref="formRef" :model="formData" label-width="100px" :rules="formRules">
|
||||||
<div
|
<div
|
||||||
style="display: flex; flex-direction: row-reverse; justify-content: flex-start;margin-bottom: 30px;">
|
style="display: flex; flex-direction: row-reverse; justify-content: flex-start;margin-bottom: 30px;">
|
||||||
|
|
||||||
@ -18,9 +18,11 @@
|
|||||||
<el-col :span="8">
|
<el-col :span="8">
|
||||||
<el-form-item label="项目名称" prop="project_id" @click="showDialog = true"
|
<el-form-item label="项目名称" prop="project_id" @click="showDialog = true"
|
||||||
:rules="[{ required: true, message: '不可为空', trigger: 'blur' }]">
|
:rules="[{ required: true, message: '不可为空', trigger: 'blur' }]">
|
||||||
<el-input v-model="project_name" readonly clearable placeholder="请输入项目名称"
|
<el-input v-model="project_name" readonly clearable placeholder="点击选择项目" :disabled="project"
|
||||||
:disabled="project" />
|
class="flex-1" />
|
||||||
</el-form-item> </el-col>
|
<toolTip content="需要在项目管理-项目预算-总预算编制的总预算项目"></toolTip>
|
||||||
|
</el-form-item>
|
||||||
|
</el-col>
|
||||||
<el-col :span="8">
|
<el-col :span="8">
|
||||||
<el-form-item label="项目编码" prop="project_id">
|
<el-form-item label="项目编码" prop="project_id">
|
||||||
<el-input v-model="project_code" disabled clearable placeholder="系统自动填写" />
|
<el-input v-model="project_code" disabled clearable placeholder="系统自动填写" />
|
||||||
@ -28,22 +30,7 @@
|
|||||||
</el-col>
|
</el-col>
|
||||||
<el-col :span="8">
|
<el-col :span="8">
|
||||||
<el-form-item label="附件">
|
<el-form-item label="附件">
|
||||||
<el-upload
|
<uploadAnnex :formData="formData"></uploadAnnex>
|
||||||
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-form-item>
|
||||||
</el-col>
|
</el-col>
|
||||||
<el-col :span="24">
|
<el-col :span="24">
|
||||||
@ -56,11 +43,8 @@
|
|||||||
<el-col :span="24">
|
<el-col :span="24">
|
||||||
<div style=" display: flex;justify-content: flex-end;margin-bottom: 30px;">
|
<div style=" display: flex;justify-content: flex-end;margin-bottom: 30px;">
|
||||||
<el-button @click="showDialog1 = true" type="primary" plain>选择材料</el-button>
|
<el-button @click="showDialog1 = true" type="primary" plain>选择材料</el-button>
|
||||||
<el-button type="primary" plain>清空</el-button>
|
|
||||||
</div>
|
</div>
|
||||||
</el-col>
|
</el-col>
|
||||||
|
|
||||||
|
|
||||||
<el-col :span="24">
|
<el-col :span="24">
|
||||||
<div style="margin-bottom: 30px;">材料预算清单</div>
|
<div style="margin-bottom: 30px;">材料预算清单</div>
|
||||||
<div style="margin-bottom: 30px;">
|
<div style="margin-bottom: 30px;">
|
||||||
@ -164,11 +148,6 @@ const list1 = reactive([])
|
|||||||
const list2 = reactive([])
|
const list2 = reactive([])
|
||||||
import { deptAll } from '@/api/org/department'
|
import { deptAll } from '@/api/org/department'
|
||||||
import { getAll } from '@/api/org/organization'
|
import { getAll } from '@/api/org/organization'
|
||||||
import configs from "@/config"
|
|
||||||
import useUserStore from "@/stores/modules/user";
|
|
||||||
const base_url = configs.baseUrl + configs.urlPrefix
|
|
||||||
const userStore = useUserStore();
|
|
||||||
const formDataannex = reactive([])
|
|
||||||
// 表单数据
|
// 表单数据
|
||||||
const formData = reactive({
|
const formData = reactive({
|
||||||
id: '',
|
id: '',
|
||||||
@ -193,7 +172,6 @@ const customEvent = (e) => {
|
|||||||
if (props.project) customEvent(props.project);
|
if (props.project) customEvent(props.project);
|
||||||
|
|
||||||
const customEvent1 = (e) => {
|
const customEvent1 = (e) => {
|
||||||
|
|
||||||
tableData.value.push({
|
tableData.value.push({
|
||||||
"material_id": e.id,
|
"material_id": e.id,
|
||||||
"name": e.name,
|
"name": e.name,
|
||||||
@ -213,27 +191,6 @@ const customEvent1 = (e) => {
|
|||||||
const popupTitle = computed(() => {
|
const popupTitle = computed(() => {
|
||||||
return mode.value == 'edit' ? '编辑材料预算' : '新增材料预算'
|
return mode.value == 'edit' ? '编辑材料预算' : '新增材料预算'
|
||||||
})
|
})
|
||||||
// 上传文件
|
|
||||||
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)
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
//获取所有组织
|
//获取所有组织
|
||||||
@ -268,8 +225,6 @@ const getlist1 = (id: any) => {
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
//获取预算明细列表
|
//获取预算明细列表
|
||||||
const budgetDetailLists = (id) => {
|
const budgetDetailLists = (id) => {
|
||||||
MaterialbudgetDetailLists({ 'page_no': 1, 'page_size': 20, material_budget_id: id }).then((res) => {
|
MaterialbudgetDetailLists({ 'page_no': 1, 'page_size': 20, material_budget_id: id }).then((res) => {
|
||||||
@ -311,16 +266,7 @@ const formRules = reactive<any>({
|
|||||||
|
|
||||||
// 获取详情
|
// 获取详情
|
||||||
const setFormData = async (data: Record<any, 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)
|
|
||||||
}
|
|
||||||
budgetDetailLists(data.id)
|
budgetDetailLists(data.id)
|
||||||
if (data.dept_id) {
|
if (data.dept_id) {
|
||||||
getlist1(data.org_id)
|
getlist1(data.org_id)
|
||||||
@ -347,9 +293,7 @@ const getDetail = async (row: Record<string, any>) => {
|
|||||||
|
|
||||||
// 提交按钮
|
// 提交按钮
|
||||||
const handleSubmit = async () => {
|
const handleSubmit = async () => {
|
||||||
if (formDataannex.length > 0) {
|
|
||||||
formData.annex = formDataannex.map((item: any) => item.uri)
|
|
||||||
}
|
|
||||||
if (tableData.value.length > 0) {
|
if (tableData.value.length > 0) {
|
||||||
formData.material_budget_detail = tableData.value.map((item: any) => ({
|
formData.material_budget_detail = tableData.value.map((item: any) => ({
|
||||||
'id': item.id,
|
'id': item.id,
|
||||||
|
@ -101,26 +101,7 @@
|
|||||||
<el-input v-model="formData.remark" clearable placeholder="请输入备注" />
|
<el-input v-model="formData.remark" clearable placeholder="请输入备注" />
|
||||||
</el-form-item> </el-col> <el-col :span="8">
|
</el-form-item> </el-col> <el-col :span="8">
|
||||||
<el-form-item label="附件">
|
<el-form-item label="附件">
|
||||||
<el-upload
|
<uploadAnnex :formData="formData"></uploadAnnex>
|
||||||
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-form-item>
|
||||||
|
|
||||||
</el-col>
|
</el-col>
|
||||||
@ -128,7 +109,7 @@
|
|||||||
<div style=" display: flex;justify-content: flex-end;margin-bottom: 30px;">
|
<div style=" display: flex;justify-content: flex-end;margin-bottom: 30px;">
|
||||||
<el-button @click="showDialog2 = true" type="primary" plain
|
<el-button @click="showDialog2 = true" type="primary" plain
|
||||||
:disabled="!formData.project_id">选择分包明细</el-button>
|
:disabled="!formData.project_id">选择分包明细</el-button>
|
||||||
|
<toolTip content="可在项目管理-项目预算-分包预算-分包预算添加"></toolTip>
|
||||||
</div>
|
</div>
|
||||||
<el-row>
|
<el-row>
|
||||||
<el-col :span="24">
|
<el-col :span="24">
|
||||||
@ -302,32 +283,12 @@ const paymentList = reactive([{}])
|
|||||||
const formDataannex = reactive([])
|
const formDataannex = reactive([])
|
||||||
import feedback from '@/utils/feedback'
|
import feedback from '@/utils/feedback'
|
||||||
import configs from "@/config"
|
import configs from "@/config"
|
||||||
const base_url = configs.baseUrl + configs.urlPrefix
|
|
||||||
import useUserStore from "@/stores/modules/user";
|
import useUserStore from "@/stores/modules/user";
|
||||||
const userStore = useUserStore();
|
|
||||||
|
|
||||||
const { dictData } = useDictData('divide_contract_type,account_period,tax_rate,pay_type,pay_period ')
|
const { dictData } = useDictData('divide_contract_type,account_period,tax_rate,pay_type,pay_period ')
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// 上传文件
|
|
||||||
const handleAvatarSuccess_four = (
|
|
||||||
response,
|
|
||||||
uploadFile
|
|
||||||
) => {
|
|
||||||
if (response.code == 0) {
|
|
||||||
feedback.msgError(response.msg);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
formDataannex.push(
|
|
||||||
{ uri: response.data.uri, name: response.data.name }
|
|
||||||
|
|
||||||
);
|
|
||||||
};
|
|
||||||
// 删除上传的文件
|
|
||||||
const delFileFn = (index: number) => {
|
|
||||||
formDataannex.splice(index, 1)
|
|
||||||
}
|
|
||||||
const handleAdd = (row: any) => {
|
const handleAdd = (row: any) => {
|
||||||
// 在 row 后面插入一行数据
|
// 在 row 后面插入一行数据
|
||||||
const index = paymentList.indexOf(row);
|
const index = paymentList.indexOf(row);
|
||||||
@ -501,15 +462,7 @@ const formRules = reactive<any>({
|
|||||||
|
|
||||||
// 获取详情
|
// 获取详情
|
||||||
const setFormData = async (data: Record<any, 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)
|
|
||||||
}
|
|
||||||
if (data.dept_id) {
|
if (data.dept_id) {
|
||||||
getlist1(data.org_id)
|
getlist1(data.org_id)
|
||||||
}
|
}
|
||||||
|
@ -106,8 +106,8 @@
|
|||||||
</div>
|
</div>
|
||||||
</el-form>
|
</el-form>
|
||||||
<formTable :formData="formData.accept_check_result" :config="tableConfig"></formTable>
|
<formTable :formData="formData.accept_check_result" :config="tableConfig"></formTable>
|
||||||
<formTable :formData="formData.accept_check_problem" :config="tableConfig1"></formTable>
|
<formTable :formData="formData.accept_check_problem" :config="tableConfig1" :dictData="dictData">
|
||||||
|
</formTable>
|
||||||
</popup>
|
</popup>
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
|
@ -136,7 +136,7 @@
|
|||||||
</el-table-column>
|
</el-table-column>
|
||||||
</el-table>
|
</el-table>
|
||||||
</div>
|
</div>
|
||||||
<formTable :formData="formData.entry_problem" :config="tableConfig"></formTable>
|
<formTable :formData="formData.entry_problem" :config="tableConfig" :dictData="dictData"></formTable>
|
||||||
|
|
||||||
</popup>
|
</popup>
|
||||||
</div>
|
</div>
|
||||||
|
@ -76,7 +76,7 @@
|
|||||||
:query="{ project_id: formData.project_id, node_type: 2 }"></dialogTable>
|
:query="{ project_id: formData.project_id, node_type: 2 }"></dialogTable>
|
||||||
</el-dialog>
|
</el-dialog>
|
||||||
</div>
|
</div>
|
||||||
<formTable :formData="formData.problem" :config="tableConfig"></formTable>
|
<formTable :formData="formData.problem" :config="tableConfig" :dictData="dictData"></formTable>
|
||||||
</el-form>
|
</el-form>
|
||||||
</popup>
|
</popup>
|
||||||
</div>
|
</div>
|
||||||
|
@ -130,7 +130,7 @@
|
|||||||
</div>
|
</div>
|
||||||
</el-form>
|
</el-form>
|
||||||
<formTable :formData="formData.inspection_result" :config="tableConfig"></formTable>
|
<formTable :formData="formData.inspection_result" :config="tableConfig"></formTable>
|
||||||
<formTable :formData="formData.inspection_problem" :config="tableConfig1"></formTable>
|
<formTable :formData="formData.inspection_problem" :config="tableConfig1" :dictData="dictData"></formTable>
|
||||||
</popup>
|
</popup>
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
|
@ -129,7 +129,7 @@
|
|||||||
</div>
|
</div>
|
||||||
</el-form>
|
</el-form>
|
||||||
<formTable :formData="formData.side_result" :config="tableConfig"></formTable>
|
<formTable :formData="formData.side_result" :config="tableConfig"></formTable>
|
||||||
<formTable :formData="formData.side_problem" :config="tableConfig1"></formTable>
|
<formTable :formData="formData.side_problem" :config="tableConfig1" :dictData="dictData"></formTable>
|
||||||
</popup>
|
</popup>
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
|
@ -82,7 +82,7 @@
|
|||||||
</dialogTable>
|
</dialogTable>
|
||||||
</el-dialog>
|
</el-dialog>
|
||||||
</div>
|
</div>
|
||||||
<formTable :formData="formData.problem" :config="tableConfig"></formTable>
|
<formTable :formData="formData.problem" :config="tableConfig" :dictData="dictData"></formTable>
|
||||||
</popup>
|
</popup>
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
|
@ -14,8 +14,8 @@
|
|||||||
<el-col :span="8">
|
<el-col :span="8">
|
||||||
<el-form-item label="组织" prop="org_id"
|
<el-form-item label="组织" prop="org_id"
|
||||||
:rules="[{ required: true, message: '不可为空', trigger: 'blur' }]">
|
:rules="[{ required: true, message: '不可为空', trigger: 'blur' }]">
|
||||||
<el-select v-model="formData.org_id" clearable placeholder="请选择组织"
|
<el-select v-model="formData.org_id" clearable placeholder="请选择组织" @change="deptrmt"
|
||||||
@change="deptrmt">
|
class="flex-1">
|
||||||
<el-option v-for="(item, index) in list1" :key="index" :label="item.name"
|
<el-option v-for="(item, index) in list1" :key="index" :label="item.name"
|
||||||
:value="item.id" />
|
:value="item.id" />
|
||||||
</el-select>
|
</el-select>
|
||||||
@ -24,7 +24,7 @@
|
|||||||
<el-col :span="8">
|
<el-col :span="8">
|
||||||
<el-form-item label="部门" prop="dept_id"
|
<el-form-item label="部门" prop="dept_id"
|
||||||
:rules="[{ required: true, message: '不可为空', trigger: 'blur' }]">
|
:rules="[{ required: true, message: '不可为空', trigger: 'blur' }]">
|
||||||
<el-select v-model="formData.dept_id" clearable placeholder="请选择部门">
|
<el-select v-model="formData.dept_id" clearable placeholder="请选择部门" class="flex-1">
|
||||||
<el-option v-for="(item, index) in list2" :key="index" :label="item.name"
|
<el-option v-for="(item, index) in list2" :key="index" :label="item.name"
|
||||||
:value="item.id" />
|
:value="item.id" />
|
||||||
</el-select>
|
</el-select>
|
||||||
@ -33,10 +33,6 @@
|
|||||||
<el-col :span="8">
|
<el-col :span="8">
|
||||||
<el-form-item label="供应商名称" prop="supplier_name"
|
<el-form-item label="供应商名称" prop="supplier_name"
|
||||||
:rules="[{ required: true, message: '不可为空', trigger: 'blur' }]">
|
:rules="[{ required: true, message: '不可为空', trigger: 'blur' }]">
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<el-input v-model="formData.supplier_name" clearable placeholder="请输入" />
|
<el-input v-model="formData.supplier_name" clearable placeholder="请输入" />
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
</el-col>
|
</el-col>
|
||||||
@ -53,29 +49,7 @@
|
|||||||
|
|
||||||
<el-col :span="24">
|
<el-col :span="24">
|
||||||
<el-form-item label="供应商照片" prop="supplier_photos">
|
<el-form-item label="供应商照片" prop="supplier_photos">
|
||||||
|
<uploadAnnex :formData="formData" value="supplier_photos"></uploadAnnex>
|
||||||
|
|
||||||
<!-- <material-picker v-model="formData.supplier_photos" /> -->
|
|
||||||
|
|
||||||
<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_four1" ref="upload">
|
|
||||||
<el-button type="primary">
|
|
||||||
上传
|
|
||||||
</el-button>
|
|
||||||
</el-upload>
|
|
||||||
|
|
||||||
<div>
|
|
||||||
<div v-for="(item, index) in formData.supplier_photos"
|
|
||||||
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="delFileFn1(index)">x</span>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
</el-col>
|
</el-col>
|
||||||
@ -110,7 +84,7 @@
|
|||||||
<el-form-item label="联系人" prop="contacts">
|
<el-form-item label="联系人" prop="contacts">
|
||||||
<el-input v-model="formData.contacts" clearable placeholder="请输入" />
|
<el-input v-model="formData.contacts" clearable placeholder="请输入" />
|
||||||
</el-form-item></el-col>
|
</el-form-item></el-col>
|
||||||
<el-col :span="24">
|
<el-col :span="8">
|
||||||
<el-form-item label="性别" label-width="130px" prop="contacts_sex">
|
<el-form-item label="性别" label-width="130px" prop="contacts_sex">
|
||||||
<el-radio-group v-model="formData.contacts_sex" placeholder="请选择性别">
|
<el-radio-group v-model="formData.contacts_sex" placeholder="请选择性别">
|
||||||
<el-radio v-for="(item, index) in dictData.sex" :key="index"
|
<el-radio v-for="(item, index) in dictData.sex" :key="index"
|
||||||
@ -119,14 +93,11 @@
|
|||||||
</el-radio>
|
</el-radio>
|
||||||
</el-radio-group>
|
</el-radio-group>
|
||||||
</el-form-item></el-col>
|
</el-form-item></el-col>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<el-col :span="8">
|
<el-col :span="8">
|
||||||
<el-form-item label="出生日期" prop="birthday">
|
<el-form-item label="出生日期" prop="birthday">
|
||||||
|
|
||||||
<el-date-picker v-model="formData.birthday" format="YYYY-MM-DD"
|
<el-date-picker v-model="formData.birthday" format="YYYY-MM-DD"
|
||||||
value-format="YYYY-MM-DD" placeholder="请选择出生日期" clearable></el-date-picker>
|
value-format="YYYY-MM-DD" placeholder="请选择出生日期" clearable
|
||||||
|
class="flex-1 !flex"></el-date-picker>
|
||||||
</el-form-item></el-col>
|
</el-form-item></el-col>
|
||||||
<el-col :span="8">
|
<el-col :span="8">
|
||||||
<el-form-item label="电话号码" prop="phone"
|
<el-form-item label="电话号码" prop="phone"
|
||||||
@ -150,31 +121,10 @@
|
|||||||
|
|
||||||
<el-col :span="8">
|
<el-col :span="8">
|
||||||
<el-form-item label="备注" prop="remark">
|
<el-form-item label="备注" prop="remark">
|
||||||
<el-input v-model="formData.remark" clearable placeholder="请输入备注" />
|
<el-input v-model="formData.remark" clearable placeholder="请输入备注" type="textarea" />
|
||||||
</el-form-item></el-col><el-col :span="24">
|
</el-form-item></el-col><el-col :span="24">
|
||||||
<el-form-item label="附件">
|
<el-form-item label="附件">
|
||||||
<el-upload
|
<uploadAnnex :formData="formData"></uploadAnnex>
|
||||||
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-form-item></el-col>
|
||||||
</el-row>
|
</el-row>
|
||||||
</el-tab-pane>
|
</el-tab-pane>
|
||||||
@ -264,51 +214,13 @@ const list2 = reactive([])
|
|||||||
import { deptAll } from '@/api/org/department'
|
import { deptAll } from '@/api/org/department'
|
||||||
import { getAll } from '@/api/org/organization'
|
import { getAll } from '@/api/org/organization'
|
||||||
import configs from "@/config"
|
import configs from "@/config"
|
||||||
const base_url = configs.baseUrl + configs.urlPrefix
|
|
||||||
import useUserStore from "@/stores/modules/user";
|
import useUserStore from "@/stores/modules/user";
|
||||||
|
|
||||||
const userStore = useUserStore();
|
const userStore = useUserStore();
|
||||||
const userInfo = userStore.userInfo
|
const userInfo = userStore.userInfo
|
||||||
const formDataannex = reactive([])
|
const formDataannex = reactive([])
|
||||||
// 上传文件
|
|
||||||
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 handleAvatarSuccess_four1 = (
|
|
||||||
response,
|
|
||||||
uploadFile
|
|
||||||
) => {
|
|
||||||
if (response.code == 0) {
|
|
||||||
ElMessage.error(response.msg);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
formData.supplier_photos.push(
|
|
||||||
{ uri: response.data.uri, name: response.data.name }
|
|
||||||
|
|
||||||
);
|
|
||||||
};
|
|
||||||
|
|
||||||
// 删除上传的文件
|
|
||||||
const delFileFn1 = (index: number) => {
|
|
||||||
formData.supplier_photos.splice(index, 1)
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
//获取值
|
//获取值
|
||||||
@ -424,17 +336,7 @@ const formRules = reactive<any>({
|
|||||||
|
|
||||||
// 获取详情
|
// 获取详情
|
||||||
const setFormData = async (data: Record<any, 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)
|
|
||||||
|
|
||||||
}
|
|
||||||
if (data.dept_id) {
|
if (data.dept_id) {
|
||||||
getlist1(data.org_id)
|
getlist1(data.org_id)
|
||||||
}
|
}
|
||||||
@ -458,12 +360,6 @@ const getDetail = async (row: Record<string, any>) => {
|
|||||||
|
|
||||||
// 提交按钮
|
// 提交按钮
|
||||||
const handleSubmit = async () => {
|
const handleSubmit = async () => {
|
||||||
if (formDataannex.length > 0) {
|
|
||||||
formData.annex = formDataannex.map((item: any) => item.uri)
|
|
||||||
}
|
|
||||||
if (formData.supplier_photos.length > 0) {
|
|
||||||
formData.supplier_photos = formData.supplier_photos
|
|
||||||
}
|
|
||||||
await formRef.value?.validate()
|
await formRef.value?.validate()
|
||||||
const data = { ...formData, }
|
const data = { ...formData, }
|
||||||
mode.value == 'edit'
|
mode.value == 'edit'
|
||||||
|
@ -54,7 +54,7 @@
|
|||||||
<el-table-column type="selection" width="55" />
|
<el-table-column type="selection" width="55" />
|
||||||
<el-table-column label="序号" type="index" width="55" />
|
<el-table-column label="序号" type="index" width="55" />
|
||||||
|
|
||||||
<el-table-column label="建档人" prop="create_user" show-overflow-tooltip />
|
<el-table-column label="建档人" prop="create_user_name" show-overflow-tooltip />
|
||||||
<el-table-column label="供应商编码" prop="supplier_code" show-overflow-tooltip />
|
<el-table-column label="供应商编码" prop="supplier_code" show-overflow-tooltip />
|
||||||
<el-table-column label="供应商名称" prop="supplier_name" show-overflow-tooltip />
|
<el-table-column label="供应商名称" prop="supplier_name" show-overflow-tooltip />
|
||||||
<el-table-column label="品牌类别" prop="brand_category" show-overflow-tooltip />
|
<el-table-column label="品牌类别" prop="brand_category" show-overflow-tooltip />
|
||||||
|
Loading…
x
Reference in New Issue
Block a user