Commit e0f535d9 authored by 郭铭瑶's avatar 郭铭瑶 🤘

组织机构对接数据

parent 9572cf86
......@@ -5,7 +5,7 @@ import store from '@/store'
const Axios = axios.create({
baseURL: api.BASE_URL,
timeout: 15000,
timeout: 20000,
})
Axios.interceptors.request.use(
(config) => {
......
......@@ -6,10 +6,9 @@ export const member = [
]
export const organization = [
{ name: '荣获区级奖项党组织', type: 'primary' },
{ name: '荣获市级及以上奖项党组织', type: 'info' },
{ name: '光荣在当党50年', type: 'success' },
{ name: '党心暖我心', type: 'warning' },
{ name: '荣获区级奖项', type: 'primary' },
{ name: '荣获市级及以上奖项', type: 'info' },
{ name: '党建服务站', type: 'success' },
]
export const activity = [
{ name: '支部党员大会', type: 'primary' },
......
......@@ -281,7 +281,7 @@ const getDetail = async (type: string, name: string) => {
})
} else {
res = await useFetchMember({
q: `paths @ "标签" && string == "${name}"`,
q: `paths @ "标签" && string @ "${name}"`,
})
}
break
......
......@@ -35,9 +35,7 @@
</div>
</template>
<script lang="ts" setup>
import { organization } from '@/util/tags'
</script>
<script lang="ts" setup></script>
<style lang="stylus" scoped>
@import '../../components/MyComponent/main.styl'
......
......@@ -47,7 +47,6 @@
</template>
<script lang="ts" setup>
import { organization } from '@/util/tags'
import dayjs from '@/util/dayjs'
import { computed, PropType } from '@vue/runtime-core'
import { member } from '@/util/tags'
......
......@@ -6,13 +6,14 @@
>
<div id="struct-modal">
<n-layout class="layout" has-sider>
<n-layout-sider width="23%" class="side-menu">
<n-layout-sider width="25%" class="side-menu">
<h2
:class="{ on: curKey === 'default' }"
@click.prevent="
() => {
setCurKey('default', {
label: '中共浦东新区花木街道工作委员会',
key: 'default',
label: '中共上海市浦东新区花木街道工作委员会',
})
handleExpand([])
}
......@@ -42,6 +43,7 @@
v-for="item in subList"
:key="item.key"
:class="{ on: subKey === item.key }"
:title="item.label"
@click.prevent="setSub(item)"
>
{{ item.label }}
......@@ -51,9 +53,16 @@
<n-layout-header class="head">
<n-space>
<p>{{ curMenu.label }}</p>
<n-tag type="primary" size="small">标签</n-tag>
<n-tag type="info" size="small">标签</n-tag>
<n-tag type="success" size="small">标签</n-tag>
<template v-if="curMenu['标签']">
<n-tag
v-for="tag in curMenu['标签'].split(',')"
:key="tag"
:type="organization.find((e) => e.name === tag)?.type"
size="small"
>
{{ tag }}
</n-tag>
</template>
</n-space>
<n-icon class="close-btn" size=".2rem" @click.prevent="close">
<CloseOutline />
......@@ -63,35 +72,35 @@
<div v-if="curKey === 'default'" class="card">
<div class="row">
<span>党工委书记</span>
<p>内容</p>
<p>{{ defaultData['书记'] }}</p>
</div>
<div class="row">
<span>党工委副书记</span>
<p>内容</p>
<p>{{ defaultData['副书记'] }}</p>
</div>
<div class="row">
<span>党组织地址</span>
<p>内容</p>
<p>{{ defaultData['党组织地址'] }}</p>
</div>
<div class="row">
<span>组织内党员数量</span>
<p>内容</p>
<span>党员数量</span>
<p>{{ store.state.basicInfo.sum[1].value }} 位</p>
</div>
</div>
<div v-else-if="curKey === '1'" class="card">
<div class="row">
<span>书记</span>
<p>李嘉宁</p>
<p>{{ administration['书记'] }}</p>
</div>
<div class="row">
<span>成员(按姓氏笔画排序)</span>
<p>
马建勇、王波、朱凤洲、孙建华、李卫鑫、吴惠萍、张佳锋、张晓山、陈斐轶、尚清、钱英、蒋国兴
{{ administration['委员'] }}
</p>
</div>
<div class="row">
<span>党组织地址</span>
<p>内容</p>
<p>{{ administration['党组织地址'] }}</p>
</div>
</div>
<div v-else-if="curKey === '2'" class="card">
......@@ -99,69 +108,120 @@
<div class="col">
<div class="row">
<span>党总支书记</span>
<p>内容</p>
<p>{{ institution['书记'] }}</p>
</div>
<div class="row">
<span>党组织地址</span>
<p>内容</p>
<p>{{ institution['党组织地址'] }}</p>
</div>
<div class="row">
<span>组织内党员数量</span>
<p>内容</p>
<span>党员数量</span>
<p>{{ institution['党员数量'] }} 位</p>
</div>
</div>
<div class="col">
<div class="row">
<span>党总支委员</span>
<p>内容</p>
<p>{{ institution['委员'] || '无' }}</p>
</div>
<div class="row">
<span>党组织联系方式</span>
<p>内容</p>
<p>
{{
institution['联系方式_座机'] ||
institution['联系方式_手机'] ||
'无'
}}
</p>
</div>
</div>
</div>
</div>
<div
v-else-if="
curKey === '3' ||
(curKey.split('-').length === 3 && curMenu._hasSub)
"
class="card"
>
<div v-else-if="curKey === '3'" class="card">
<div class="flex">
<div class="col">
<div class="row">
<span>党委书记</span>
<p>陈倩倩</p>
<p>{{ communityParty['书记'] }}</p>
</div>
<div class="row">
<span>党委副书记</span>
<p>杨燕华</p>
<p>{{ communityParty['党委副书记-专职'] }}</p>
</div>
<div class="row">
<span>党组织联系方式</span>
<p>内容</p>
<p>
{{
communityParty['联系方式_座机'] ||
communityParty['联系方式_手机'] ||
'无'
}}
</p>
</div>
<div class="row">
<span>组织成员数量</span>
<p>内容</p>
<span>党员数量</span>
<p>{{ communityParty['党员数量'] }} 位</p>
</div>
</div>
<div class="col">
<div class="row">
<span>党委成员</span>
<p>
徐学红、李华、蒋冬梅、戴萍、唐晔君、杨培君、曹静、袁若稼
{{ communityParty['委员'] }}
</p>
</div>
<div class="row">
<span>党委副书记(兼职)</span>
<p>吴惠萍、张晓山</p>
<p>{{ communityParty['党委副书记-兼职'] }}</p>
</div>
<div class="row">
<span>党组织地址</span>
<p>{{ communityParty['党组织地址'] }}</p>
</div>
</div>
</div>
</div>
<div
v-else-if="
curKey.split('-').length === 3 && curMenu && curMenu._hasSub
"
class="card"
>
<div class="flex">
<div class="col">
<div class="row">
<span>党委书记</span>
<p>{{ curSubMenu['书记'] }}</p>
</div>
<div class="row">
<span>党组织地址</span>
<p>内容</p>
<p>{{ curSubMenu['党组织地址'] }}</p>
</div>
<div class="row">
<span>党员数量</span>
<p>
{{
curSubMenu['党员数量']
? curSubMenu['党员数量'] + ' 位'
: '无'
}}
</p>
</div>
</div>
<div class="col">
<div class="row">
<span>党委成员</span>
<p>{{ curSubMenu['委员'] }}</p>
</div>
<div class="row">
<span>党组织联系方式</span>
<p>
{{
curSubMenu['联系方式_座机'] ||
curSubMenu['联系方式_手机'] ||
'无'
}}
</p>
</div>
</div>
</div>
......@@ -170,33 +230,54 @@
v-else-if="
((curKey.startsWith('2') || curKey.startsWith('3')) &&
curKey.split('-').length === 2) ||
(curKey.split('-').length === 3 && !curMenu._hasSub)
(curKey.split('-').length === 3 &&
(!curMenu || !curMenu._hasSub))
"
>
<div class="card">
<div class="flex">
<div class="col">
<div class="row">
<span>党总支书记</span>
<p>内容</p>
<span>{{
curMenu['等级'] === '党总支'
? '党总支书记'
: '党支部书记'
}}</span>
<p>{{ curMenu['书记'] }}</p>
</div>
<div class="row">
<span>党组织地址</span>
<p>内容</p>
<p>{{ curMenu['党组织地址'] }}</p>
</div>
<div class="row">
<span>党组织内党员数量</span>
<p>内容</p>
<span>党员数量</span>
<p>
{{
curMenu['党员数量']
? curMenu['党员数量'] + ' 位'
: '无'
}}
</p>
</div>
</div>
<div class="col">
<div class="row">
<span>党总支委员</span>
<p>内容</p>
<span>{{
curMenu['等级'] === '党总支'
? '党总支委员'
: '支委会成员'
}}</span>
<p>{{ curMenu['委员'] || '无' }}</p>
</div>
<div class="row">
<span>党组织联系方式</span>
<p>内容</p>
<p>
{{
curMenu['联系方式_座机'] ||
curMenu['联系方式_手机'] ||
'无'
}}
</p>
</div>
</div>
</div>
......@@ -206,7 +287,7 @@
<p>党员详表</p>
<n-button type="primary" size="tiny" @click="exportList">
<template #icon>
<n-icon size=".12rem">
<n-icon size=".1rem">
<svg-icon :data="exportIcon" original />
</n-icon>
</template>
......@@ -232,10 +313,14 @@
<script lang="ts" setup>
import store from '@/store'
import { computed, h, ref } from 'vue'
import { computed, h, onMounted, ref, watch } from 'vue'
import PartyIcon from './party-icon.vue'
import exportIcon from '@images/export.svg'
import { CloseOutline } from '@vicons/ionicons5'
import { useFetchOrg, useFetchMember } from '@/hooks/useFetch'
import { organization } from '@/util/tags'
import useExportFile from '@/hooks/useExportFile'
const show = computed(() => store.state.showStructModal)
const close = () => {
store.commit('SET_STRUCT_MODAL', false)
......@@ -245,144 +330,148 @@ const close = () => {
function renderIcon() {
return () => h(PartyIcon)
}
const menus = [
const defaultData = ref({}) // 中共上海市浦东新区花木街道工作委员会
const administration = ref({}) // 行政党组
const institution = ref({}) // 机关事业单位党总支
const communityParty = ref({}) // 社区党委
const belongToInstitution = ref<any[]>([])
const belongToCommunityParty = ref<any[]>([])
onMounted(async () => {
defaultData.value = (
await useFetchOrg({
q: 'paths @ "党组织名称" && string == "中共上海市浦东新区花木街道工作委员会"',
})
)?.[0]?.extra
administration.value = (
await useFetchOrg({
q: 'paths @ "党组织名称" && string == "行政党组"',
})
)?.[0]?.extra
institution.value = (
await useFetchOrg({
q: 'paths @ "党组织名称" && string == "中共花木街道机关事业单位总支部委员会"',
})
)?.[0]?.extra
communityParty.value = (
await useFetchOrg({
q: 'paths @ "党组织名称" && string == "社区党委"',
})
)?.[0]?.extra
belongToInstitution.value = (
await useFetchOrg({
q: 'paths @ "上级党组织名称" && string == "中共花木街道机关事业单位总支部委员会"',
})
)?.map((item: any, i: number) => {
const data = item.extra
return {
...data,
label: data['党组织名称'].replace('中共浦东新区花木街道', ''),
key: '2-' + (i + 1),
}
})
belongToCommunityParty.value = (
await useFetchOrg({
q: 'paths @ "上级党组织名称" && string == "社区党委"',
})
)?.map((item: any, i: number) => {
const data = item.extra
return {
...data,
label: data['党组织名称'].replace('中共花木街道', '').replace('中共', ''),
key: '3-' + (i + 1),
}
})
const data = belongToCommunityParty.value
const bigSixChildren: any[] = []
const twoNewChildren: any[] = []
const datasource = data.filter((item: any) => item['是否虚拟组织']) || []
data.forEach((item: any) => {
if (item['是否虚拟组织']) return
if (item['类别'] === '居民区') {
bigSixChildren.push(item)
} else if (item['类别'] === '两新') {
twoNewChildren.push(item)
} else {
datasource.push(item)
}
})
const bigSix = datasource.find((e: any) =>
e['党组织名称']?.includes('六大社区党委'),
)
const twoNew = datasource.find((e: any) => e['党组织名称']?.includes('两新'))
bigSix.children = await Promise.all(
bigSixChildren.map(async (e: any, i: number) => {
const children = await checkHasChildren(e)
const result = {
...e,
label: e['党组织名称'].replace('中共花木街道', '').replace('中共', ''),
key: bigSix.key + '-' + (i + 1),
}
if (children && children.length > 0) {
result._hasSub = true
result.subList = children.map((child: any, index: number) => ({
...child,
label: child['党组织名称']
.replace('浦东新区花木街道', '')
.replace('中共', ''),
key: result.key + '-' + (index + 1),
}))
}
return result
}),
)
twoNew.children = await Promise.all(
twoNewChildren.map(async (e: any, i: number) => {
const children = await checkHasChildren(e)
const result = {
...e,
label: e['党组织名称'].replace('中共花木街道', '').replace('中共', ''),
key: twoNew.key + '-' + (i + 1),
}
if (children && children.length > 0) {
result._hasSub = true
result.subList = children.map((child: any, index: number) => ({
...child,
label: child['党组织名称']
.replace('浦东新区花木街道', '')
.replace('中共', ''),
key: result.key + '-' + (index + 1),
}))
}
return result
}),
)
belongToCommunityParty.value = datasource
})
async function checkHasChildren(data: any) {
return (
await useFetchOrg({
q: `paths @ "上级党组织名称" && string == "${data['党组织名称']}"`,
})
)?.map((e: any) => e.extra)
}
const menus = computed(() => [
{ label: '行政党组', key: '1', icon: renderIcon() },
{
label: '机关事业单位党总支',
key: '2',
icon: renderIcon(),
children: [
{
label: '机关第一党支部',
key: '2-1',
},
{
label: '机关第二党支部',
key: '2-2',
},
{
label: '机关第三党支部',
key: '2-3',
},
{
label: '机关第四党支部',
key: '2-4',
},
{
label: '社区事务受理中心党总支',
key: '2-5',
},
{
label: '社区党建服务中心党支部',
key: '2-6',
},
{
label: '社区文化活动中心党支部',
key: '2-7',
},
{
label: '城市网格化综合管理中心党支部',
key: '2-8',
},
{
label: '社区综治中心党支部',
key: '2-9',
},
{
label: '保安协管大队党支部',
key: '2-10',
},
{
label: '城市管理执法支队花木中队党支部',
key: '2-11',
},
{
label: '城市建设管理事务中心党支部',
key: '2-12',
},
{
label: '花木街道机关退休干部党支部',
key: '2-13',
},
{
label: '花木街道机关离休干部党支部',
key: '2-14',
},
],
children: belongToInstitution.value,
},
{
label: '社区党委',
key: '3',
icon: renderIcon(),
children: [
{
label: '六大社区党委',
key: '3-1',
children: [
{
label: '牡丹社区党委',
key: '3-1-1',
_hasSub: true,
},
{
label: '自由社区党委',
key: '3-1-2',
},
{
label: '培花社区党委',
key: '3-1-3',
},
{
label: '东城社区党委',
key: '3-1-4',
},
{
label: '联洋社区党委',
key: '3-1-5',
},
{
label: '钦阳社区党委',
key: '3-1-6',
},
],
},
{
label: '“两新”党组织',
key: '3-2',
},
{
label: '花木经济发展总公司党支部',
key: '3-3',
},
{
label: '花木房地产开发经营公司党支部',
key: '3-4',
},
{
label: '花木街道鑫荣联力联合党支部',
key: '3-5',
},
{
label: '上海钦洋投资管理中心党总支',
key: '3-6',
},
],
children: belongToCommunityParty.value,
},
]
])
const subList = [
{ label: '牡丹社区直属党支部', key: '3-1-1-1' },
{ label: '牡丹第一居民区党总支', key: '3-1-1-2' },
{ label: '牡丹第二居民区党总支', key: '3-1-1-3' },
{ label: '牡丹第三居民区党总支', key: '3-1-1-4' },
{ label: '牡丹第四居民区党总支', key: '3-1-1-5' },
{ label: '牡丹第五居民区党总支', key: '3-1-1-6' },
{ label: '牡丹第六居民区党总支', key: '3-1-1-7' },
{ label: '牡丹第七居民区党总支', key: '3-1-1-8' },
{ label: '牡丹第八居民区党总支', key: '3-1-1-9' },
{ label: '牡丹第九居民区党总支', key: '3-1-1-10' },
{ label: '牡丹兰庭居民区党支部', key: '3-1-1-11' },
]
const subList = ref<any[]>([])
const expandedKeys = ref<string[]>([])
const handleExpand = (val: string[]) => {
......@@ -393,10 +482,21 @@ const handleExpand = (val: string[]) => {
} else {
expandedKeys.value = [val[val.length - 1]]
}
console.log(expandedKeys.value)
console.log('expandedKeys', expandedKeys.value)
if (expandedKeys.value.length === 1 && expandedKeys.value[0].includes('-')) {
expandedKeys.value = []
subKey.value = null
curMenu.value = { label: '中共浦东新区花木街道工作委员会', key: 'default' }
curKey.value = 'default'
return
}
if (expandedKeys.value.length === 0) return
curKey.value = expandedKeys.value[0]
curMenu.value = menus.find((e) => e.key === curKey.value)!
const cur = menus.value.find((e) => e.key === curKey.value)
subKey.value = null
if (cur) {
curMenu.value = cur
}
}
const curKey = ref('default')
......@@ -405,103 +505,50 @@ const curMenu = ref<any>({
label: '中共浦东新区花木街道工作委员会',
key: 'default',
})
const curSubMenu = ref<any>({})
const setCurKey = (val: string, item: any) => {
curKey.value = val
curMenu.value = item
subKey.value = null
if (val === 'default' || val === '1') handleExpand([])
}
watch(
() => curMenu.value,
async (data) => {
console.log('cur-menu: ', data, menus.value)
if (data && data._hasSub) {
subList.value = data.subList
curSubMenu.value = data
}
tableList.value =
(
await useFetchMember({
q: `paths @ "所属党组织名称" && string == "${data['党组织名称']}"`,
})
)?.map((item: any) => item.extra) || []
},
)
const showSubordinates = computed(() => curMenu.value._hasSub || !!subKey.value)
const setSub = (data: any) => {
subKey.value = data.key
function setSub(data: any) {
subKey.value = data && data.key
curMenu.value = data
}
const columns = [
{ title: '姓名', key: 'name' },
{ title: '性别', key: 'gender' },
{ title: '民族', key: 'ethic' },
{ title: '所属党组织', key: 'org' },
]
const tableList = [
{
name: '内容',
gender: '内容',
ethic: '内容',
org: '内容',
},
{
name: '内容',
gender: '内容',
ethic: '内容',
org: '内容',
},
{
name: '内容',
gender: '内容',
ethic: '内容',
org: '内容',
},
{
name: '内容',
gender: '内容',
ethic: '内容',
org: '内容',
},
{
name: '内容',
gender: '内容',
ethic: '内容',
org: '内容',
},
{
name: '内容',
gender: '内容',
ethic: '内容',
org: '内容',
},
{
name: '内容',
gender: '内容',
ethic: '内容',
org: '内容',
},
{
name: '内容',
gender: '内容',
ethic: '内容',
org: '内容',
},
{
name: '内容',
gender: '内容',
ethic: '内容',
org: '内容',
},
{
name: '内容',
gender: '内容',
ethic: '内容',
org: '内容',
},
{
name: '内容',
gender: '内容',
ethic: '内容',
org: '内容',
},
{
name: '内容',
gender: '内容',
ethic: '内容',
org: '内容',
},
{ title: '姓名', key: '姓名' },
{ title: '性别', key: '性别' },
{ title: '民族', key: '民族' },
{ title: '所属党组织', key: '所属党组织名称' },
]
const tableList = ref<any[]>([])
const pagination = {
pageSize: 10,
}
const exportList = () => {}
const exportList = () => {
useExportFile(tableList.value, '姓名', `${curMenu.value.label}党员详表`)
}
</script>
<style lang="stylus" scoped>
......@@ -570,6 +617,8 @@ const exportList = () => {}
.row
margin-bottom .1rem
padding-left .05rem
p
font-family $font-ping-medium
span
color $font
.sub
......@@ -581,10 +630,11 @@ const exportList = () => {}
box-sizing border-box
padding .1rem 0
p
padding .1rem .2rem
padding .1rem
font-size .09rem
color $font
cursor pointer
$text-overflow()
&:hover
&.on
color $red
......@@ -604,10 +654,10 @@ const exportList = () => {}
>.n-submenu
>.n-submenu-children
.n-menu-item-content-header
font-size .12rem
font-size .11rem
.n-submenu-children
.n-menu-item-content-header
font-size .1rem
font-size .09rem
.n-menu-item-content--child-active
&:before
content ""
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment