// ==UserScript==
// @name JD VMS Integration
// @namespace com.jd.vms
// @version 1.0.4
// @description Auto fill vms form fields
// @author tinymins
// @match http://vms.jd.com/Integration/Apply
// @icon http://vms.jd.com/assets/img/favicon.ico
// @grant none
// ==/UserScript==
const getConfig = () => {
let config = {};
try {
config = JSON.parse(window.localStorage['com.derzh.jd.vms.integration.apply.preset']);
} catch (error) {}
if (typeof config !== 'object') {
config = {};
}
return Object.assign({
apply_type: '4',
version_server: '0',
test_content: '无',
module_id: '73',
self_test: '0',
modification_explanation: '无',
affect_range: '无',
interface_name: '无',
test_data: '无',
test_address: 'http://beta-ace.jd.com/launch/',
code_branch: 'prod',
review_result: '1',
request_memo: '无',
code_review_operator: '',
product_operator: '',
test_operator: '',
}, config);
};
$('#cancel-apply-request').after('<button type="button" class="btn btn-default pull-right">存为预设</button>').next().click(() => {
window.localStorage['com.derzh.jd.vms.integration.apply.preset'] = JSON.stringify({
apply_type: $('#apply_type').val(),
version_server: $('#version_server').val(),
test_content: $('#test_content').val(),
module_id: $('#module_id').val(),
self_test: $('#self_test').val(),
modification_explanation: $('#modification_explanation').val(),
affect_range: $('#affect_range').val(),
interface_name: $('#interface_name').val(),
test_data: $('#test_data').val(),
test_address: $('#test_address').val(),
code_branch: $('#code_branch').val(),
review_result: $('#review_result').val(),
request_memo: $('#request-memo').val(),
code_review_operator: $('#code-review-operator').val(),
product_operator: $('#product-operator').val(),
test_operator: $('#test-operator').val(),
});
});
$('#jacp_card_id').after('<button style="margin: 5px; height: 30px; transform: translateY(2px);">行云</button>').next().click(() => {
if ($('#jacp_card_id').val() === '-1') {
return alert('请先选择卡片');
}
window.open(`http://jagile.jd.com/teamspace/cardlist/tf_project/carddetail?cardId=${$('#jacp_card_id').val()}`);
});
$('#jacp_card_id').after('<button style="margin: 5px; height: 30px; transform: translateY(2px);">FILL</button>').next().click(() => {
if ($('#jacp_card_id').val() === '-1') {
return alert('请先选择卡片');
}
const config = getConfig();
$('#apply_type').val(config.apply_type).change();
const dateNextMonth = new Date();
dateNextMonth.setTime(dateNextMonth.getTime() + 86400e3 * 30);
$('#expect_online_date').val(
[dateNextMonth.getFullYear(), dateNextMonth.getMonth() + 1, dateNextMonth.getDate()]
.map(a => (a < 10 ? `0${a}` : a))
.join('-'),
);
$('#version_server').val(config.version_server);
$('#test_content').val(config.test_content);
$('#module_id').val(config.module_id).change();
$('#self_test').val(config.self_test);
$('#modification_explanation').val(config.modification_explanation);
$('#affect_range').val(config.affect_range);
$('[name="degrade_switch_apply"][value="0"]+ins').click();
$('[name="pressure_test"][value="0"]+ins').click();
$('#interface_name').val(config.interface_name);
$('#test_data').val(config.test_data);
$('#test_address').val(config.test_address);
$('#code_branch').val(config.code_branch);
$('#review_result').val(config.review_result).change();
$('#request-memo').val(config.request_memo);
const fetch = (url) => {
const xml = new XMLHttpRequest();
xml.open('GET', url, false);
xml.withCredentials = true;
xml.send();
return xml.responseText;
};
const fill_erp_tags = async (elid, erps) => {
const data = await Promise.all(
erps
.split(',')
.map(s => s.trim())
.filter(_ => _)
.map(
erp => $.ajax(`http://vms.jd.com/user/get_user_base_info?keyword=${erp}`)
.then(res => res.info.data.find(({ user_name }) => user_name === erp)),
)
.filter(_ => _),
);
const jqEl = $(`#${elid}`);
jqEl.tagsinput('removeAll');
data.filter(_ => _).forEach(v => jqEl.tagsinput('add', v));
};
const card = JSON.parse(fetch(`http://jagile.jd.com/jacp/api/v1/bizSpaceCard/cardDetail?id=${jacp_card_dom.val()}`));
const roles = JSON.parse(fetch(`http://jagile.jd.com/jacp/api/v1/bizConfig/space/kv/${card.data.spaceId}`))
.data.reduce((a, b) => {
if (String(b.name + b.group).match(/测试/u)) {
a[b.code] = 1;
}
return a;
}, {});
fill_erp_tags('code-review-operator', config.code_review_operator);
fill_erp_tags('product-operator', card.data.creator.erp || config.product_operator);
fill_erp_tags('test-operator', card.data.personHours.find(a => roles[a.roleCode])?.erp || config.test_operator);
});