| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138 |
- /**
- * 曼卡龙合同页面使用示例。
- *
- * 使用方式:
- * 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<void>}
- */
- 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<Object>} 合同确认结果
- */
- 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<string|Object>} 文件地址或包含文件地址的对象
- */
- async function generateContractFile (params) {
- if (typeof this.generateExistingContract === "function") {
- return this.generateExistingContract(params);
- }
- throw new Error("请在页面中接入原合同生成方法并返回最终文件地址");
- }
|