mkl-contract-example.js 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138
  1. /**
  2. * 曼卡龙合同页面使用示例。
  3. *
  4. * 使用方式:
  5. * 1. 页面数据源引用打包后的 mjs.min.js。
  6. * 2. 将本示例中的方法复制到页面 JS。
  7. * 3. 将 FIELD_IDS 替换为当前页面实际组件 ID。
  8. * 4. 将 generateContractFile 替换为当前页面已有的合同生成方法。
  9. * 5. 发布生产时把 _mjsLoad("test") 改为 _mjsLoad("production")。
  10. */
  11. const FIELD_IDS = {
  12. // 合同唯一标识(业务唯一号)
  13. uniqueId: "textField_mte3gh61",
  14. // 合同号
  15. contractNo: "textField_mrishceq",
  16. // 合同主从类型
  17. contractMode: "radioField_mryiusal",
  18. // 合同类型
  19. contractType: "textField_mspzgras",
  20. // 主合同号(子合同使用)
  21. masterNo: "textField_mrylbq28",
  22. // 合同名称
  23. contractName: "textField_mryko9bh",
  24. // 合同附件
  25. attachment: "attachmentField_msv7rz7m",
  26. };
  27. /**
  28. * 加载 MJS 公共库。
  29. * @param {"test"|"production"} environment 运行环境
  30. * @returns {void}
  31. */
  32. export function _mjsLoad (environment = "test") {
  33. const script = document.createElement("script");
  34. script.type = "text/javascript";
  35. script.src = "https://mc.cloudpure.cn/mjs/mkl/mjs.min.js";
  36. script.onload = () => this._mjsInit(environment);
  37. document.head.appendChild(script);
  38. }
  39. /**
  40. * 初始化 MJS 和曼卡龙客户模块。
  41. * @param {"test"|"production"} environment 运行环境
  42. * @returns {Promise<void>}
  43. */
  44. export async function _mjsInit (environment = "test") {
  45. await mjs.init(this, { vconsole: false });
  46. mjs.corp.mkl.init({
  47. environment,
  48. testApi: "https://mc.cloudpure.cn/frphz/mankalong",
  49. productionApi: "https://znht.mclon.com/api/mankalong",
  50. });
  51. }
  52. /**
  53. * 原提交前方法备份。
  54. * 保留原方法内容,仅改名,后续如有原校验可继续放在这里。
  55. * @param {Object} params 宜搭提交参数
  56. * @returns {void}
  57. */
  58. export function beforeSubmitOriginal ({ formDataMap }) {
  59. console.log("beforeSubmit", formDataMap);
  60. }
  61. /**
  62. * 合同提交前校验:合同号和合同附件必须同时有值。
  63. * @returns {boolean} 是否允许提交
  64. */
  65. export function beforeSubmitContractReady () {
  66. return mjs.corp.mkl.beforeSubmitContract({
  67. contractNo: FIELD_IDS.contractNo,
  68. attachment: FIELD_IDS.attachment,
  69. });
  70. }
  71. /**
  72. * 宜搭提交前生命周期入口。
  73. * 原校验先执行,新合同生成校验失败时返回 false 阻断提交。
  74. * @param {Object} params 宜搭提交参数
  75. * @returns {boolean} 是否允许提交
  76. */
  77. export function beforeSubmit (params) {
  78. beforeSubmitOriginal.call(this, params);
  79. return beforeSubmitContractReady.call(this);
  80. }
  81. /**
  82. * 原合同预览按钮示例。
  83. * 原有预览逻辑保持不变。
  84. * @returns {Promise<*>} 原预览方法结果
  85. */
  86. export function onClickContractPreview () {
  87. return generateSubFormImages.call(this, "preview", null);
  88. }
  89. /**
  90. * 合同确认按钮示例:合同号 → 正式生成 → OSS → 附件回写。
  91. * @returns {Promise<Object>} 合同确认结果
  92. */
  93. export async function onClickContractConfirm () {
  94. return mjs.corp.mkl.confirmContract({
  95. // mjs.$this 是 mjs.init 保存的当前宜搭页面实例。
  96. $this: mjs.$this,
  97. componentIds: {
  98. uniqueId: FIELD_IDS.uniqueId,
  99. contractNo: FIELD_IDS.contractNo,
  100. mode: FIELD_IDS.contractMode,
  101. type: FIELD_IDS.contractType,
  102. masterNo: FIELD_IDS.masterNo,
  103. name: FIELD_IDS.contractName,
  104. attachment: FIELD_IDS.attachment,
  105. },
  106. subDirectory: "工程类",
  107. generateContract: async ({ contractNumber, mode }) => {
  108. // 接入当前页面已有的正式合同生成方法。
  109. // 该回调必须返回最终文件 URL,或 { downloadUrl: "..." }。
  110. return generateContractFile.call(this, {
  111. contractNumber,
  112. mode,
  113. });
  114. },
  115. });
  116. }
  117. /**
  118. * 页面原合同生成方法适配层示例。
  119. * 请替换为当前页面已有接口调用;不要修改原方法本身。
  120. * @param {Object} params 合同生成参数
  121. * @returns {Promise<string|Object>} 文件地址或包含文件地址的对象
  122. */
  123. async function generateContractFile (params) {
  124. if (typeof this.generateExistingContract === "function") {
  125. return this.generateExistingContract(params);
  126. }
  127. throw new Error("请在页面中接入原合同生成方法并返回最终文件地址");
  128. }