| | |
| | | |
| | | const columns: TableColumnsType<ResearchApplicationApi.MemberStatistics> = [ |
| | | { title: '成员姓名', dataIndex: 'name', key: 'name', width: 110, fixed: 'left' }, |
| | | { title: '联系电话', dataIndex: 'contactPhone', key: 'contactPhone', width: 130 }, |
| | | { title: '所属单位', dataIndex: 'workUnit', key: 'workUnit', width: 180 }, |
| | | { title: '职称/职务', dataIndex: 'jobTitle', key: 'jobTitle', width: 120 }, |
| | | { title: '成员角色', dataIndex: 'memberRoles', key: 'memberRoles', width: 140 }, |
| | | { title: '成员类型', dataIndex: 'memberTypes', key: 'memberTypes', width: 120 }, |
| | | { title: '所属部门', dataIndex: 'workUnit', key: 'workUnit', width: 200 }, |
| | | { title: '职称', dataIndex: 'jobTitle', key: 'jobTitle', width: 110 }, |
| | | { title: '参与课题数', dataIndex: 'projectCount', key: 'projectCount', width: 110 }, |
| | | { title: '参与课题', dataIndex: 'projectTitles', key: 'projectTitles', ellipsis: true }, |
| | | ]; |
| | |
| | | function buildPublishText() { |
| | | const lines = ['【课题成员名单】']; |
| | | rows.value.forEach((row, index) => { |
| | | const meta = [row.workUnit, row.jobTitle].filter(Boolean).join('/'); |
| | | const meta = [row.memberTypes, row.workUnit, row.jobTitle] |
| | | .filter(Boolean) |
| | | .join('/'); |
| | | const metaText = meta ? `(${meta})` : ''; |
| | | const roles = row.memberRoles ? `[${row.memberRoles}]` : ''; |
| | | const projects = row.projectTitles ? `:${row.projectTitles}` : ''; |
| | |
| | | <div class="mb-3 flex flex-wrap items-center gap-2"> |
| | | <Input |
| | | v-model:value="keyword" |
| | | placeholder="姓名 / 电话 / 单位" |
| | | placeholder="姓名 / 所属部门" |
| | | allow-clear |
| | | style="width: 220px" |
| | | @press-enter="loadData" |
| | |
| | | /> |
| | | |
| | | <div class="mt-2 text-xs text-gray-400"> |
| | | 统计口径:同一「姓名 + 电话 + 单位」视为同一成员;参与课题数按不重复课题计数。 |
| | | 统计口径:同一「姓名 + 所属部门」视为同一成员;参与课题数按不重复课题计数。 |
| | | </div> |
| | | </Modal> |
| | | </template> |