刘光辉
10 小时以前 0dfe84494048ce27ba8449831782128412d3eb13
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
<script lang="ts" setup>
import type { FormInstance } from 'ant-design-vue';
 
import { reactive, ref, toRefs } from 'vue';
 
import { BasicModal, useModalInner } from '@jnpf/ui/modal';
import { cloneDeep } from '@jnpf/utils';
 
interface State {
  dataForm: any;
  loading: boolean;
  oneSelfEndApproval: boolean;
}
 
const emit = defineEmits(['register', 'confirm']);
 
const formElRef = ref<FormInstance>();
const defaultDataForm = {
  isEnd: false,
  approvers: [],
  counterSign: 0,
  counterSignConfig: {
    auditType: 1, // 1:按百分比  2:按人数
    auditRatio: 100,
    auditNum: 1,
    rejectType: 0,
    rejectRatio: 10,
    rejectNum: 1,
    calculateType: 1, // 会签计算规则  1:实时计算  2:延后计算
  },
};
const state = reactive<State>({
  dataForm: cloneDeep(defaultDataForm),
  loading: false,
  oneSelfEndApproval: false,
});
const { dataForm, loading } = toRefs(state);
const [registerModal, { changeOkLoading }] = useModalInner(init);
const auditTypeOptions = [
  { id: 1, fullName: '按百分比' },
  { id: 2, fullName: '按人数' },
];
const calculateTypeOptions = [
  { id: 1, fullName: '实时计算' },
  { id: 2, fullName: '延后计算' },
];
const rejectTypeOptions = [{ id: 0, fullName: '无' }, ...auditTypeOptions];
function init(data) {
  state.dataForm = cloneDeep(defaultDataForm);
  state.oneSelfEndApproval = data.oneSelfEndApproval;
}
async function handleSubmit() {
  try {
    const values = await formElRef.value?.validate();
    if (!values) return;
    changeOkLoading(true);
    emit('confirm', {
      freeFlowConfig: dataForm.value,
    });
  } catch {}
}
function onClose() {
  state.dataForm = cloneDeep(defaultDataForm);
}
function onSignNumberChange(val, key) {
  if (val) return;
  dataForm.value.formConf.counterSignConfig[key] = 1;
}
</script>
<template>
  <BasicModal v-bind="$attrs" @register="registerModal" title="下个审批人设置" @ok="handleSubmit" :min-height="52" destroy-on-close @cancel="onClose">
    <a-form :colon="false" :label-col="{ style: { width: '80px' } }" class="free-modal-form" :model="dataForm" ref="formElRef" v-if="!loading">
      <a-form-item v-if="state.oneSelfEndApproval" class="ml-[80px] flex">
        <a-radio-group v-model:value="dataForm.isEnd" button-style="solid">
          <a-radio-button class="free-radio-label" :value="false">指定成员</a-radio-button>
          <a-radio-button class="free-radio-label" :value="true">直接结束审批</a-radio-button>
        </a-radio-group>
      </a-form-item>
      <template v-if="!dataForm.isEnd">
        <a-form-item label="审批人" name="approvers" :rules="[{ required: true, message: '请选择审批人' }]">
          <jnpf-user-select v-model:value="dataForm.approvers" multiple allow-clear />
        </a-form-item>
        <a-form-item label="审批方式" name="counterSign">
          <a-radio-group v-model:value="dataForm.counterSign">
            <a-radio :value="0">或签</a-radio>
            <a-radio :value="1">会签</a-radio>
            <a-radio :value="2">依次审批</a-radio>
          </a-radio-group>
        </a-form-item>
        <a-form-item v-if="dataForm.counterSign == 1">
          <div class="countersign-label mb-[10px]">设置会签流转规则</div>
          <div class="countersign-cell mb-[10px]">
            <span class="inline-block w-[72px]">同意规则</span>
            <jnpf-select v-model:value="dataForm.counterSignConfig.auditType" :options="auditTypeOptions" class="!w-[120px]" />
            <a-select v-model:value="dataForm.counterSignConfig.auditRatio" class="!w-[120px]" v-if="dataForm.counterSignConfig.auditType === 1">
              <a-select-option v-for="item in 10" :key="item" :value="item * 10">{{ `${item * 10}%` }}</a-select-option>
            </a-select>
            <a-input-number
              class="!w-[120px]"
              v-model:value="dataForm.counterSignConfig.auditNum"
              placeholder="请输入"
              :precision="0"
              :min="1"
              @change="onSignNumberChange($event, 'auditNum')"
              v-if="dataForm.counterSignConfig.auditType === 2" />
            <span class="ml-[8px]">进入下一节点</span>
          </div>
          <div class="countersign-cell">
            <span class="inline-block w-[72px]">不同意规则</span>
            <jnpf-select v-model:value="dataForm.counterSignConfig.rejectType" :options="rejectTypeOptions" class="!w-[120px]" />
            <a-select v-model:value="dataForm.counterSignConfig.rejectRatio" class="!w-[120px]" v-if="dataForm.counterSignConfig.rejectType === 1">
              <a-select-option v-for="item in 10" :key="item" :value="item * 10">{{ `${item * 10}%` }}</a-select-option>
            </a-select>
            <a-input-number
              class="!w-[120px]"
              v-model:value="dataForm.counterSignConfig.rejectNum"
              placeholder="请输入"
              :precision="0"
              :min="1"
              @change="onSignNumberChange($event, 'rejectNum')"
              v-if="dataForm.counterSignConfig.rejectType === 2" />
            <span class="ml-[8px]" v-if="dataForm.counterSignConfig.rejectType">时拒绝</span>
          </div>
        </a-form-item>
        <a-form-item v-if="dataForm.counterSign == 1">
          <template #label>计算方式<BasicHelp :text="['实时计算:审批过程中实时进行规则判断', '延后计算:在所有审批人审批完成后进行规则判断']" /></template>
          <jnpf-radio v-model:value="dataForm.counterSignConfig.calculateType" :options="calculateTypeOptions" />
        </a-form-item>
      </template>
    </a-form>
  </BasicModal>
</template>