index.vue 7.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156
  1. <template>
  2. <div class="p-3">
  3. <div class="bg-fff flex1 ov-hd d-flex flex-cln">
  4. <div class="d-flex a-c pd-16 border-bottom">
  5. <div class="f-s-20 c-333 f-w-7 mr-10">
  6. <template v-if="form?.res === '0'">抽取专家审核</template>
  7. <template v-if="['1', '2'].includes(form?.res)">抽取专家详情</template>
  8. </div>
  9. <el-button @click="router.go(-1)" type="primary" text>
  10. <el-icon>
  11. <Back />
  12. </el-icon>
  13. 返回上一级
  14. </el-button>
  15. </div>
  16. <div class="flex1 over-auto">
  17. <div v-if="form" class="pd-16">
  18. <div class="info-title f-w-5 mb-10">事项发起信息</div>
  19. <el-descriptions :column="4">
  20. <el-descriptions-item label="发起方:">{{ form?.starter || '-' }}</el-descriptions-item>
  21. <el-descriptions-item label="事项名称:">{{ form?.title || '-' }}</el-descriptions-item>
  22. <el-descriptions-item label="时间:">{{ form?.startTime || '-' }} ~ {{ form?.endTime || '-' }}</el-descriptions-item>
  23. <el-descriptions-item label="参与方式:">{{ selectDictLabel(dm_join_type, form?.joinType) || '-' }}</el-descriptions-item>
  24. <el-descriptions-item v-if="!+form?.joinType" label="线下地点:">{{ form?.detailedAddress || form?.address || '-' }}</el-descriptions-item>
  25. <el-descriptions-item label="联系人:">{{ form?.contact || '-' }}</el-descriptions-item>
  26. <el-descriptions-item label="联系电话:">{{ form?.tel || '-' }}</el-descriptions-item>
  27. <el-descriptions-item label="提交人:">{{ form?.createByName || '-' }}</el-descriptions-item>
  28. <el-descriptions-item label="提交时间:">{{ form?.createTime || '-' }}</el-descriptions-item>
  29. <el-descriptions-item label="备注:">{{ form?.remark || '-' }}</el-descriptions-item>
  30. <el-descriptions-item label="事项详情:">{{ form?.content || '-' }}</el-descriptions-item>
  31. </el-descriptions>
  32. <el-divider />
  33. <div class="info-title f-w-5 mb-10">抽取专家要求</div>
  34. <el-descriptions :column="4">
  35. <el-descriptions-item label="领域人员是否可重复:">{{ selectDictLabel(yes_no, form?.repeatType) || '-' }}</el-descriptions-item>
  36. </el-descriptions>
  37. <div>
  38. <el-tag v-for="(item, index) in form?.personInfo" :key="index" class="mr-10">{{ selectDictLabel(dm_person_type, item?.personType) }}({{ item?.personCount }})</el-tag>
  39. </div>
  40. <el-divider />
  41. <div class="info-title f-w-5 mb-10">审核记录</div>
  42. <!-- // 表格 -->
  43. <vxe-table :data="form?.approvalLogVos" border min-height="0" style="width: 100%">
  44. <vxe-column title="审核结果">
  45. <template #default="{ row }">
  46. <div v-if="+row?.res === 1" class="c-primary">通过</div>
  47. <div v-if="+row?.res === 2" class="c-danger">不通过</div>
  48. <div v-if="+row?.res === 2" class="f-s-12 c-danger">原因:{{ row?.msg }}</div>
  49. </template>
  50. </vxe-column>
  51. <vxe-column field="createTime" title="审核时间" />
  52. <vxe-column field="auditorName" title="审核人" />
  53. </vxe-table>
  54. <template v-if="form?.res === '1'">
  55. <el-divider />
  56. <div class="info-title f-w-5 mb-10">
  57. <span>抽取专家公示信息</span>
  58. <span class="c-999 f-s-12">(公示时间:{{ form?.auditTime }})</span>
  59. </div>
  60. </template>
  61. </div>
  62. </div>
  63. <div v-if="!+form?.res" class="d-flex a-c j-c pd-16">
  64. <el-button @click="router.go(-1)">取消</el-button>
  65. <el-button type="danger" @click="noPass">不通过</el-button>
  66. <el-button type="primary" @click="showCheckPass = true">通过</el-button>
  67. </div>
  68. </div>
  69. </div>
  70. <ChooseExpertCheck v-if="showCheckPass" v-model:show="showCheckPass" :info="form" :dict="dict" @success="successChange"></ChooseExpertCheck>
  71. </template>
  72. <script setup name="authority-input" lang="ts">
  73. import { ref, reactive, onMounted } from 'vue';
  74. import { debounce } from 'lodash';
  75. import { useRouter } from 'vue-router';
  76. import { expertChooseApprove, expertChooseDetail } from '@/api/authority';
  77. import { ChooseExpertCheck } from '../models';
  78. const { proxy } = getCurrentInstance() as ComponentInternalInstance;
  79. const dict = proxy?.useDict('dm_person_type', 'dm_join_type', 'yes_no', 'sys_sex_type', 'dm_position_status');
  80. const { dm_person_type, dm_join_type, yes_no } = toRefs<any>(dict);
  81. const router = useRouter();
  82. const route = useRoute();
  83. const form = ref<any>(null);
  84. const showCheckPass = ref(false);
  85. // 获取专家详情
  86. const getExpertDetail = async () => {
  87. if (route.query?.id) {
  88. const res = await expertChooseDetail(route.query.id);
  89. if (!res || res.code !== 200) return;
  90. form.value = res.data;
  91. }
  92. };
  93. const noPass = async () => {
  94. ElMessageBox.prompt('是否确认将该事项的专家抽取审核为不通过!请填写不通过原因:', '审核不通过', {
  95. confirmButtonText: '确认不通过',
  96. cancelButtonText: '取消',
  97. // 校验必填
  98. inputValidator: (value) => {
  99. if (!value) {
  100. return '请填写不通过原因';
  101. }
  102. return true;
  103. },
  104. inputPlaceholder: '请填写不通过原因'
  105. })
  106. .then(({ value }) => {
  107. const params = {
  108. targetId: route.query.id,
  109. res: '2', // 不通过
  110. msg: value
  111. };
  112. submitApprove(params);
  113. })
  114. .catch(() => {
  115. ElMessage({
  116. type: 'info',
  117. message: '取消审核'
  118. });
  119. });
  120. };
  121. // 提交审核
  122. const submitApprove = async (params: any) => {
  123. proxy.$modal.loading('正在提交审核,请稍候...');
  124. const res = await expertChooseApprove(params).finally(() => {
  125. proxy.$modal.closeLoading();
  126. });
  127. if (res.code === 200) {
  128. ElMessage({
  129. type: 'success',
  130. message: '操作成功'
  131. });
  132. router.go(-1);
  133. } else {
  134. ElMessage({
  135. type: 'error',
  136. message: res.msg || '操作失败'
  137. });
  138. }
  139. };
  140. const successChange = (val: any) => {
  141. showCheckPass.value = false;
  142. if (val?.length) {
  143. const params = {
  144. targetId: route.query.id,
  145. res: '1', // 通过
  146. personInfo: val
  147. };
  148. submitApprove(params);
  149. }
  150. };
  151. onMounted(() => {
  152. getExpertDetail();
  153. });
  154. </script>