This commit is contained in:
zmj 2024-03-15 16:51:33 +08:00
parent 2c7e66c9fb
commit b720bab372
10 changed files with 96 additions and 308 deletions

View File

@ -1,32 +0,0 @@
<template>
<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" ref="upload" :limit="5" multiple>
<el-button type="primary">
上传
</el-button>
</el-upload>
<div>
<div v-for="(item, index) in annex" 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="delFile(index)">x</span>
</div>
</div>
</template>
<script setup>
import { ref, defineProps, defineEmits } from "vue"
import configs from "@/config"
import useUserStore from "@/stores/modules/user";
const userStore = useUserStore();
const base_url = ref(configs.baseUrl + configs.urlPrefix)
const props = defineProps({
annex: Array
})
const emits = defineEmits(["handleAvatarSuccess", 'delFileFn']);
const handleAvatarSuccess = (res) => { emits("handleAvatarSuccess", res); }
const delFile = (index) => { emits("delFile", index); }
</script>

View File

@ -1,65 +1,63 @@
<template>
<div style="margin-bottom: 30px">
联系人
<!-- <el-button @click="handleAdd" v-if="!formData.contacts.length">+</el-button> -->
<div>
{{ config?.title || '' }}
</div>
<div style="margin-bottom: 30px">
<el-table :data="formData.contacts">
<el-table-column label="序号">
<div>
<el-table :data="formData">
<el-table-column label="操作">
<template #default="{ row }">
<el-button @click="handleAdd">+</el-button>
<el-button @click="handleDelete(row)">-</el-button>
</template>
</el-table-column>
<el-table-column label="姓名" prop="name">
<el-table-column :label="item.label" v-for="(item, index) in config.tableConfig" :key="index"
:prop="item[value]">
<template #default="{ row }">
<el-input v-model="row.name" />
</template>
</el-table-column>
<el-table-column label="职务" prop="duties">
<template #default="{ row }">
<el-input v-model="row.duties" />
</template>
</el-table-column>
<el-table-column label="办公电话" prop="telephone">
<template #default="{ row }">
<el-input v-model="row.telephone" />
</template>
</el-table-column>
<el-table-column label="手机号码" prop="mobile">
<template #default="{ row }">
<el-input v-model="row.mobile" />
</template>
</el-table-column>
<el-table-column label="电子邮箱" prop="email">
<template #default="{ row }">
<el-input v-model="row.email" />
</template>
</el-table-column>
<el-table-column label="传真" prop="fax">
<template #default="{ row }">
<el-input v-model="row.fax" />
<el-input v-model="row[item.value]" />
</template>
</el-table-column>
<template #empty>
<span class="cursor-pointer">暂无数据点击添加 <el-button @click="handleAdd">+</el-button></span>
</template>
</el-table>
</div>
</template>
<script lang="ts" setup>
import { ref, defineProps, onMounted } from "vue"
import { defineProps } from "vue"
const props = defineProps({
formData: {
type: Object,
require: true
},
config: {
type: Object,
require: true
}
})
// table
const list = props.config.tableConfig.map(item => item.value)
const getInitialData = () => {
return list.reduce((acc, curr) => {
acc[curr] = '';
return acc;
}, {});
}
const handleAdd = () => {
props.formData.push(getInitialData());
};
const handleDelete = async (row: any) => {
if (row.id) {
await props.config.deleteApi({ id: row.id });
}
const index = props.formData.indexOf(row);
props.formData.splice(index, 1);
};
</script>
</script>

View File

@ -39,6 +39,6 @@ const handleAvatarSuccess = (response: any) => {
};
//
const delFile = (index: number) => { props.formData.annex.splice(index, 1) }
const delFile = (index: number) => { props.formData[props.value].splice(index, 1) }
</script>

View File

@ -53,48 +53,43 @@
</el-col>
<el-col :span="8">
<el-form-item label="投标文件" prop="bidding_file">
<annexUpload :annex="formData.bidding_file" @handleAvatarSuccess="handleAvatarSuccess_four"
@delFile="delFileFn" />
<uploadAnnex :formData="formData" value="bidding_file"></uploadAnnex>
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="8">
<el-form-item label="招标控制价文件" prop="zbkzj_file" label-width="140px">
<annexUpload :annex="formData.zbkzj_file" @handleAvatarSuccess="handleAvatarSuccess_four1"
@delFile="delFileFn1" />
<uploadAnnex :formData="formData" value="zbkzj_file"></uploadAnnex>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="工程造价合同" prop="gczjht_file" label-width="120px">
<annexUpload :annex="formData.gczjht_file" @handleAvatarSuccess="handleAvatarSuccess_four2"
@delFile="delFileFn2" />
<uploadAnnex :formData="formData" value="gczjht_file"></uploadAnnex>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="项目变更、签证资料" prop="xmbgqzzl_file" label-width="170px">
<annexUpload :annex="formData.xmbgqzzl_file"
@handleAvatarSuccess="handleAvatarSuccess_four3" @delFile="delFileFn3" />
<uploadAnnex :formData="formData" value="xmbgqzzl_file"></uploadAnnex>
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="8">
<el-form-item label="送审概算、预算、结算资料" prop="ssgsysjs_file" label-width="200px">
<annexUpload :annex="formData.ssgsysjs_file"
@handleAvatarSuccess="handleAvatarSuccess_four4" @delFile="delFileFn4" />
<uploadAnnex :formData="formData" value="ssgsysjs_file"></uploadAnnex>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="往来函件" prop="wlhj_file">
<annexUpload :annex="formData.wlhj_file" @handleAvatarSuccess="handleAvatarSuccess_four5"
@delFile="delFileFn5" />
<uploadAnnex :formData="formData" value="wlhj_file"></uploadAnnex>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="其他资料" prop="other_file">
<annexUpload :annex="formData.other_file" @handleAvatarSuccess="handleAvatarSuccess_four6"
@delFile="delFileFn6" />
<uploadAnnex :formData="formData" value="other_file"></uploadAnnex>
</el-form-item>
</el-col>
</el-row>
@ -162,67 +157,6 @@ const customEvent = (e) => {
showDialog.value = false
}
const handleAvatarSuccess_four = (response: any) => {
// @ts-ignore
response.code != 0 ? formData.bidding_file.push({ uri: response.data.uri, name: response.data.name }) : ElMessage.error(response.msg);
};
//
const delFileFn = (index: number) => { formData.bidding_file.splice(index, 1) }
const handleAvatarSuccess_four1 = (response: any) => {
// @ts-ignore
response.code != 0 ? formData.zbkzj_file.push({ uri: response.data.uri, name: response.data.name }) : ElMessage.error(response.msg);
};
//
const delFileFn1 = (index: number) => { formData.zbkzj_file.splice(index, 1) }
const handleAvatarSuccess_four2 = (response: any) => {
// @ts-ignore
response.code != 0 ? formData.gczjht_file.push({ uri: response.data.uri, name: response.data.name }) : ElMessage.error(response.msg);
};
//
const delFileFn2 = (index: number) => { formData.gczjht_file.splice(index, 1) }
const handleAvatarSuccess_four3 = (response: any) => {
// @ts-ignore
response.code != 0 ? formData.xmbgqzzl_file.push({ uri: response.data.uri, name: response.data.name }) : ElMessage.error(response.msg);
};
//
const delFileFn3 = (index: number) => { formData.xmbgqzzl_file.splice(index, 1) }
const handleAvatarSuccess_four4 = (response: any) => {
// @ts-ignore
response.code != 0 ? formData.ssgsysjs_file.push({ uri: response.data.uri, name: response.data.name }) : ElMessage.error(response.msg);
};
//
const delFileFn4 = (index: number) => { formData.ssgsysjs_file.splice(index, 1) }
const handleAvatarSuccess_four5 = (response: any) => {
// @ts-ignore
response.code != 0 ? formData.wlhj_file.push({ uri: response.data.uri, name: response.data.name }) : ElMessage.error(response.msg);
};
//
const delFileFn5 = (index: number) => { formData.wlhj_file.splice(index, 1) }
const handleAvatarSuccess_four6 = (response: any) => {
// @ts-ignore
response.code != 0 ? formData.other_file.push({ uri: response.data.uri, name: response.data.name }) : ElMessage.error(response.msg);
};
//
const delFileFn6 = (index: number) => { formData.other_file.splice(index, 1) }
//
const formRules = reactive<any>({

View File

@ -40,11 +40,9 @@
</el-col>
<el-col :span="8">
<el-form-item label="附件" prop="annex">
<annexUpload :annex="formData.check_annex" @handleAvatarSuccess="handleAvatarSuccess_four"
@delFile="delFileFn" />
<uploadAnnex :formData="formData" value="check_annex"></uploadAnnex>
</el-form-item>
</el-col>
</el-row>
</el-form>
@ -103,15 +101,6 @@ const emit = defineEmits(['success', 'close'])
const formRef = shallowRef<FormInstance>()
const popupRef = shallowRef<InstanceType<typeof Popup>>()
const mode = ref('add')
const handleAvatarSuccess_four = (response: any) => {
Array.isArray(formData.check_annex) ? "" : formData.check_annex = []
// @ts-ignore
response.code != 0 ? formData.check_annex.push({ uri: response.data.uri, name: response.data.name }) : ElMessage.error(response.msg);
};
//
const delFileFn = (index: number) => { formData.check_annex.splice(index, 1) }
//
const popupTitle = computed(() => {

View File

@ -16,8 +16,8 @@
type="textarea" />
</el-form-item>
<el-form-item label="附件" prop="rectification_reply_annex">
<annexUpload :annex="formData.rectification_reply_annex"
@handleAvatarSuccess="handleAvatarSuccess_four" @delFile="delFileFn" />
<uploadAnnex :formData="formData" value="rectification_reply_annex"></uploadAnnex>
</el-form-item>
</el-form>
@ -42,14 +42,7 @@ const mode = ref('add')
const popupTitle = computed(() => {
return '监理回复'
})
const handleAvatarSuccess_four = (response: any) => {
Array.isArray(formData.rectification_reply_annex) ? '' : formData.rectification_reply_annex = []
// @ts-ignore
response.code != 0 ? formData.rectification_reply_annex.push({ uri: response.data.uri, name: response.data.name }) : ElMessage.error(response.msg);
};
//
const delFileFn = (index: number) => { formData.rectification_reply_annex.splice(index, 1) }
//
const formData = reactive({
id: '',

View File

@ -44,55 +44,8 @@
<el-dialog v-model="showDialog" title="选择项目" width="70%">
<dialogTable @customEvent="customEvent" :config="supervision_project" />
</el-dialog>
<formTable :formData="formData.contacts" :config="tableConfig"></formTable>
<!-- <FormTable></FormTable> -->
<!-- <div style="margin-bottom: 30px">
联系人
<el-button @click="handleAdd" v-if="!formData.contacts.length">+</el-button>
</div>
<div style="margin-bottom: 30px">
<el-table :data="formData.contacts">
<el-table-column label="序号">
<template #default="{ row }">
<el-button @click="handleAdd">+</el-button>
<el-button @click="handleDelete(row)">-</el-button>
</template>
</el-table-column>
<el-table-column label="姓名" prop="name">
<template #default="{ row }">
<el-input v-model="row.name" />
</template>
</el-table-column>
<el-table-column label="职务" prop="duties">
<template #default="{ row }">
<el-input v-model="row.duties" />
</template>
</el-table-column>
<el-table-column label="办公电话" prop="telephone">
<template #default="{ row }">
<el-input v-model="row.telephone" />
</template>
</el-table-column>
<el-table-column label="手机号码" prop="mobile">
<template #default="{ row }">
<el-input v-model="row.mobile" />
</template>
</el-table-column>
<el-table-column label="电子邮箱" prop="email">
<template #default="{ row }">
<el-input v-model="row.email" />
</template>
</el-table-column>
<el-table-column label="传真" prop="fax">
<template #default="{ row }">
<el-input v-model="row.fax" />
</template>
</el-table-column>
</el-table>
</div> -->
</el-form>
</popup>
</div>
@ -144,30 +97,46 @@ const formData = reactive({
contacts: [],
});
const tableConfig = reactive(
{
title: "联系人",
tableConfig: [
{
label: "姓名",
value: 'name'
},
{
label: "职务",
value: 'duties'
},
{
label: "办公电话",
value: 'telephone'
},
{
label: "手机号码",
value: 'mobile'
},
{
label: "电子邮箱",
value: 'email'
},
{
label: "传真",
value: 'fax'
},
],
deleteApi: apiSupervisionParticipatingUnitsContactsDelete,
}
)
const customEvent = (e) => {
formData.project_id = e.id;
formData.project_name = e.project_name;
showDialog.value = false;
};
const handleAdd = () => {
formData.contacts.push({
name: "",
duties: "",
telephone: "",
mobile: "",
email: "",
fax: "",
});
};
const handleDelete = async (row: any) => {
if (row.id) {
await apiSupervisionParticipatingUnitsContactsDelete({ id: row.id });
}
const index = formData.contacts.indexOf(row);
formData.contacts.splice(index, 1);
};
//
const formRules = reactive<any>({
project_id: [

View File

@ -26,8 +26,7 @@
type="textarea" />
</el-form-item>
<el-form-item label="附件" prop="rectification_annex">
<annexUpload :annex="formData.rectification_annex" @handleAvatarSuccess="handleAvatarSuccess_four"
@delFile="delFileFn" />
<uploadAnnex :formData="formData" value="rectification_annex"></uploadAnnex>
</el-form-item>
</el-form>
</popup>
@ -37,9 +36,9 @@
<script lang="ts" setup name="supervisionProblemEdit">
import type { FormInstance } from 'element-plus'
import Popup from '@/components/popup/index.vue'
import { apiSupervisionProblemAdd, apiSupervisionProblemEdit, apiSupervisionProblemDetail, apisupervision_problem } from '@/api/supervision_problem'
import { timeFormat } from '@/utils/util'
import { apiSupervisionProblemDetail, apisupervision_problem } from '@/api/supervision_problem'
import type { PropType } from 'vue'
defineProps({
dictData: {
type: Object as PropType<Record<string, any[]>>,
@ -66,14 +65,7 @@ const formData = reactive({
"rectification_opinion": "aa",
"rectification_annex": []
})
const handleAvatarSuccess_four = (response: any) => {
Array.isArray(formData.rectification_annex) ? '' : formData.rectification_annex = []
// @ts-ignore
response.code != 0 ? formData.rectification_annex.push({ uri: response.data.uri, name: response.data.name }) : ElMessage.error(response.msg);
};
//
const delFileFn = (index: number) => { formData.rectification_annex.splice(index, 1) }
//
const formRules = reactive<any>({

View File

@ -40,8 +40,7 @@
</el-col>
<el-col :span="8">
<el-form-item label="附件" prop="annex">
<annexUpload :annex="formData.check_annex" @handleAvatarSuccess="handleAvatarSuccess_four"
@delFile="delFileFn" />
<uploadAnnex :formData="formData" value="check_annex"></uploadAnnex>
</el-form-item>
</el-col>
@ -88,12 +87,9 @@
<script lang="ts" setup name="supervisionDiaryEdit">
import type { FormInstance } from 'element-plus'
import Popup from '@/components/popup/index.vue'
// import { apiSupervisionDiaryAdd, apiSupervisionDiaryEdit, apiSupervisionDiaryDetail } from '@/api/supervision_diary'
import { apisupervision_witness_sampling_detail } from '@/api/supervision_witness_sampling'
import { timeFormat } from '@/utils/util'
import type { PropType } from 'vue'
defineProps({
dictData: {
type: Object as PropType<Record<string, any[]>>,
@ -104,15 +100,6 @@ const emit = defineEmits(['success', 'close'])
const formRef = shallowRef<FormInstance>()
const popupRef = shallowRef<InstanceType<typeof Popup>>()
const mode = ref('add')
const handleAvatarSuccess_four = (response: any) => {
Array.isArray(formData.check_annex) ? "" : formData.check_annex = []
// @ts-ignore
response.code != 0 ? formData.check_annex.push({ uri: response.data.uri, name: response.data.name }) : ElMessage.error(response.msg);
};
//
const delFileFn = (index: number) => { formData.check_annex.splice(index, 1) }
//
const popupTitle = computed(() => {

View File

@ -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="90px" :rules="formRules">
<el-form ref="formRef" :model="formData" label-width="160px" :rules="formRules">
<el-row>
<el-col :span="8">
<el-form-item label="标识" prop="dataid">
@ -116,7 +116,7 @@
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="建筑结构类型" prop="type" label-width="120px">
<el-form-item label="建筑结构类型" prop="type">
<el-select class="flex-1" v-model="formData.type" clearable placeholder="请选择建筑结构类型">
<el-option v-for="(item, index) in dictData.building_structure_type " :key="index"
:label="item.name" :value="parseInt(item.value)" />
@ -169,7 +169,7 @@
</el-row>
<el-row>
<el-col :span="8">
<el-form-item label="工程师核定价" prop="gcshd" label-width="120px">
<el-form-item label="工程师核定价" prop="gcshd">
<el-input v-model="formData.gcshd" clearable placeholder="请输入工程师核定价" type="number" />
</el-form-item>
</el-col>
@ -196,7 +196,7 @@
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="审核部核定价" prop="shbhd" label-width="120px">
<el-form-item label="审核部核定价" prop="shbhd">
<el-input v-model="formData.shbhd" clearable placeholder="请输入审核部核定价" type="number" />
</el-form-item>
</el-col>
@ -225,27 +225,22 @@
<el-row>
<el-col :span="6">
<el-form-item label="结果文件" prop="result_file">
<annexUpload :annex="formData.result_file" @handleAvatarSuccess="handleAvatarSuccess_four"
@delFile="delFileFn" />
<uploadAnnex :formData="formData" value="result_file"></uploadAnnex>
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="项目负责人附件" prop="master_annex">
<annexUpload :annex="formData.master_annex" @handleAvatarSuccess="handleAvatarSuccess"
@delFile="delFileFn1" />
<uploadAnnex :formData="formData" value="master_annex"></uploadAnnex>
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="部门负责人附件" prop="bm_annex">
<annexUpload :annex="formData.bm_annex" @handleAvatarSuccess="handleAvatarSuccess2"
@delFile="delFileFn2" />
<uploadAnnex :formData="formData" value="bm_annex"></uploadAnnex>
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="审核部附件" prop="shb_annex">
<annexUpload :annex="formData.shb_annex" @handleAvatarSuccess="handleAvatarSuccess3"
@delFile="delFileFn3" />
<uploadAnnex :formData="formData" value="shb_annex"></uploadAnnex>
</el-form-item>
</el-col>
</el-row>
@ -257,19 +252,16 @@
<personnelselector ref="personnel" @confirm="submituser" type="1">
</personnelselector>
</div>
</el-form>
</popup>
</div>
</template>
<script lang="ts" setup name="taskHandlingThreeLevelReviewEdit">
import type { FormInstance } from 'element-plus'
import Popup from '@/components/popup/index.vue'
import { apiTaskHandlingThreeLevelReviewAdd, apiTaskHandlingThreeLevelReviewEdit, } from '@/api/task_handling_three_level_review'
import type { PropType } from 'vue'
import { cost_project } from "@/components/dialogTable/dialogTableConfig"
import file from "@/components/material/file.vue";
defineProps({
dictData: {
type: Object as PropType<Record<string, any[]>>,
@ -335,40 +327,6 @@ const formData = reactive({
})
const handleAvatarSuccess_four = (response: any) => {
// @ts-ignore
response.code != 0 ? formData.result_file.push({ uri: response.data.uri, name: response.data.name }) : ElMessage.error(response.msg);
};
//
const delFileFn = (index: number) => { formData.result_file.splice(index, 1) }
const handleAvatarSuccess = (response: any) => {
// @ts-ignore
response.code != 0 ? formData.master_annex.push({ uri: response.data.uri, name: response.data.name }) : ElMessage.error(response.msg);
};
//
const delFileFn1 = (index: number) => { formData.master_annex.splice(index, 1) }
const handleAvatarSuccess2 = (response: any) => {
// @ts-ignore
response.code != 0 ? formData.bm_annex.push({ uri: response.data.uri, name: response.data.name }) : ElMessage.error(response.msg);
};
//
const delFileFn2 = (index: number) => { formData.bm_annex.splice(index, 1) }
const handleAvatarSuccess3 = (response: any) => {
// @ts-ignore
response.code != 0 ? formData.shb_annex.push({ uri: response.data.uri, name: response.data.name }) : ElMessage.error(response.msg);
};
//
const delFileFn3 = (index: number) => { formData.shb_annex.splice(index, 1) }
//
const submituser = (e: any) => {