diff --git a/packages/ncform-e2e/ncform-theme-elementui/cypress/integration/examples/tabs.spec.js b/packages/ncform-e2e/ncform-theme-elementui/cypress/integration/examples/tabs.spec.js index 3c19c5f..4d354ce 100644 --- a/packages/ncform-e2e/ncform-theme-elementui/cypress/integration/examples/tabs.spec.js +++ b/packages/ncform-e2e/ncform-theme-elementui/cypress/integration/examples/tabs.spec.js @@ -79,15 +79,35 @@ context('Tabs', () => { cy.get('legend').click(); cy.get('legend').next().should('be.visible'); - cy.get('.el-icon-plus').click() + cy.get('.el-icon-plus').click(); cy.get('.el-tabs__item').its('length').should('equal', 2); + cy.get('.el-tabs__item:last-child').should('have.class', 'is-active'); - cy.get('input').eq(0).type('daniel') + // Add two items, now has three items + cy.get('.el-icon-plus').click(); + + // Delete the first item with selected state, the next item is auto selected + cy.get('.el-tabs__item').eq(0).click(); + cy.get('.el-icon-close').eq(0).click(); + cy.get('.el-tabs__item:first-child').should('have.class', 'is-active'); + + // Delete the last item with selected state, the prev item is auto selected + cy.get('.el-icon-plus').click(); + cy.get('.el-icon-close').eq(2).click(); + cy.get('.el-tabs__item:last-child').should('have.class', 'is-active'); + + // Now has three items + cy.get('.el-icon-plus').click(); + + // Delete the item after active item, no change cy.get('.el-tabs__item').eq(1).click(); - cy.get('input').eq(1).type('sarah') + cy.get('.el-icon-close').eq(2).click(); + cy.get('.el-tabs__item:last-child').should('have.class', 'is-active'); + + // Delet the item before active item, no change + cy.get('.el-icon-close').eq(0).click({ force: true }); + cy.get('.el-tabs__item:last-child').should('have.class', 'is-active'); - cy.get('.el-icon-close:visible').click(); - cy.get('.el-tabs__item').its('length').should('equal', 1); }); cy.get('legend') diff --git a/packages/ncform-theme-elementui/src/components/layout-comps/array-tabs.vue b/packages/ncform-theme-elementui/src/components/layout-comps/array-tabs.vue index eb8f9d4..de46681 100755 --- a/packages/ncform-theme-elementui/src/components/layout-comps/array-tabs.vue +++ b/packages/ncform-theme-elementui/src/components/layout-comps/array-tabs.vue @@ -7,7 +7,7 @@ - + @@ -104,6 +104,7 @@ data() { return { + activeName: '0', defaultConfig: { tabPosition: 'top', }, @@ -114,9 +115,25 @@ handleTabsEdit(targetName, action) { if (action === 'add') { this.addItem(); + this.$data.activeName = (this.schema.value.length - 1) + ''; } if (action === 'remove') { this.delItem(targetName, this.mergeConfig.requiredDelConfirm, this.mergeConfig.delConfirmText.item || this.$nclang('delItemTips')); + this.$nextTick(() => { + let tabIdx = parseInt(targetName); + if (targetName === this.$data.activeName) { // Remote item is the active item + if (tabIdx === 0) { // First item + this.$data.activeName = '0' + } else { + this.$data.activeName = (tabIdx - 1) + ''; + } + } else { + let activeIdx = parseInt(this.$data.activeName); + if (activeIdx > tabIdx) { // active item at the right side + this.$data.activeName = (activeIdx - 1) + ''; + } + } + }) } } }