|
@@ -57,6 +57,32 @@
|
|
|
<span>抽取专家公示信息</span>
|
|
<span>抽取专家公示信息</span>
|
|
|
<span class="c-999 f-s-12">(公示时间:{{ form?.auditTime }})</span>
|
|
<span class="c-999 f-s-12">(公示时间:{{ form?.auditTime }})</span>
|
|
|
</div>
|
|
</div>
|
|
|
|
|
+ <vxe-table :data="list" border keep-source :span-method="rowspanMethod" min-height="0" style="width: 100%">
|
|
|
|
|
+ <vxe-column title="专家组" field="personType">
|
|
|
|
|
+ <template #default="{ row }">
|
|
|
|
|
+ {{ selectDictLabel(dm_person_type, row.personType) || '-' }}
|
|
|
|
|
+ </template>
|
|
|
|
|
+ </vxe-column>
|
|
|
|
|
+ <vxe-column title="人数" field="personType">
|
|
|
|
|
+ <template #default="{ row }">{{ row?.allCount|| '-' }}人</template>
|
|
|
|
|
+ </vxe-column>
|
|
|
|
|
+ <!-- // 是否指定 -->
|
|
|
|
|
+ <vxe-column title="是否指定人员">
|
|
|
|
|
+ <template #default="{ row }">
|
|
|
|
|
+ {{ selectDictLabel(yes_no, row?.isAppoint) || '-' }}
|
|
|
|
|
+ </template>
|
|
|
|
|
+ </vxe-column>
|
|
|
|
|
+ <vxe-column field="name" title="姓名" />
|
|
|
|
|
+ <vxe-column title="性别">
|
|
|
|
|
+ <template #default="{ row }">
|
|
|
|
|
+ {{ selectDictLabel(sys_sex_type, row?.sex) }}
|
|
|
|
|
+ </template>
|
|
|
|
|
+ </vxe-column>
|
|
|
|
|
+ <vxe-column field="workUnit" title="单位" :formatter="colNoData" />
|
|
|
|
|
+ <vxe-column title="职称/职务" field="post" :formatter="colNoData" />
|
|
|
|
|
+ <vxe-column title="专业品种" field="variety" :formatter="colNoData" />
|
|
|
|
|
+ <vxe-column title="联系电话" field="phone" :formatter="colNoData" />
|
|
|
|
|
+ </vxe-table>
|
|
|
</template>
|
|
</template>
|
|
|
</div>
|
|
</div>
|
|
|
</div>
|
|
</div>
|
|
@@ -74,12 +100,14 @@
|
|
|
import { ref, reactive, onMounted } from 'vue';
|
|
import { ref, reactive, onMounted } from 'vue';
|
|
|
import { debounce } from 'lodash';
|
|
import { debounce } from 'lodash';
|
|
|
import { useRouter } from 'vue-router';
|
|
import { useRouter } from 'vue-router';
|
|
|
-import { expertChooseApprove, expertChooseDetail } from '@/api/authority';
|
|
|
|
|
|
|
+import { expertChooseApprove, expertChooseDetail, expertChooseRelationList } from '@/api/authority';
|
|
|
import { ChooseExpertCheck } from '../models';
|
|
import { ChooseExpertCheck } from '../models';
|
|
|
|
|
+import { colNoData } from '@/utils/noData';
|
|
|
|
|
+import { VxeTablePropTypes } from 'vxe-table';
|
|
|
|
|
|
|
|
const { proxy } = getCurrentInstance() as ComponentInternalInstance;
|
|
const { proxy } = getCurrentInstance() as ComponentInternalInstance;
|
|
|
const dict = proxy?.useDict('dm_person_type', 'dm_join_type', 'yes_no', 'sys_sex_type', 'dm_position_status');
|
|
const dict = proxy?.useDict('dm_person_type', 'dm_join_type', 'yes_no', 'sys_sex_type', 'dm_position_status');
|
|
|
-const { dm_person_type, dm_join_type, yes_no } = toRefs<any>(dict);
|
|
|
|
|
|
|
+const { dm_person_type, dm_join_type, yes_no, sys_sex_type } = toRefs<any>(dict);
|
|
|
const router = useRouter();
|
|
const router = useRouter();
|
|
|
const route = useRoute();
|
|
const route = useRoute();
|
|
|
const form = ref<any>(null);
|
|
const form = ref<any>(null);
|
|
@@ -90,6 +118,10 @@ const getExpertDetail = async () => {
|
|
|
const res = await expertChooseDetail(route.query.id);
|
|
const res = await expertChooseDetail(route.query.id);
|
|
|
if (!res || res.code !== 200) return;
|
|
if (!res || res.code !== 200) return;
|
|
|
form.value = res.data;
|
|
form.value = res.data;
|
|
|
|
|
+ if (form.value?.res === '1') {
|
|
|
|
|
+ // 获取专家抽取关联列表
|
|
|
|
|
+ getExpertRelationList();
|
|
|
|
|
+ }
|
|
|
}
|
|
}
|
|
|
};
|
|
};
|
|
|
const noPass = async () => {
|
|
const noPass = async () => {
|
|
@@ -150,6 +182,36 @@ const successChange = (val: any) => {
|
|
|
submitApprove(params);
|
|
submitApprove(params);
|
|
|
}
|
|
}
|
|
|
};
|
|
};
|
|
|
|
|
+const list = ref<any[]>([]);
|
|
|
|
|
+// 获取专家抽取关联列表
|
|
|
|
|
+const getExpertRelationList = async () => {
|
|
|
|
|
+ if (route.query?.id) {
|
|
|
|
|
+ const res = await expertChooseRelationList({ expertChooseId: route.query.id });
|
|
|
|
|
+ if (!res || res.code !== 200) return;
|
|
|
|
|
+ list.value = res.data;
|
|
|
|
|
+ }
|
|
|
|
|
+};
|
|
|
|
|
+// 通用行合并函数(将相同多列数据合并为一行)
|
|
|
|
|
+const rowspanMethod: any = ({ row, _rowIndex, column, visibleData }) => {
|
|
|
|
|
+ const fields = ['personType', 'personCount', 'id'];
|
|
|
|
|
+ const cellValue = row[column.field];
|
|
|
|
|
+ if (cellValue && fields.includes(column.field)) {
|
|
|
|
|
+ const prevRow = visibleData[_rowIndex - 1];
|
|
|
|
|
+ let nextRow = visibleData[_rowIndex + 1];
|
|
|
|
|
+ if (prevRow && prevRow[column.field] === cellValue) {
|
|
|
|
|
+ return { rowspan: 0, colspan: 0 };
|
|
|
|
|
+ } else {
|
|
|
|
|
+ let countRowspan = 1;
|
|
|
|
|
+ while (nextRow && nextRow[column.field] === cellValue) {
|
|
|
|
|
+ nextRow = visibleData[++countRowspan + _rowIndex];
|
|
|
|
|
+ }
|
|
|
|
|
+ if (countRowspan > 1) {
|
|
|
|
|
+ return { rowspan: countRowspan, colspan: 1 };
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+};
|
|
|
|
|
+
|
|
|
onMounted(() => {
|
|
onMounted(() => {
|
|
|
getExpertDetail();
|
|
getExpertDetail();
|
|
|
});
|
|
});
|