Merge remote-tracking branch 'origin/master' into master
This commit is contained in:
commit
67f411f583
|
@ -15,227 +15,45 @@
|
|||
</el-radio-group>
|
||||
</div>
|
||||
|
||||
<div style="width: 500px">
|
||||
<div style="margin-top: 20px;margin-bottom: 10px">{{ $t('organization.integration.basic_auth_info') }}</div>
|
||||
<el-form :model="form" ref="form" label-width="120px" size="small" :disabled="show" :rules="rules">
|
||||
<el-form-item :label="$t('organization.integration.api_account')" prop="account">
|
||||
<el-input v-model="form.account" :placeholder="$t('organization.integration.input_api_account')"/>
|
||||
</el-form-item>
|
||||
<el-form-item :label="$t('organization.integration.api_password')" prop="password">
|
||||
<el-input v-model="form.password" auto-complete="new-password"
|
||||
:placeholder="$t('organization.integration.input_api_password')" show-password/>
|
||||
</el-form-item>
|
||||
<el-form-item :label="$t('organization.integration.jira_url')" prop="url" v-if="platform === 'Jira'">
|
||||
<el-input v-model="form.url" :placeholder="$t('organization.integration.input_jira_url')"/>
|
||||
</el-form-item>
|
||||
<el-form-item :label="$t('organization.integration.jira_issuetype')" prop="issuetype"
|
||||
v-if="platform === 'Jira'">
|
||||
<el-input v-model="form.issuetype" :placeholder="$t('organization.integration.input_jira_issuetype')"/>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
</div>
|
||||
<tapd-setting v-if="tapdEnable" ref="tapdSetting"/>
|
||||
<jira-setting v-if="jiraEnable" ref="jiraSetting"/>
|
||||
<zentao-setting v-if="zentaoEnable" ref="zentaoSetting"/>
|
||||
|
||||
<div style="margin-left: 120px">
|
||||
<el-button type="primary" size="mini" :disabled="!show" @click="testConnection">{{ $t('ldap.test_connect') }}
|
||||
</el-button>
|
||||
<el-button v-if="showEdit" size="mini" @click="edit">{{ $t('commons.edit') }}</el-button>
|
||||
<el-button type="primary" v-if="showSave" size="mini" @click="save('form')">{{ $t('commons.save') }}</el-button>
|
||||
<el-button v-if="showCancel" size="mini" @click="cancelEdit">{{ $t('organization.integration.cancel_edit') }}
|
||||
</el-button>
|
||||
<el-button type="info" size="mini" @click="cancelIntegration('form')" :disabled="!show">
|
||||
{{ $t('organization.integration.cancel_integration') }}
|
||||
</el-button>
|
||||
</div>
|
||||
|
||||
<div class="defect-tip">
|
||||
<div>{{ $t('organization.integration.use_tip') }}</div>
|
||||
<div>
|
||||
1. {{ $t('organization.integration.use_tip_tapd') }}
|
||||
</div>
|
||||
<div>
|
||||
2. {{ $t('organization.integration.use_tip_jira') }}
|
||||
</div>
|
||||
<div>
|
||||
3. {{ $t('organization.integration.use_tip_two') }}
|
||||
<router-link to="/track/project/all" style="margin-left: 5px">
|
||||
{{ $t('organization.integration.link_the_project_now') }}
|
||||
</router-link>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import {getCurrentUser} from "../../../../common/js/utils";
|
||||
import TapdSetting from "@/business/components/settings/organization/components/TapdSetting";
|
||||
import JiraSetting from "@/business/components/settings/organization/components/JiraSetting";
|
||||
import ZentaoSetting from "@/business/components/settings/organization/components/ZentaoSetting";
|
||||
import {JIRA, TAPD, ZEN_TAO} from "@/common/js/constants";
|
||||
|
||||
export default {
|
||||
name: "IssuesManagement",
|
||||
name: "BugManagement",
|
||||
components: {TapdSetting, JiraSetting, ZentaoSetting},
|
||||
data() {
|
||||
return {
|
||||
form: {},
|
||||
tapdEnable: true,
|
||||
jiraEnable: false,
|
||||
zentaoEnable: false,
|
||||
result: {},
|
||||
platform: '',
|
||||
orgId: '',
|
||||
show: true,
|
||||
showEdit: true,
|
||||
showSave: false,
|
||||
showCancel: false,
|
||||
rules: {
|
||||
account: {
|
||||
required: true,
|
||||
message: this.$t('organization.integration.input_api_account'),
|
||||
trigger: ['change', 'blur']
|
||||
},
|
||||
password: {
|
||||
required: true,
|
||||
message: this.$t('organization.integration.input_api_password'),
|
||||
trigger: ['change', 'blur']
|
||||
},
|
||||
url: {
|
||||
required: true,
|
||||
message: this.$t('organization.integration.input_jira_url'),
|
||||
trigger: ['change', 'blur']
|
||||
},
|
||||
issuetype: {
|
||||
required: true,
|
||||
message: this.$t('organization.integration.input_jira_issuetype'),
|
||||
trigger: ['change', 'blur']
|
||||
}
|
||||
},
|
||||
platform: TAPD
|
||||
}
|
||||
},
|
||||
created() {
|
||||
this.init(this.platform);
|
||||
},
|
||||
methods: {
|
||||
init(platform) {
|
||||
let param = {};
|
||||
param.platform = platform;
|
||||
param.orgId = getCurrentUser().lastOrganizationId;
|
||||
this.result = this.$post("service/integration/type", param, response => {
|
||||
let data = response.data;
|
||||
this.platform = data.platform;
|
||||
if (data.configuration) {
|
||||
let config = JSON.parse(data.configuration);
|
||||
this.$set(this.form, 'account', config.account);
|
||||
this.$set(this.form, 'password', config.password);
|
||||
this.$set(this.form, 'url', config.url);
|
||||
this.$set(this.form, 'issuetype', config.issuetype);
|
||||
} else {
|
||||
this.clear();
|
||||
}
|
||||
})
|
||||
},
|
||||
edit() {
|
||||
this.show = false;
|
||||
this.showEdit = false;
|
||||
this.showSave = true;
|
||||
this.showCancel = true;
|
||||
},
|
||||
cancelEdit() {
|
||||
this.showEdit = true;
|
||||
this.showCancel = false;
|
||||
this.showSave = false;
|
||||
this.show = true;
|
||||
this.init(this.platform);
|
||||
},
|
||||
cancelIntegration() {
|
||||
if (this.form.account && this.form.password && this.platform) {
|
||||
|
||||
this.$alert(this.$t('organization.integration.cancel_confirm') + this.platform + "?", '', {
|
||||
confirmButtonText: this.$t('commons.confirm'),
|
||||
callback: (action) => {
|
||||
if (action === 'confirm') {
|
||||
let param = {};
|
||||
param.orgId = getCurrentUser().lastOrganizationId;
|
||||
param.platform = this.platform;
|
||||
this.result = this.$post("service/integration/delete", param, () => {
|
||||
this.$success(this.$t('organization.integration.successful_operation'));
|
||||
this.init('');
|
||||
});
|
||||
}
|
||||
}
|
||||
});
|
||||
} else {
|
||||
this.$warning(this.$t('organization.integration.not_integrated'));
|
||||
}
|
||||
},
|
||||
save(form) {
|
||||
if (!this.platform) {
|
||||
this.$warning(this.$t('organization.integration.choose_platform'));
|
||||
return;
|
||||
}
|
||||
|
||||
this.$refs[form].validate(valid => {
|
||||
if (valid) {
|
||||
|
||||
let formatUrl = this.form.url.trim();
|
||||
if (!formatUrl.endsWith('/')) {
|
||||
formatUrl = formatUrl + '/';
|
||||
}
|
||||
|
||||
let param = {};
|
||||
let auth = {
|
||||
account: this.form.account,
|
||||
password: this.form.password,
|
||||
url: formatUrl,
|
||||
issuetype: this.form.issuetype
|
||||
};
|
||||
param.organizationId = getCurrentUser().lastOrganizationId;
|
||||
param.platform = this.platform;
|
||||
param.configuration = JSON.stringify(auth);
|
||||
|
||||
this.result = this.$post("service/integration/save", param, () => {
|
||||
this.show = true;
|
||||
this.showEdit = true;
|
||||
this.showSave = false;
|
||||
this.showCancel = false;
|
||||
this.init(this.platform);
|
||||
this.$success(this.$t('commons.save_success'));
|
||||
});
|
||||
} else {
|
||||
return false;
|
||||
}
|
||||
})
|
||||
},
|
||||
change(platform) {
|
||||
this.show = true;
|
||||
this.showEdit = true;
|
||||
this.showCancel = false;
|
||||
this.showSave = false;
|
||||
let param = {};
|
||||
param.orgId = getCurrentUser().lastOrganizationId;
|
||||
param.platform = platform;
|
||||
this.result = this.$post("service/integration/type", param, response => {
|
||||
let data = response.data;
|
||||
if (data.configuration) {
|
||||
let config = JSON.parse(data.configuration);
|
||||
this.$set(this.form, 'account', config.account);
|
||||
this.$set(this.form, 'password', config.password);
|
||||
this.$set(this.form, 'url', config.url);
|
||||
this.$set(this.form, 'issuetype', config.issuetype);
|
||||
} else {
|
||||
this.clear();
|
||||
}
|
||||
})
|
||||
},
|
||||
clear() {
|
||||
this.$set(this.form, 'account', '');
|
||||
this.$set(this.form, 'password', '');
|
||||
this.$set(this.form, 'url', '');
|
||||
this.$set(this.form, 'issuetype', '');
|
||||
this.$nextTick(() => {
|
||||
this.$refs.form.clearValidate();
|
||||
});
|
||||
},
|
||||
testConnection() {
|
||||
if (this.form.account && this.form.password && this.platform) {
|
||||
this.result = this.$get("issues/auth/" + this.platform, () => {
|
||||
this.$success(this.$t('organization.integration.verified'));
|
||||
});
|
||||
} else {
|
||||
this.$warning(this.$t('organization.integration.not_integrated'));
|
||||
return false;
|
||||
if (platform === TAPD) {
|
||||
this.tapdEnable = true;
|
||||
this.jiraEnable = false;
|
||||
this.zentaoEnable = false;
|
||||
} else if (platform === JIRA) {
|
||||
this.tapdEnable = false;
|
||||
this.jiraEnable = true;
|
||||
this.zentaoEnable = false;
|
||||
} else if (platform === ZEN_TAO) {
|
||||
this.tapdEnable = false;
|
||||
this.jiraEnable = false;
|
||||
this.zentaoEnable = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -247,14 +65,6 @@ export default {
|
|||
padding: 10px 30px;
|
||||
}
|
||||
|
||||
.defect-tip {
|
||||
background: #EDEDED;
|
||||
border: solid #E1E1E1 1px;
|
||||
margin: 10px 0;
|
||||
padding: 10px;
|
||||
border-radius: 3px;
|
||||
}
|
||||
|
||||
.platform {
|
||||
height: 90px;
|
||||
vertical-align: middle
|
||||
|
|
|
@ -0,0 +1,71 @@
|
|||
<template>
|
||||
<div style="margin-left: 120px">
|
||||
<el-button type="primary" size="mini" :disabled="!show" @click="testConnection">
|
||||
{{ $t('ldap.test_connect') }}
|
||||
</el-button>
|
||||
<el-button v-if="showEdit" size="mini" @click="edit">
|
||||
{{ $t('commons.edit') }}
|
||||
</el-button>
|
||||
<el-button type="primary" v-if="showSave" size="mini" @click="save">
|
||||
{{ $t('commons.save') }}
|
||||
</el-button>
|
||||
<el-button v-if="showCancel" size="mini" @click="cancelEdit">
|
||||
{{ $t('organization.integration.cancel_edit') }}
|
||||
</el-button>
|
||||
<el-button type="info" size="mini" :disabled="!show" @click="cancelIntegration">
|
||||
{{ $t('organization.integration.cancel_integration') }}
|
||||
</el-button>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
|
||||
export default {
|
||||
name: "BugManageBtn",
|
||||
data() {
|
||||
return {
|
||||
showEdit: true,
|
||||
showSave: false,
|
||||
showCancel: false,
|
||||
}
|
||||
},
|
||||
props: {
|
||||
show: {
|
||||
type: Boolean,
|
||||
default: true
|
||||
},
|
||||
form: Object,
|
||||
},
|
||||
methods: {
|
||||
testConnection() {
|
||||
this.$emit("testConnection");
|
||||
},
|
||||
edit() {
|
||||
this.$emit("update:show", false);
|
||||
this.showEdit = false;
|
||||
this.showSave = true;
|
||||
this.showCancel = true;
|
||||
},
|
||||
cancelEdit() {
|
||||
this.showEdit = true;
|
||||
this.showCancel = false;
|
||||
this.showSave = false;
|
||||
this.$emit("update:show", true);
|
||||
this.init();
|
||||
},
|
||||
init() {
|
||||
this.$emit("init");
|
||||
},
|
||||
save() {
|
||||
this.$emit("save");
|
||||
},
|
||||
cancelIntegration() {
|
||||
this.$emit("cancelIntegration");
|
||||
}
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
||||
<style scoped>
|
||||
|
||||
</style>
|
|
@ -0,0 +1,186 @@
|
|||
<template>
|
||||
<div>
|
||||
<div style="width: 500px">
|
||||
<div style="margin-top: 20px;margin-bottom: 10px">{{ $t('organization.integration.basic_auth_info') }}</div>
|
||||
<el-form :model="form" ref="form" label-width="120px" size="small" :disabled="show" :rules="rules">
|
||||
<el-form-item :label="$t('organization.integration.account')" prop="account">
|
||||
<el-input v-model="form.account" :placeholder="$t('organization.integration.input_api_account')"/>
|
||||
</el-form-item>
|
||||
<el-form-item :label="$t('organization.integration.password')" prop="password">
|
||||
<el-input v-model="form.password" auto-complete="new-password"
|
||||
:placeholder="$t('organization.integration.input_api_password')" show-password/>
|
||||
</el-form-item>
|
||||
<el-form-item :label="$t('organization.integration.jira_url')" prop="url">
|
||||
<el-input v-model="form.url" :placeholder="$t('organization.integration.input_jira_url')"/>
|
||||
</el-form-item>
|
||||
<el-form-item :label="$t('organization.integration.jira_issuetype')" prop="issuetype">
|
||||
<el-input v-model="form.issuetype" :placeholder="$t('organization.integration.input_jira_issuetype')"/>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
</div>
|
||||
|
||||
<bug-manage-btn @save="save"
|
||||
@init="init"
|
||||
@testConnection="testConnection"
|
||||
@cancelIntegration="cancelIntegration"
|
||||
:form="form"
|
||||
:show.sync="show"
|
||||
ref="bugBtn"/>
|
||||
|
||||
<div class="defect-tip">
|
||||
<div>{{ $t('organization.integration.use_tip') }}</div>
|
||||
<div>
|
||||
1. {{ $t('organization.integration.use_tip_jira') }}
|
||||
</div>
|
||||
<div>
|
||||
2. {{ $t('organization.integration.use_tip_two') }}
|
||||
<router-link to="/track/project/all" style="margin-left: 5px">
|
||||
{{ $t('organization.integration.link_the_project_now') }}
|
||||
</router-link>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import BugManageBtn from "@/business/components/settings/organization/components/BugManageBtn";
|
||||
import {getCurrentUser} from "@/common/js/utils";
|
||||
import {JIRA} from "@/common/js/constants";
|
||||
|
||||
export default {
|
||||
name: "JiraSetting",
|
||||
components: {BugManageBtn},
|
||||
created() {
|
||||
this.init();
|
||||
},
|
||||
data() {
|
||||
return {
|
||||
show: true,
|
||||
form: {},
|
||||
rules: {
|
||||
account: {
|
||||
required: true,
|
||||
message: this.$t('organization.integration.input_api_account'),
|
||||
trigger: ['change', 'blur']
|
||||
},
|
||||
password: {
|
||||
required: true,
|
||||
message: this.$t('organization.integration.input_api_password'),
|
||||
trigger: ['change', 'blur']
|
||||
},
|
||||
url: {
|
||||
required: true,
|
||||
message: this.$t('organization.integration.input_jira_url'),
|
||||
trigger: ['change', 'blur']
|
||||
},
|
||||
issuetype: {
|
||||
required: true,
|
||||
message: this.$t('organization.integration.input_jira_issuetype'),
|
||||
trigger: ['change', 'blur']
|
||||
}
|
||||
},
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
init() {
|
||||
const {lastOrganizationId} = getCurrentUser();
|
||||
let param = {};
|
||||
param.platform = JIRA;
|
||||
param.orgId = lastOrganizationId;
|
||||
this.$parent.result = this.$post("service/integration/type", param, response => {
|
||||
let data = response.data;
|
||||
if (data.configuration) {
|
||||
let config = JSON.parse(data.configuration);
|
||||
this.$set(this.form, 'account', config.account);
|
||||
this.$set(this.form, 'password', config.password);
|
||||
this.$set(this.form, 'url', config.url);
|
||||
this.$set(this.form, 'issuetype', config.issuetype);
|
||||
} else {
|
||||
this.clear();
|
||||
}
|
||||
})
|
||||
},
|
||||
save() {
|
||||
this.$refs['form'].validate(valid => {
|
||||
if (valid) {
|
||||
let formatUrl = this.form.url.trim();
|
||||
if (!formatUrl.endsWith('/')) {
|
||||
formatUrl = formatUrl + '/';
|
||||
}
|
||||
let param = {};
|
||||
let auth = {
|
||||
account: this.form.account,
|
||||
password: this.form.password,
|
||||
url: formatUrl,
|
||||
issuetype: this.form.issuetype
|
||||
};
|
||||
const {lastOrganizationId} = getCurrentUser();
|
||||
param.organizationId = lastOrganizationId;
|
||||
param.platform = JIRA;
|
||||
param.configuration = JSON.stringify(auth);
|
||||
this.$parent.result = this.$post("service/integration/save", param, () => {
|
||||
this.show = true;
|
||||
this.$refs.bugBtn.showEdit = true;
|
||||
this.$refs.bugBtn.showSave = false;
|
||||
this.$refs.bugBtn.showCancel = false;
|
||||
this.init();
|
||||
this.$success(this.$t('commons.save_success'));
|
||||
});
|
||||
} else {
|
||||
return false;
|
||||
}
|
||||
})
|
||||
},
|
||||
clear() {
|
||||
this.$set(this.form, 'account', '');
|
||||
this.$set(this.form, 'password', '');
|
||||
this.$set(this.form, 'url', '');
|
||||
this.$set(this.form, 'issuetype', '');
|
||||
this.$nextTick(() => {
|
||||
this.$refs.form.clearValidate();
|
||||
});
|
||||
},
|
||||
testConnection() {
|
||||
if (this.form.account && this.form.password) {
|
||||
this.$parent.result = this.$get("issues/auth/" + JIRA, () => {
|
||||
this.$success(this.$t('organization.integration.verified'));
|
||||
});
|
||||
} else {
|
||||
this.$warning(this.$t('organization.integration.not_integrated'));
|
||||
return false;
|
||||
}
|
||||
},
|
||||
cancelIntegration() {
|
||||
if (this.form.account && this.form.password) {
|
||||
this.$alert(this.$t('organization.integration.cancel_confirm') + JIRA + "?", '', {
|
||||
confirmButtonText: this.$t('commons.confirm'),
|
||||
callback: (action) => {
|
||||
if (action === 'confirm') {
|
||||
const {lastOrganizationId} = getCurrentUser();
|
||||
let param = {};
|
||||
param.orgId = lastOrganizationId;
|
||||
param.platform = JIRA;
|
||||
this.$parent.result = this.$post("service/integration/delete", param, () => {
|
||||
this.$success(this.$t('organization.integration.successful_operation'));
|
||||
this.init('');
|
||||
});
|
||||
}
|
||||
}
|
||||
});
|
||||
} else {
|
||||
this.$warning(this.$t('organization.integration.not_integrated'));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
||||
<style scoped>
|
||||
.defect-tip {
|
||||
background: #EDEDED;
|
||||
border: solid #E1E1E1 1px;
|
||||
margin: 10px 0;
|
||||
padding: 10px;
|
||||
border-radius: 3px;
|
||||
}
|
||||
</style>
|
|
@ -0,0 +1,166 @@
|
|||
<template>
|
||||
<div>
|
||||
<div style="width: 500px">
|
||||
<div style="margin-top: 20px;margin-bottom: 10px">{{ $t('organization.integration.basic_auth_info') }}</div>
|
||||
<el-form :model="form" ref="form" label-width="120px" size="small" :disabled="show" :rules="rules">
|
||||
<el-form-item :label="$t('organization.integration.api_account')" prop="account">
|
||||
<el-input v-model="form.account" :placeholder="$t('organization.integration.input_api_account')"/>
|
||||
</el-form-item>
|
||||
<el-form-item :label="$t('organization.integration.api_password')" prop="password">
|
||||
<el-input v-model="form.password" auto-complete="new-password"
|
||||
:placeholder="$t('organization.integration.input_api_password')" show-password/>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
</div>
|
||||
|
||||
<bug-manage-btn @save="save"
|
||||
@init="init"
|
||||
@testConnection="testConnection"
|
||||
@cancelIntegration="cancelIntegration"
|
||||
:form="form"
|
||||
:show.sync="show"
|
||||
ref="bugBtn"/>
|
||||
|
||||
<div class="defect-tip">
|
||||
<div>{{ $t('organization.integration.use_tip') }}</div>
|
||||
<div>
|
||||
1. {{ $t('organization.integration.use_tip_tapd') }}
|
||||
</div>
|
||||
<div>
|
||||
2. {{ $t('organization.integration.use_tip_two') }}
|
||||
<router-link to="/track/project/all" style="margin-left: 5px">
|
||||
{{ $t('organization.integration.link_the_project_now') }}
|
||||
</router-link>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import BugManageBtn from "@/business/components/settings/organization/components/BugManageBtn";
|
||||
import {getCurrentUser} from "@/common/js/utils";
|
||||
import {TAPD} from "@/common/js/constants";
|
||||
|
||||
export default {
|
||||
name: "TapdSetting.vue",
|
||||
components: {
|
||||
BugManageBtn
|
||||
},
|
||||
created() {
|
||||
this.init();
|
||||
},
|
||||
data() {
|
||||
return {
|
||||
show: true,
|
||||
form: {},
|
||||
rules: {
|
||||
account: {
|
||||
required: true,
|
||||
message: this.$t('organization.integration.input_api_account'),
|
||||
trigger: ['change', 'blur']
|
||||
},
|
||||
password: {
|
||||
required: true,
|
||||
message: this.$t('organization.integration.input_api_password'),
|
||||
trigger: ['change', 'blur']
|
||||
}
|
||||
},
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
init() {
|
||||
const {lastOrganizationId} = getCurrentUser();
|
||||
let param = {};
|
||||
param.platform = TAPD;
|
||||
param.orgId = lastOrganizationId;
|
||||
this.$parent.result = this.$post("service/integration/type", param, response => {
|
||||
let data = response.data;
|
||||
if (data.configuration) {
|
||||
let config = JSON.parse(data.configuration);
|
||||
this.$set(this.form, 'account', config.account);
|
||||
this.$set(this.form, 'password', config.password);
|
||||
} else {
|
||||
this.clear();
|
||||
}
|
||||
})
|
||||
},
|
||||
save() {
|
||||
this.$refs['form'].validate(valid => {
|
||||
if (valid) {
|
||||
|
||||
let param = {};
|
||||
let auth = {
|
||||
account: this.form.account,
|
||||
password: this.form.password,
|
||||
};
|
||||
const {lastOrganizationId} = getCurrentUser();
|
||||
param.organizationId = lastOrganizationId;
|
||||
param.platform = TAPD;
|
||||
param.configuration = JSON.stringify(auth);
|
||||
|
||||
this.$parent.result = this.$post("service/integration/save", param, () => {
|
||||
this.show = true;
|
||||
this.$refs.bugBtn.showEdit = true;
|
||||
this.$refs.bugBtn.showSave = false;
|
||||
this.$refs.bugBtn.showCancel = false;
|
||||
this.init();
|
||||
this.$success(this.$t('commons.save_success'));
|
||||
});
|
||||
} else {
|
||||
return false;
|
||||
}
|
||||
})
|
||||
},
|
||||
clear() {
|
||||
this.$set(this.form, 'account', '');
|
||||
this.$set(this.form, 'password', '');
|
||||
this.$nextTick(() => {
|
||||
this.$refs.form.clearValidate();
|
||||
});
|
||||
},
|
||||
testConnection() {
|
||||
if (this.form.account && this.form.password) {
|
||||
this.$parent.result = this.$get("issues/auth/" + TAPD, () => {
|
||||
this.$success(this.$t('organization.integration.verified'));
|
||||
});
|
||||
} else {
|
||||
this.$warning(this.$t('organization.integration.not_integrated'));
|
||||
return false;
|
||||
}
|
||||
},
|
||||
cancelIntegration() {
|
||||
if (this.form.account && this.form.password) {
|
||||
this.$alert(this.$t('organization.integration.cancel_confirm') + TAPD + "?", '', {
|
||||
confirmButtonText: this.$t('commons.confirm'),
|
||||
callback: (action) => {
|
||||
if (action === 'confirm') {
|
||||
const {lastOrganizationId} = getCurrentUser();
|
||||
let param = {};
|
||||
param.orgId = lastOrganizationId;
|
||||
param.platform = TAPD;
|
||||
this.$parent.result = this.$post("service/integration/delete", param, () => {
|
||||
this.$success(this.$t('organization.integration.successful_operation'));
|
||||
this.init('');
|
||||
});
|
||||
}
|
||||
}
|
||||
});
|
||||
} else {
|
||||
this.$warning(this.$t('organization.integration.not_integrated'));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
||||
<style scoped>
|
||||
|
||||
.defect-tip {
|
||||
background: #EDEDED;
|
||||
border: solid #E1E1E1 1px;
|
||||
margin: 10px 0;
|
||||
padding: 10px;
|
||||
border-radius: 3px;
|
||||
}
|
||||
|
||||
</style>
|
|
@ -0,0 +1,164 @@
|
|||
<template>
|
||||
<div>
|
||||
<div style="width: 500px">
|
||||
<div style="margin-top: 20px;margin-bottom: 10px">{{ $t('organization.integration.basic_auth_info') }}</div>
|
||||
<el-form :model="form" ref="form" label-width="120px" size="small" :disabled="show" :rules="rules">
|
||||
<el-form-item :label="$t('organization.integration.app_name')" prop="account">
|
||||
<el-input v-model="form.account" :placeholder="$t('organization.integration.input_app_name')"/>
|
||||
</el-form-item>
|
||||
<el-form-item :label="$t('organization.integration.app_key')" prop="password">
|
||||
<el-input v-model="form.password" auto-complete="new-password"
|
||||
:placeholder="$t('organization.integration.input_app_key')" show-password/>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
</div>
|
||||
|
||||
<bug-manage-btn @save="save"
|
||||
@init="init"
|
||||
@testConnection="testConnection"
|
||||
@cancelIntegration="cancelIntegration"
|
||||
:form="form"
|
||||
:show.sync="show"
|
||||
ref="bugBtn"/>
|
||||
|
||||
<div class="defect-tip">
|
||||
<div>{{ $t('organization.integration.use_tip') }}</div>
|
||||
<div>
|
||||
1. {{ $t('organization.integration.use_tip_zentao') }}
|
||||
</div>
|
||||
<div>
|
||||
2. {{ $t('organization.integration.use_tip_two') }}
|
||||
<router-link to="/track/project/all" style="margin-left: 5px">
|
||||
{{ $t('organization.integration.link_the_project_now') }}
|
||||
</router-link>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import BugManageBtn from "@/business/components/settings/organization/components/BugManageBtn";
|
||||
import {getCurrentUser} from "@/common/js/utils";
|
||||
import {ZEN_TAO} from "@/common/js/constants";
|
||||
|
||||
export default {
|
||||
name: "ZentaoSetting",
|
||||
components: {
|
||||
BugManageBtn
|
||||
},
|
||||
created() {
|
||||
this.init();
|
||||
},
|
||||
data() {
|
||||
return {
|
||||
show: true,
|
||||
form: {},
|
||||
rules: {
|
||||
account: {
|
||||
required: true,
|
||||
message: this.$t('organization.integration.input_app_name'),
|
||||
trigger: ['change', 'blur']
|
||||
},
|
||||
password: {
|
||||
required: true,
|
||||
message: this.$t('organization.integration.input_app_key'),
|
||||
trigger: ['change', 'blur']
|
||||
}
|
||||
},
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
save() {
|
||||
this.$refs['form'].validate(valid => {
|
||||
if (valid) {
|
||||
|
||||
const {lastOrganizationId} = getCurrentUser();
|
||||
let param = {};
|
||||
let auth = {
|
||||
account: this.form.account,
|
||||
password: this.form.password,
|
||||
};
|
||||
param.organizationId = lastOrganizationId;
|
||||
param.platform = ZEN_TAO;
|
||||
param.configuration = JSON.stringify(auth);
|
||||
|
||||
this.$parent.result = this.$post("service/integration/save", param, () => {
|
||||
this.show = true;
|
||||
this.$refs.bugBtn.showEdit = true;
|
||||
this.$refs.bugBtn.showSave = false;
|
||||
this.$refs.bugBtn.showCancel = false;
|
||||
this.init();
|
||||
this.$success(this.$t('commons.save_success'));
|
||||
});
|
||||
} else {
|
||||
return false;
|
||||
}
|
||||
})
|
||||
},
|
||||
init() {
|
||||
const {lastOrganizationId} = getCurrentUser();
|
||||
let param = {};
|
||||
param.platform = ZEN_TAO;
|
||||
param.orgId = lastOrganizationId;
|
||||
this.$parent.result = this.$post("service/integration/type", param, response => {
|
||||
let data = response.data;
|
||||
if (data.configuration) {
|
||||
let config = JSON.parse(data.configuration);
|
||||
this.$set(this.form, 'account', config.account);
|
||||
this.$set(this.form, 'password', config.password);
|
||||
} else {
|
||||
this.clear();
|
||||
}
|
||||
})
|
||||
},
|
||||
clear() {
|
||||
this.$set(this.form, 'account', '');
|
||||
this.$set(this.form, 'password', '');
|
||||
this.$nextTick(() => {
|
||||
this.$refs.form.clearValidate();
|
||||
});
|
||||
},
|
||||
testConnection() {
|
||||
if (this.form.account && this.form.password) {
|
||||
this.$parent.result = this.$get("issues/auth/" + ZEN_TAO, () => {
|
||||
this.$success(this.$t('organization.integration.verified'));
|
||||
});
|
||||
} else {
|
||||
this.$warning(this.$t('organization.integration.not_integrated'));
|
||||
return false;
|
||||
}
|
||||
},
|
||||
cancelIntegration() {
|
||||
if (this.form.account && this.form.password) {
|
||||
this.$alert(this.$t('organization.integration.cancel_confirm') + ZEN_TAO + "?", '', {
|
||||
confirmButtonText: this.$t('commons.confirm'),
|
||||
callback: (action) => {
|
||||
if (action === 'confirm') {
|
||||
const {lastOrganizationId} = getCurrentUser();
|
||||
let param = {};
|
||||
param.orgId = lastOrganizationId;
|
||||
param.platform = ZEN_TAO;
|
||||
this.$parent.result = this.$post("service/integration/delete", param, () => {
|
||||
this.$success(this.$t('organization.integration.successful_operation'));
|
||||
this.init('');
|
||||
});
|
||||
}
|
||||
}
|
||||
});
|
||||
} else {
|
||||
this.$warning(this.$t('organization.integration.not_integrated'));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
||||
<style scoped>
|
||||
.defect-tip {
|
||||
background: #EDEDED;
|
||||
border: solid #E1E1E1 1px;
|
||||
margin: 10px 0;
|
||||
padding: 10px;
|
||||
border-radius: 3px;
|
||||
}
|
||||
</style>
|
|
@ -20,6 +20,10 @@ export const ZH_CN = 'zh_CN';
|
|||
export const ZH_TW = 'zh_TW';
|
||||
export const EN_US = 'en_US';
|
||||
|
||||
export const TAPD = 'Tapd';
|
||||
export const JIRA = 'Jira';
|
||||
export const ZEN_TAO = 'Zentao';
|
||||
|
||||
export const SCHEDULE_TYPE = {
|
||||
API_TEST: 'API_TEST',
|
||||
PERFORMANCE_TEST: 'PERFORMANCE_TEST'
|
||||
|
|
|
@ -250,15 +250,22 @@ export default {
|
|||
basic_auth_info: 'Basic Auth account information:',
|
||||
api_account: 'API account',
|
||||
api_password: 'API password',
|
||||
app_name: 'APP name',
|
||||
app_key: 'APP key',
|
||||
account: 'Account',
|
||||
password: 'Password',
|
||||
jira_url: 'JIRA url',
|
||||
jira_issuetype: 'JIRA issuetype',
|
||||
input_api_account: 'please enter account',
|
||||
input_api_password: 'Please enter password',
|
||||
input_app_name: 'Please enter the application code',
|
||||
input_app_key: 'Please enter the key',
|
||||
input_jira_url: 'Please enter Jira address, for example: https://metersphere.atlassian.net/',
|
||||
input_jira_issuetype: 'Please enter the question type',
|
||||
use_tip: 'Usage guidelines:',
|
||||
use_tip_tapd: 'Basic Auth account information is queried in "Company Management-Security and Integration-Open Platform"',
|
||||
use_tip_jira: 'Jira software server authentication information is account password, Jira software cloud authentication information is account + token (account settings-security-create API token)',
|
||||
use_tip_zentao: 'Log in to ZenTao as a super administrator user, enter the background-secondary development-application, click [Add Application] to add an application',
|
||||
use_tip_two: 'After saving the Basic Auth account information, you need to manually associate the ID/key in the Metersphere project',
|
||||
link_the_project_now: 'Link the project now',
|
||||
cancel_edit: 'Cancel edit',
|
||||
|
|
|
@ -250,15 +250,22 @@ export default {
|
|||
basic_auth_info: 'Basic Auth 账号信息:',
|
||||
api_account: 'API 账号',
|
||||
api_password: 'API 口令',
|
||||
app_name: '应用代号',
|
||||
app_key: '密钥',
|
||||
account: '账号',
|
||||
password: '密码',
|
||||
jira_url: 'JIRA 地址',
|
||||
jira_issuetype: '问题类型',
|
||||
input_api_account: '请输入账号',
|
||||
input_api_password: '请输入口令',
|
||||
input_app_name: '请输入应用代号',
|
||||
input_app_key: '请输入密钥',
|
||||
input_jira_url: '请输入Jira地址,例:https://metersphere.atlassian.net/',
|
||||
input_jira_issuetype: '请输入问题类型',
|
||||
use_tip: '使用指引:',
|
||||
use_tip_tapd: 'Tapd Basic Auth 账号信息在"公司管理-安全与集成-开放平台"中查询',
|
||||
use_tip_jira: 'Jira software server 认证信息为 账号密码,Jira software cloud 认证信息为 账号+令牌(账户设置-安全-创建API令牌)',
|
||||
use_tip_zentao: '用超级管理员用户登录禅道,进入后台-二次开发-应用,点击【添加应用】新增一个应用',
|
||||
use_tip_two: '保存 Basic Auth 账号信息后,需要在 Metersphere 项目中手动关联 ID/key',
|
||||
link_the_project_now: '马上关联项目',
|
||||
cancel_edit: '取消编辑',
|
||||
|
|
|
@ -252,15 +252,22 @@ export default {
|
|||
basic_auth_info: 'Basic Auth 賬號信息:',
|
||||
api_account: 'API 賬號',
|
||||
api_password: 'API 口令',
|
||||
app_name: '應用代號',
|
||||
app_key: '密鑰',
|
||||
account: '賬號',
|
||||
password: '密碼',
|
||||
jira_url: 'JIRA 地址',
|
||||
jira_issuetype: '問題類型',
|
||||
input_api_account: '請輸入賬號',
|
||||
input_api_password: '請輸入口令',
|
||||
input_app_name: '請輸入應用代號',
|
||||
input_app_key: '請輸入密鑰',
|
||||
input_jira_url: '請輸入Jira地址,例:https://metersphere.atlassian.net/',
|
||||
input_jira_issuetype: '請輸入問題類型',
|
||||
use_tip: '使用指引:',
|
||||
use_tip_tapd: 'Tapd Basic Auth 賬號信息在"公司管理-安全與集成-開放平臺"中查詢',
|
||||
use_tip_jira: 'Jira software server 認證信息為 賬號密碼,Jira software cloud 認證信息為 賬號+令牌(賬戶設置-安全-創建API令牌)',
|
||||
use_tip_zentao: '用超級管理員用戶登錄禪道,進入後台-二次開發-應用,點擊【添加應用】添加一個應用',
|
||||
use_tip_two: '保存 Basic Auth 賬號信息後,需要在 Metersphere 項目中手動關聯 ID/key',
|
||||
link_the_project_now: '馬上關聯項目',
|
||||
cancel_edit: '取消編輯',
|
||||
|
|
Loading…
Reference in New Issue