From ecff73f77630ecaec7f66503ed744149b49c6cf7 Mon Sep 17 00:00:00 2001 From: wangchengming <15110151257@163.com> Date: Fri, 6 Dec 2024 17:26:33 +0800 Subject: [PATCH] 1 --- src/views/Invest/BusinessPartner/Index.vue | 430 +++++++++++++++++---- 1 file changed, 362 insertions(+), 68 deletions(-) diff --git a/src/views/Invest/BusinessPartner/Index.vue b/src/views/Invest/BusinessPartner/Index.vue index f886bb7..8d891f2 100644 --- a/src/views/Invest/BusinessPartner/Index.vue +++ b/src/views/Invest/BusinessPartner/Index.vue @@ -41,35 +41,37 @@ </div> </div> <el-form + ref="Partnerform" :model="form1" + :rules="form1Rules" label-width="130rem" style="margin-top: 40rem" > <div class="formBarContent"> <el-row> <el-col :span="6"> - <el-form-item label="公司名称(个人)"> + <el-form-item label="公司名称(个人)" prop="companyName"> <el-input v-model="form1.companyName" /> </el-form-item> </el-col> <el-col :span="6"> - <el-form-item label="地址"> - <el-input v-model="form1.companyAddress" /> + <el-form-item label="地址" prop="address"> + <el-input v-model="form1.address" /> </el-form-item> </el-col> <el-col :span="6"> - <el-form-item label="联系电话"> - <el-input v-model="form1.phone" /> + <el-form-item label="联系电话" prop="phoneNumber"> + <el-input v-model="form1.phoneNumber" /> </el-form-item> </el-col> <el-col :span="6"> - <el-form-item label="电子邮箱"> + <el-form-item label="电子邮箱" prop="email"> <el-input v-model="form1.email" /> </el-form-item> </el-col> </el-row> <el-form-item label="擅长方向"> - <el-checkbox-group v-model="form1.excelIn"> + <el-checkbox-group v-model="form1.fieldType"> <el-checkbox v-for="(item, index) in excelInList" :key="'excelIn' + index" @@ -82,7 +84,7 @@ <el-col :span="12"> <el-form-item label="优势概念"> <el-input - v-model="form1.dominanceConcept" + v-model="form1.advantageConcept" :autosize="{ minRows: 6, maxRows: 6 }" type="textarea" /> @@ -91,7 +93,7 @@ <el-col :span="12"> <el-form-item label="合作意向概述"> <el-input - v-model="form1.intention" + v-model="form1.cooperationIntention" :autosize="{ minRows: 6, maxRows: 6 }" type="textarea" /> @@ -99,22 +101,47 @@ </el-col> </el-row> <el-form-item label="附件"> - <el-upload - class="upload-demo" - action="https://jsonplaceholder.typicode.com/posts/" - :file-list="fileList1" - > - <el-button - size="small" - type="primary" + <div class="upload-file"> + <el-upload + multiple + :action="uploadFileUrl" + :before-upload="handleBeforeUpload" + :file-list="fileList" + :limit="limit" + :on-error="handleUploadError" + :on-exceed="handleExceed" + :on-success="handleUploadSuccess" + :show-file-list="false" + class="upload-file-uploader" + ref="fileUpload" > - 上传 - </el-button> - </el-upload> + <!-- 上传按钮 --> + <el-button size="small" type="primary">上传</el-button> + <!-- 上传提示 --> + <div class="el-upload__tip" slot="tip" v-if="isShowTip"> + 请上传 + <template v-if="fileSize"> 大小不超过 <b style="color: #f56c6c">{{ fileSize }}MB</b> </template> + <template v-if="fileType"> 格式为 <b style="color: #f56c6c">{{ fileType.join("/") }}</b> </template> + 的文件 + </div> + </el-upload> + + <!-- 文件列表 --> + <transition-group class="upload-file-list el-upload-list el-upload-list--text" name="el-fade-in-linear" tag="ul"> + <li :key="file.url" class="el-upload-list__item ele-upload-list__item-content" v-for="(file, index) in fileList"> + <el-link :href="`${file.url}`" :underline="false" target="_blank"> + <span class="el-icon-document"> {{ getFileName(file.name) }} </span> + </el-link> + <div class="ele-upload-list__item-content-action"> + <el-link :underline="false" @click="handleDelete(index)" type="danger">删除</el-link> + </div> + </li> + </transition-group> + </div> </el-form-item> </div> <el-form-item style="text-align: center;border-top:1rem solid #B0B0B0;padding: 20rem 0rem"> - <el-button class="subBtn"> + <el-button class="subBtn" @click="handleAddPartner"> 提交 </el-button> </el-form-item> @@ -133,28 +160,30 @@ </div> <el-form :model="form" - label-width="130rem" + :rules="formRules" + ref="Supperform" + label-width="140rem" style="margin-top: 40rem" > <div class="formBarContent"> <el-row> <el-col :span="6"> - <el-form-item label="公司名称"> + <el-form-item label="公司名称" prop="companyName"> <el-input v-model="form.companyName" /> </el-form-item> </el-col> <el-col :span="6"> - <el-form-item label="公司地址"> - <el-input v-model="form.companyAddress" /> + <el-form-item label="公司地址" prop="address"> + <el-input v-model="form.address" /> </el-form-item> </el-col> <el-col :span="6"> - <el-form-item label="统一社会信用代码"> - <el-input v-model="form.uniformCode" /> + <el-form-item label="统一社会信用代码" prop="identifierCode"> + <el-input v-model="form.identifierCode" /> </el-form-item> </el-col> <el-col :span="6"> - <el-form-item label="电子邮箱"> + <el-form-item label="电子邮箱" prop="email"> <el-input v-model="form.email" /> </el-form-item> </el-col> @@ -162,7 +191,7 @@ <el-row> <el-col :span="12"> <el-form-item label="企业性质"> - <el-checkbox-group v-model="form.enterpriseProperty"> + <el-checkbox-group :max="1" v-model="form.businessNature"> <el-checkbox v-for="(item, index) in enterprisePropertyList" :key="'enterpriseProperty' + index" @@ -174,29 +203,29 @@ </el-col> <el-col :span="6"> <el-form-item label="行业领域"> - <el-input v-model="form.industryField" /> + <el-input v-model="form.fieldIndustry" /> </el-form-item> </el-col> <el-col :span="6"> <el-form-item label="主要产品"> - <el-input v-model="form.mainProduct" /> + <el-input v-model="form.mainProducts" /> </el-form-item> </el-col> </el-row> <el-row> <el-col :span="6"> - <el-form-item label="联系电话"> - <el-input v-model="form.phone" /> + <el-form-item label="联系电话" prop="phoneNumber"> + <el-input v-model="form.phoneNumber" /> </el-form-item> </el-col> <el-col :span="6"> - <el-form-item label="网址"> - <el-input v-model="form.website" /> + <el-form-item label="网址" > + <el-input v-model="form.webAddress" /> </el-form-item> </el-col> <el-col :span="12"> <el-form-item label="设计开发能力"> - <el-checkbox-group v-model="form.designCapability"> + <el-checkbox-group v-model="form.developmentCapability"> <el-checkbox v-for="(item, index) in designCapabilityList" :key="'designCapability' + index" @@ -210,7 +239,7 @@ <el-row> <el-col :span="12"> <el-form-item label="遵守标准"> - <el-checkbox-group v-model="form.standards"> + <el-checkbox-group v-model="form.complianceStandards"> <el-checkbox v-for="(item, index) in standardsList" :key="'standards' + index" @@ -220,9 +249,9 @@ </el-checkbox-group> </el-form-item> </el-col> - <el-col :span="6"> + <el-col :span="7"> <el-form-item label="产品已获得的认证"> - <el-checkbox-group v-model="form.authentication"> + <el-checkbox-group :max="1" v-model="form.productCertification"> <el-checkbox v-for="(item, index) in authenticationList" :key="'authentication' + index" @@ -232,9 +261,9 @@ </el-checkbox-group> </el-form-item> </el-col> - <el-col :span="6"> - <el-form-item label=""> - <el-input v-model="form.otherRemark" /> + <el-col :span="5"> + <el-form-item label="" label-width="0rem"> + <el-input v-show="form.productCertification[0] == '其他说明'" v-model="form.otherNotes" placeholder="请输入其他说明" /> </el-form-item> </el-col> </el-row> @@ -249,7 +278,7 @@ </el-checkbox-group> </el-form-item> <el-form-item label="是否具备相关资质"> - <el-checkbox-group v-model="form.relevantQualification"> + <el-checkbox-group v-model="form.relevantQualifications"> <el-checkbox v-for="(item, index) in relevantQualificationList" :key="'relevantQualification' + index" @@ -262,7 +291,7 @@ <el-col :span="12"> <el-form-item label="优势概念"> <el-input - v-model="form.dominanceConcept" + v-model="form.advantageConcept" :autosize="{ minRows: 6, maxRows: 6 }" type="textarea" /> @@ -271,7 +300,7 @@ <el-col :span="12"> <el-form-item label="合作意向概述"> <el-input - v-model="form.intention" + v-model="form.cooperationIntention" :autosize="{ minRows: 6, maxRows: 6 }" type="textarea" /> @@ -294,7 +323,7 @@ </el-form-item> </div> <el-form-item style="text-align: center;border-top:1rem solid #B0B0B0;padding: 20rem 0rem"> - <el-button class="subBtn"> + <el-button class="subBtn" @click="handleAddSupper"> 提交 </el-button> </el-form-item> @@ -368,34 +397,136 @@ export default { { label: '食品经营许可证', value: '食品经营许可证' }, { label: '其他证书', value: '其他证书' }, ], + form1Rules: { + companyName: [ + { required: true, message: '请输入公司名称(个人)', trigger: 'blur' }, + ], + address: [ + { required: true, message: '请输入地址', trigger: 'blur' }, + ], + phoneNumber: [ + { required: true, message: '请输入联系电话', trigger: 'blur' }, + { + validator: function (rule, value, callback) { + const reg = /^1[3456789]\d{9}$/; + if (!reg.test(value)) { + callback(new Error('请输入手机号')); + } else { + callback(); + } + }, + trigger: 'blur', + }, + ], + email: [ + { required: true, message: '请输入电子邮箱', trigger: 'blur' }, + { + validator: function (rule, value, callback) { + const reg3 = /^[A-Za-z0-9\u4e00-\u9fa5]+@[a-zA-Z0-9_-]+(\.[a-zA-Z0-9_-]+)+$/; + if (!reg3.test(value)) { + callback(new Error('请输入邮箱')); + } else { + callback(); + } + }, + trigger: 'blur', + }, + ], + }, form1: { + propertiesType: 1, companyName: '', - companyAddress: '', + address: '', + phoneNumber: '', email: '', - phone: '', - excelIn: [], - dominanceConcept: '', - intention: '', + fieldType: [], + advantageConcept: '', + cooperationIntention: '', + }, + formRules: { + companyName: [ + { required: true, message: '请输入公司名称', trigger: 'blur' }, + ], + address: [ + { required: true, message: '请输入地址', trigger: 'blur' }, + ], + identifierCode: [ + { required: true, message: '请输入统一社会信用代码', trigger: 'blur' }, + { + validator: function (rule, value, callback) { + const reg = /^[0-9A-HJ-NPQRTUWXY]{2}\d{6}[0-9A-HJ-NPQRTUWXY]{10}$/; + if (!reg.test(value)) { + callback(new Error('请输入统一社会信用代码')); + } else { + callback(); + } + }, + trigger: 'blur', + }, + ], + phoneNumber: [ + { required: true, message: '请输入联系电话', trigger: 'blur' }, + { + validator: function (rule, value, callback) { + const reg = /^1[3456789]\d{9}$/; + if (!reg.test(value)) { + callback(new Error('请输入手机号')); + } else { + callback(); + } + }, + trigger: 'blur', + }, + ], + email: [ + { required: true, message: '请输入电子邮箱', trigger: 'blur' }, + { + validator: function (rule, value, callback) { + const reg3 = /^[A-Za-z0-9\u4e00-\u9fa5]+@[a-zA-Z0-9_-]+(\.[a-zA-Z0-9_-]+)+$/; + if (!reg3.test(value)) { + callback(new Error('请输入邮箱')); + } else { + callback(); + } + }, + trigger: 'blur', + }, + ] }, form: { + propertiesType: 2, companyName: '', - companyAddress: '', - uniformCode: '', + address: '', + identifierCode: '', email: '', - enterpriseProperty: [], - industryField: '', - mainProduct: '', - phone: '', - website: '', - designCapability: [], - standards: [], - authentication: [], - otherRemark: '', + businessNature: [], + fieldIndustry: '', + mainProducts: '', + phoneNumber: '', + webAddress: '', + developmentCapability: [], + complianceStandards: [], + productCertification: [], + otherNotes: '', qualitySystem: [], - relevantQualification: [], - dominanceConcept: '', - intention: '', + relevantQualifications: [], + advantageConcept: '', + cooperationIntention: '', }, + // 数量限制 + limit: 10, + // 大小限制(MB) + fileSize: 10, + // 文件类型, 例如['png', 'jpg', 'jpeg'] + fileType: ["doc", "docx", "xls","xlsx", "ppt", "txt", "pdf"], + // 是否显示提示 + isShowTip: true, + number: 0, + uploadList: [], + // 上传文件服务器地址 + uploadFileUrl: process.env.VUE_APP_API_TARGET_URL + "/system/oss/upload", + fileList: [], + loadingModal: undefined, }; }, computed: { @@ -428,6 +559,148 @@ export default { this.screen1.Partner = res.rows.sort((a, b) => a.orders - b.orders); } catch (error) {} }, + handleAddPartner() { + try { + this.$refs["Partnerform"].validate(valid => { + if (valid) { + this.form1.fieldType = this.form1.fieldType.toString(); + this.$request.post( + '/official/companymessage/add', + this.form1, + ).then(res => { + if(res.code == 200) { + this.form1= { + propertiesType: 1, + companyName: '', + address: '', + phoneNumber: '', + email: '', + fieldType: [], + advantageConcept: '', + cooperationIntention: '', + } + } + }); + } + }); + } catch (error) {} + }, + handleAddSupper() { + try { + this.$refs["Supperform"].validate(valid => { + if (valid) { + this.form.businessNature = this.form.businessNature.toString(); + this.form.developmentCapability = this.form.developmentCapability.toString(); + this.form.complianceStandards = this.form.complianceStandards.toString(); + this.form.productCertification = this.form.productCertification.toString(); + this.form.qualitySystem = this.form.qualitySystem.toString(); + this.form.relevantQualifications = this.form.relevantQualifications.toString(); + this.$request.post( + '/official/companymessage/add', + this.form, + ).then(res => { + if(res.code == 200) { + this.form= { + propertiesType: 2, + companyName: '', + address: '', + identifierCode: '', + email: '', + businessNature: [], + fieldIndustry: '', + mainProducts: '', + phoneNumber: '', + webAddress: '', + developmentCapability: [], + complianceStandards: [], + productCertification: [], + otherNotes: '', + qualitySystem: [], + relevantQualifications: [], + advantageConcept: '', + cooperationIntention: '', + } + } + }); + } + }); + } catch (error) {} + }, + // 上传前校检格式和大小 + handleBeforeUpload(file) { + // 校检文件类型 + if (this.fileType) { + const fileName = file.name.split('.'); + const fileExt = fileName[fileName.length - 1]; + const isTypeOk = this.fileType.indexOf(fileExt) >= 0; + if (!isTypeOk) { + this.$message.error(`文件格式不正确, 请上传${this.fileType.join("/")}格式文件!`); + return false; + } + } + // 校检文件大小 + if (this.fileSize) { + const isLt = file.size / 1024 / 1024 < this.fileSize; + if (!isLt) { + this.$message.error(`上传文件大小不能超过 ${this.fileSize} MB!`); + return false; + } + } + this.loadingModal = this.$loading({ + lock: true, + text: '正在上传文件,请稍候...', + spinner: 'el-icon-loading', + background: 'rgba(0, 0, 0, 0.7)' + }); + this.number++; + return true; + }, + // 文件个数超出 + handleExceed() { + this.$message.error(`上传文件数量不能超过 ${this.limit} 个!`); + }, + // 上传失败 + handleUploadError(err) { + this.$message.error(`上传文件失败,请重试`); + this.loadingModal.close(); + }, + // 上传成功回调 + handleUploadSuccess(res, file) { + if (res.code === 200) { + this.uploadList.push({ name: res.data.fileName, url: res.data.url, ossId: res.data.ossId }); + this.uploadedSuccessfully(); + } else { + this.number--; + this.loadingModal.close(); + this.$message.error(res.msg); + this.$refs.fileUpload.handleRemove(file); + this.uploadedSuccessfully(); + } + }, + // 删除文件 + handleDelete(index) { + let ossId = this.fileList[index].ossId; + delOss(ossId); + this.fileList.splice(index, 1); + }, + // 上传结束处理 + uploadedSuccessfully() { + if (this.number > 0 && this.uploadList.length === this.number) { + this.fileList = this.fileList.concat(this.uploadList); + this.uploadList = []; + this.number = 0; + this.loadingModal.close(); + } + }, + // 获取文件名称 + getFileName(name) { + // 如果是url那么取最后的名字 如果不是直接返回 + if (name.lastIndexOf("/") > -1) { + return name.slice(name.lastIndexOf("/") + 1); + } else { + return name; + } + }, }, }; </script> @@ -480,7 +753,6 @@ export default { background: #F5F5F7; } .screen2 .wrapper1680 { - height: 565rem; box-sizing: border-box; background: #FFFFFF; border-radius: 10rem 10rem 10rem 10rem; @@ -490,7 +762,6 @@ export default { background: #F5F5F7; } .screen3 .wrapper1680 { - height: 830rem; background: #FFFFFF; border-radius: 10rem 10rem 10rem 10rem; } @@ -561,8 +832,13 @@ export default { /deep/.el-upload-list__item-status-label { right: 5rem; } +/deep/.el-upload__tip { + font-size: 12rem; + color: #606266; + margin-top: 7rem; +} .formContent { - padding: 20rem 0rem; + padding: 20rem 0rem 0rem; } .formBarContent { padding: 0rem 30rem; @@ -597,4 +873,22 @@ export default { text-transform: none; padding: 12rem 20rem; } +.upload-file-uploader { + margin-bottom: 5rem; +} +.upload-file-list .el-upload-list__item { + border: 1rem solid #e4e7ed; + line-height: 2rem; + margin-bottom: 10rem; + position: relative; +} +.upload-file-list .ele-upload-list__item-content { + display: flex; + justify-content: space-between; + align-items: center; + color: inherit; +} +.ele-upload-list__item-content-action .el-link { + margin-right: 10rem; +} </style>