/** * 曼卡龙合同页面使用示例。 * * 使用方式: * 1. 页面数据源引用打包后的 mjs.min.js。 * 2. 将本示例中的方法复制到页面 JS。 * 3. 将 FIELD_IDS 替换为当前页面实际组件 ID。 * 4. 将 generateContractFile 替换为当前页面已有的合同生成方法。 * 5. 发布生产时把 _mjsLoad("test") 改为 _mjsLoad("production")。 */ const FIELD_IDS = { // 合同唯一标识(业务唯一号) uniqueId: "textField_mte3gh61", // 合同号 contractNo: "textField_mrishceq", // 合同主从类型 contractMode: "radioField_mryiusal", // 合同类型 contractType: "textField_mspzgras", // 主合同号(子合同使用) masterNo: "textField_mrylbq28", // 合同名称 contractName: "textField_mryko9bh", // 合同附件 attachment: "attachmentField_msv7rz7m", }; /** * 加载 MJS 公共库。 * @param {"test"|"production"} environment 运行环境 * @returns {void} */ export function _mjsLoad (environment = "test") { const script = document.createElement("script"); script.type = "text/javascript"; script.src = "https://mc.cloudpure.cn/mjs/mkl/mjs.min.js"; script.onload = () => this._mjsInit(environment); document.head.appendChild(script); } /** * 初始化 MJS 和曼卡龙客户模块。 * @param {"test"|"production"} environment 运行环境 * @returns {Promise} */ export async function _mjsInit (environment = "test") { await mjs.init(this, { vconsole: false }); mjs.corp.mkl.init({ environment, testApi: "https://mc.cloudpure.cn/frphz/mankalong", productionApi: "https://znht.mclon.com/api/mankalong", }); } /** * 原提交前方法备份。 * 保留原方法内容,仅改名,后续如有原校验可继续放在这里。 * @param {Object} params 宜搭提交参数 * @returns {void} */ export function beforeSubmitOriginal ({ formDataMap }) { console.log("beforeSubmit", formDataMap); } /** * 合同提交前校验:合同号和合同附件必须同时有值。 * @returns {boolean} 是否允许提交 */ export function beforeSubmitContractReady () { return mjs.corp.mkl.beforeSubmitContract({ contractNo: FIELD_IDS.contractNo, attachment: FIELD_IDS.attachment, }); } /** * 宜搭提交前生命周期入口。 * 原校验先执行,新合同生成校验失败时返回 false 阻断提交。 * @param {Object} params 宜搭提交参数 * @returns {boolean} 是否允许提交 */ export function beforeSubmit (params) { beforeSubmitOriginal.call(this, params); return beforeSubmitContractReady.call(this); } /** * 原合同预览按钮示例。 * 原有预览逻辑保持不变。 * @returns {Promise<*>} 原预览方法结果 */ export function onClickContractPreview () { return generateSubFormImages.call(this, "preview", null); } /** * 合同确认按钮示例:合同号 → 正式生成 → OSS → 附件回写。 * @returns {Promise} 合同确认结果 */ export async function onClickContractConfirm () { return mjs.corp.mkl.confirmContract({ // mjs.$this 是 mjs.init 保存的当前宜搭页面实例。 $this: mjs.$this, componentIds: { uniqueId: FIELD_IDS.uniqueId, contractNo: FIELD_IDS.contractNo, mode: FIELD_IDS.contractMode, type: FIELD_IDS.contractType, masterNo: FIELD_IDS.masterNo, name: FIELD_IDS.contractName, attachment: FIELD_IDS.attachment, }, subDirectory: "工程类", generateContract: async ({ contractNumber, mode }) => { // 接入当前页面已有的正式合同生成方法。 // 该回调必须返回最终文件 URL,或 { downloadUrl: "..." }。 return generateContractFile.call(this, { contractNumber, mode, }); }, }); } /** * 页面原合同生成方法适配层示例。 * 请替换为当前页面已有接口调用;不要修改原方法本身。 * @param {Object} params 合同生成参数 * @returns {Promise} 文件地址或包含文件地址的对象 */ async function generateContractFile (params) { if (typeof this.generateExistingContract === "function") { return this.generateExistingContract(params); } throw new Error("请在页面中接入原合同生成方法并返回最终文件地址"); }