diff --git a/src/api/enterpriseLibrary/enterprise/enterprise.js b/src/api/enterpriseLibrary/enterprise/enterprise.js
new file mode 100644
index 0000000..3f2bff1
--- /dev/null
+++ b/src/api/enterpriseLibrary/enterprise/enterprise.js
@@ -0,0 +1,46 @@
+import request from '@/utils/request'
+
+// 主体库->查询列表
+export function listAPI(params) {
+ return request({
+ url: '/smartBid/mainDatabase/enterprise/getList',
+ method: 'GET',
+ params
+ })
+}
+
+/* 主体库->新增主体库 */
+export function addDataAPI(data) {
+ return request({
+ url: '/smartBid/mainDatabase/enterprise/addData',
+ method: 'POST',
+ data
+ })
+}
+
+/* 主体库->修改主体库 */
+export function editDataAPI(data) {
+ return request({
+ url: '/smartBid/mainDatabase/enterprise/editData',
+ method: 'POST',
+ data
+ })
+}
+
+/* 主体库->删除主体库 */
+export function delDataAPI(data) {
+ return request({
+ url: '/smartBid/mainDatabase/enterprise/delData',
+ method: 'POST',
+ data
+ })
+}
+
+/* 主体库->查询详情 */
+export function getDetailDataAPI(params) {
+ return request({
+ url: '/smartBid/mainDatabase/enterprise/getDetailData',
+ method: 'GET',
+ params
+ })
+}
\ No newline at end of file
diff --git a/src/router/index.js b/src/router/index.js
index ba44004..6fc0ab0 100644
--- a/src/router/index.js
+++ b/src/router/index.js
@@ -164,7 +164,7 @@ export const dynamicRoutes = [
},
{
- path: '/enterpriseForm',
+ path: '/enterpriseAdd',
component: Layout,
hidden: true,
permissions: ['enterpriseLibrary:enterprise:add'],
@@ -177,6 +177,20 @@ export const dynamicRoutes = [
}
]
},
+ {
+ path: '/enterpriseEdit',
+ component: Layout,
+ hidden: true,
+ permissions: ['enterpriseLibrary:enterprise:edit'],
+ children: [
+ {
+ path: 'index',
+ component: () => import('@/views/enterpriseLibrary/enterprise/components/EnterpriseForm'),
+ name: 'EnterpriseForm',
+ meta: { title: '编辑主体信息', activeMenu: '/enterpriseLibrary/enterprise', noCache: true }
+ }
+ ]
+ },
{
path: '/enterpriseDetail',
component: Layout,
diff --git a/src/views/common/UploadFile.vue b/src/views/common/UploadFile.vue
index 242f74a..c3b2a74 100644
--- a/src/views/common/UploadFile.vue
+++ b/src/views/common/UploadFile.vue
@@ -43,7 +43,7 @@
diff --git a/src/views/enterpriseLibrary/enterprise/components/EnterpriseDetail.vue b/src/views/enterpriseLibrary/enterprise/components/EnterpriseDetail.vue
index e584f62..32c8e67 100644
--- a/src/views/enterpriseLibrary/enterprise/components/EnterpriseDetail.vue
+++ b/src/views/enterpriseLibrary/enterprise/components/EnterpriseDetail.vue
@@ -9,15 +9,15 @@
-
+
-
+
-
+
@@ -28,6 +28,7 @@ import { decryptWithSM4 } from '@/utils/sm'
import BasicInfoDetail from './child/BasicInfoDetail.vue'
import LegalPersonDetail from './child/LegalPersonDetail.vue'
import AccountOpeningCertificateDetail from './child/AccountOpeningCertificateDetail.vue'
+import { getDetailDataAPI } from '@/api/enterpriseLibrary/enterprise/enterprise'
export default {
name: 'EnterpriseDetail',
@@ -38,44 +39,25 @@ export default {
},
data() {
return {
- id: decryptWithSM4(this.$route.query.id),
+ enterpriseId: decryptWithSM4(this.$route.query.enterpriseId),
type: decryptWithSM4(this.$route.query.type),
+ detailData: {} // 详情数据
}
},
+ created() {
+ this.getDetail()
+ },
methods: {
// 返回
handleClose() {
const obj = { path: "/enterpriseLibrary/enterprise" }
this.$tab.closeOpenPage(obj)
},
- // 保存
- async handleSave() {
- try {
- // 并行校验所有表单
- const [basicInfoData, legalPersonData, accountData] = await Promise.all([
- this.$refs.basicInfo.validate(),
- this.$refs.legalPerson.validate(),
- this.$refs.accountOpeningCertificate.validate()
- ])
-
- // 所有校验通过,组装完整数据
- const formData = {
- ...basicInfoData,
- ...legalPersonData,
- ...accountData
- }
-
- console.log('所有表单校验通过,完整数据:', formData)
-
- // 这里可以调用保存接口
- // await this.saveEnterprise(formData)
- this.$message.success('保存成功')
-
- } catch (error) {
- // console.error('表单校验失败:', error)
- this.$message.error(error.message || '请完善表单信息')
- }
- }
+ // 获取详情
+ async getDetail() {
+ const res = await getDetailDataAPI({ enterpriseId: this.enterpriseId })
+ this.detailData = res.data;
+ },
}
}
diff --git a/src/views/enterpriseLibrary/enterprise/components/EnterpriseForm.vue b/src/views/enterpriseLibrary/enterprise/components/EnterpriseForm.vue
index 75ecfe0..51478c8 100644
--- a/src/views/enterpriseLibrary/enterprise/components/EnterpriseForm.vue
+++ b/src/views/enterpriseLibrary/enterprise/components/EnterpriseForm.vue
@@ -29,15 +29,15 @@
-
+
-
+
-
+
@@ -49,6 +49,7 @@ import { decryptWithSM4 } from '@/utils/sm'
import BasicInfo from './child/BasicInfo.vue'
import LegalPerson from './child/LegalPerson.vue'
import AccountOpeningCertificate from './child/AccountOpeningCertificate.vue'
+import { addDataAPI, editDataAPI, getDetailDataAPI } from '@/api/enterpriseLibrary/enterprise/enterprise'
export default {
name: 'EnterpriseForm',
@@ -59,23 +60,32 @@ export default {
},
data() {
return {
- id: decryptWithSM4(this.$route.query.id),
+ enterpriseId: decryptWithSM4(this.$route.query.enterpriseId),
type: decryptWithSM4(this.$route.query.type),
showUploadAnimation: false,
showSaveAnimation: false, // 新增:保存动画状态
uploadQueue: 0, // 上传队列计数器
animationText: '识别中',
- isSaving: false // 新增:保存按钮loading状态
+ isSaving: false, // 新增:保存按钮loading状态
+ detailData: {} // 详情数据
}
},
-
+ created() {
+ this.getDetail()
+ },
methods: {
-
+
// 返回
handleClose() {
const obj = { path: "/enterpriseLibrary/enterprise" }
this.$tab.closeOpenPage(obj)
},
+ // 获取详情
+ async getDetail() {
+ const res = await getDetailDataAPI({ enterpriseId: this.enterpriseId })
+ console.log('res:', res);
+ this.detailData = res.data;
+ },
// 保存
async handleSave() {
// 如果正在保存中,直接返回
@@ -99,46 +109,65 @@ export default {
...basicInfoData,
...legalPersonData,
...accountData,
- allFiles: [...basicInfoData.fileList, ...legalPersonData.fileList, ...legalPersonData.fileList2, ...accountData.fileList],
- allFiles: [...basicInfoData.delFileList, ...legalPersonData.delFileList, ...accountData.delFileList]
+ allFiles: [
+ ...basicInfoData.fileList.map(file => JSON.parse(JSON.stringify(file))),
+ ...legalPersonData.fileList.map(file => JSON.parse(JSON.stringify(file))),
+ ...legalPersonData.fileList2.map(file => JSON.parse(JSON.stringify(file))),
+ ...accountData.fileList.map(file => JSON.parse(JSON.stringify(file)))
+ ],
+ delFiles: [
+ ...basicInfoData.delFileList,
+ ...legalPersonData.delFileList,
+ ...accountData.delFileList
+ ]
}
console.log('所有表单校验通过,完整数据:', formData)
+
+ let allFiles = formData.allFiles.map(file => {
+ return file?.response?.fileRes ? {
+ ...file.response.fileRes,
+ } : null;
+ }).filter(item => item !== null);
+ formData.files = allFiles;
// 删除不必要的属性
delete formData.fileList;
delete formData.delFileList;
- let allFiles = formData.allFiles.map(file => {
- return {
- ...file.obj,
- }
- });
- formData.allFiles = allFiles;
- // 模拟保存请求(这里替换为您的实际保存接口)
- await this.saveEnterprise(formData)
-
- this.$message.success('保存成功')
-
- // 保存成功后返回列表页
- this.handleClose()
-
+ delete formData.allFiles;
+ delete formData.fileList2;
+ // 保存请求
+ const res = await this.saveEnterprise(formData)
+ console.log('res:', res);
+ if (res.code === 200) {
+ this.$message.success('保存成功')
+ this.handleClose()
+ }
} catch (error) {
console.error('保存失败:', error)
- this.$message.error(error.message || '保存失败,请重试')
} finally {
// 无论成功失败,都关闭动画
this.isSaving = false
this.showSaveAnimation = false
}
},
- // 模拟保存接口
+ // 保存接口
async saveEnterprise(formData) {
- // 这里替换为您的实际保存接口
return new Promise((resolve, reject) => {
- setTimeout(() => {
- // 模拟保存成功
- // 如果模拟失败,可以使用 reject(new Error('保存失败'))
- resolve({ code: 200, message: '保存成功' })
- }, 2000) // 模拟2秒的保存时间
+ if (this.type === 'add') { // 新增
+ addDataAPI(formData).then(res => {
+ resolve(res)
+ }).catch(error => {
+ reject(error)
+ })
+ } else { // 修改
+ formData.enterpriseId = this.enterpriseId;
+ editDataAPI(formData).then(res => {
+ resolve(res)
+ }).catch(error => {
+ reject(error)
+ })
+ }
+
})
},
// 开始上传
@@ -188,11 +217,11 @@ export default {
min-height: 100vh;
overflow-y: auto;
position: relative;
-
+
// 当显示动画时,禁用页面点击
&.no-pointer-events {
pointer-events: none;
-
+
// 子元素也继承禁用点击
* {
pointer-events: none;
@@ -211,7 +240,7 @@ export default {
display: flex;
align-items: center;
justify-content: center;
-
+
// 动画区域本身可以有点击事件(如果需要)
pointer-events: auto;
@@ -223,7 +252,7 @@ export default {
bottom: 0;
background: rgba(255, 255, 255, 0.6); // 添加半透明背景
backdrop-filter: blur(4px);
-
+
// 遮罩层阻止点击
pointer-events: auto;
}
@@ -240,7 +269,7 @@ export default {
0 0 0 1px rgba(31, 114, 234, 0.1);
min-width: 280px;
animation: slideInUp 0.3s ease-out;
-
+
// 动画内容可以有点击事件
pointer-events: auto;
diff --git a/src/views/enterpriseLibrary/enterprise/components/child/AccountOpeningCertificate.vue b/src/views/enterpriseLibrary/enterprise/components/child/AccountOpeningCertificate.vue
index aba00e9..53c5a21 100644
--- a/src/views/enterpriseLibrary/enterprise/components/child/AccountOpeningCertificate.vue
+++ b/src/views/enterpriseLibrary/enterprise/components/child/AccountOpeningCertificate.vue
@@ -26,6 +26,12 @@ export default {
name: 'AccountOpeningCertificate',
components:{UploadFile},
dicts: ['identification_tag'],
+ props:{
+ detailData: {
+ type: Object,
+ default: () => {}
+ }
+ },
data() {
return {
form: {
@@ -45,7 +51,7 @@ export default {
},
rules: {
fileList:[
- { required: true, message: '请上传开户许可证', trigger: 'blur' }
+ { required: true, message: '请上传开户许可证', trigger: 'change' }
],
openingBank: [
{ required: true, message: '请输入开户银行', trigger: 'blur' }
@@ -114,6 +120,25 @@ export default {
handleDelFile(file) {
console.log(file);
this.form.delFileList.push(file.response.fileRes.uploadPath || file.filePath);
+ },
+ setFormData(){
+ const fileList = this.getFileList('account_opening_license');
+ this.form = {
+ fileList: fileList,
+ openingBank: this.detailData.openingBank || '',
+ openingAccount: this.detailData.openingAccount || '',
+ delFileList: []
+ }
+ },
+ getFileList(businessType){
+ return this.detailData.fileList.filter(item => item.businessType === businessType).map(item => {
+ return {
+ name: item.fileName,
+ filePath: item.filePath,
+ lsFilePath:item.lsFilePath,
+ fileType:item.fileType
+ };
+ });
}
},
computed: {
@@ -130,8 +155,18 @@ export default {
}
},
immediate: true // 立即执行一次
+ },
+ detailData:{
+ handler(newVal) {
+ if (Object.keys(newVal).length > 0) {
+ this.setFormData();
+ }
+ },
+ immediate: true, // 立即执行一次
+ deep:true
}
},
+
}
diff --git a/src/views/enterpriseLibrary/enterprise/components/child/AccountOpeningCertificateDetail.vue b/src/views/enterpriseLibrary/enterprise/components/child/AccountOpeningCertificateDetail.vue
index 619e84f..f25fdfc 100644
--- a/src/views/enterpriseLibrary/enterprise/components/child/AccountOpeningCertificateDetail.vue
+++ b/src/views/enterpriseLibrary/enterprise/components/child/AccountOpeningCertificateDetail.vue
@@ -10,7 +10,7 @@
@@ -18,13 +18,13 @@
开户银行
-
{{ enterpriseName || '中讯科技股份有限公司' }}
+
{{ form.openingBank || '--' }}
开户账号
-
{{ enterpriseCode || '12345678901313132390' }}
+
{{ form.openingAccount || '--' }}
@@ -33,25 +33,55 @@
diff --git a/src/views/enterpriseLibrary/enterprise/components/child/BasicInfo.vue b/src/views/enterpriseLibrary/enterprise/components/child/BasicInfo.vue
index 6f36196..8ff4305 100644
--- a/src/views/enterpriseLibrary/enterprise/components/child/BasicInfo.vue
+++ b/src/views/enterpriseLibrary/enterprise/components/child/BasicInfo.vue
@@ -50,6 +50,12 @@ export default {
components: {
UploadFile
},
+ props:{
+ detailData: {
+ type: Object,
+ default: () => {}
+ }
+ },
dicts: ['identification_tag'],
data() {
return {
@@ -79,7 +85,7 @@ export default {
},
rules: {
fileList: [
- { required: true, message: '请上传营业执照', trigger: 'blur' }
+ { required: true, message: '请上传营业执照', trigger: 'change' }
],
enterpriseName: [
{ required: true, message: '请输入企业名称', trigger: 'blur' }
@@ -139,6 +145,8 @@ export default {
},
// 文件变化
handleFileChange(file) {
+ console.log(file);
+
this.form.fileList = file;
if (file instanceof Array && file.length > 0 && file[0].response) {
const response = file[0].response;
@@ -167,7 +175,33 @@ export default {
handleDelFile(file) {
console.log(file);
this.form.delFileList.push(file.response.fileRes.uploadPath || file.filePath);
+ },
+ setFormData(){
+ const fileList = this.getFileList('business_license');
+
+ this.form = {
+ enterpriseName: this.detailData.enterpriseName || '',
+ enterpriseCode: this.detailData.enterpriseCode || '',
+ registeredCapital: this.detailData.registeredCapital || '',
+ establishedDate: this.detailData.establishedDate || null,
+ businessTerm: this.detailData.businessTerm || '',
+ residence: this.detailData.residence || '',
+ businessScope: this.detailData.businessScope || '',
+ fileList: fileList,
+ delFileList: []
+ }
+ },
+ getFileList(businessType){
+ return this.detailData.fileList.filter(item => item.businessType === businessType).map(item => {
+ return {
+ name: item.fileName,
+ filePath: item.filePath,
+ lsFilePath:item.lsFilePath,
+ fileType:item.fileType
+ };
+ });
}
+
},
computed: {
fileUploadRule() {
@@ -183,6 +217,15 @@ export default {
}
},
immediate: true // 立即执行一次
+ },
+ detailData:{
+ handler(newVal) {
+ if (Object.keys(newVal).length > 0) {
+ this.setFormData();
+ }
+ },
+ immediate: true, // 立即执行一次
+ deep:true
}
},
}
diff --git a/src/views/enterpriseLibrary/enterprise/components/child/BasicInfoDetail.vue b/src/views/enterpriseLibrary/enterprise/components/child/BasicInfoDetail.vue
index c1417c8..c4f6609 100644
--- a/src/views/enterpriseLibrary/enterprise/components/child/BasicInfoDetail.vue
+++ b/src/views/enterpriseLibrary/enterprise/components/child/BasicInfoDetail.vue
@@ -10,75 +10,113 @@
企业名称
-
{{ enterpriseName || '中讯科技股份有限公司' }}
+
{{ form.enterpriseName || '--' }}
统一社会信用代码
-
{{ enterpriseCode || '12345678901313132390' }}
+
{{ form.enterpriseCode || '--' }}
注册资本
-
{{ registeredCapital || '11000.00' }}
+
{{ form.registeredCapital || '--' }}
+
+
+
+
+
成立日期
+
{{ form.establishedDate || '--' }}
营业期限
-
{{ businessTerm || '2015/01/01-2035/01/01' }}
+
{{ form.businessTerm || '--' }}
住所
-
{{ residence || '安徽省合肥市蜀山区望江西路100号' }}
+
{{ form.residence || '--' }}
经营范围
-
{{ businessScope || '软件开发、技术服务、电子商务' }}
+
{{ form.businessScope || '--' }}
-
-
-
diff --git a/src/views/enterpriseLibrary/enterprise/components/child/LegalPerson.vue b/src/views/enterpriseLibrary/enterprise/components/child/LegalPerson.vue
index 1a79ff1..5b8c559 100644
--- a/src/views/enterpriseLibrary/enterprise/components/child/LegalPerson.vue
+++ b/src/views/enterpriseLibrary/enterprise/components/child/LegalPerson.vue
@@ -40,6 +40,12 @@ export default {
name: 'LegalPerson',
components: { UploadFile },
dicts: ['identification_tag'],
+ props:{
+ detailData: {
+ type: Object,
+ default: () => {}
+ }
+ },
data() {
return {
form: {
@@ -63,10 +69,10 @@ export default {
},
rules: {
fileList: [
- { required: true, message: '请上传身份证人像面', trigger: 'blur' }
+ { required: true, message: '请上传身份证人像面', trigger: 'change' }
],
fileList2: [
- { required: true, message: '请上传身份证国徽面', trigger: 'blur' }
+ { required: true, message: '请上传身份证国徽面', trigger: 'change' }
],
legalPersonName: [
{ required: true, message: '请输入法人姓名', trigger: 'blur' }
@@ -143,6 +149,30 @@ export default {
handleDelFile(file) {
console.log(file);
this.form.delFileList.push(file.response.fileRes.uploadPath || file.filePath);
+ },
+ setFormData(){
+ const fileList = this.getFileList('face_id_card_portrait')
+ const fileList2 = this.getFileList('national_emblem_id_card')
+ this.form = {
+ legalPersonName: this.detailData.legalPersonName || '',
+ legalPersonIdCard: this.detailData.legalPersonIdCard || '',
+ idCardStartDate: this.detailData.idCardStartDate || '',
+ legalPersonPosition: this.detailData.legalPersonPosition || '',
+ legalPersonPhone: this.detailData.legalPersonPhone || '',
+ fileList: fileList,
+ fileList2: fileList2,
+ delFileList: []
+ }
+ },
+ getFileList(businessType){
+ return this.detailData.fileList.filter(item => item.businessType === businessType).map(item => {
+ return {
+ name: item.fileName,
+ filePath: item.filePath,
+ lsFilePath:item.lsFilePath,
+ fileType:item.fileType
+ };
+ });
}
},
computed: {
@@ -162,6 +192,15 @@ export default {
}
},
immediate: true // 立即执行一次
+ },
+ detailData:{
+ handler(newVal) {
+ if (Object.keys(newVal).length > 0) {
+ this.setFormData();
+ }
+ },
+ immediate: true, // 立即执行一次
+ deep:true
}
},
}
diff --git a/src/views/enterpriseLibrary/enterprise/components/child/LegalPersonDetail.vue b/src/views/enterpriseLibrary/enterprise/components/child/LegalPersonDetail.vue
index 93842c0..250d1a9 100644
--- a/src/views/enterpriseLibrary/enterprise/components/child/LegalPersonDetail.vue
+++ b/src/views/enterpriseLibrary/enterprise/components/child/LegalPersonDetail.vue
@@ -10,7 +10,7 @@
@@ -18,38 +18,38 @@
法人姓名
-
{{ enterpriseName || '中讯科技股份有限公司' }}
+
{{ form.legalPersonName || '--' }}
法人身份证号
-
{{ enterpriseCode || '12345678901313132390' }}
+
{{ form.legalPersonIdCard || '--' }}
身份证有效期
-
{{ registeredCapital || '11000.00' }}
+
{{ form.idCardStartDate || '--' }}
法人职务
-
{{ businessTerm || '2015/01/01-2035/01/01' }}
+
{{ form.legalPersonPosition || '--' }}
法人联系方式
-
{{ residence || '安徽省合肥市蜀山区望江西路100号' }}
+
{{ form.legalPersonPhone || '--' }}
@@ -57,29 +57,62 @@
diff --git a/src/views/enterpriseLibrary/enterprise/index.vue b/src/views/enterpriseLibrary/enterprise/index.vue
index 5865711..f44abf7 100644
--- a/src/views/enterpriseLibrary/enterprise/index.vue
+++ b/src/views/enterpriseLibrary/enterprise/index.vue
@@ -34,66 +34,59 @@
-
+
法定代表人:
- {{ enterprise.legalRepresentative }}
+ {{ item.legalPersonName }}
统一信用代码:
- {{ enterprise.creditCode }}
+ {{ item.enterpriseCode }}
-