add
This commit is contained in:
parent
bb46964ee8
commit
7f50fc08c3
@ -16,7 +16,7 @@
|
||||
<el-table :data="pager.lists" @cell-click="handleCurrentChange">
|
||||
<el-table-column type="selection" 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="position" show-overflow-tooltip />
|
||||
<el-table-column label="手机" prop="phone" show-overflow-tooltip />
|
||||
|
@ -25,18 +25,6 @@
|
||||
<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="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>
|
||||
|
||||
</div>
|
||||
@ -50,10 +38,8 @@
|
||||
<script lang="ts" setup>
|
||||
import { usePaging } from "@/hooks/usePaging"
|
||||
import { useDictData } from "@/hooks/useDictOptions"
|
||||
|
||||
import { apiCustomerDemandLists } from '@/api/customer_demand'
|
||||
import { defineEmits } from "vue"
|
||||
import { timeFormat } from '@/utils/util'
|
||||
const props = defineProps({
|
||||
productid: {
|
||||
type: String
|
||||
|
@ -32,7 +32,7 @@
|
||||
</div>
|
||||
</template>
|
||||
<script lang="ts" setup>
|
||||
import { defineProps } from "vue"
|
||||
import { defineProps, onMounted, ref } from "vue"
|
||||
import { useDictData } from '@/hooks/useDictOptions'
|
||||
|
||||
/** config参数说明
|
||||
@ -55,14 +55,10 @@ const props = defineProps({
|
||||
config: {
|
||||
type: Object,
|
||||
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的每一列的初始对象
|
||||
const list = props.config.tableConfig.map(item => item.value)
|
||||
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>
|
||||
|
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 = {
|
||||
showCrumb: true, // 是否显示面包屑
|
||||
showLogo: true, // 是否显示logo
|
||||
showToolTip:false,//是否开启文字提示
|
||||
isUniqueOpened: true, //只展开一个一级菜单
|
||||
sideWidth: 250, //侧边栏宽度
|
||||
sideTheme: 'dark', //侧边栏主题
|
||||
|
@ -1,27 +1,13 @@
|
||||
<template>
|
||||
<div class="setting-drawer">
|
||||
<el-drawer
|
||||
v-model="showSetting"
|
||||
append-to-body
|
||||
direction="rtl"
|
||||
size="250px"
|
||||
title="主题设置"
|
||||
>
|
||||
<el-drawer v-model="showSetting" append-to-body direction="rtl" size="250px" title="主题设置">
|
||||
<div class="setting-item mb-5">
|
||||
<span class="text-tx-secondary">风格设置</span>
|
||||
<div class="flex mt-4 cursor-pointer">
|
||||
<div
|
||||
class="mr-4 flex relative text-primary"
|
||||
v-for="item in sideThemeList"
|
||||
:key="item.type"
|
||||
@click="sideTheme = item.type"
|
||||
>
|
||||
<div class="mr-4 flex relative text-primary" v-for="item in sideThemeList" :key="item.type"
|
||||
@click="sideTheme = item.type">
|
||||
<img :src="item.image" width="52" height="36" />
|
||||
<icon
|
||||
v-if="sideTheme == item.type"
|
||||
class="icon-select"
|
||||
name="el-icon-Select"
|
||||
/>
|
||||
<icon v-if="sideTheme == item.type" class="icon-select" name="el-icon-Select" />
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@ -40,21 +26,13 @@
|
||||
<div class="setting-item mb-5 flex justify-between items-center">
|
||||
<span class="text-tx-secondary">开启多页签栏</span>
|
||||
<div>
|
||||
<el-switch
|
||||
v-model="openMultipleTabs"
|
||||
:active-value="true"
|
||||
:inactive-value="false"
|
||||
/>
|
||||
<el-switch v-model="openMultipleTabs" :active-value="true" :inactive-value="false" />
|
||||
</div>
|
||||
</div>
|
||||
<div class="setting-item mb-5 flex justify-between items-center">
|
||||
<span class="text-tx-secondary">只展开一个一级菜单</span>
|
||||
<div>
|
||||
<el-switch
|
||||
v-model="isUniqueOpened"
|
||||
:active-value="true"
|
||||
:inactive-value="false"
|
||||
/>
|
||||
<el-switch v-model="isUniqueOpened" :active-value="true" :inactive-value="false" />
|
||||
</div>
|
||||
</div>
|
||||
<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" />
|
||||
</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">
|
||||
<el-button @click="resetTheme">重置主题</el-button>
|
||||
</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 themeChange = () => {
|
||||
settingStore.setTheme(isDark.value)
|
||||
|
@ -2,8 +2,11 @@
|
||||
<div class="edit-popup">
|
||||
<popup ref="popupRef" :title="popupTitle" :async="true" width="80%" @confirm="handleSubmit"
|
||||
@close="handleClose">
|
||||
<el-form ref="formRef" :model="formData" label-width="auto" :rules="formRules" 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"
|
||||
@ -31,7 +34,8 @@
|
||||
|
||||
<el-col :span="8">
|
||||
<el-form-item label="招标公司名称" prop="buy_bidding_document_id">
|
||||
<el-input v-model="invite_tenders_company_name" clearable disabled placeholder="系统自动填写" />
|
||||
<el-input v-model="invite_tenders_company_name" clearable disabled
|
||||
placeholder="系统自动填写" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="8">
|
||||
@ -47,7 +51,8 @@
|
||||
<el-col :span="8">
|
||||
|
||||
<el-form-item label="招标项目资金来源" prop="buy_bidding_document_id">
|
||||
<el-input v-model="bidding_project_fund_source" clearable disabled placeholder="系统自动填写" />
|
||||
<el-input v-model="bidding_project_fund_source" clearable disabled
|
||||
placeholder="系统自动填写" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="8">
|
||||
@ -73,9 +78,12 @@
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
<div class="tit">技术审查</div>
|
||||
<el-row>
|
||||
|
||||
</el-card>
|
||||
|
||||
<el-card>
|
||||
<template #header>技术审查</template>
|
||||
<el-row>
|
||||
<el-col :span="8">
|
||||
<el-form-item label="技术协议偏差" prop="technical_protocol_deviation">
|
||||
<el-input v-model="formData.technical_protocol_deviation" clearable
|
||||
@ -93,42 +101,64 @@
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
<div class="tit">商务审查</div>
|
||||
</el-card>
|
||||
<el-card>
|
||||
<template #header>
|
||||
商务审查
|
||||
</template>
|
||||
<el-row>
|
||||
<el-col :span="8">
|
||||
<el-form-item label="总金额" prop="business_review_total_amount">
|
||||
<el-input v-model="formData.business_review_total_amount" clearable placeholder="系统自动计算"
|
||||
disabled />
|
||||
</el-form-item></el-col> <el-col :span="8">
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="8">
|
||||
<el-form-item label="税率" prop="tax_rate">
|
||||
<el-select class="flex-1 " v-model="formData.tax_rate" clearable placeholder="请选择税率">
|
||||
<el-option v-for="(item, index) in dictData.tax_rate" :key="index" :label="item.name"
|
||||
:value="parseInt(item.value)" />
|
||||
<el-option v-for="(item, index) in dictData.tax_rate" :key="index"
|
||||
:label="item.name" :value="parseInt(item.value)" />
|
||||
</el-select>
|
||||
</el-form-item></el-col> <el-col :span="8">
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="8">
|
||||
<el-form-item label="付款方式" prop="pay_type">
|
||||
<el-select class="flex-1" v-model="formData.pay_type" clearable placeholder="请选择付款方式">
|
||||
<el-option v-for="(item, index) in dictData.pay_type" :key="index" :label="item.name"
|
||||
:value="parseInt(item.value)" />
|
||||
<el-option v-for="(item, index) in dictData.pay_type" :key="index"
|
||||
:label="item.name" :value="parseInt(item.value)" />
|
||||
</el-select>
|
||||
</el-form-item></el-col> <el-col :span="8">
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="8">
|
||||
<el-form-item label="付款比例" prop="pay_rate">
|
||||
<el-input v-model="formData.pay_rate" clearable placeholder="请输入付款比例" />
|
||||
</el-form-item></el-col> <el-col :span="8">
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="8">
|
||||
<el-form-item label="商务合同偏差" prop="business_contract_deviation">
|
||||
<el-input v-model="formData.business_contract_deviation" clearable
|
||||
placeholder="请输入商务合同偏差" />
|
||||
</el-form-item></el-col> <el-col :span="8">
|
||||
</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>
|
||||
</el-col>
|
||||
<el-col :span="24">
|
||||
<el-form-item label="商务审查附件" prop="business_contract_deviation_annex">
|
||||
<uploadAnnex :formData="formData" value="business_contract_deviation_annex"></uploadAnnex>
|
||||
<uploadAnnex :formData="formData" value="business_contract_deviation_annex">
|
||||
</uploadAnnex>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
<div class="tit">审查明细</div>
|
||||
</el-card>
|
||||
|
||||
<el-card>
|
||||
<template #header>
|
||||
审查明细
|
||||
</template>
|
||||
<div style="margin-bottom: 30px;">
|
||||
<el-table :data="tableData">
|
||||
<el-table-column label="序号">
|
||||
@ -176,7 +206,8 @@
|
||||
</el-table-column>
|
||||
<el-table-column label="点数" prop="points">
|
||||
<template #default="{ row }">
|
||||
<el-input v-model="row.points" type="number" @change="calcTotalAmount" /> </template>
|
||||
<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 }">
|
||||
@ -191,6 +222,8 @@
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
</div>
|
||||
</el-card>
|
||||
|
||||
</el-form>
|
||||
<el-dialog v-model="showDialog" title="选择标书" width="70%">
|
||||
<biddocumentTable @customEvent="customEvent" :project_id="project?.id || ''"></biddocumentTable>
|
||||
|
@ -1,13 +1,15 @@
|
||||
<template>
|
||||
<div class="edit-popup">
|
||||
<popup ref="popupRef" :title="popupTitle" :async="true" width="80%" @confirm="handleSubmit" @close="handleClose">
|
||||
<popup ref="popupRef" :title="popupTitle" :async="true" width="80%" @confirm="handleSubmit"
|
||||
@close="handleClose">
|
||||
<el-form ref="formRef" :model="formData" label-width="90px" :rules="formRules">
|
||||
<el-row>
|
||||
|
||||
<el-col :span="8">
|
||||
<el-form-item label="标书审查" prop="bid_document_examination_id"
|
||||
: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-col>
|
||||
|
||||
@ -84,8 +86,6 @@ import Popup from '@/components/popup/index.vue'
|
||||
import biddocumentTable from "@/components/document_examination/index.vue"
|
||||
import prodctTable from '@/components/product/index.vue'
|
||||
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'
|
||||
defineProps({
|
||||
dictData: {
|
||||
@ -114,6 +114,7 @@ const popupTitle = computed(() => {
|
||||
const formData = reactive({
|
||||
id: '',
|
||||
bid_document_examination_id: '',
|
||||
bid_document_examination_code: "",
|
||||
product_id: '',
|
||||
num: '',
|
||||
points: '',
|
||||
@ -138,7 +139,7 @@ const customEvent = (e: any) => {
|
||||
project_name.value = e.project_name
|
||||
project_code.value = e.project_code
|
||||
formData.bid_document_examination_id = e.id
|
||||
formData.code = e.code
|
||||
formData.bid_document_examination_code = e.code
|
||||
showDialog.value = false;
|
||||
|
||||
|
||||
|
@ -121,10 +121,11 @@ const handleAdd = async () => {
|
||||
|
||||
// 编辑
|
||||
const handleEdit = async (data: any) => {
|
||||
let res = await apiBidDocumentExaminationDetailDetail({ id: data.id })
|
||||
showEdit.value = true
|
||||
await nextTick()
|
||||
editRef.value?.open('edit')
|
||||
editRef.value?.setFormData(data)
|
||||
editRef.value?.setFormData(res)
|
||||
}
|
||||
|
||||
// 删除
|
||||
@ -144,4 +145,3 @@ const handledetail = async (data: any) => {
|
||||
}
|
||||
getLists()
|
||||
</script>
|
||||
|
||||
|
@ -1,7 +1,8 @@
|
||||
<template>
|
||||
<div class="edit-popup">
|
||||
|
||||
<popup ref="popupRef" :title="popupTitle" :async="true" width="80%" @confirm="handleSubmit" @close="handleClose">
|
||||
<popup ref="popupRef" :title="popupTitle" :async="true" width="80%" @confirm="handleSubmit"
|
||||
@close="handleClose">
|
||||
|
||||
<el-form ref="formRef" :model="formData" label-width="auto" :rules="formRules">
|
||||
|
||||
@ -10,25 +11,29 @@
|
||||
<el-row :gutter="10">
|
||||
|
||||
<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-form-item>
|
||||
</el-col>
|
||||
<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-form-item>
|
||||
</el-col>
|
||||
|
||||
<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-form-item>
|
||||
</el-col>
|
||||
|
||||
<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-form-item>
|
||||
</el-col>
|
||||
|
@ -42,22 +42,7 @@
|
||||
<el-input v-model="formData.remark" clearable placeholder="请输入备注" />
|
||||
</el-form-item>
|
||||
<el-form-item label="附件">
|
||||
<el-upload
|
||||
accept="doc, docx, xls, xlsx, ppt, pptx, pdf, txt, zip, rar, tar, jpg, png, gif, jpeg, webp, wmv, avi, mpg, mpeg, 3gp, mov, mp4, flv, f4v, rmvb, mkv"
|
||||
class="upload-demo" :show-file-list="false" aria-hidden="true"
|
||||
:headers="{ Token: userStore.token }" :action="base_url + '/upload/file'"
|
||||
:on-success="handleAvatarSuccess_four" ref="upload">
|
||||
<el-button type="primary">
|
||||
上传
|
||||
</el-button>
|
||||
</el-upload>
|
||||
<div>
|
||||
<div v-for="(item, index) in formDataannex" style="margin-left: 5px;display: block;">
|
||||
<a style="margin-left: 10px; color: #4a5dff; align-self: flex-start" :href="item.uri"
|
||||
target="_blank">{{ item.name }}</a>
|
||||
<span style="cursor: pointer;margin-left: 5px;" @click="delFileFn(index)">x</span>
|
||||
</div>
|
||||
</div>
|
||||
<uploadAnnex :formData="formData"></uploadAnnex>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
<el-dialog v-model="showDialog" title="选择项目" width="70%">
|
||||
@ -85,11 +70,7 @@ let props = defineProps({
|
||||
const emit = defineEmits(['success', 'close'])
|
||||
const formRef = shallowRef<FormInstance>()
|
||||
const popupRef = shallowRef<InstanceType<typeof Popup>>()
|
||||
|
||||
|
||||
const mode = ref('add')
|
||||
const orglist = reactive([])
|
||||
const jobs = reactive([])
|
||||
const project_name
|
||||
= ref('')
|
||||
const project_code
|
||||
@ -99,29 +80,9 @@ const custom_name
|
||||
const customer_demand_name = ref('')
|
||||
const formDataannex = reactive([])
|
||||
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({
|
||||
@ -191,15 +152,7 @@ const formRules = reactive<any>({
|
||||
|
||||
// 获取详情
|
||||
const setFormData = async (data: Record<any, any>) => {
|
||||
if (data.annex && data.annex.length > 0) {
|
||||
const arry1 = data.annex.map((item: any, index: any) => {
|
||||
return {
|
||||
name: `文件${index + 1}`,
|
||||
uri: item
|
||||
};
|
||||
});
|
||||
Object.assign(formDataannex, arry1)
|
||||
}
|
||||
|
||||
project_name.value = data.project_name
|
||||
custom_name.value = data.custom_name
|
||||
project_code.value = data.project_code
|
||||
@ -225,9 +178,7 @@ const getDetail = async (row: Record<string, any>) => {
|
||||
|
||||
// 提交按钮
|
||||
const handleSubmit = async () => {
|
||||
if (formDataannex.length > 0) {
|
||||
formData.annex = formDataannex.map((item) => item.uri)
|
||||
}
|
||||
|
||||
await formRef.value?.validate()
|
||||
const data = { ...formData, }
|
||||
mode.value == 'edit'
|
||||
|
@ -33,6 +33,7 @@
|
||||
<el-col :span="8">
|
||||
<el-form-item label="合同类型" prop="contract_type"
|
||||
:rules="[{ required: true, message: '不可为空', trigger: 'change' }]">
|
||||
|
||||
<el-select class="flex-1" v-model="formData.contract_type" clearable placeholder="请选择合同类型">
|
||||
<el-option v-for="(item, index) in dictData.contract_type" :key="index"
|
||||
:label="item.name" :value="parseInt(item.value)" />
|
||||
@ -100,7 +101,6 @@
|
||||
<el-input v-model="business_director_name" readonly clearable placeholder="请输入业务负责人" />
|
||||
</el-form-item></el-col>
|
||||
<el-col :span="24">
|
||||
|
||||
<el-form-item label="合同状态" prop="contract_status"
|
||||
:rules="[{ required: true, message: '不可为空', trigger: 'change' }]">
|
||||
<el-radio-group v-model="formData.contract_status" placeholder="请选择合同状态">
|
||||
@ -119,13 +119,14 @@
|
||||
value-format="YYYY-MM-DD" placeholder="选择合同有效期">
|
||||
</el-date-picker>
|
||||
</el-form-item></el-col><el-col :span="8">
|
||||
|
||||
<el-form-item label="签约日期" prop="contract_date"
|
||||
:rules="[{ required: true, message: '不可为空', trigger: 'change' }]">
|
||||
<el-date-picker class="flex-1 !flex" v-model="formData.contract_date" clearable type="date"
|
||||
value-format="YYYY-MM-DD" placeholder="选择签约日期">
|
||||
</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-input v-model="formData.main_content" clearable placeholder="请输入主要条款" />
|
||||
@ -134,64 +135,12 @@
|
||||
<el-input v-model="formData.remark" clearable placeholder="请输入备注" />
|
||||
</el-form-item></el-col><el-col :span="24">
|
||||
<el-form-item label="附件">
|
||||
<el-upload
|
||||
accept="doc, docx, xls, xlsx, ppt, pptx, pdf, txt, zip, rar, tar, jpg, png, gif, jpeg, webp, wmv, avi, mpg, mpeg, 3gp, mov, mp4, flv, f4v, rmvb, mkv"
|
||||
class="upload-demo" :show-file-list="false" aria-hidden="true"
|
||||
:headers="{ Token: userStore.token }" :action="base_url + '/upload/file'"
|
||||
:on-success="handleAvatarSuccess_four" ref="upload">
|
||||
<el-button type="primary">
|
||||
上传
|
||||
</el-button>
|
||||
</el-upload>
|
||||
|
||||
<div>
|
||||
<div v-for="(item, index) in formDataannex" style="margin-left: 5px;display: block;">
|
||||
<a style="margin-left: 10px; color: #4a5dff; align-self: flex-start"
|
||||
:href="item.uri" target="_blank">{{ item.name }}</a>
|
||||
<span style="cursor: pointer;margin-left: 5px;" @click="delFileFn(index)">x</span>
|
||||
</div>
|
||||
</div>
|
||||
<uploadAnnex :formData="formData"></uploadAnnex>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
<div style="margin-bottom: 30px;">回款计划</div>
|
||||
<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">
|
||||
<formTable :formData="formData.returned_money" :config="tableConfig" :dictData="dictData"></formTable>
|
||||
|
||||
<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-dialog v-model="showDialog" title="选择客户" width="70%">
|
||||
<customDialog @customEvent="customEvent"></customDialog>
|
||||
@ -207,7 +156,6 @@
|
||||
</el-dialog>
|
||||
</div>
|
||||
<personnelselector ref="personnel" @confirm="submituser" type="1"></personnelselector>
|
||||
<!-- <reviewprocess /> -->
|
||||
</popup>
|
||||
|
||||
</div>
|
||||
@ -220,23 +168,21 @@ import biddocumentTable from "@/components/biddocument/index.vue"
|
||||
import projectTable from "@/components/project/index.vue"
|
||||
import personnelselector from '@/components/personnelselector/index.vue'
|
||||
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 { toChinesNum } from "@/utils/util";
|
||||
import feedback from '@/utils/feedback'
|
||||
|
||||
|
||||
|
||||
let props = defineProps({
|
||||
project: Object
|
||||
})
|
||||
const { dictData } = useDictData('contract_type,contract_pricing_method,contract_status,pay_period')
|
||||
|
||||
const emit = defineEmits(['success', 'close'])
|
||||
const formRef = shallowRef<FormInstance>()
|
||||
const popupRef = shallowRef<InstanceType<typeof Popup>>()
|
||||
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 showDialog1 = ref(false)
|
||||
const showDialog2 = ref(false)
|
||||
@ -247,12 +193,7 @@ const bidding_code = ref('')
|
||||
const amount_daxie = ref('')
|
||||
const project_id = ref('')
|
||||
const business_director_name = ref('')
|
||||
const list1 = reactive([])
|
||||
const list2 = reactive([])
|
||||
const paymentList = reactive([{}])
|
||||
const personnel = ref<any>()
|
||||
import feedback from '@/utils/feedback'
|
||||
const userStore = useUserStore();
|
||||
//验证
|
||||
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) => {
|
||||
// 删除 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 { dictData } = useDictData('contract_type,contract_pricing_method,contract_status,pay_period')
|
||||
|
||||
);
|
||||
};
|
||||
|
||||
// 删除上传的文件
|
||||
const delFileFn = (index: number) => {
|
||||
formDataannex.splice(index, 1)
|
||||
}
|
||||
// 表单数据
|
||||
const formData = reactive({
|
||||
id: '',
|
||||
@ -336,6 +251,40 @@ const formData = reactive({
|
||||
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 = () => {
|
||||
@ -415,18 +364,6 @@ const formRules = reactive<any>({
|
||||
|
||||
// 获取详情
|
||||
const setFormData = async (data: Record<any, any>) => {
|
||||
if (data.annex && data.annex.length > 0) {
|
||||
|
||||
const arry1 = data.annex.map((item: any, index: any) => {
|
||||
return {
|
||||
name: `文件${index + 1}`,
|
||||
uri: item
|
||||
};
|
||||
});
|
||||
Object.assign(formDataannex, arry1)
|
||||
|
||||
}
|
||||
|
||||
for (const key in formData) {
|
||||
if (data[key] != null && data[key] != undefined) {
|
||||
//@ts-ignore
|
||||
@ -442,11 +379,7 @@ const setFormData = async (data: Record<any, any>) => {
|
||||
bidding_code.value = data.bid_document_no
|
||||
business_director_name.value = data.business_director_name
|
||||
let res = await apireturnedLists({ contract_id: data.id })
|
||||
paymentList.splice(0, 9999)
|
||||
res.lists.forEach((item: any) => {
|
||||
paymentList.push(item)
|
||||
})
|
||||
|
||||
formData.returned_money = res.lists
|
||||
|
||||
}
|
||||
|
||||
@ -460,18 +393,6 @@ const getDetail = async (row: Record<string, any>) => {
|
||||
|
||||
// 提交按钮
|
||||
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()
|
||||
const data = { ...formData, }
|
||||
mode.value == 'edit'
|
||||
|
@ -26,7 +26,7 @@
|
||||
<el-col :span="8">
|
||||
<el-form-item label="合同类型" prop="contract_id"
|
||||
: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"
|
||||
:label="item.name" :value="parseInt(item.value)" />
|
||||
</el-select>
|
||||
@ -95,44 +95,10 @@
|
||||
<el-input v-model="formData.negotiation_detail" clearable placeholder="请输入具体说明" />
|
||||
</el-form-item></el-col><el-col :span="24">
|
||||
<el-form-item label="签证报价表" prop="negotiation_quotation">
|
||||
<!-- <el-input v-model="formData.negotiation_quotation" clearable placeholder="请输入签证报价表" /> -->
|
||||
<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>
|
||||
<uploadAnnex :formData="formData" value="negotiation_quotation"></uploadAnnex>
|
||||
</el-form-item></el-col><el-col :span="24">
|
||||
<el-form-item label="洽商依据" prop="negotiation_basis">
|
||||
|
||||
<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>
|
||||
<uploadAnnex :formData="formData" value="negotiation_basis"></uploadAnnex>
|
||||
</el-form-item></el-col>
|
||||
</el-row>
|
||||
|
||||
@ -154,17 +120,10 @@ import { useDictData } from '@/hooks/useDictOptions'
|
||||
let props = defineProps({
|
||||
project: Object
|
||||
})
|
||||
|
||||
const { dictData } = useDictData('negotiation_type,contract_type,contract_pricing_method')
|
||||
|
||||
const emit = defineEmits(['success', 'close'])
|
||||
const formRef = shallowRef<FormInstance>()
|
||||
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 showDialog = ref(false)
|
||||
const contract_name = ref('')
|
||||
@ -176,50 +135,13 @@ const contract_type = ref('')
|
||||
const profit_rate = ref(0)
|
||||
const negotiation_no = ref('')
|
||||
const profit = ref(0)
|
||||
const formDataannex1 = reactive([])
|
||||
const formDataannex2 = reactive([])
|
||||
const contract_pricing_method = ref('')
|
||||
|
||||
// 弹窗标题
|
||||
const popupTitle = computed(() => {
|
||||
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({
|
||||
id: '',
|
||||
@ -304,28 +226,6 @@ watch(
|
||||
|
||||
// 获取详情
|
||||
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) {
|
||||
if (data[key] != null && data[key] != undefined) {
|
||||
//@ts-ignore
|
||||
@ -353,12 +253,7 @@ const getDetail = async (row: Record<string, any>) => {
|
||||
|
||||
// 提交按钮
|
||||
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()
|
||||
const data = { ...formData, }
|
||||
mode.value == 'edit'
|
||||
|
@ -196,7 +196,7 @@
|
||||
</div>
|
||||
</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">
|
||||
<div class="tit" style="margin:20px 0">回款计划</div>
|
||||
<div>
|
||||
|
@ -3,10 +3,8 @@
|
||||
<popup ref="popupRef" :title="popupTitle" :async="true" width="550px" @confirm="handleSubmit"
|
||||
@close="handleClose">
|
||||
<el-form ref="formRef" :model="formData" label-width="90px" :rules="formRules">
|
||||
<el-row>
|
||||
<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="请选择客户" @click="showDialog = true" />
|
||||
</el-form-item>
|
||||
<el-form-item label="姓名" prop="name">
|
||||
<el-input v-model="formData.name" clearable placeholder="请输入姓名" />
|
||||
@ -24,13 +22,11 @@
|
||||
<el-input v-model="formData.email" clearable placeholder="请输入邮箱" />
|
||||
</el-form-item>
|
||||
<el-form-item label="备注" prop="notes">
|
||||
<el-input v-model="formData.notes" clearable placeholder="请输入备注" />
|
||||
<el-input v-model="formData.notes" clearable placeholder="请输入备注" type="textarea" />
|
||||
</el-form-item>
|
||||
<el-form-item label="附件">
|
||||
<uploadAnnex :formData="formData"></uploadAnnex>
|
||||
|
||||
</el-form-item>
|
||||
</el-row>
|
||||
<el-dialog v-model="showDialog" title="选择客户" width="70%">
|
||||
<customDialog @customEvent="customEvent"></customDialog>
|
||||
</el-dialog>
|
||||
@ -48,16 +44,6 @@ import { apiCustomContactsAdd, apiCustomContactsEdit, apiCustomContactsDetail }
|
||||
import { apiCustomLists } from '@/api/custom'
|
||||
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({
|
||||
dictData: {
|
||||
type: Object as PropType<Record<string, any[]>>,
|
||||
@ -147,12 +133,6 @@ const handleSubmit = async () => {
|
||||
emit('success')
|
||||
}
|
||||
|
||||
// 选择客户
|
||||
const handleCurrentChange = (e: any) => {
|
||||
formData.custom_name = e.name
|
||||
formData.custom_id = e.id
|
||||
showDialog.value = false
|
||||
}
|
||||
|
||||
//打开弹窗
|
||||
const open = (type = 'add') => {
|
||||
|
@ -1,8 +1,8 @@
|
||||
<template>
|
||||
<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">
|
||||
<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-input v-model="formData.name" clearable placeholder="请输入主题" />
|
||||
</el-form-item>
|
||||
@ -28,9 +28,9 @@
|
||||
<el-input v-model="formData.executor" clearable placeholder="请输入执行人" />
|
||||
</el-form-item>
|
||||
<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 label="附件/现场照片" prop="annex">
|
||||
<el-form-item label="附件" prop="annex">
|
||||
<uploadAnnex :formData="formData"></uploadAnnex>
|
||||
</el-form-item>
|
||||
<el-form-item label="位置" prop="coordinate">
|
||||
@ -54,7 +54,6 @@
|
||||
import type { FormInstance } from 'element-plus'
|
||||
import Popup from '@/components/popup/index.vue'
|
||||
import { apiCustomFollowAdd, apiCustomFollowEdit, apiCustomFollowDetail } from '@/api/custom_follow'
|
||||
import { timeFormat } from '@/utils/util'
|
||||
import type { PropType } from 'vue'
|
||||
import { usePaging } from '@/hooks/usePaging'
|
||||
import { apiCustomLists } from '@/api/custom'
|
||||
|
@ -43,18 +43,6 @@
|
||||
<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="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">
|
||||
<template #default="{ row }">
|
||||
<el-button v-perms="['custom.customer_demand_solution/edit']" type="primary" link
|
||||
@ -154,4 +142,3 @@ const handledetail = async (data: any) => {
|
||||
|
||||
getLists()
|
||||
</script>
|
||||
|
||||
|
@ -21,7 +21,7 @@
|
||||
|
||||
<el-col :span="8">
|
||||
<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-col> <el-col :span="8">
|
||||
<el-form-item label="项目编码" prop="contract_id">
|
||||
@ -53,29 +53,9 @@
|
||||
<el-input v-model="formData.remark" type="textarea" clearable placeholder="请输入备注" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
|
||||
|
||||
<el-col :span="24">
|
||||
|
||||
<el-form-item label="附件">
|
||||
<el-upload
|
||||
accept="doc, docx, xls, xlsx, ppt, pptx, pdf, txt, zip, rar, tar, jpg, png, gif, jpeg, webp, wmv, avi, mpg, mpeg, 3gp, mov, mp4, flv, f4v, rmvb, mkv"
|
||||
class="upload-demo" :show-file-list="false" aria-hidden="true"
|
||||
:headers="{ Token: userStore.token }" :action="base_url + '/upload/file'"
|
||||
:on-success="handleAvatarSuccess_four" ref="upload">
|
||||
<el-button type="primary">
|
||||
上传
|
||||
</el-button>
|
||||
</el-upload>
|
||||
|
||||
<div>
|
||||
<div v-for="(item, index) in formDataannex" style="margin-left: 5px;display: block;">
|
||||
<a style="margin-left: 10px; color: #4a5dff; align-self: flex-start"
|
||||
:href="item.uri" target="_blank">{{ item.name }}</a>
|
||||
<span style="cursor: pointer;margin-left: 5px;" @click="delFileFn(index)">x</span>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<uploadAnnex :formData="formData"></uploadAnnex>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
@ -84,7 +64,7 @@
|
||||
<el-col :span="24" v-if="mode == 'add'">
|
||||
<div style=" display: flex;justify-content: flex-end;margin-bottom: 30px;">
|
||||
<el-button @click="showDialog = true" type="primary" plain>选择材料</el-button>
|
||||
|
||||
<toolTip content="可在项目管理-项目预算-材料预算-材料预算添加"></toolTip>
|
||||
</div>
|
||||
</el-col>
|
||||
<el-row v-if="mode == 'add'">
|
||||
@ -169,50 +149,24 @@
|
||||
import materialDialog from '@/components/material_budget_detail/index.vue'
|
||||
import type { FormInstance } from 'element-plus'
|
||||
import Popup from '@/components/popup/index.vue'
|
||||
import { toChinesNum } from "@/utils/util";
|
||||
import projectDialog from '@/components/project/index.vue'
|
||||
import { materialrequestAdd, materialrequestEdit, materialrequestDetail } from '@/api/material_purchase_request'
|
||||
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 configs from "@/config"
|
||||
import useUserStore from "@/stores/modules/user";
|
||||
const list1 = reactive([])
|
||||
const list2 = reactive([])
|
||||
import { deptAll } from '@/api/org/department'
|
||||
import { getAll } from '@/api/org/organization'
|
||||
|
||||
|
||||
const base_url = configs.baseUrl + configs.urlPrefix
|
||||
const userStore = useUserStore();
|
||||
const active = ref(0)
|
||||
const formDataannex = reactive([])
|
||||
const project_name = ref('')
|
||||
const project_code = ref('')
|
||||
|
||||
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) => {
|
||||
// 在 row 后面插入一行数据
|
||||
const index = tablist1.indexOf(row);
|
||||
|
@ -90,29 +90,14 @@
|
||||
<el-input v-model="formData.remark" clearable placeholder="请输入备注" />
|
||||
</el-form-item> </el-col> <el-col :span="8">
|
||||
<el-form-item label="附件">
|
||||
<el-upload
|
||||
accept="doc, docx, xls, xlsx, ppt, pptx, pdf, txt, zip, rar, tar, jpg, png, gif, jpeg, webp, wmv, avi, mpg, mpeg, 3gp, mov, mp4, flv, f4v, rmvb, mkv"
|
||||
class="upload-demo" :show-file-list="false" aria-hidden="true"
|
||||
:headers="{ Token: userStore.token }" :action="base_url + '/upload/file'"
|
||||
:on-success="handleAvatarSuccess_four" ref="upload">
|
||||
<el-button type="primary">
|
||||
上传
|
||||
</el-button>
|
||||
</el-upload>
|
||||
|
||||
<div>
|
||||
<div v-for="(item, index) in formDataannex" style="margin-left: 5px;display: block;">
|
||||
<a style="margin-left: 10px; color: #4a5dff; align-self: flex-start"
|
||||
:href="item.uri" target="_blank">{{ item.name }}</a>
|
||||
<span style="cursor: pointer;margin-left: 5px;" @click="delFileFn(index)">x</span>
|
||||
</div>
|
||||
</div>
|
||||
<uploadAnnex :formData="formData"></uploadAnnex>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
<div style=" display: flex;justify-content: flex-end;margin-bottom: 30px;">
|
||||
<el-button @click="showDialog2 = true" type="primary" :disabled="!formData.project_id"
|
||||
plain>选择采购申请</el-button>
|
||||
<toolTip content="可在材料管理-采购申请-采购申请添加"></toolTip>
|
||||
</div>
|
||||
<el-row>
|
||||
<el-col :span="24">
|
||||
@ -121,7 +106,6 @@
|
||||
<el-table :data="materialList">
|
||||
<el-table-column label="序号">
|
||||
<template #default="{ row }">
|
||||
<!-- <el-button @click="handleAdd1(row)">+</el-button> -->
|
||||
<el-button @click="handleDelete1(row)">-</el-button>
|
||||
</template>
|
||||
</el-table-column>
|
||||
@ -267,9 +251,8 @@ import projectTable from '@/components/project/index.vue'
|
||||
import suppliertable from '@/components/supplier/index.vue'
|
||||
import { useDictData } from '@/hooks/useDictOptions'
|
||||
import prodctTable from '@/components/Materialprocurement_details/index.vue'
|
||||
|
||||
import { paymentplanLists } from '@/api/paymentplan'
|
||||
import { apiProcurementContractDetailLists } from '@/api/procurement_contract_detail'
|
||||
import { paymentplanLists, paymentplanDelete } from '@/api/paymentplan'
|
||||
import { apiProcurementContractDetailLists, apiProcurementContractDetailDelete } from '@/api/procurement_contract_detail'
|
||||
import { apiProcurementContractAdd, apiProcurementContractEdit, apiProcurementContractDetail } from '@/api/procurement_contract'
|
||||
const { dictData } = useDictData('procurement_contract_type,pay_type,tax_rate,account_period,pay_period')
|
||||
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) => {
|
||||
// 在 row 后面插入一行数据
|
||||
const index = paymentList.indexOf(row);
|
||||
paymentList.splice(index + 1, 0, {});
|
||||
};
|
||||
|
||||
const handleDelete = (row: any) => {
|
||||
if (paymentList.length <= 1) return
|
||||
const handleDelete = async (row: any) => {
|
||||
// if (paymentList.length <= 1) return
|
||||
if (row.id) await paymentplanDelete({ id: row.id })
|
||||
// 删除 row
|
||||
const index = paymentList.indexOf(row);
|
||||
paymentList.splice(index, 1);
|
||||
@ -346,7 +308,8 @@ const handleAdd1 = (row: any) => {
|
||||
materialList.splice(index + 1, 0, {});
|
||||
};
|
||||
|
||||
const handleDelete1 = (row: any) => {
|
||||
const handleDelete1 = async (row: any) => {
|
||||
if (row.id) await apiProcurementContractDetailDelete({ id: row.id })
|
||||
// 删除 row
|
||||
const index = materialList.indexOf(row);
|
||||
materialList.splice(index, 1);
|
||||
@ -381,6 +344,7 @@ const procurementList = (id) => {
|
||||
const paymentplanList = (id: any) => {
|
||||
paymentplanLists({ 'page_no': 1, 'page_size': 5000, 'contract_type': 1, 'contract_id': id }).then((res) => {
|
||||
const data = res.lists.map((item: any) => ({
|
||||
id: item.id,
|
||||
'period': item.period,
|
||||
'pay_date': item.pay_date,
|
||||
'amount': item.amount,
|
||||
@ -476,15 +440,6 @@ const formRules = reactive<any>({
|
||||
|
||||
// 获取详情
|
||||
const setFormData = async (data: Record<any, any>) => {
|
||||
if (data.annex && data.annex.length > 0) {
|
||||
const arry1 = data.annex.map((item: any, index: any) => {
|
||||
return {
|
||||
name: `文件${index + 1}`,
|
||||
uri: item
|
||||
};
|
||||
});
|
||||
Object.assign(formDataannex, arry1)
|
||||
}
|
||||
for (const key in formData) {
|
||||
if (data[key] != null && data[key] != undefined) {
|
||||
//@ts-ignore
|
||||
@ -498,6 +453,8 @@ const setFormData = async (data: Record<any, any>) => {
|
||||
contract_no.value = data.contract_no
|
||||
supplier_name.value = data.supplier_name
|
||||
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 showDtail = ref(false)
|
||||
const projectList = ref([])
|
||||
const supplierList = ref([])
|
||||
// 查询条件
|
||||
const queryParams = reactive({
|
||||
supplier_id: '',
|
||||
@ -147,21 +145,5 @@ const handleDetail = async (data: any) => {
|
||||
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()
|
||||
</script>
|
||||
|
@ -44,10 +44,10 @@
|
||||
<el-table-column label="参数说明" prop="material_parameter_description" show-overflow-tooltip />
|
||||
<el-table-column label="操作" width="160" fixed="right">
|
||||
<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)">
|
||||
编辑
|
||||
</el-button>
|
||||
</el-button> -->
|
||||
<el-button v-perms="['procurement_contract_detail/delete']" type="danger" link
|
||||
@click="handleDelete(row.id)">
|
||||
删除
|
||||
@ -71,7 +71,7 @@
|
||||
<script lang="ts" setup name="procurementContractDetailLists">
|
||||
import { usePaging } from '@/hooks/usePaging'
|
||||
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 feedback from '@/utils/feedback'
|
||||
import EditPopup from './edit.vue'
|
||||
|
@ -47,7 +47,7 @@
|
||||
<el-descriptions-item label="负责人" label-align="left" align="left" label-class-name="my-label">
|
||||
{{ formData.person }}</el-descriptions-item>
|
||||
<el-descriptions-item label="项目内容" label-align="left" align="left" label-class-name="my-label">
|
||||
{{ formData.project_content }}</el-descriptions-item>
|
||||
{{ formData.project_content_text }}</el-descriptions-item>
|
||||
<el-descriptions-item label="竞争对手" label-align="left" align="left" label-class-name="my-label">
|
||||
{{ formData.competitor }}</el-descriptions-item>
|
||||
<el-descriptions-item label="项目建设资金来源" label-align="left" align="left" label-class-name="my-label"> {{
|
||||
|
@ -3,12 +3,12 @@
|
||||
<popup ref="popupRef" :title="popupTitle" :async="true" width="80%" @confirm="handleSubmit"
|
||||
@close="handleClose">
|
||||
<el-form ref="formRef" :model="formData" label-width="auto" :rules="formRules">
|
||||
<el-row :gutter="10">
|
||||
<el-row>
|
||||
<el-col :span="8">
|
||||
<el-form-item label="客户名称" prop="custom_name"
|
||||
:rules="[{ required: true, message: '不可为空', trigger: 'blur' }]">
|
||||
<el-input v-model="formData.custom_name" @click="showDialog = true" clearable
|
||||
placeholder="请选择客户" />
|
||||
placeholder="请选择客户" class="flex-1" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="8">
|
||||
@ -18,6 +18,7 @@
|
||||
<el-option v-for="(item, index) in protype" :key="index" :label="item.name"
|
||||
:value="parseInt(item.id)" />
|
||||
</el-select>
|
||||
<ToolTip content="可在项目管理--项目设置--项目类型设置里面添加项目类型"></ToolTip>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="8">
|
||||
@ -152,8 +153,8 @@
|
||||
<el-col :span="12">
|
||||
<el-form-item label="建设方财务状况" prop="construction_financial_status">
|
||||
<el-radio-group v-model="formData.construction_financial_status" placeholder="请选择建设方财务状况">
|
||||
<el-radio v-for="(item, index) in dictData.construction_financial_status" :key="index"
|
||||
:label="parseInt(item.value)">
|
||||
<el-radio v-for="( item, index ) in dictData.construction_financial_status "
|
||||
:key="index" :label="parseInt(item.value)">
|
||||
{{ item.name }}
|
||||
</el-radio>
|
||||
</el-radio-group>
|
||||
|
@ -7,8 +7,7 @@
|
||||
<el-col :span="12">
|
||||
<el-form-item label="项目名称" prop="project_id" @click="showDialog = true"
|
||||
:rules="[{ required: true, message: '不可为空', trigger: 'change' }]">
|
||||
<el-input v-model="project_name" readonly clearable placeholder="请输入项目名称"
|
||||
:disabled="project" />
|
||||
<el-input v-model="project_name" readonly clearable placeholder="请输入项目名称" />
|
||||
</el-form-item></el-col><el-col :span="12">
|
||||
<el-form-item label="项目编码" prop="project_id">
|
||||
<el-input v-model="project_code" disabled clearable placeholder="系统自动填写" />
|
||||
@ -27,7 +26,7 @@
|
||||
<el-form-item label="联系电话" prop="contact_phone"
|
||||
:rules="[{ validator: checkPhone, trigger: 'blur' }]">
|
||||
<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-radio-group v-model="formData.estimate_source" placeholder="请选择概算来源">
|
||||
<el-radio v-for="(item, index) in dictData.estimate_source" :key="index"
|
||||
@ -35,17 +34,21 @@
|
||||
{{ item.name }}
|
||||
</el-radio>
|
||||
</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-input v-model="formData.create_user" clearable placeholder="请输入制单人" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-form-item label="报价日期" prop="quotation_date">
|
||||
<el-date-picker class="flex-1 !flex" v-model="formData.quotation_date" clearable type="date"
|
||||
value-format="YYYY-MM-DD" placeholder="选择报价日期">
|
||||
</el-date-picker>
|
||||
</el-form-item></el-col>
|
||||
<el-col :span="24">
|
||||
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-form-item label="发票类型" prop="invoice_type">
|
||||
<el-radio-group v-model="formData.invoice_type" placeholder="请选择发票类型">
|
||||
<el-radio v-for="(item, index) in dictData.invoice_type" :key="index"
|
||||
@ -55,37 +58,27 @@
|
||||
</el-radio-group>
|
||||
</el-form-item></el-col><el-col :span="12">
|
||||
<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"
|
||||
:value="parseInt(item.id)" />
|
||||
</el-select>
|
||||
<!-- <el-input v-model="formData.technician" clearable placeholder="请输入技术人员id" /> -->
|
||||
</el-form-item></el-col><el-col :span="12">
|
||||
</el-select> -->
|
||||
<el-input v-model="formData.technician_name" @click="openUserList" clearable
|
||||
placeholder="点击选择技术人员" readonly />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-form-item label="概算金额" prop="estimate_amount">
|
||||
<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-input v-model="formData.ask" clearable placeholder="请输入要求" />
|
||||
</el-form-item></el-col><el-col :span="24">
|
||||
<el-input v-model="formData.ask" clearable placeholder="请输入要求" type="textarea" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-form-item label="附件">
|
||||
<el-upload
|
||||
accept="doc, docx, xls, xlsx, ppt, pptx, pdf, txt, zip, rar, tar, jpg, png, gif, jpeg, webp, wmv, avi, mpg, mpeg, 3gp, mov, mp4, flv, f4v, rmvb, mkv"
|
||||
class="upload-demo" :show-file-list="false" aria-hidden="true"
|
||||
:headers="{ Token: userStore.token }" :action="base_url + '/upload/file'"
|
||||
:on-success="handleAvatarSuccess_four" ref="upload">
|
||||
<el-button type="primary">
|
||||
上传
|
||||
</el-button>
|
||||
</el-upload>
|
||||
|
||||
<div>
|
||||
<div v-for="(item, index) in formDataannex" style="margin-left: 5px;display: block;">
|
||||
<a style="margin-left: 10px; color: #4a5dff; align-self: flex-start"
|
||||
:href="item.uri" target="_blank">{{ item.name }}</a>
|
||||
<span style="cursor: pointer;margin-left: 5px;" @click="delFileFn(index)">x</span>
|
||||
</div>
|
||||
</div>
|
||||
<uploadAnnex :formData="formData"></uploadAnnex>
|
||||
</el-form-item>
|
||||
|
||||
</el-col>
|
||||
@ -104,6 +97,10 @@
|
||||
<contactsTable @customEvent="customEvent2" :custom_id="customid"></contactsTable>
|
||||
</el-dialog>
|
||||
</div>
|
||||
<div v-if="showDialog3">
|
||||
<personnelselector ref="personnel" @confirm="submituser" :type="1">
|
||||
</personnelselector>
|
||||
</div>
|
||||
</popup>
|
||||
</div>
|
||||
</template>
|
||||
@ -114,8 +111,11 @@ import Popup from '@/components/popup/index.vue'
|
||||
import projectTable from "@/components/project/index.vue"
|
||||
import contactsTable from "@/components/contacts/index.vue"
|
||||
import { useDictData } from '@/hooks/useDictOptions'
|
||||
import { getAdminsByDept } from '@/api/common'
|
||||
import { apiProjectEstimateAdd, apiProjectEstimateEdit, apiProjectEstimateDetail } from '@/api/project_estimate'
|
||||
import feedback from '@/utils/feedback'
|
||||
|
||||
|
||||
|
||||
let props = defineProps({
|
||||
project: Object
|
||||
})
|
||||
@ -125,8 +125,6 @@ const { dictData } = useDictData('estimate_source,invoice_type')
|
||||
const formRef = shallowRef<FormInstance>()
|
||||
const popupRef = shallowRef<InstanceType<typeof Popup>>()
|
||||
const mode = ref('add')
|
||||
const orglist = reactive([])
|
||||
const jobs = reactive([])
|
||||
const jlist = reactive([])
|
||||
const project_name
|
||||
= ref('')
|
||||
@ -138,31 +136,9 @@ const customer_demand_name = ref('')
|
||||
const contact_name = ref('')
|
||||
const contact_phone = ref('')
|
||||
const customid = ref('')
|
||||
const formDataannex = reactive([])
|
||||
import configs from "@/config"
|
||||
const base_url = configs.baseUrl + configs.urlPrefix
|
||||
import useUserStore from "@/stores/modules/user";
|
||||
import feedback from '@/utils/feedback'
|
||||
const personnel = ref<any>();
|
||||
|
||||
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({
|
||||
id: '',
|
||||
@ -173,16 +149,22 @@ const formData = reactive({
|
||||
quotation_date: '',
|
||||
invoice_type: '',
|
||||
technician: '',
|
||||
technician_name: "",
|
||||
estimate_amount: '',
|
||||
ask: '',
|
||||
annex: [],
|
||||
contact_id: ''
|
||||
})
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
// dialog
|
||||
const showDialog = ref(false)
|
||||
const showDialog1 = ref(false)
|
||||
const showDialog2 = ref(false)
|
||||
const showDialog3 = ref(false)
|
||||
|
||||
|
||||
const customEvent = (e: any) => {
|
||||
@ -210,6 +192,23 @@ const customEvent2 = (e: any) => {
|
||||
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 = () => {
|
||||
if (formData.project_id) {
|
||||
@ -222,11 +221,11 @@ const demandclck = () => {
|
||||
//验证
|
||||
const checkPhone = (rule: any, value: any, callback: (arg0: Error) => any) => {
|
||||
|
||||
if (value && !/^1\d{10}$/.test(value)) {
|
||||
callback(new Error('请输入正确的手机号码'));
|
||||
} else {
|
||||
callback()
|
||||
}
|
||||
// if (value && !/^1\d{10}$/.test(value)) {
|
||||
// callback(new Error('请输入正确的手机号码'));
|
||||
// } else {
|
||||
// callback()
|
||||
// }
|
||||
|
||||
}
|
||||
// 弹窗标题
|
||||
@ -257,15 +256,6 @@ const setFormData = async (data: Record<any, any>) => {
|
||||
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
|
||||
// formData.quotation_date = timeFormat(formData.quotation_date, 'YYYY-MM-DD ')
|
||||
}
|
||||
@ -280,10 +270,7 @@ const getDetail = async (row: Record<string, any>) => {
|
||||
|
||||
// 提交按钮
|
||||
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, }
|
||||
mode.value == 'edit'
|
||||
? await apiProjectEstimateEdit(data)
|
||||
|
@ -2,7 +2,7 @@
|
||||
<div class="edit-popup">
|
||||
<popup ref="popupRef" :title="popupTitle" :async="true" width="80%" @confirm="handleSubmit"
|
||||
@close="handleClose">
|
||||
<el-form ref="formRef" :model="formData" label-width="120px" :rules="formRules" inline>
|
||||
<el-form ref="formRef" :model="formData" label-width="100px" :rules="formRules">
|
||||
<div
|
||||
style="display: flex; flex-direction: row-reverse; justify-content: flex-start;margin-bottom: 30px;">
|
||||
|
||||
@ -18,9 +18,11 @@
|
||||
<el-col :span="8">
|
||||
<el-form-item label="项目名称" prop="project_id" @click="showDialog = true"
|
||||
:rules="[{ required: true, message: '不可为空', trigger: 'blur' }]">
|
||||
<el-input v-model="project_name" readonly clearable placeholder="请输入项目名称"
|
||||
:disabled="project" />
|
||||
</el-form-item> </el-col>
|
||||
<el-input v-model="project_name" readonly clearable placeholder="点击选择项目" :disabled="project"
|
||||
class="flex-1" />
|
||||
<toolTip content="需要在项目管理-项目预算-总预算编制的总预算项目"></toolTip>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="8">
|
||||
<el-form-item label="项目编码" prop="project_id">
|
||||
<el-input v-model="project_code" disabled clearable placeholder="系统自动填写" />
|
||||
@ -28,22 +30,7 @@
|
||||
</el-col>
|
||||
<el-col :span="8">
|
||||
<el-form-item label="附件">
|
||||
<el-upload
|
||||
accept="doc, docx, xls, xlsx, ppt, pptx, pdf, txt, zip, rar, tar, jpg, png, gif, jpeg, webp, wmv, avi, mpg, mpeg, 3gp, mov, mp4, flv, f4v, rmvb, mkv"
|
||||
class="upload-demo" :show-file-list="false" aria-hidden="true"
|
||||
:headers="{ Token: userStore.token }" :action="base_url + '/upload/file'"
|
||||
:on-success="handleAvatarSuccess_four" ref="upload">
|
||||
<el-button type="primary">
|
||||
上传
|
||||
</el-button>
|
||||
</el-upload>
|
||||
<div>
|
||||
<div v-for="(item, index) in formDataannex" style="margin-left: 5px;display: block;">
|
||||
<a style="margin-left: 10px; color: #4a5dff; align-self: flex-start"
|
||||
:href="item.uri" target="_blank">{{ item.name }}</a>
|
||||
<span style="cursor: pointer;margin-left: 5px;" @click="delFileFn(index)">x</span>
|
||||
</div>
|
||||
</div>
|
||||
<uploadAnnex :formData="formData"></uploadAnnex>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="24">
|
||||
@ -56,11 +43,8 @@
|
||||
<el-col :span="24">
|
||||
<div style=" display: flex;justify-content: flex-end;margin-bottom: 30px;">
|
||||
<el-button @click="showDialog1 = true" type="primary" plain>选择材料</el-button>
|
||||
<el-button type="primary" plain>清空</el-button>
|
||||
</div>
|
||||
</el-col>
|
||||
|
||||
|
||||
<el-col :span="24">
|
||||
<div style="margin-bottom: 30px;">材料预算清单</div>
|
||||
<div style="margin-bottom: 30px;">
|
||||
@ -164,11 +148,6 @@ const list1 = reactive([])
|
||||
const list2 = reactive([])
|
||||
import { deptAll } from '@/api/org/department'
|
||||
import { getAll } from '@/api/org/organization'
|
||||
import configs from "@/config"
|
||||
import useUserStore from "@/stores/modules/user";
|
||||
const base_url = configs.baseUrl + configs.urlPrefix
|
||||
const userStore = useUserStore();
|
||||
const formDataannex = reactive([])
|
||||
// 表单数据
|
||||
const formData = reactive({
|
||||
id: '',
|
||||
@ -193,7 +172,6 @@ const customEvent = (e) => {
|
||||
if (props.project) customEvent(props.project);
|
||||
|
||||
const customEvent1 = (e) => {
|
||||
|
||||
tableData.value.push({
|
||||
"material_id": e.id,
|
||||
"name": e.name,
|
||||
@ -213,27 +191,6 @@ const customEvent1 = (e) => {
|
||||
const popupTitle = computed(() => {
|
||||
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) => {
|
||||
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>) => {
|
||||
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)
|
||||
if (data.dept_id) {
|
||||
getlist1(data.org_id)
|
||||
@ -347,9 +293,7 @@ const getDetail = async (row: Record<string, any>) => {
|
||||
|
||||
// 提交按钮
|
||||
const handleSubmit = async () => {
|
||||
if (formDataannex.length > 0) {
|
||||
formData.annex = formDataannex.map((item: any) => item.uri)
|
||||
}
|
||||
|
||||
if (tableData.value.length > 0) {
|
||||
formData.material_budget_detail = tableData.value.map((item: any) => ({
|
||||
'id': item.id,
|
||||
|
@ -101,26 +101,7 @@
|
||||
<el-input v-model="formData.remark" clearable placeholder="请输入备注" />
|
||||
</el-form-item> </el-col> <el-col :span="8">
|
||||
<el-form-item label="附件">
|
||||
<el-upload
|
||||
accept="doc, docx, xls, xlsx, ppt, pptx, pdf, txt, zip, rar, tar, jpg, png, gif, jpeg, webp, wmv, avi, mpg, mpeg, 3gp, mov, mp4, flv, f4v, rmvb, mkv"
|
||||
class="upload-demo" :show-file-list="false" aria-hidden="true"
|
||||
:headers="{ Token: userStore.token }" :action="base_url + '/upload/file'"
|
||||
:on-success="handleAvatarSuccess_four" ref="upload">
|
||||
<el-button type="primary">
|
||||
上传
|
||||
</el-button>
|
||||
</el-upload>
|
||||
|
||||
<div>
|
||||
<div v-for="(item, index) in formDataannex" style="margin-left: 5px;display: block;">
|
||||
<a style="margin-left: 10px; color: #4a5dff; align-self: flex-start"
|
||||
:href="item.uri" target="_blank">{{ item.name }}</a>
|
||||
<span style="cursor: pointer;margin-left: 5px;" @click="delFileFn(index)">x</span>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
<uploadAnnex :formData="formData"></uploadAnnex>
|
||||
</el-form-item>
|
||||
|
||||
</el-col>
|
||||
@ -128,7 +109,7 @@
|
||||
<div style=" display: flex;justify-content: flex-end;margin-bottom: 30px;">
|
||||
<el-button @click="showDialog2 = true" type="primary" plain
|
||||
:disabled="!formData.project_id">选择分包明细</el-button>
|
||||
|
||||
<toolTip content="可在项目管理-项目预算-分包预算-分包预算添加"></toolTip>
|
||||
</div>
|
||||
<el-row>
|
||||
<el-col :span="24">
|
||||
@ -302,32 +283,12 @@ 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 { 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) => {
|
||||
// 在 row 后面插入一行数据
|
||||
const index = paymentList.indexOf(row);
|
||||
@ -501,15 +462,7 @@ const formRules = reactive<any>({
|
||||
|
||||
// 获取详情
|
||||
const setFormData = async (data: Record<any, any>) => {
|
||||
if (data.annex && data.annex.length > 0) {
|
||||
const arry1 = data.annex.map((item: any, index: any) => {
|
||||
return {
|
||||
name: `文件${index + 1}`,
|
||||
uri: item
|
||||
};
|
||||
});
|
||||
Object.assign(formDataannex, arry1)
|
||||
}
|
||||
|
||||
if (data.dept_id) {
|
||||
getlist1(data.org_id)
|
||||
}
|
||||
|
@ -106,8 +106,8 @@
|
||||
</div>
|
||||
</el-form>
|
||||
<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>
|
||||
</div>
|
||||
</template>
|
||||
|
@ -136,7 +136,7 @@
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
</div>
|
||||
<formTable :formData="formData.entry_problem" :config="tableConfig"></formTable>
|
||||
<formTable :formData="formData.entry_problem" :config="tableConfig" :dictData="dictData"></formTable>
|
||||
|
||||
</popup>
|
||||
</div>
|
||||
|
@ -76,7 +76,7 @@
|
||||
:query="{ project_id: formData.project_id, node_type: 2 }"></dialogTable>
|
||||
</el-dialog>
|
||||
</div>
|
||||
<formTable :formData="formData.problem" :config="tableConfig"></formTable>
|
||||
<formTable :formData="formData.problem" :config="tableConfig" :dictData="dictData"></formTable>
|
||||
</el-form>
|
||||
</popup>
|
||||
</div>
|
||||
|
@ -130,7 +130,7 @@
|
||||
</div>
|
||||
</el-form>
|
||||
<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>
|
||||
</div>
|
||||
</template>
|
||||
|
@ -129,7 +129,7 @@
|
||||
</div>
|
||||
</el-form>
|
||||
<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>
|
||||
</div>
|
||||
</template>
|
||||
|
@ -82,7 +82,7 @@
|
||||
</dialogTable>
|
||||
</el-dialog>
|
||||
</div>
|
||||
<formTable :formData="formData.problem" :config="tableConfig"></formTable>
|
||||
<formTable :formData="formData.problem" :config="tableConfig" :dictData="dictData"></formTable>
|
||||
</popup>
|
||||
</div>
|
||||
</template>
|
||||
|
@ -14,8 +14,8 @@
|
||||
<el-col :span="8">
|
||||
<el-form-item label="组织" prop="org_id"
|
||||
:rules="[{ required: true, message: '不可为空', trigger: 'blur' }]">
|
||||
<el-select v-model="formData.org_id" clearable placeholder="请选择组织"
|
||||
@change="deptrmt">
|
||||
<el-select v-model="formData.org_id" clearable placeholder="请选择组织" @change="deptrmt"
|
||||
class="flex-1">
|
||||
<el-option v-for="(item, index) in list1" :key="index" :label="item.name"
|
||||
:value="item.id" />
|
||||
</el-select>
|
||||
@ -24,7 +24,7 @@
|
||||
<el-col :span="8">
|
||||
<el-form-item label="部门" prop="dept_id"
|
||||
: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"
|
||||
:value="item.id" />
|
||||
</el-select>
|
||||
@ -33,10 +33,6 @@
|
||||
<el-col :span="8">
|
||||
<el-form-item label="供应商名称" prop="supplier_name"
|
||||
:rules="[{ required: true, message: '不可为空', trigger: 'blur' }]">
|
||||
|
||||
|
||||
|
||||
|
||||
<el-input v-model="formData.supplier_name" clearable placeholder="请输入" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
@ -53,29 +49,7 @@
|
||||
|
||||
<el-col :span="24">
|
||||
<el-form-item label="供应商照片" prop="supplier_photos">
|
||||
|
||||
|
||||
<!-- <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>
|
||||
<uploadAnnex :formData="formData" value="supplier_photos"></uploadAnnex>
|
||||
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
@ -110,7 +84,7 @@
|
||||
<el-form-item label="联系人" prop="contacts">
|
||||
<el-input v-model="formData.contacts" clearable placeholder="请输入" />
|
||||
</el-form-item></el-col>
|
||||
<el-col :span="24">
|
||||
<el-col :span="8">
|
||||
<el-form-item label="性别" label-width="130px" prop="contacts_sex">
|
||||
<el-radio-group v-model="formData.contacts_sex" placeholder="请选择性别">
|
||||
<el-radio v-for="(item, index) in dictData.sex" :key="index"
|
||||
@ -119,14 +93,11 @@
|
||||
</el-radio>
|
||||
</el-radio-group>
|
||||
</el-form-item></el-col>
|
||||
|
||||
|
||||
|
||||
<el-col :span="8">
|
||||
<el-form-item label="出生日期" prop="birthday">
|
||||
|
||||
<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-col :span="8">
|
||||
<el-form-item label="电话号码" prop="phone"
|
||||
@ -150,31 +121,10 @@
|
||||
|
||||
<el-col :span="8">
|
||||
<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 label="附件">
|
||||
<el-upload
|
||||
accept="doc, docx, xls, xlsx, ppt, pptx, pdf, txt, zip, rar, tar, jpg, png, gif, jpeg, webp, wmv, avi, mpg, mpeg, 3gp, mov, mp4, flv, f4v, rmvb, mkv"
|
||||
class="upload-demo" :show-file-list="false" aria-hidden="true"
|
||||
:headers="{ Token: userStore.token }" :action="base_url + '/upload/file'"
|
||||
:on-success="handleAvatarSuccess_four" ref="upload">
|
||||
<el-button type="primary">
|
||||
上传
|
||||
</el-button>
|
||||
</el-upload>
|
||||
|
||||
<div>
|
||||
<div v-for="(item, index) in formDataannex"
|
||||
style="margin-left: 5px;display: block;">
|
||||
<a style="margin-left: 10px; color: #4a5dff; align-self: flex-start"
|
||||
:href="item.uri" target="_blank">{{ item.name }}</a>
|
||||
<span style="cursor: pointer;margin-left: 5px;"
|
||||
@click="delFileFn(index)">x</span>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
<uploadAnnex :formData="formData"></uploadAnnex>
|
||||
</el-form-item></el-col>
|
||||
</el-row>
|
||||
</el-tab-pane>
|
||||
@ -264,51 +214,13 @@ const list2 = reactive([])
|
||||
import { deptAll } from '@/api/org/department'
|
||||
import { getAll } from '@/api/org/organization'
|
||||
import configs from "@/config"
|
||||
const base_url = configs.baseUrl + configs.urlPrefix
|
||||
import useUserStore from "@/stores/modules/user";
|
||||
|
||||
const userStore = useUserStore();
|
||||
const userInfo = userStore.userInfo
|
||||
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>) => {
|
||||
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) {
|
||||
getlist1(data.org_id)
|
||||
}
|
||||
@ -458,12 +360,6 @@ const getDetail = async (row: Record<string, any>) => {
|
||||
|
||||
// 提交按钮
|
||||
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()
|
||||
const data = { ...formData, }
|
||||
mode.value == 'edit'
|
||||
|
@ -54,7 +54,7 @@
|
||||
<el-table-column type="selection" 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_name" show-overflow-tooltip />
|
||||
<el-table-column label="品牌类别" prop="brand_category" show-overflow-tooltip />
|
||||
|
Loading…
x
Reference in New Issue
Block a user