zhengyiming
19 小时以前 d5dae013d54e1e74390669a88241f6b8d4c1ec18
fix: 签约
2个文件已添加
11个文件已修改
730 ■■■■■ 已修改文件
.eslintrc-auto-import.json 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
auto-imports.d.ts 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/components/Dialog/OperateHistoryLogDialog.vue 23 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/constants/apiEnum.ts 34 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/constants/apiEnumText.ts 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/constants/electronSign.ts 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/constants/index.ts 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/hooks/log.ts 63 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/services/api/electronSign.ts 99 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/services/api/typings.d.ts 273 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/ProtocolManage/EditTemplate.vue 142 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/ProtocolManage/ProtocolManageList.vue 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/ProtocolManage/components/AddOrEditTemplateDialog.vue 28 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
.eslintrc-auto-import.json
@@ -25,8 +25,16 @@
    "EnumBillingMethodUnitText": true,
    "EnumClientType": true,
    "EnumClientTypeText": true,
    "EnumContractTemplateStatus": true,
    "EnumContractTemplateStatusText": true,
    "EnumContractTemplateStatusTextForEnterpriseFilter": true,
    "EnumContractTemplateValueRecorder": true,
    "EnumContractTemplateValueType": true,
    "EnumDataSource": true,
    "EnumDbAuditOperate": true,
    "EnumDbAuditOperateText": true,
    "EnumElectronSignAccess": true,
    "EnumElectronSignAccessText": true,
    "EnumEnterpriseRealMethod": true,
    "EnumMenuType": true,
    "EnumMenuVisitLevel": true,
@@ -223,6 +231,7 @@
    "useModel": true,
    "useOmit": true,
    "useOmitProps": true,
    "useOpenLogDialog": true,
    "usePortraitTable": true,
    "usePortraitTableWithAttachment": true,
    "useResizeHander": true,
auto-imports.d.ts
@@ -33,8 +33,16 @@
  const EnumBillingMethodUnitText: typeof import('./src/constants/task')['EnumBillingMethodUnitText']
  const EnumClientType: typeof import('./src/constants/apiEnum')['EnumClientType']
  const EnumClientTypeText: typeof import('./src/constants/apiEnumText')['EnumClientTypeText']
  const EnumContractTemplateStatus: typeof import('./src/constants/apiEnum')['EnumContractTemplateStatus']
  const EnumContractTemplateStatusText: typeof import('./src/constants/electronSign')['EnumContractTemplateStatusText']
  const EnumContractTemplateStatusTextForEnterpriseFilter: typeof import('./src/constants/electronSign')['EnumContractTemplateStatusTextForEnterpriseFilter']
  const EnumContractTemplateValueRecorder: typeof import('./src/constants/apiEnum')['EnumContractTemplateValueRecorder']
  const EnumContractTemplateValueType: typeof import('./src/constants/apiEnum')['EnumContractTemplateValueType']
  const EnumDataSource: typeof import('./src/constants/apiEnum')['EnumDataSource']
  const EnumDbAuditOperate: typeof import('./src/constants/apiEnum')['EnumDbAuditOperate']
  const EnumDbAuditOperateText: typeof import('./src/constants/apiEnumText')['EnumDbAuditOperateText']
  const EnumElectronSignAccess: typeof import('./src/constants/apiEnum')['EnumElectronSignAccess']
  const EnumElectronSignAccessText: typeof import('./src/constants/electronSign')['EnumElectronSignAccessText']
  const EnumEnterpriseRealMethod: typeof import('./src/constants/apiEnum')['EnumEnterpriseRealMethod']
  const EnumMenuType: typeof import('./src/constants/apiEnum')['EnumMenuType']
  const EnumMenuVisitLevel: typeof import('./src/constants/apiEnum')['EnumMenuVisitLevel']
@@ -236,6 +244,7 @@
  const useModel: typeof import('vue')['useModel']
  const useOmit: typeof import('./src/hooks/help')['useOmit']
  const useOmitProps: typeof import('./src/hooks/help')['useOmitProps']
  const useOpenLogDialog: typeof import('./src/hooks/log')['useOpenLogDialog']
  const usePortraitTable: typeof import('./src/hooks/portraitTable')['usePortraitTable']
  const usePortraitTableWithAttachment: typeof import('./src/hooks/portraitTable')['usePortraitTableWithAttachment']
  const useResizeHander: typeof import('./src/hooks/useResizeHander')['useResizeHander']
@@ -259,7 +268,7 @@
  export type { Component, Slot, Slots, ComponentPublicInstance, ComputedRef, DirectiveBinding, ExtractDefaultPropTypes, ExtractPropTypes, ExtractPublicPropTypes, InjectionKey, PropType, Ref, MaybeRef, MaybeRefOrGetter, VNode, WritableComputedRef } from 'vue'
  import('vue')
  // @ts-ignore
  export type { EnumBillingMethod, EnumClientType, EnumDataSource, EnumDbAuditOperate, EnumEnterpriseRealMethod, EnumMenuType, EnumMenuVisitLevel, EnumOcrAccess, EnumPagedListOrder, EnumPayAccess, EnumPersonalFreeTime, EnumPersonalJobSeekingStatus, EnumPersonalRealMethod, EnumRealAccess, EnumResourceController, EnumResourceMethod, EnumRoleWebApiDataPower, EnumSettlementCycle, EnumSmsAccess, EnumTaskCheckReceiveStatus, EnumTaskRecommendStatus, EnumTaskReleaseStatus, EnumTaskSettlementStatus, EnumTaskStatus, EnumTaskUserArrangeStatus, EnumTaskUserHireStatus, EnumTaskUserSignContractStatus, EnumTaskUserSubmitCheckReceiveStatus, EnumUserGender, EnumUserRealMethod, EnumUserStatus, EnumUserType, GetPersonalApplyTaskInfosQueryStatus, GetPersonalHireTaskInfosQueryStatus, GetTaskInfoQueryResultApplyButton, GetTaskInfoQueryResultHireButton, EnumBillingMethod, EnumClientType, EnumDataSource, EnumDbAuditOperate, EnumEnterpriseRealMethod, EnumMenuType, EnumMenuVisitLevel, EnumOcrAccess, EnumPagedListOrder, EnumPayAccess, EnumPersonalFreeTime, EnumPersonalJobSeekingStatus, EnumPersonalRealMethod, EnumRealAccess, EnumResourceController, EnumResourceMethod, EnumRoleWebApiDataPower, EnumSettlementCycle, EnumSmsAccess, EnumTaskCheckReceiveStatus, EnumTaskRecommendStatus, EnumTaskReleaseStatus, EnumTaskSettlementStatus, EnumTaskStatus, EnumTaskUserArrangeStatus, EnumTaskUserHireStatus, EnumTaskUserSignContractStatus, EnumTaskUserSubmitCheckReceiveStatus, EnumUserGender, EnumUserRealMethod, EnumUserStatus, EnumUserType, GetPersonalApplyTaskInfosQueryStatus, GetPersonalHireTaskInfosQueryStatus, GetTaskInfoQueryResultApplyButton, GetTaskInfoQueryResultHireButton } from './src/constants/apiEnum'
  export type { EnumBillingMethod, EnumClientType, EnumContractTemplateStatus, EnumContractTemplateValueRecorder, EnumContractTemplateValueType, EnumDataSource, EnumDbAuditOperate, EnumElectronSignAccess, EnumEnterpriseRealMethod, EnumMenuType, EnumMenuVisitLevel, EnumOcrAccess, EnumPagedListOrder, EnumPayAccess, EnumPersonalFreeTime, EnumPersonalJobSeekingStatus, EnumPersonalRealMethod, EnumRealAccess, EnumResourceController, EnumResourceMethod, EnumRoleWebApiDataPower, EnumSettlementCycle, EnumSmsAccess, EnumTaskCheckReceiveStatus, EnumTaskRecommendStatus, EnumTaskReleaseStatus, EnumTaskSettlementStatus, EnumTaskStatus, EnumTaskUserArrangeStatus, EnumTaskUserHireStatus, EnumTaskUserSignContractStatus, EnumTaskUserSubmitCheckReceiveStatus, EnumUserGender, EnumUserRealMethod, EnumUserStatus, EnumUserType, GetPersonalApplyTaskInfosQueryStatus, GetPersonalHireTaskInfosQueryStatus, GetTaskInfoQueryResultApplyButton, GetTaskInfoQueryResultHireButton, EnumBillingMethod, EnumClientType, EnumContractTemplateStatus, EnumContractTemplateValueRecorder, EnumContractTemplateValueType, EnumDataSource, EnumDbAuditOperate, EnumElectronSignAccess, EnumEnterpriseRealMethod, EnumMenuType, EnumMenuVisitLevel, EnumOcrAccess, EnumPagedListOrder, EnumPayAccess, EnumPersonalFreeTime, EnumPersonalJobSeekingStatus, EnumPersonalRealMethod, EnumRealAccess, EnumResourceController, EnumResourceMethod, EnumRoleWebApiDataPower, EnumSettlementCycle, EnumSmsAccess, EnumTaskCheckReceiveStatus, EnumTaskRecommendStatus, EnumTaskReleaseStatus, EnumTaskSettlementStatus, EnumTaskStatus, EnumTaskUserArrangeStatus, EnumTaskUserHireStatus, EnumTaskUserSignContractStatus, EnumTaskUserSubmitCheckReceiveStatus, EnumUserGender, EnumUserRealMethod, EnumUserStatus, EnumUserType, GetPersonalApplyTaskInfosQueryStatus, GetPersonalHireTaskInfosQueryStatus, GetTaskInfoQueryResultApplyButton, GetTaskInfoQueryResultHireButton } from './src/constants/apiEnum'
  import('./src/constants/apiEnum')
  // @ts-ignore
  export type { FlexWorkerEleSignEnum, FlexTaskWorkerHireEnum, FlexWorkerEleSignEnum, FlexTaskWorkerHireEnum } from './src/constants/cPerson'
@@ -322,8 +331,16 @@
    readonly EnumBillingMethodUnitText: UnwrapRef<typeof import('./src/constants/task')['EnumBillingMethodUnitText']>
    readonly EnumClientType: UnwrapRef<typeof import('./src/constants/apiEnum')['EnumClientType']>
    readonly EnumClientTypeText: UnwrapRef<typeof import('./src/constants/apiEnumText')['EnumClientTypeText']>
    readonly EnumContractTemplateStatus: UnwrapRef<typeof import('./src/constants/apiEnum')['EnumContractTemplateStatus']>
    readonly EnumContractTemplateStatusText: UnwrapRef<typeof import('./src/constants/electronSign')['EnumContractTemplateStatusText']>
    readonly EnumContractTemplateStatusTextForEnterpriseFilter: UnwrapRef<typeof import('./src/constants/electronSign')['EnumContractTemplateStatusTextForEnterpriseFilter']>
    readonly EnumContractTemplateValueRecorder: UnwrapRef<typeof import('./src/constants/apiEnum')['EnumContractTemplateValueRecorder']>
    readonly EnumContractTemplateValueType: UnwrapRef<typeof import('./src/constants/apiEnum')['EnumContractTemplateValueType']>
    readonly EnumDataSource: UnwrapRef<typeof import('./src/constants/apiEnum')['EnumDataSource']>
    readonly EnumDbAuditOperate: UnwrapRef<typeof import('./src/constants/apiEnum')['EnumDbAuditOperate']>
    readonly EnumDbAuditOperateText: UnwrapRef<typeof import('./src/constants/apiEnumText')['EnumDbAuditOperateText']>
    readonly EnumElectronSignAccess: UnwrapRef<typeof import('./src/constants/apiEnum')['EnumElectronSignAccess']>
    readonly EnumElectronSignAccessText: UnwrapRef<typeof import('./src/constants/electronSign')['EnumElectronSignAccessText']>
    readonly EnumEnterpriseRealMethod: UnwrapRef<typeof import('./src/constants/apiEnum')['EnumEnterpriseRealMethod']>
    readonly EnumMenuType: UnwrapRef<typeof import('./src/constants/apiEnum')['EnumMenuType']>
    readonly EnumMenuVisitLevel: UnwrapRef<typeof import('./src/constants/apiEnum')['EnumMenuVisitLevel']>
@@ -499,6 +516,7 @@
    readonly useModel: UnwrapRef<typeof import('vue')['useModel']>
    readonly useOmit: UnwrapRef<typeof import('./src/hooks/help')['useOmit']>
    readonly useOmitProps: UnwrapRef<typeof import('./src/hooks/help')['useOmitProps']>
    readonly useOpenLogDialog: UnwrapRef<typeof import('./src/hooks/log')['useOpenLogDialog']>
    readonly usePortraitTable: UnwrapRef<typeof import('./src/hooks/portraitTable')['usePortraitTable']>
    readonly usePortraitTableWithAttachment: UnwrapRef<typeof import('./src/hooks/portraitTable')['usePortraitTableWithAttachment']>
    readonly useResizeHander: UnwrapRef<typeof import('./src/hooks/useResizeHander')['useResizeHander']>
src/components/Dialog/OperateHistoryLogDialog.vue
@@ -24,8 +24,7 @@
</template>
<script setup lang="ts">
import { ProDialog, ProTableV2, ProDialogTableWrapper } from '@bole-core/components';
import { useTableLogList } from '@/hooks';
import { ProDialog, ProTableV2, ProDialogTableWrapper, defineColumns } from '@bole-core/components';
defineOptions({
  name: 'OperateHistoryLogDialog',
@@ -34,7 +33,8 @@
type Props = {
  modelValue: boolean;
  relationId: string;
  operateType?: number;
  getList: (pageIndex?: number) => Promise<void>;
  proTableProps: any;
};
const props = withDefaults(defineProps<Props>(), {
@@ -59,18 +59,17 @@
  () => props.modelValue,
  async (visible, oldVisible) => {
    if (!oldVisible && visible) {
      await getList();
      state.loading = false;
      await props.getList();
    }
  }
);
function onDialogClose() {
  state.loading = true;
}
const OperateHistoryTableColumns = defineColumns([
  { id: '1', enCode: 'createdUser', name: '操作人' },
  { id: '2', enCode: 'createdTime', name: '操作时间', width: 180 },
  { id: '3', enCode: 'operate', name: '操作' },
  { id: '4', enCode: 'content', name: '操作内容' },
]);
const { getList, proTableProps, state, OperateHistoryTableColumns } = useTableLogList({
  relationId: toRef(props, 'relationId'),
  operateType: toRef(props, 'operateType'),
});
function onDialogClose() {}
</script>
src/constants/apiEnum.ts
@@ -21,6 +21,32 @@
  Wxmp = 20,
}
/** 合同制版状态 */
export enum EnumContractTemplateStatus {
  /**待制版 */
  Wait = 10,
  /**已完成 */
  Completed = 20,
}
/** 合同模板变量 */
export enum EnumContractTemplateValueRecorder {
  /**发件人 */
  Creator = 10,
  /**签署人 */
  Signer = 20,
}
/** 合同模板变量类型 */
export enum EnumContractTemplateValueType {
  /**文本 */
  Text = 10,
  /**签署 */
  Sign = 20,
  /**日期 */
  Date = 30,
}
/** 数据来源 */
export enum EnumDataSource {
  /**818 */
@@ -37,6 +63,14 @@
  Deleted = 30,
}
/** 电子签 */
export enum EnumElectronSignAccess {
  /**上上签 */
  BestSign = 10,
  /**支付宝信任签 */
  AlipaySign = 20,
}
/** 企业实名方式 */
export enum EnumEnterpriseRealMethod {
  /**企业三要素 */
src/constants/apiEnumText.ts
@@ -24,3 +24,9 @@
  [EnumRoleWebApiDataPower.Creator]: '个人数据',
  [EnumRoleWebApiDataPower.All]: '全部数据',
};
export const EnumDbAuditOperateText = {
  [EnumDbAuditOperate.Added]: '添加',
  [EnumDbAuditOperate.Modified]: '修改',
  [EnumDbAuditOperate.Deleted]: '删除',
};
src/constants/electronSign.ts
New file
@@ -0,0 +1,14 @@
export const EnumContractTemplateStatusText = {
  [EnumContractTemplateStatus.Wait]: '待制版',
  [EnumContractTemplateStatus.Completed]: '已制版',
};
export const EnumContractTemplateStatusTextForEnterpriseFilter = {
  [EnumContractTemplateStatus.Wait]: '待制版',
  [EnumContractTemplateStatus.Completed]: '已制版',
};
export const EnumElectronSignAccessText = {
  [EnumElectronSignAccess.BestSign]: '上上签',
  [EnumElectronSignAccess.AlipaySign]: '支付宝信任签',
};
src/constants/index.ts
@@ -18,3 +18,4 @@
export * from './dic';
export * from './task';
export * from './enterpriseEmployee';
export * from './electronSign';
src/hooks/log.ts
New file
@@ -0,0 +1,63 @@
import { useDialog, useTable, Service, Data, ExtraParams } from '@bole-core/components';
type UseOpenLogDialogOptions<TData extends Data, TExtraParams extends ExtraParams> = {
  service: Service<TData, { id: string } & ExtraParams>;
};
export function useOpenLogDialog<TData extends Data, TExtraParams extends ExtraParams>({
  service,
}: UseOpenLogDialogOptions<TData, TExtraParams>) {
  const relationId = ref('');
  const { dialogProps, dialogState } = useDialog();
  async function openLogDialog(_relationId: string) {
    // relationId.value = _relationId;
    extraParamState.id = _relationId;
    await nextTick();
    dialogState.dialogVisible = true;
  }
  const BaseState = {
    loading: false,
  };
  const state = reactive({ ...BaseState });
  const {
    getDataSource: getList,
    proTableProps,
    extraParamState,
  } = useTable(service, {
    defaultExtraParams: {
      orderInput: [{ property: 'createdTime', order: EnumPagedListOrder.Desc }],
      id: '',
    },
    columnsRenderProps: {
      createdTime: {
        type: 'date',
        format: 'YYYY-MM-DD HH:mm:ss',
      },
      content: {
        formatter: (row) => (row.content ?? []).join(','),
      },
      operate: {
        type: 'enum',
        valueEnum: EnumDbAuditOperateText,
      },
    },
  });
  const logDialogProps = computed(() => {
    return {
      ...dialogProps.value,
      relationId: relationId.value,
      getList: getList,
      proTableProps: proTableProps.value,
    };
  });
  return {
    logDialogProps,
    openLogDialog,
  };
}
src/services/api/electronSign.ts
@@ -17,6 +17,75 @@
  });
}
/** 查询合同模板详情 GET /api/user/electronSign/getContractTemplate */
export async function getContractTemplate(
  // 叠加生成的Param类型 (非body参数swagger默认没有生成对象)
  params: API.APIgetContractTemplateParams,
  options?: API.RequestConfig
) {
  return request<API.GetContractTemplateQueryResult>('/api/user/electronSign/getContractTemplate', {
    method: 'GET',
    params: {
      ...params,
    },
    ...(options || {}),
  });
}
/** 查询运营端协议管理分页列表数据 POST /api/user/electronSign/getContractTemplateEnterprises */
export async function getContractTemplateEnterprises(
  body: API.GetContractTemplateEnterprisesQuery,
  options?: API.RequestConfig
) {
  return request<API.GetContractTemplateEnterprisesQueryResult>(
    '/api/user/electronSign/getContractTemplateEnterprises',
    {
      method: 'POST',
      headers: {
        'Content-Type': 'application/json-patch+json',
      },
      data: body,
      ...(options || {}),
    }
  );
}
/** 查询企业合同模板日志分页列表数据 POST /api/user/electronSign/getEnterpriseContractTemplateLogs */
export async function getEnterpriseContractTemplateLogs(
  body: API.GetEnterpriseContractTemplateLogsQuery,
  options?: API.RequestConfig
) {
  return request<API.GetEnterpriseContractTemplateLogsQueryResult>(
    '/api/user/electronSign/getEnterpriseContractTemplateLogs',
    {
      method: 'POST',
      headers: {
        'Content-Type': 'application/json-patch+json',
      },
      data: body,
      ...(options || {}),
    }
  );
}
/** 查询企业合同模板分页列表数据 POST /api/user/electronSign/getEnterpriseContractTemplates */
export async function getEnterpriseContractTemplates(
  body: API.GetEnterpriseContractTemplatesQuery,
  options?: API.RequestConfig
) {
  return request<API.GetEnterpriseContractTemplatesQueryResult>(
    '/api/user/electronSign/getEnterpriseContractTemplates',
    {
      method: 'POST',
      headers: {
        'Content-Type': 'application/json-patch+json',
      },
      data: body,
      ...(options || {}),
    }
  );
}
/** 个人人脸实名认证 POST /api/user/electronSign/personalUserFaceReal */
export async function personalUserFaceReal(
  body: API.PersonalUserFaceRealCommand,
@@ -47,6 +116,21 @@
  });
}
/** 保存合同模板 POST /api/user/electronSign/saveContractTemplate */
export async function saveContractTemplate(
  body: API.SaveContractTemplateCommand,
  options?: API.RequestConfig
) {
  return request<string>('/api/user/electronSign/saveContractTemplate', {
    method: 'POST',
    headers: {
      'Content-Type': 'application/json-patch+json',
    },
    data: body,
    ...(options || {}),
  });
}
/** 发送个人三要素实名短信 POST /api/user/electronSign/sendPersonalUserIdentity3RealSms */
export async function sendPersonalUserIdentity3RealSms(
  body: API.SendPersonalUserIdentity3RealSmsCommand,
@@ -61,3 +145,18 @@
    ...(options || {}),
  });
}
/** 禁用合同模板 PUT /api/user/electronSign/setIsDisabledContractTemplate */
export async function setIsDisabledContractTemplate(
  body: API.SetIsDisabledContractTemplateCommand,
  options?: API.RequestConfig
) {
  return request<number>('/api/user/electronSign/setIsDisabledContractTemplate', {
    method: 'PUT',
    headers: {
      'Content-Type': 'application/json-patch+json',
    },
    data: body,
    ...(options || {}),
  });
}
src/services/api/typings.d.ts
@@ -29,6 +29,11 @@
    date?: string;
  }
  interface APIgetContractTemplateParams {
    /** 模板Id */
    id?: string;
  }
  interface APIgetCurrentLogierMenuParams {
    /** Id */
    id?: string;
@@ -359,6 +364,29 @@
    Wxmp = 20,
  }
  enum EnumContractTemplateStatus {
    /**待制版 */
    Wait = 10,
    /**已完成 */
    Completed = 20,
  }
  enum EnumContractTemplateValueRecorder {
    /**发件人 */
    Creator = 10,
    /**签署人 */
    Signer = 20,
  }
  enum EnumContractTemplateValueType {
    /**文本 */
    Text = 10,
    /**签署 */
    Sign = 20,
    /**日期 */
    Date = 30,
  }
  enum EnumDataSource {
    /**818 */
    HumanResources = 10,
@@ -371,6 +399,13 @@
    Modified = 20,
    /**删除 */
    Deleted = 30,
  }
  enum EnumElectronSignAccess {
    /**上上签 */
    BestSign = 10,
    /**支付宝信任签 */
    AlipaySign = 20,
  }
  enum EnumEnterpriseRealMethod {
@@ -775,6 +810,42 @@
    timestamp?: number;
  }
  interface FriendlyResultGetContractTemplateEnterprisesQueryResult {
    /** 跟踪Id */
    traceId?: string;
    /** 状态码 */
    code?: number;
    /** 错误码 */
    errorCode?: string;
    data?: GetContractTemplateEnterprisesQueryResult;
    /** 执行成功 */
    success?: boolean;
    /** 错误信息 */
    msg?: any;
    /** 附加数据 */
    extras?: any;
    /** 时间戳 */
    timestamp?: number;
  }
  interface FriendlyResultGetContractTemplateQueryResult {
    /** 跟踪Id */
    traceId?: string;
    /** 状态码 */
    code?: number;
    /** 错误码 */
    errorCode?: string;
    data?: GetContractTemplateQueryResult;
    /** 执行成功 */
    success?: boolean;
    /** 错误信息 */
    msg?: any;
    /** 附加数据 */
    extras?: any;
    /** 时间戳 */
    timestamp?: number;
  }
  interface FriendlyResultGetDbAuditLogsQueryResult {
    /** 跟踪Id */
    traceId?: string;
@@ -783,6 +854,42 @@
    /** 错误码 */
    errorCode?: string;
    data?: GetDbAuditLogsQueryResult;
    /** 执行成功 */
    success?: boolean;
    /** 错误信息 */
    msg?: any;
    /** 附加数据 */
    extras?: any;
    /** 时间戳 */
    timestamp?: number;
  }
  interface FriendlyResultGetEnterpriseContractTemplateLogsQueryResult {
    /** 跟踪Id */
    traceId?: string;
    /** 状态码 */
    code?: number;
    /** 错误码 */
    errorCode?: string;
    data?: GetEnterpriseContractTemplateLogsQueryResult;
    /** 执行成功 */
    success?: boolean;
    /** 错误信息 */
    msg?: any;
    /** 附加数据 */
    extras?: any;
    /** 时间戳 */
    timestamp?: number;
  }
  interface FriendlyResultGetEnterpriseContractTemplatesQueryResult {
    /** 跟踪Id */
    traceId?: string;
    /** 状态码 */
    code?: number;
    /** 错误码 */
    errorCode?: string;
    data?: GetEnterpriseContractTemplatesQueryResult;
    /** 执行成功 */
    success?: boolean;
    /** 错误信息 */
@@ -1959,6 +2066,66 @@
    addressName?: string;
  }
  interface GetContractTemplateEnterprisesQuery {
    /** 关键字 */
    keywords?: string;
    status?: EnumContractTemplateStatus;
    pageModel?: PagedListQueryPageModel;
  }
  interface GetContractTemplateEnterprisesQueryResult {
    pageModel?: PagedListQueryResultPageModel;
    /** 数据 */
    data?: GetContractTemplateEnterprisesQueryResultItem[];
  }
  interface GetContractTemplateEnterprisesQueryResultItem {
    /** 企业Id */
    id?: string;
    /** 企业全称 */
    enterpriseName?: string;
    /** 联系人 */
    contacts?: string;
    /** 联系电话 */
    contactPhoneNumber?: string;
    /** 合同数 */
    total?: number;
    /** 待制版 */
    waitCount?: number;
  }
  interface GetContractTemplateQueryResult {
    /** 模板Id */
    id?: string;
    /** 企业Id */
    enterpriseId?: string;
    /** 模板名称 */
    name?: string;
    /** 模板 */
    file?: string;
    /** 业务编码 */
    code?: string;
    access?: EnumElectronSignAccess;
    /** 模板Id */
    templateId?: string;
    /** 变量 */
    values?: GetContractTemplateQueryResultValue[];
  }
  interface GetContractTemplateQueryResultValue {
    /** 变量Id */
    id?: string;
    type?: EnumContractTemplateValueType;
    recorder?: EnumContractTemplateValueRecorder;
    userType?: EnumUserType;
    /** 变量名称 */
    label?: string;
    /** 变量代码 */
    name?: string;
    /** 是否必填 */
    required?: boolean;
  }
  type GetCurrentLogierMenusQuery = Record<string, any>;
  interface GetDbAuditLogsQuery {
@@ -2102,6 +2269,74 @@
    sort?: number;
    /** 是否禁用 */
    isDisabled?: boolean;
  }
  interface GetEnterpriseContractTemplateLogsQuery {
    /** 模板Id */
    id?: string;
    pageModel?: PagedListQueryPageModel;
  }
  interface GetEnterpriseContractTemplateLogsQueryResult {
    pageModel?: PagedListQueryResultPageModel;
    /** 数据 */
    data?: GetEnterpriseContractTemplateLogsQueryResultItem[];
  }
  interface GetEnterpriseContractTemplateLogsQueryResultItem {
    /** 跟踪Id */
    traceId?: string;
    /** 操作人 */
    createdUser?: string;
    /** 操作时间 */
    createdTime?: string;
    operate?: EnumDbAuditOperate;
    /** 操作内容 */
    content?: string[];
  }
  interface GetEnterpriseContractTemplatesQuery {
    /** 企业Id */
    enterpriseId?: string;
    /** 关键字 */
    keywords?: string;
    status?: EnumContractTemplateStatus;
    /** 客户上传时间-起始 */
    createdTimeBegin?: string;
    /** 客户上传时间-截止 */
    createdTimeEnd?: string;
    /** 制版时间-起始 */
    completedTimeBegin?: string;
    /** 制版时间-截止 */
    completedTimeEnd?: string;
    pageModel?: PagedListQueryPageModel;
  }
  interface GetEnterpriseContractTemplatesQueryResult {
    pageModel?: PagedListQueryResultPageModel;
    /** 数据 */
    data?: GetEnterpriseContractTemplatesQueryResultItem[];
  }
  interface GetEnterpriseContractTemplatesQueryResultItem {
    /** 模板Id */
    id?: string;
    /** 模板名称 */
    name?: string;
    /** 客户上传时间 */
    createdTime?: string;
    /** 模板Id */
    templateId?: string;
    access?: EnumElectronSignAccess;
    /** 业务编码 */
    code?: string;
    /** 模板 */
    file?: string;
    status?: EnumContractTemplateStatus;
    /** 制版时间 */
    completedTime?: string;
    /** 操作人 */
    operator?: string;
  }
  interface GetEnterpriseElectronSignSettingQueryResult {
@@ -3608,6 +3843,38 @@
    id?: string;
  }
  interface SaveContractTemplateCommand {
    /** 企业Id(运营端保存时) */
    enterpriseId?: string;
    /** 模板名称 */
    name: string;
    /** 模板 */
    file: string;
    /** 业务编码 */
    code?: string;
    access?: EnumElectronSignAccess;
    /** 模板Id */
    templateId?: string;
    /** 变量 */
    values?: SaveContractTemplateCommandValue[];
    /** Id */
    id?: string;
  }
  interface SaveContractTemplateCommandValue {
    /** Id */
    id?: string;
    type?: EnumContractTemplateValueType;
    recorder?: EnumContractTemplateValueRecorder;
    userType?: EnumUserType;
    /** 变量名称 */
    label?: string;
    /** 变量代码 */
    name?: string;
    /** 是否必填 */
    required?: boolean;
  }
  interface SaveDictionaryCategoryCommand {
    /** 编号 */
    code: string;
@@ -3975,6 +4242,12 @@
    smsCost?: number;
  }
  interface SetIsDisabledContractTemplateCommand {
    ids?: string[];
    /** 是否已禁用 */
    isDisabled?: boolean;
  }
  interface SetMenuSwitchCommand {
    /** Id */
    ids?: string[];
src/views/ProtocolManage/EditTemplate.vue
@@ -6,10 +6,7 @@
          <QueryFilterItem>
            <FieldRadio
              v-model="extraParamState.status"
              :value-enum="[
                { value: 1, label: '待制版' },
                { value: 2, label: '已完成' },
              ]"
              :value-enum="EnumContractTemplateStatusText"
              buttonStyle
              showAllBtn
              @change="getList()"
@@ -17,7 +14,7 @@
          </QueryFilterItem>
          <QueryFilterItem tip-content="客户上传时间">
            <FieldDatePicker
              v-model="extraParamState.beginDate"
              v-model="extraParamState.createdTime"
              type="daterange"
              range-separator="~"
              start-placeholder="开始日期"
@@ -28,7 +25,7 @@
          </QueryFilterItem>
          <QueryFilterItem tip-content="制版时间">
            <FieldDatePicker
              v-model="extraParamState.beginDate"
              v-model="extraParamState.completedTime"
              type="daterange"
              range-separator="~"
              start-placeholder="开始日期"
@@ -55,6 +52,7 @@
      </ProTableV2>
    </AppContainer>
    <AddOrEditTemplateDialog v-bind="dialogProps" />
    <OperateHistoryLogDialog v-bind="logDialogProps" />
  </LoadingLayout>
</template>
@@ -75,9 +73,11 @@
} from '@bole-core/components';
import { useAccess } from '@/hooks';
import { ModelValueType } from 'element-plus';
import * as enterpriseServices from '@/services/api/enterprise';
import * as electronSignServices from '@/services/api/electronSign';
import AddOrEditTemplateDialog from './components/AddOrEditTemplateDialog.vue';
import { Message } from '@bole-core/core';
import { downloadFileByUrl, Message } from '@bole-core/core';
import { convertApi2FormUrlOnlyOne, format, setOSSLink } from '@/utils';
import { EnumContractTemplateStatus, EnumContractTemplateStatusText } from '@/constants';
defineOptions({
  name: 'EditTemplate',
@@ -96,13 +96,14 @@
  },
  delBtn: {
    emits: { onClick: (role) => handleDelete(role) },
    props: { type: 'danger' },
    extraProps: {
      hide: (row) => false,
    },
  },
  logBtn: {
    emits: { onClick: (role) => openLogDialog(role) },
    emits: { onClick: (role) => openLogDialog(role.id) },
  },
};
@@ -110,7 +111,8 @@
  operationBtnMap,
});
const router = useRouter();
const route = useRoute();
const enterpriseId = route.params?.id as string;
const BaseState = {
  loading: true,
};
@@ -131,15 +133,21 @@
} = useTable(
  async ({ pageIndex, pageSize }, extraParamState) => {
    try {
      let params: API.GetEnterprisesQuery = {
      let params: API.GetEnterpriseContractTemplatesQuery = {
        pageModel: {
          rows: pageSize,
          page: pageIndex,
          orderInput: extraParamState.orderInput,
        },
        // searchKeys: extraParamState.keyword,
        keywords: extraParamState.keyword,
        status: extraParamState.status,
        createdTimeBegin: format(extraParamState.createdTime?.[0] ?? '', 'YYYY-MM-DD 00:00:00'),
        createdTimeEnd: format(extraParamState.createdTime?.[1] ?? '', 'YYYY-MM-DD 23:59:59'),
        completedTimeBegin: format(extraParamState.completedTime?.[0] ?? '', 'YYYY-MM-DD 00:00:00'),
        completedTimeEnd: format(extraParamState.completedTime?.[1] ?? '', 'YYYY-MM-DD 23:59:59'),
        enterpriseId: enterpriseId,
      };
      let res = await enterpriseServices.getEnterprises(params, {
      let res = await electronSignServices.getEnterpriseContractTemplates(params, {
        showLoading: !state.loading,
      });
      return res;
@@ -148,12 +156,22 @@
  {
    defaultExtraParams: {
      keyword: '',
      status: '' as any as boolean,
      beginDate: [] as unknown as ModelValueType,
      endDate: [] as unknown as ModelValueType,
      orderInput: [{ property: 'id', order: EnumPagedListOrder.Asc }],
      status: '' as any as EnumContractTemplateStatus,
      createdTime: [] as unknown as ModelValueType,
      completedTime: [] as unknown as ModelValueType,
      orderInput: [{ property: 'createdTime', order: EnumPagedListOrder.Desc }],
    },
    columnsRenderProps: {},
    columnsRenderProps: {
      createdTime: { type: 'date' },
      completedTime: { type: 'date' },
      status: { type: 'enum', valueEnum: EnumContractTemplateStatusText },
      access: { type: 'enum', valueEnum: EnumElectronSignAccessText },
      file: {
        type: 'url',
        showDownloadBtn: false,
        formatter: (row: API.GetEnterpriseContractTemplatesQueryResultItem) => setOSSLink(row.file),
      },
    },
  }
);
@@ -163,34 +181,94 @@
    id: '',
    templateId: '',
    name: '',
    bussinessCode: '',
    templateFileUrl: [] as UploadUserFile[],
    code: '',
    file: [] as UploadUserFile[],
    access: '' as any as EnumElectronSignAccess,
    title: '新增模板',
  },
});
function openDialog(row?) {
function openDialog(row?: API.GetEnterpriseContractTemplatesQueryResultItem) {
  if (row) {
    handleEdit({
      id: '',
      name: '',
      bussinessCode: '',
      templateId: '',
      templateFileUrl: [] as UploadUserFile[],
      id: row.id,
      templateId: row.templateId,
      name: row.name,
      code: row.code,
      file: convertApi2FormUrlOnlyOne(row.file),
      access: row.access,
    });
  } else {
    handleAdd();
  }
}
async function handleAddOrEdit() {}
function handleDownload(row) {}
async function handleDelete(row) {
async function handleAddOrEdit() {
  try {
    await Message.deleteMessage();
    let isEdit = !!editForm.id;
    let params: API.SaveContractTemplateCommand = {
      name: editForm.name,
      file: editForm.file[0]?.path ?? '',
      enterpriseId: enterpriseId,
      code: editForm.code,
      access: editForm.access,
      templateId: editForm.templateId,
      // values: [
      //   {
      //     id: '3fa85f64-5717-4562-b3fc-2c963f66afa6',
      //     type: 10,
      //     recorder: 10,
      //     userType: 10,
      //     label: 'string',
      //     name: 'string',
      //     required: true,
      //   },
      // ],
    };
    if (isEdit) {
      params.id = editForm.id;
    }
    let res = await electronSignServices.saveContractTemplate(params);
    if (res) {
      Message.successMessage('操作成功');
      getList();
    }
  } catch (error) {}
}
function openLogDialog(row) {}
function handleDownload(row: API.GetEnterpriseContractTemplatesQueryResultItem) {
  downloadFileByUrl(setOSSLink(row.file), '模板');
}
async function handleDelete(row: API.GetEnterpriseContractTemplatesQueryResultItem) {
  try {
    await Message.deleteMessage();
    let res = await electronSignServices.setIsDisabledContractTemplate({
      ids: [row.id],
      isDisabled: true,
    });
    if (res) {
      Message.successMessage('操作成功');
      getList(paginationState.pageIndex);
    }
  } catch (error) {}
}
const { openLogDialog, logDialogProps } = useOpenLogDialog({
  service: async ({ pageIndex, pageSize }, extraParamState) => {
    try {
      let params: API.GetEnterpriseContractTemplateLogsQuery = {
        pageModel: {
          rows: pageSize,
          page: pageIndex,
          orderInput: extraParamState.orderInput,
        },
        id: extraParamState.id,
      };
      let res = await electronSignServices.getEnterpriseContractTemplateLogs(params, {
        showLoading: !state.loading,
      });
      return res;
    } catch (error) {}
  },
});
</script>
src/views/ProtocolManage/ProtocolManageList.vue
@@ -6,7 +6,7 @@
          <QueryFilterItem>
            <FieldRadio
              v-model="extraParamState.status"
              :value-enum="[{ value: 1, label: '待制版' }]"
              :value-enum="EnumContractTemplateStatusTextForEnterpriseFilter"
              buttonStyle
              showAllBtn
              @change="getList()"
@@ -42,7 +42,8 @@
  FieldRadio,
} from '@bole-core/components';
import { useAccess } from '@/hooks';
import * as enterpriseServices from '@/services/api/enterprise';
import * as electronSignServices from '@/services/api/electronSign';
import { EnumContractTemplateStatusTextForEnterpriseFilter } from '@/constants';
defineOptions({
  name: 'ProtocolManageList',
@@ -77,15 +78,16 @@
} = useTable(
  async ({ pageIndex, pageSize }, extraParamState) => {
    try {
      let params: API.GetEnterprisesQuery = {
      let params: API.GetContractTemplateEnterprisesQuery = {
        pageModel: {
          rows: pageSize,
          page: pageIndex,
          orderInput: extraParamState.orderInput,
          // orderInput: extraParamState.orderInput,
        },
        // searchKeys: extraParamState.keyword,
        keywords: extraParamState.keyword,
        status: extraParamState.status,
      };
      let res = await enterpriseServices.getEnterprises(params, {
      let res = await electronSignServices.getContractTemplateEnterprises(params, {
        showLoading: !state.loading,
      });
      return res;
@@ -94,14 +96,14 @@
  {
    defaultExtraParams: {
      keyword: '',
      status: '',
      status: '' as any as EnumContractTemplateStatus,
      orderInput: [{ property: 'id', order: EnumPagedListOrder.Asc }],
    },
    columnsRenderProps: {},
  }
);
function goEdit(row) {
function goEdit(row: API.GetContractTemplateEnterprisesQueryResultItem) {
  router.push({
    name: 'EditTemplate',
    params: {
src/views/ProtocolManage/components/AddOrEditTemplateDialog.vue
@@ -18,25 +18,17 @@
          :formatter="filterCN"
        ></ProFormText>
      </ProFormItemV2>
      <ProFormItemV2
        label="通道:"
        prop="templateId"
        :check-rules="[{ message: '请选择电子签通道' }]"
      >
      <ProFormItemV2 label="通道:" prop="access" :check-rules="[{ message: '请选择电子签通道' }]">
        <ProFormSelect
          placeholder="请选择电子签通道"
          v-model="form.templateId"
          :value-enum="[{ label: 1, value: '支付宝' }]"
          v-model="form.access"
          :value-enum="EnumElectronSignAccessText"
        ></ProFormSelect>
      </ProFormItemV2>
      <ProFormItemV2
        label="业务编码:"
        prop="bussinessCode"
        :check-rules="[{ message: '请输入业务编码' }]"
      >
      <ProFormItemV2 label="业务编码:" prop="code" :check-rules="[{ message: '请输入业务编码' }]">
        <ProFormText
          placeholder="请输入业务编码"
          v-model.trim="form.bussinessCode"
          v-model.trim="form.code"
          :maxlength="5"
          :formatter="filterNumbersFromString"
        ></ProFormText>
@@ -50,11 +42,11 @@
      </ProFormItemV2>
      <ProFormItemV2
        label="上传模板:"
        prop="templateFileUrl"
        prop="file"
        :check-rules="[{ message: '请上传模板', type: 'upload' }]"
      >
        <ProFormUpload
          v-model:file-url="form.templateFileUrl"
          v-model:file-url="form.file"
          :limit="1"
          :limitFileSize="10"
          accept="pdf"
@@ -81,6 +73,7 @@
} from '@bole-core/components';
import { filterCN, filterNumbersFromString } from '@/utils';
import { FormInstance } from 'element-plus';
import { EnumElectronSignAccessText } from '@/constants';
defineOptions({
  name: 'AddOrEditTemplateDialog',
@@ -93,8 +86,9 @@
  id: string;
  templateId: string;
  name: string;
  bussinessCode: string;
  templateFileUrl: UploadUserFile[];
  code: string;
  file: UploadUserFile[];
  access: EnumElectronSignAccess;
};
const form = defineModel<Form>('form');