JD VMS Integration

Auto fill vms form fields

Dovrai installare un'estensione come Tampermonkey, Greasemonkey o Violentmonkey per installare questo script.

You will need to install an extension such as Tampermonkey to install this script.

Dovrai installare un'estensione come Tampermonkey o Violentmonkey per installare questo script.

Dovrai installare un'estensione come Tampermonkey o Userscripts per installare questo script.

Dovrai installare un'estensione come ad esempio Tampermonkey per installare questo script.

Dovrai installare un gestore di script utente per installare questo script.

(Ho già un gestore di script utente, lasciamelo installare!)

Dovrai installare un'estensione come ad esempio Stylus per installare questo stile.

Dovrai installare un'estensione come ad esempio Stylus per installare questo stile.

Dovrai installare un'estensione come ad esempio Stylus per installare questo stile.

Dovrai installare un'estensione per la gestione degli stili utente per installare questo stile.

Dovrai installare un'estensione per la gestione degli stili utente per installare questo stile.

Dovrai installare un'estensione per la gestione degli stili utente per installare questo stile.

(Ho già un gestore di stile utente, lasciamelo installare!)

// ==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);
});