|
|
@@ -0,0 +1,137 @@
|
|
|
+/**
|
|
|
+ * 曼卡龙合同页面使用示例。
|
|
|
+ *
|
|
|
+ * 使用方式:
|
|
|
+ * 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("请在页面中接入原合同生成方法并返回最终文件地址");
|
|
|
+}
|