import { defineComponent, h, ref } from 'vue'; import { Modal } from 'ant-design-vue'; import dayjs from 'dayjs'; import duration from 'dayjs/plugin/duration'; import relativeTime from 'dayjs/plugin/relativeTime'; import ApprovalContent from './approval-content.vue'; export interface ApproveWithReasonModalProps { title: string; description: string; onOk: (reason: string) => void; } /** * 带审批意见的confirm * @param props props */ export function approveWithReasonModal(props: ApproveWithReasonModalProps) { const { onOk, title, description } = props; const content = ref(''); Modal.confirm({ title, content: h( defineComponent({ setup() { return () => h(ApprovalContent, { description, value: content.value, 'onUpdate:value': (v) => (content.value = v), }); }, }), ), centered: true, okButtonProps: { danger: true }, onOk: () => onOk(content.value), }); } dayjs.extend(duration); dayjs.extend(relativeTime); /** * 计算相差的时间 * @param dateTime 时间字符串 * @returns 相差的时间 */ export function getDiffTimeString(dateTime: string) { // 计算相差秒数 const diffSeconds = dayjs().diff(dayjs(dateTime), 'second'); /** * 转为时间显示(x月 x天) * https://dayjs.fenxianglu.cn/category/duration.html#%E4%BA%BA%E6%80%A7%E5%8C%96 * */ const diffText = dayjs.duration(diffSeconds, 'seconds').humanize(); return diffText; }