两新组织功能迁移

This commit is contained in:
liuye
2022-10-21 17:37:41 +08:00
parent ff4f83959a
commit 657dcea2a1
9 changed files with 2336 additions and 1 deletions

View File

@@ -58,7 +58,7 @@
</ai-table>
</template>
</ai-card>
<ai-dialog :visible.sync="showDialog" title="查看活动日志" @closed="showDialog=false">
<ai-dialog customFooter :visible.sync="showDialog" title="查看活动日志" @closed="showDialog=false">
<ai-wrapper label-width="120px">
<ai-info-item label="提交人">{{ userInfo.userName }}</ai-info-item>
<ai-info-item label="提交时间">{{ userInfo.submitTime }}</ai-info-item>

View File

@@ -0,0 +1,75 @@
<template>
<div class="AppNewEconomics">
<keep-alive :include="['List']">
<component
ref="component"
:is="component"
@change="onChange"
:params="params"
:instance="instance"
:dict="dict"
></component>
</keep-alive>
</div>
</template>
<script>
import List from "./components/List";
import Add from "./components/Add";
export default {
label: "新经济组织管理",
name: "AppNewEconomics",
// 组件
components: { Add, List },
props: {
instance: Function,
dict: Object,
permissions: Function
},
data() {
return {
component: "List",
params: {},
include: []
};
},
// 计算
computed: {},
// 监听
watch: {},
// 实例创建后
created() {},
// 实例创建后
onShow() {},
// 实例渲染后
mounted() {},
// 方法
methods: {
onChange(data) {
if (data.type === "Add") {
this.component = "Add";
this.params = data.params;
}
if (data.type === "list") {
this.component = "List";
this.params = data.params;
this.$nextTick(() => {
if (data.isRefresh) {
this.$refs.component.getList();
}
});
}
}
}
};
</script>
<style scoped lang="scss">
.AppNewEconomics {
width: 100%;
height: 100%;
}
</style>

View File

@@ -0,0 +1,649 @@
<template>
<ai-detail class="Add">
<!-- 标题 -->
<ai-title slot="title" title="新增新经济组织" isShowBottomBorder isShowBack @onBackClick="cancel(false)"/>
<!-- 内容 -->
<template slot="content">
<el-form
:model="formData"
ref="ruleForm"
:rules="formRules"
label-width="150px"
label-position="right"
>
<ai-card title="企业基本信息">
<div class="ai-form" slot="content">
<!-- 企业名称 -->
<el-form-item label="企业名称" prop="name">
<el-input
v-model="formData.name"
show-word-limit
:maxlength="30"
size="small"
clearable
></el-input>
</el-form-item>
<!-- 企业类别 -->
<el-form-item label="企业类别" prop="companyCategory">
<ai-select
v-model="formData.companyCategory"
placeholder="请选择"
:selectList="$dict.getDict('twoNewOrgCompanyCategory')"
></ai-select>
</el-form-item>
<!-- 统一社会信用代码 -->
<el-form-item label="统一社会信用代码" prop="unifiedCode">
<el-input
size="small"
v-model="formData.unifiedCode"
clearable
></el-input>
</el-form-item>
<!-- 是否化危企业 -->
<el-form-item
label="是否化危企业"
prop="isDangerousCompany"
class="dangerous"
>
<el-radio-group v-model="formData.isDangerousCompany">
<el-radio
:label="item.label"
v-for="(item, i) in isNofityList"
:key="i"
>{{ item.name }}</el-radio
>
</el-radio-group>
</el-form-item>
<!-- 法人姓名 -->
<el-form-item label="法人姓名" prop="administratorName">
<el-input
v-model="formData.administratorName"
size="small"
clearable
></el-input>
</el-form-item>
<!-- 安全隐患类型 -->
<el-form-item label="安全隐患类型" prop="dangerousType">
<ai-select
v-model="formData.dangerousType"
placeholder="请选择"
:selectList="$dict.getDict('twoNewOrgDangerousType')"
></ai-select>
</el-form-item>
<!-- 法人身份证 -->
<el-form-item label="法人身份证" prop="administratorIdNumber">
<el-input
v-model="formData.administratorIdNumber"
clearable
size="small"
></el-input>
</el-form-item>
<!-- 企业员工数 -->
<el-form-item label="企业员工数" prop="employeeNumber">
<el-input
v-model.number="formData.employeeNumber"
clearable
size="small"
></el-input>
</el-form-item>
<!-- 法人联系方式 -->
<el-form-item label="法人联系方式" prop="administratorPhone">
<el-input
v-model.number="formData.administratorPhone"
clearable
size="small"
></el-input>
</el-form-item>
<!-- 企业联系方式 -->
<el-form-item label="企业联系方式" prop="companyPhone">
<el-input
v-model.number="formData.companyPhone"
clearable
size="small"
></el-input>
</el-form-item>
<!-- 所属区域 -->
<el-form-item label="所属区域" prop="areaId" style="width:100%;">
<ai-area-select
always-show
clearable
:instance="instance"
v-model="formData.areaId"
:areaLevel="5"
@fullname="v => (formData.areaName = v)"
></ai-area-select>
</el-form-item>
<!-- 详细地址 -->
<el-form-item label="详细地址" prop="address" style="width:100%;">
<el-input
v-model="formData.address"
clearable
size="small"
></el-input>
</el-form-item>
<!-- 网格归属 -->
<el-form-item label="网格归属" prop="girdId" class="girdId">
<el-cascader
v-model="formData.girdId"
:options="gridTree"
:props="gridTreeOps"
clearable
size="small"
/>
</el-form-item>
</div>
</ai-card>
<ai-card title="治保负责人信息" style="width:100%;">
<div class="ai-form" slot="content">
<!-- 治保负责人姓名 -->
<el-form-item label="治保负责人姓名" prop="securityPersonName">
<el-input
v-model="formData.securityPersonName"
clearable
size="small"
></el-input>
</el-form-item>
<!-- 治保负责人联系方式 -->
<el-form-item label="治保负责人联系方式" prop="securityPersonPhone">
<el-input
v-model.number="formData.securityPersonPhone"
clearable
size="small"
></el-input>
</el-form-item>
</div>
</ai-card>
<ai-card title="组织信息">
<div class="ai-form" slot="content">
<!--是否具备建立中共党组织条件 -->
<el-form-item label="是否具备建立中共党组织条件" prop="isBuildParty">
<el-radio-group v-model="formData.isBuildParty">
<el-radio
:label="item.label"
v-for="(item, i) in isBuildParty"
:key="i"
>{{ item.name }}</el-radio
>
</el-radio-group>
</el-form-item>
<!-- 关注程度 -->
<el-form-item label="关注程度" prop="concernDegree">
<ai-select
v-model="formData.concernDegree"
placeholder="请选择"
:selectList="$dict.getDict('twoNewOrgConcernDegree')"
></ai-select>
</el-form-item>
<!--是否有中共党组织 -->
<el-form-item label="是否有中共党组织" prop="isHaveParty">
<el-radio-group v-model="formData.isHaveParty">
<el-radio
:label="item.label"
v-for="(item, i) in isHaveParty"
:key="i"
>{{ item.name }}</el-radio
>
</el-radio-group>
</el-form-item>
<!-- 中共党员人数 -->
<el-form-item label="中共党员人数" prop="partyNumber">
<el-input
v-model.number="formData.partyNumber"
clearable
size="small"
></el-input>
</el-form-item>
<!--是否有公会 -->
<el-form-item label="是否有公会" prop="isHaveUnion">
<el-radio-group v-model="formData.isHaveUnion">
<el-radio
:label="item.label"
v-for="(item, i) in isHaveUnion"
:key="i"
>{{ item.name }}</el-radio
>
</el-radio-group>
</el-form-item>
<!-- 公会会员人数-->
<el-form-item label="公会会员人数" prop="unionNumber">
<el-input
v-model.number="formData.unionNumber"
clearable
size="small"
></el-input>
</el-form-item>
<!--是否有共青团组织 -->
<el-form-item label="是否有共青团组织" prop="isHaveYoung">
<el-radio-group v-model="formData.isHaveYoung">
<el-radio
:label="item.label"
v-for="(item, i) in isHaveYoung"
:key="i"
>{{ item.name }}</el-radio
>
</el-radio-group>
</el-form-item>
<!--共青团组织人数-->
<el-form-item label="共青团组织人数" prop="youngNumber">
<el-input
v-model.number="formData.youngNumber"
clearable
size="small"
></el-input>
</el-form-item>
<!--是否有妇联组织 -->
<el-form-item label="是否有妇联组织" prop="isHaveWoman">
<el-radio-group v-model="formData.isHaveWoman">
<el-radio
:label="item.label"
v-for="(item, i) in isHaveWoman"
:key="i"
>{{ item.name }}</el-radio
>
</el-radio-group>
</el-form-item>
<!--妇女人数-->
<el-form-item label="妇女人数" prop="womanNumber">
<el-input
v-model.number="formData.womanNumber"
clearable
size="small"
></el-input>
</el-form-item>
</div>
</ai-card>
</el-form>
</template>
<!-- 底部按钮 -->
<template #footer>
<el-button @click="cancel">取消</el-button>
<el-button type="primary" @click="confirm('ruleForm')">提交</el-button>
</template>
</ai-detail>
</template>
<script>
import { mapState } from "vuex";
export default {
name: "Add",
// 组件
components: {},
props: { instance: Function, dict: Object, params: Object },
data() {
return {
id: "",
formData: {
name: "",
companyCategory: "",
unifiedCode: "",
isDangerousCompany: "",
administratorName: "",
dangerousType: "",
administratorIdNumber: "",
employeeNumber: "",
administratorPhone: "",
companyPhone: "",
areaId: "",
address: "",
girdId: "",
securityPersonName: "",
securityPersonPhone: "",
isBuildParty: "",
concernDegree: "",
isHaveParty: "",
partyNumber: "",
isHaveUnion: "",
unionNumber: "",
isHaveYoung: "",
youngNumber: "",
isHaveWoman: "",
womanNumber: "",
bizType: "0"
},
gridTree: []
};
},
// 计算
computed: {
...mapState(["user"]),
formRules() {
// 身份证号校验
const IdCard = (rule, value, callback) => {
const reg = /(^[1-9]\d{7}((0\d)|(1[0-2]))(([0|12]\d)|3[0-1])\d{3}$)|(^[1-9]\d{5}(18|19|20)\d{2}((0[1-9])|(1[0-2]))(([0-2][1-9])|10|20|30|31)\d{3}[0-9Xx]$)/;
if (!value) {
return callback(new Error("身份证号码不能为空"));
} else if (!reg.test(value)) {
return callback(new Error("身份证号码不正确"));
} else {
callback();
}
};
// 统一社会信用代码校验
const unifiedCode = (rule, value, callback) => {
const reg = /[0-9A-HJ-NPQRTUWXY]{2}\d{6}[0-9A-HJ-NPQRTUWXY]{10}/;
if (value && !reg.test(value)) callback("统一社会信用代码格式错误");
else callback();
};
return {
name: [
{ required: true, message: "请输入企业名称", trigger: "change" }
],
companyCategory: [
{ required: true, message: "请选择企业类别", trigger: "change" }
],
unifiedCode: [
{
required: true,
message: "请输入统一社会信用代码",
trigger: "change"
},
{ validator: unifiedCode }
],
isDangerousCompany: [
{ required: true, message: "请选择是否化危企业", trigger: "change" }
],
administratorName: [
{
required: true,
message: "请输入法人姓名",
trigger: "change"
}
],
dangerousType: [
{ required: true, message: "请选择安全隐患类型", trigger: "change" }
],
administratorIdNumber: [
{
required: true,
trigger: "change"
},
{ validator: IdCard }
],
employeeNumber: [
{
validator: (r, v, cb) =>
!v || /^[1-9]\d*|0$/g.test(v) ? cb() : cb("请输入正整数")
}
],
administratorPhone: [
{
required: true,
message: "请输入法人联系方式",
trigger: "change"
}
// { validator: phonePass }
],
companyPhone: [
{
required: true,
message: "请输入企业联系方式",
trigger: "change"
}
// { validator: phonePass }
],
isBuildParty: [
{
required: true,
message: "请输入是否具备建立中共党组织条件",
trigger: "change"
}
],
areaId: [
{ required: true, message: "请选择所属区域" },
{
validator: (r, v, cb) =>
/0{3}$/g.test(v) ? cb("请选择到村") : cb()
}
],
girdId: [
{ required: true, message: "请选择网格归属", trigger: "change" }
],
concernDegree: [
{ required: true, message: "请选择关注程度", trigger: "change" }
],
isHaveParty: [
{
required: true,
message: "请选择是否有中共党组织",
trigger: "change"
}
],
partyNumber: [
{ required: true, message: "请输入中共党员人数", trigger: "change" },
{
validator: (r, v, cb) =>
!v || /^[1-9]\d*|0$/g.test(v) ? cb() : cb("请输入正整数")
}
],
isHaveUnion: [
{ required: true, message: "请选择是否有公会", trigger: "change" }
],
unionNumber: [
{ required: true, message: "请输入公会会员人数", trigger: "change" },
{
validator: (r, v, cb) =>
!v || /^[1-9]\d*|0$/g.test(v) ? cb() : cb("请输入正整数")
}
],
isHaveYoung: [
{
required: true,
message: "请选择是否有共青团组织",
trigger: "change"
}
],
youngNumber: [
{
required: true,
message: "请输入共青团组织人数",
trigger: "change"
},
{
validator: (r, v, cb) =>
!v || /^[1-9]\d*|0$/g.test(v) ? cb() : cb("请输入正整数")
}
],
isHaveWoman: [
{
required: true,
message: "请选择是否有妇联组织",
trigger: "change"
}
],
womanNumber: [
{ required: true, message: "请输入妇女人数", trigger: "change" },
{
validator: (r, v, cb) =>
!v || /^[1-9]\d*|0$/g.test(v) ? cb() : cb("请输入正整数")
}
]
};
},
isNofityList() {
return [
{ name: "是", label: "1" },
{ name: "否", label: "0" }
];
},
isBuildParty() {
return [
{ name: "是", label: "1" },
{ name: "否", label: "0" }
];
},
isHaveParty() {
return [
{ name: "是", label: "1" },
{ name: "否", label: "0" }
];
},
isHaveUnion() {
return [
{ name: "是", label: "1" },
{ name: "否", label: "0" }
];
},
isHaveYoung() {
return [
{ name: "是", label: "1" },
{ name: "否", label: "0" }
];
},
isHaveWoman() {
return [
{ name: "是", label: "1" },
{ name: "否", label: "0" }
];
},
gridTreeOps() {
return {
emitPath: false,
value: "id",
label: "girdName",
children: "girdList"
};
}
},
// 监听
watch: {},
// 实例创建后
created() {
this.dict
.load(
"twoNewOrgCompanyCategory",
"twoNewOrgDangerousType",
"twoNewOrgConcernDegree"
)
.then(() => {});
this.getGridTree();
this.formData.areaId = this.user.info.areaId;
if (this.params && this.params.id) {
this.id = this.params.id;
this.getInfoList(this.params.id);
}
},
onShow() {},
// 实例渲染后
mounted() {},
// 方法
methods: {
getInfoList(id) {
this.instance
.post(`/app/apptwoneworganization/queryDetailById?id=${id}`)
.then(res => {
if (res.code === 0) {
this.formData = res.data;
}
});
},
// 确定新增
confirm() {
this.$refs["ruleForm"].validate(valid => {
if (valid) {
this.instance
.post(`/app/apptwoneworganization/addOrUpdate`, {
...this.formData
})
.then(res => {
if (res.code == 0) {
this.$message.success("提交成功");
this.cancel(true);
}
});
}
});
},
// 返回按钮
cancel(isRefresh) {
this.$emit("change", {
type: "list",
isRefresh: !!isRefresh
});
},
getGridTree() {
this.instance.post("/app/appgirdinfo/listAllByTop").then(res => {
if (res.data) {
this.gridTree = res.data;
}
});
}
}
};
</script>
<style scoped lang="scss">
.Add {
::v-deep.ai-form {
.ai-card {
.ai-card-body {
display: flex;
flex-wrap: wrap;
justify-content: space-between;
.dangerous {
margin-right: 109px;
}
.width {
width: 100%;
}
.girdId {
width: 100%;
.el-form-item__content {
.el-cascader {
width: 100%;
}
}
}
}
}
}
}
::v-deep .ai-form .el-form-item .el-form-item__content {
margin-left: 174px!important;
}
</style>

View File

@@ -0,0 +1,220 @@
<template>
<ai-list class="list">
<template slot="title">
<ai-title title="新经济组织管理" isShowBottomBorder></ai-title>
</template>
<template slot="content">
<ai-search-bar>
<template #left>
<el-button
type="primary"
icon="iconfont iconAdd"
size="small"
@click="add('')"
>添加</el-button
>
<ai-select
v-model="search.companyCategory"
placeholder="企业类别"
clearable
@change="(page.current = 1), getList()"
:selectList="dict.getDict('twoNewOrgCompanyCategory')"
></ai-select>
<ai-select
v-model="search.concernDegree"
placeholder="关注程度"
clearable
@change="(page.current = 1), getList()"
:selectList="dict.getDict('twoNewOrgConcernDegree')"
></ai-select>
</template>
<template slot="right">
<el-input
v-model="search.name"
size="small"
placeholder="企业名称"
prefix-icon="iconfont iconSearch"
clearable
@change="(page.current = 1), getList()"
/>
<!-- <el-button
class="el-button"
type="primary"
icon="el-icon-search"
size="small"
@click="(page.current = 1), getList()"
>查询</el-button
>
<el-button
class="el-button"
icon="el-icon-refresh-right"
@click="reset()"
>重置</el-button
> -->
</template>
</ai-search-bar>
<!-- <ai-search-bar>
<template #left>
<el-button
style="margin-bottom: 10px;"
class="el-button"
type="primary"
icon="iconfont iconAdd"
size="small"
@click="add('')"
>添加</el-button
>
</template>
</ai-search-bar> -->
<ai-table
class="ai-table"
:tableData="tableData"
:col-configs="colConfigs"
:total="page.total"
:current.sync="page.current"
:size.sync="page.size"
@getList="getList"
:dict="dict"
>
<el-table-column
slot="options"
label="操作"
align="center"
fixed="right"
width="200"
>
<template slot-scope="{ row }">
<div class="table-options">
<el-button type="text" @click="add(row.id)">编辑</el-button>
<el-button type="text" @click="toDelete(row.id)">删除</el-button>
</div>
</template>
</el-table-column>
</ai-table>
</template>
</ai-list>
</template>
<script>
export default {
name: "List",
// 组件
components: {},
props: { instance: Function, dict: Object, params: Object },
data() {
return {
tableData: [],
colConfigs: [
{ prop: "name", label: "企业名称" },
{
prop: "companyCategory",
label: "企业类别",
dict: "twoNewOrgCompanyCategory"
},
{ prop: "companyPhone", label: "企业联系方式" },
{ prop: "administratorName", label: "法人姓名" },
{ prop: "administratorPhone", label: "法人联系方式" },
{ prop: "areaName", label: "所属区域" },
{
prop: "concernDegree",
label: "关注程度",
dict: "twoNewOrgConcernDegree"
}
],
page: {
size: 10,
current: 1,
total: 0
},
search: {
name: "",
companyCategory: "",
concernDegree: ""
},
id: ""
};
},
// 计算
computed: {},
// 监听
watch: {},
created() {
this.dict
.load("twoNewOrgCompanyCategory", "twoNewOrgConcernDegree")
.then(() => {
this.getList();
});
},
mounted() {
// this.dict.load('').then(() => {
// this.$nextTick(() => this.getList())
// })
},
// 实例创建后
onShow() {},
// 实例渲染后
// 方法
methods: {
getList() {
this.instance
.post(`/app/apptwoneworganization/list`, null, {
params: {
...this.page,
...this.search,
bizType: 0
}
})
.then(res => {
if (res.code == 0) {
this.tableData = res.data.records;
this.page.total = res.data.total;
}
});
},
// 添加
add(id) {
this.$emit("change", {
type: "Add",
params: {
id: id || ""
}
});
},
// 删除
toDelete(id) {
this.$confirm("删除后不可恢复,确定删除该数据?").then(() => {
this.instance
.post(`/app/apptwoneworganization/delete?ids=${id}`)
.then(res => {
if (res.code == 0) {
this.$message.success("删除成功!");
this.getList();
}
});
});
},
// 重置
reset() {
Object.keys(this.search).forEach(e => {
this.search[e] = "";
});
this.getList();
}
}
};
</script>
<style scoped lang="scss">
.list {
height: 100%;
overflow: auto;
}
</style>

View File

@@ -0,0 +1,75 @@
<template>
<div class="AppNewSociety">
<keep-alive :include="['List']">
<component
ref="component"
:is="component"
@change="onChange"
:params="params"
:instance="instance"
:dict="dict"
></component>
</keep-alive>
</div>
</template>
<script>
import List from "./components/List";
import Add from "./components/Add";
export default {
label: "新社会组织管理",
name: "AppNewSociety",
// 组件
components: { Add, List },
props: {
instance: Function,
dict: Object,
permissions: Function
},
data() {
return {
component: "List",
params: {},
include: []
};
},
// 计算
computed: {},
// 监听
watch: {},
// 实例创建后
created() {},
// 实例创建后
onShow() {},
// 实例渲染后
mounted() {},
// 方法
methods: {
onChange(data) {
if (data.type === "Add") {
this.component = "Add";
this.params = data.params;
}
if (data.type === "list") {
this.component = "List";
this.params = data.params;
this.$nextTick(() => {
if (data.isRefresh) {
this.$refs.component.getList();
}
});
}
}
}
};
</script>
<style scoped lang="scss">
.AppNewSociety {
width: 100%;
height: 100%;
}
</style>

View File

@@ -0,0 +1,653 @@
<template>
<ai-detail>
<!-- 标题 -->
<template slot="title">
<ai-title
title="新增新社会组织"
isShowBottomBorder
isShowBack
@onBackClick="cancel(false)"
/>
</template>
<!-- 内容 -->
<template slot="content">
<el-form
:model="formData"
ref="ruleForm"
:rules="formRules"
label-width="140px"
>
<ai-card title="企业基本信息">
<div class="ai-form" slot="content">
<!-- 社会组织名称 -->
<el-form-item label="社会组织名称" prop="name">
<el-input
v-model="formData.name"
show-word-limit
:maxlength="30"
clearable
size="small"
></el-input>
</el-form-item>
<!-- 社会组织类型 -->
<el-form-item label="社会组织类型" prop="socialType">
<ai-select
v-model="formData.socialType"
placeholder="请选择"
:selectList="$dict.getDict('twoNewOrgSocialType')"
></ai-select>
</el-form-item>
<!-- 统一社会信用代码 -->
<el-form-item label="统一社会信用代码" prop="unifiedCode">
<el-input
v-model="formData.unifiedCode"
clearable
size="small"
></el-input>
</el-form-item>
<!-- 登记证号 -->
<el-form-item label="登记证号" prop="certificateNumber">
<el-input
v-model="formData.certificateNumber"
clearable
size="small"
></el-input>
</el-form-item>
<!-- 负责人姓名 -->
<el-form-item label="负责人姓名" prop="administratorName">
<el-input
v-model="formData.administratorName"
clearable
size="small"
></el-input>
</el-form-item>
<!-- 登记管理机构代码 -->
<el-form-item label="登记管理机构代码" prop="registrationCode">
<el-input
v-model="formData.registrationCode"
clearable
size="small"
></el-input>
</el-form-item>
<!-- 负责人联系方式 -->
<el-form-item label="负责人联系方式" prop="administratorPhone">
<el-input
v-model="formData.administratorPhone"
clearable
size="small"
></el-input>
</el-form-item>
<!-- 批准日期 -->
<el-form-item label="批准日期" prop="approvalDate">
<el-date-picker
value-format="yyyy-MM-dd"
v-model="formData.approvalDate"
type="date"
placeholder="选择日期"
size="small"
>
</el-date-picker>
</el-form-item>
<!-- 负责人身份证号码 -->
<el-form-item label="负责人身份证号码" prop="administratorIdNumber">
<el-input
v-model="formData.administratorIdNumber"
clearable
size="small"
></el-input>
</el-form-item>
<!-- 是否有外资背景isForeign -->
<el-form-item label="是否有外资背景" prop="isForeign">
<el-radio-group v-model="formData.isForeign">
<el-radio
:label="item.label"
v-for="(item, i) in isForeign"
:key="i"
>{{ item.name }}
</el-radio
>
</el-radio-group>
</el-form-item>
<!-- 所属区域 -->
<el-form-item label="所属区域" prop="areaId">
<ai-area-select
always-show
clearable
:instance="instance"
v-model="formData.areaId"
:areaLevel="5"
></ai-area-select>
<!-- @fullname="v => (formData.areaName = v)" -->
</el-form-item>
<!-- 详细地址 -->
<el-form-item label="详细地址" prop="address" class="width">
<el-input
v-model="formData.address"
clearable
size="small"
></el-input>
</el-form-item>
<!-- 网格归属 -->
<el-form-item label="网格归属" prop="girdId" class="girdId">
<el-cascader
v-model="formData.girdId"
:options="gridTree"
:props="gridTreeOps"
clearable
size="small"
/>
</el-form-item>
</div>
</ai-card>
<ai-card title="治保负责人信息">
<div class="ai-form" slot="content">
<!-- 治保负责人姓名 -->
<el-form-item label="治保负责人姓名" prop="securityPersonName">
<el-input
v-model="formData.securityPersonName"
clearable
size="small"
></el-input>
</el-form-item>
<!-- 治保负责人联系方式 -->
<el-form-item label="治保负责人联系方式" prop="securityPersonPhone">
<el-input
v-model.number="formData.securityPersonPhone"
clearable
size="small"
></el-input>
</el-form-item>
</div>
</ai-card>
<ai-card title="组织信息">
<div class="ai-form" slot="content">
<!--是否具备建立中共党组织条件 -->
<el-form-item label="是否具备建立中共党组织条件" prop="isBuildParty">
<el-radio-group v-model="formData.isBuildParty">
<el-radio
:label="item.label"
v-for="(item, i) in isBuildParty"
:key="i"
>{{ item.name }}
</el-radio
>
</el-radio-group>
</el-form-item>
<!-- 关注程度 -->
<el-form-item label="关注程度" prop="concernDegree">
<ai-select
v-model="formData.concernDegree"
placeholder="请选择"
:selectList="$dict.getDict('twoNewOrgConcernDegree')"
></ai-select>
</el-form-item>
<!--是否有中共党组织 -->
<el-form-item label="是否有中共党组织" prop="isHaveParty">
<el-radio-group v-model="formData.isHaveParty">
<el-radio
:label="item.label"
v-for="(item, i) in isHaveParty"
:key="i"
>{{ item.name }}
</el-radio
>
</el-radio-group>
</el-form-item>
<!-- 中共党员人数 -->
<el-form-item label="中共党员人数" prop="partyNumber">
<el-input
v-model.number="formData.partyNumber"
clearable
size="small"
></el-input>
</el-form-item>
<!--是否有公会 -->
<el-form-item label="是否有公会" prop="isHaveUnion">
<el-radio-group v-model="formData.isHaveUnion">
<el-radio
:label="item.label"
v-for="(item, i) in isHaveUnion"
:key="i"
>{{ item.name }}
</el-radio
>
</el-radio-group>
</el-form-item>
<!-- 公会会员人数-->
<el-form-item label="公会会员人数" prop="unionNumber">
<el-input
v-model.number="formData.unionNumber"
clearable
size="small"
></el-input>
</el-form-item>
<!--是否有共青团组织 -->
<el-form-item label="是否有共青团组织" prop="isHaveYoung">
<el-radio-group v-model="formData.isHaveYoung">
<el-radio
:label="item.label"
v-for="(item, i) in isHaveYoung"
:key="i"
>{{ item.name }}
</el-radio
>
</el-radio-group>
</el-form-item>
<!--共青团组织人数-->
<el-form-item label="共青团组织人数" prop="youngNumber">
<el-input
v-model.number="formData.youngNumber"
clearable
size="small"
></el-input>
</el-form-item>
<!--是否有妇联组织 -->
<el-form-item label="是否有妇联组织" prop="isHaveWoman">
<el-radio-group v-model="formData.isHaveWoman">
<el-radio
:label="item.label"
v-for="(item, i) in isHaveWoman"
:key="i"
>{{ item.name }}
</el-radio
>
</el-radio-group>
</el-form-item>
<!--妇女人数-->
<el-form-item label="妇女人数" prop="womanNumber">
<el-input
v-model.number="formData.womanNumber"
size="small"
clearable
></el-input>
</el-form-item>
</div>
</ai-card>
</el-form>
</template>
<!-- 底部按钮 -->
<template #footer>
<el-button @click="cancel">取消</el-button>
<el-button type="primary" @click="confirm('ruleForm')">提交</el-button>
</template>
</ai-detail>
</template>
<script>
import {mapState} from "vuex";
export default {
name: "Add",
// 组件
components: {},
props: {instance: Function, dict: Object, params: Object},
data() {
return {
gridTree: [],
id: "",
formData: {
name: "",
socialType: "",
unifiedCode: "",
certificateNumber: "",
administratorName: "",
registrationCode: "",
administratorPhone: "",
approvalDate: "",
administratorIdNumber: "",
isForeign: "",
areaId: "",
address: "",
girdId: "",
securityPersonName: "",
securityPersonPhone: "",
isBuildParty: "",
concernDegree: "",
isHaveParty: "",
partyNumber: "",
isHaveUnion: "",
unionNumber: "",
isHaveYoung: "",
youngNumber: "",
isHaveWoman: "",
womanNumber: "",
bizType: "1"
}
};
},
// 计算
computed: {
...mapState(["user"]),
formRules() {
// 身份证号校验
const IdCard = (rule, value, callback) => {
const reg = /(^[1-9]\d{7}((0\d)|(1[0-2]))(([0|12]\d)|3[0-1])\d{3}$)|(^[1-9]\d{5}(18|19|20)\d{2}((0[1-9])|(1[0-2]))(([0-2][1-9])|10|20|30|31)\d{3}[0-9Xx]$)/;
if (!value) {
return callback(new Error("证件号码不能为空"));
} else if (!reg.test(value)) {
return callback(new Error("证件号码格式错误"));
} else {
callback();
}
};
// 统一社会信用代码校验
const unifiedCode = (rule, value, callback) => {
const reg = /[0-9A-HJ-NPQRTUWXY]{2}\d{6}[0-9A-HJ-NPQRTUWXY]{10}/;
if (value && !reg.test(value)) callback("统一社会信用代码格式错误");
else callback();
};
return {
name: [
{required: true, message: "请输入企业名称", trigger: "change"}
],
socialType: [
{required: true, message: "请选择社会组织类型", trigger: "change"}
],
unifiedCode: [
{
required: true,
message: "请输入统一社会信用代码",
trigger: "change"
},
{validator: unifiedCode}
],
administratorName: [
{
required: true,
message: "请输入负责人姓名",
trigger: "change"
}
],
administratorPhone: [
{
required: true,
message: "请输入负责人联系方式",
trigger: "change"
}
// { validator: phonePass }
],
areaId: [
{
required: true,
message: "请选择所属区域",
trigger: "change"
},
{
validator: (r, v, cb) =>
/0{3}$/g.test(v) ? cb("请选择到村") : cb()
}
],
administratorIdNumber: [
{
required: true,
message: "请输入负责人身份证号码",
trigger: "change"
},
{validator: IdCard}
],
isForeign: [
{
required: true,
message: "请选择是否有外资背景",
trigger: "change"
}
],
isBuildParty: [
{
required: true,
message: "请选择是否具备建立中共党组织条件",
trigger: "change"
}
],
girdId: [
{required: true, message: "请选择网格归属", trigger: "change"}
],
// securityPersonPhone: [{ validator: phonePass }],
concernDegree: [
{required: true, message: "请选择关注程度", trigger: "change"}
],
isHaveParty: [
{
required: true,
message: "请选择是否有中共党组织",
trigger: "change"
}
],
partyNumber: [
{required: true, message: "请输入中共党员人数", trigger: "change"},
{
validator: (r, v, cb) =>
!v || /^[1-9]\d*|0$/g.test(v) ? cb() : cb("请输入正整数")
}
],
isHaveUnion: [
{required: true, message: "请选择是否有公会", trigger: "change"}
],
unionNumber: [
{required: true, message: "请输入公会会员人数", trigger: "change"},
{
validator: (r, v, cb) =>
!v || /^[1-9]\d*|0$/g.test(v) ? cb() : cb("请输入正整数")
}
],
isHaveYoung: [
{
required: true,
message: "请选择是否有共青团组织",
trigger: "change"
}
],
youngNumber: [
{
required: true,
message: "请输入共青团组织人数",
trigger: "change"
},
{
validator: (r, v, cb) =>
!v || /^[1-9]\d*|0$/g.test(v) ? cb() : cb("请输入正整数")
}
],
isHaveWoman: [
{required: true, message: "请选择是否有妇联组织", trigger: "change"}
],
womanNumber: [
{required: true, message: "请输入妇女人数", trigger: "change"},
{
validator: (r, v, cb) =>
!v || /^[1-9]\d*|0$/g.test(v) ? cb() : cb("请输入正整数")
}
]
};
},
isForeign() {
return [
{name: "是", label: "1"},
{name: "否", label: "0"}
];
},
isBuildParty() {
return [
{name: "是", label: "1"},
{name: "否", label: "0"}
];
},
isHaveParty() {
return [
{name: "是", label: "1"},
{name: "否", label: "0"}
];
},
isHaveUnion() {
return [
{name: "是", label: "1"},
{name: "否", label: "0"}
];
},
isHaveYoung() {
return [
{name: "是", label: "1"},
{name: "否", label: "0"}
];
},
isHaveWoman() {
return [
{name: "是", label: "1"},
{name: "否", label: "0"}
];
},
gridTreeOps() {
return {
emitPath: false,
value: "id",
label: "girdName",
children: "girdList"
};
}
},
// 监听
watch: {},
// 实例创建后
created() {
this.dict
.load(
"twoNewOrgCompanyCategory",
"twoNewOrgDangerousType",
"twoNewOrgConcernDegree"
)
.then(() => {
});
this.getGridTree();
this.formData.areaId = this.user.info.areaId;
if (this.params && this.params.id) {
this.id = this.params.id;
this.getInfoList(this.params.id);
}
},
onShow() {
},
// 实例渲染后
mounted() {
},
// 方法
methods: {
getInfoList(id) {
this.instance
.post(`/app/apptwoneworganization/queryDetailById?id=${id}`)
.then(res => {
if (res.code === 0) {
this.formData = res.data;
}
});
},
// 确定新增
confirm() {
this.$refs["ruleForm"].validate(valid => {
if (valid) {
this.instance
.post(`/app/apptwoneworganization/addOrUpdate`, {
...this.formData
})
.then(res => {
if (res.code == 0) {
this.$message.success("提交成功");
this.cancel(true);
}
});
}
});
},
// 返回按钮
cancel(isRefresh) {
this.$emit("change", {
type: "list",
isRefresh: !!isRefresh
});
},
getGridTree() {
this.instance.post("/app/appgirdinfo/listAllByTop").then(res => {
if (res.data) {
this.gridTree = res.data;
}
});
}
}
};
</script>
<style scoped lang="scss">
::v-deep.ai-form {
.ai-card {
.ai-card-body {
display: flex;
flex-wrap: wrap;
justify-content: space-between;
.isforeign {
margin-right: 109px;
}
.width {
width: 100%;
}
.girdId {
width: 100%;
.el-form-item__content {
.el-cascader {
width: 100%;
}
}
}
}
}
}
::v-deep .ai-form .el-form-item .el-form-item__content {
margin-left: 164px!important;
}
</style>

View File

@@ -0,0 +1,192 @@
<template>
<ai-list class="list">
<template slot="title">
<ai-title title="新社会组织管理" isShowBottomBorder></ai-title>
</template>
<template slot="content">
<ai-search-bar>
<template #left>
<el-button size="small" type="primary" icon="iconfont iconAdd" @click="add('')">添加</el-button>
<ai-select
v-model="search.socialType"
placeholder="社会组织类别"
clearable
@change="(page.current = 1), getList()"
:selectList="dict.getDict('twoNewOrgSocialType')"
></ai-select>
<ai-select
v-model="search.concernDegree"
placeholder="关注程度"
clearable
@change="(page.current = 1), getList()"
:selectList="dict.getDict('twoNewOrgConcernDegree')"
></ai-select>
</template>
<template slot="right">
<el-input
v-model="search.name"
size="small"
placeholder="社会组织名称"
prefix-icon="iconfont iconSearch"
clearable
@change="(page.current = 1), getList()"
/>
<!-- <el-button
class="el-button"
type="primary"
icon="el-icon-search"
size="small"
@click="(page.current = 1), getList()"
>查询</el-button
>
<el-button
class="el-button"
icon="el-icon-refresh-right"
@click="reset()"
>重置</el-button
> -->
</template>
</ai-search-bar>
<ai-table
class="ai-table"
:tableData="tableData"
:col-configs="colConfigs"
:total="page.total"
:current.sync="page.current"
:size.sync="page.size"
@getList="getList"
:dict="dict"
>
<el-table-column
slot="options"
label="操作"
align="center"
fixed="right"
width="200"
>
<template slot-scope="{ row }">
<div class="table-options">
<el-button type="text" @click="add(row.id)">编辑</el-button>
<el-button type="text" @click="toDelete(row.id)">删除</el-button>
</div>
</template>
</el-table-column>
</ai-table>
</template>
</ai-list>
</template>
<script>
export default {
name: "List",
// 组件
components: {},
props: { instance: Function, dict: Object, params: Object },
data() {
return {
tableData: [],
colConfigs: [
{ prop: "name", label: "社会组织名称" },
{
prop: "socialType",
label: "社会组织类别",
dict: "twoNewOrgSocialType"
},
{ prop: "administratorName", label: "负责人姓名" },
{ prop: "administratorPhone", label: "负责人联系方式" },
{ prop: "areaName", label: "所属区域" },
{
prop: "concernDegree",
label: "关注程度",
dict: "twoNewOrgConcernDegree"
}
],
page: {
size: 10,
current: 1,
total: 0
},
search: {
name: "",
socialType: "",
concernDegree: ""
},
id: ""
};
},
// 计算
computed: {},
// 监听
watch: {},
created() {
this.dict.load("twoNewOrgSocialType", "twoNewOrgConcernDegree").then(() => {
this.getList();
});
},
mounted() {},
// 实例创建后
onShow() {},
// 实例渲染后
// 方法
methods: {
getList() {
this.instance
.post(`/app/apptwoneworganization/list`, null, {
params: {
...this.page,
...this.search,
bizType: 1
}
})
.then(res => {
if (res.code == 0) {
this.tableData = res.data.records;
this.page.total = res.data.total;
}
});
},
// 添加
add(id) {
this.$emit("change", {
type: "Add",
params: {
id: id || ""
}
});
},
// 删除
toDelete(id) {
this.$confirm("删除后不可恢复,确定删除该数据?").then(() => {
this.instance
.post(`/app/apptwoneworganization/delete?ids=${id}`)
.then(res => {
if (res.code == 0) {
this.$message.success("删除成功!");
this.getList();
}
});
});
},
// 重置
reset() {
Object.keys(this.search).forEach(e => {
this.search[e] = "";
});
this.getList();
}
}
};
</script>
<style scoped lang="scss">
.list {
height: 100%;
overflow: auto;
}</style>

View File

@@ -0,0 +1,64 @@
<template>
<section class="AppTwoNewOrganizationSta">
<ai-list>
<template slot="title">
<ai-title :isShowBottomBorder="false" title="两新组织统计" />
</template>
<template slot="tabs">
<el-tabs v-model="bizType">
<el-tab-pane v-for="tab in tabs" :key="tab.name" v-bind="tab" lazy>
<component
:is="tab.comp"
v-if="bizType == tab.name"
:instance="instance"
:dict="dict"
:permissions="permissions"
/>
</el-tab-pane>
</el-tabs>
</template>
</ai-list>
</section>
</template>
<script>
import { mapState } from "vuex";
import StaPane from "./staPane";
export default {
name: "AppTwoNewOrganizationSta",
components: { StaPane },
label: "两新组织统计",
props: {
instance: Function,
dict: Object,
permissions: Function
},
provide() {
return {
top: this
};
},
computed: {
...mapState(["user"]),
tabs() {
return [
{ label: "新经济组织统计", name: "0", comp: StaPane },
{ label: "新社会组织统计", name: "1", comp: StaPane }
];
}
},
data() {
return {
bizType: "0"
};
}
};
</script>
<style lang="scss" scoped>
.AppTwoNewOrganizationSta {
height: 100%;
overflow: auto;
}
</style>

View File

@@ -0,0 +1,407 @@
<template>
<section class="staPane">
<ai-list isTabs>
<template #blank>
<ai-tree-menu title="组织目录" @search="v=>$refs.areaTree.filter(v)">
<el-tree ref="areaTree" lazy node-key="id" :load="getAreas"
:filter-node-method="handleTreeFilter"
:default-expanded-keys="[selectedAreaId]"
@node-click="handleSelectArea"
:props="{label:'name',isLeaf:'leaf'}"/>
</ai-tree-menu>
<el-scrollbar>
<div class="mainPane">
<el-row type="flex">
<div class="cardPane orgCountMap" v-for="v in orgCountMap" :key="v.key">
<b v-html="v.name"/>
<span v-html="v.desc"/>
<b class="count" v-html="v.v1"/>
</div>
</el-row>
<el-row type="flex">
<div class="cardPane">
<ai-title title="各类组织成员数量"/>
<div id="orgMemberCountMapChart"/>
</div>
<div class="cardPane">
<ai-title title="待建党组织关注度统计"/>
<div id="buildPartyCountMapChart"/>
</div>
</el-row>
<el-row type="flex" v-if="top.bizType==0">
<div class="cardPane">
<ai-title title="新经济组织类型分布"/>
<div id="companyCategoryCountMapChart"/>
</div>
<div class="cardPane">
<ai-title title="安全隐患类型占比"/>
<div id="dangerousTypeCountMapChart"/>
</div>
</el-row>
<el-row type="flex" v-if="top.bizType==1">
<div class="cardPane">
<ai-title title="新社会组织类型分布"/>
<div id="socialTypeCountMapChart"/>
</div>
<div class="cardPane">
<ai-title title="外资背景统计"/>
<div id="foreignCountMapChart"/>
</div>
</el-row>
</div>
</el-scrollbar>
</template>
</ai-list>
</section>
</template>
<script>
import {mapState} from "vuex";
import * as echarts from "echarts";
export default {
name: "staPane",
label: "两新组织统计",
props: {
instance: Function,
dict: Object,
permissions: Function,
},
inject: ['top'],
computed: {
...mapState(['user']),
typeName() {
return this.top.bizType == 0 ? '新经济' : '新社会'
},
orgCountMap() {
let init = [
{name: `${this.typeName}组织总量`, desc: `当前所有的${this.typeName}组织总数量`, key: "zzzl", v1: 0},
{name: "含有党群组织的数量", desc: `含有党群组织的${this.typeName}组织总数量`, key: "dqzzsl", v1: 0},
{name: "具备建立中共党组织条件的数量", desc: "具备条件但尚未建立党组织的数量", key: "jbjldzztjsl", v1: 0}
]
return init.map(e => ({
...e,
v1: Number(this.meta.orgCountMap?.[e.key]) || 0
}))
},
chartOps() {
let orgMemberCountMapData = this.dict.getDict('orgMemberTypes').map(e => [e.dictName, Number(this.meta?.orgMemberCountMap?.[e.dictValue] || 0)]),
buildPartyCountMapData = this.dict.getDict('twoNewOrgConcernDegree').map(e => [e.dictName, Number(this.meta?.buildPartyCountMap?.[e.dictValue] || 0)]),
companyCategoryCountMapData = this.dict.getDict('twoNewOrgCompanyCategory').map(e => [e.dictName, Number(this.meta?.companyCategoryCountMap?.[e.dictValue] || 0)]),
dangerousTypeCountMapData = this.dict.getDict('twoNewOrgDangerousType').slice(1).map(e => [e.dictName, Number(this.meta?.dangerousTypeCountMap?.[e.dictValue] || 0)]),
socialTypeCountMapData = this.dict.getDict('twoNewOrgSocialType').map(e => [e.dictName, Number(this.meta?.socialTypeCountMap?.[e.dictValue] || 0)]),
foreignCountMapData = this.dict.getDict('twoNewOrgIsForeign').map(e => [e.dictName, Number(this.meta?.foreignCountMap?.[e.dictValue] || 0)])
return {
orgMemberCountMap: {
tooltip: {},
grid: {
left: 82,
right: 40,
bottom: 80,
top: 30
},
xAxis: {
type: 'category', axisLine: {lineStyle: {color: '#D8DDE8'}}, axisTick: false,
axisLabel: {color: '#666', margin: 19}
},
yAxis: {
type: 'value', axisLine: false, min: 0, minInterval: 1,
axisLabel: {color: '#666', margin: 19},
splitLine: {lineStyle: {color: '#D8DDE8', type: 'dashed'}}
},
series: {
type: 'bar',
barWidth: 24,
itemStyle: {color: '#22AA99'},
emphasis: {itemStyle: {color: "#2266FF"}},
},
dataset: {
source: orgMemberCountMapData
}
},
buildPartyCountMap: {
tooltip: {},
grid: {
left: 82,
right: 40,
bottom: 80,
top: 30
},
xAxis: {
type: 'category', axisLine: {lineStyle: {color: '#D8DDE8'}}, axisTick: false,
axisLabel: {color: '#666', margin: 19}
},
yAxis: {
type: 'value', axisLine: false, min: 0, minInterval: 1,
axisLabel: {color: '#666', margin: 19},
splitLine: {lineStyle: {color: '#D8DDE8', type: 'dashed'}}
},
series: {
type: 'bar',
barWidth: 24,
itemStyle: {color: '#22AA99'},
emphasis: {itemStyle: {color: "#2266FF"}},
},
dataset: {
source: buildPartyCountMapData
}
},
companyCategoryCountMap: {
legend: {
orient: 'vertical', left: 220, y: 'center',
itemGap: 4, itemWidth: 8, itemHeight: 8,
formatter: name => {
let item = companyCategoryCountMapData.find(e => e?.[0] == name)
return ` {a|${name.replace(/(.{10}).*/g, '$1...')}} {b|${item?.[1]}}`
},
tooltip: {show: true},
textStyle: {
rich: {
a: {color: '#666', width: 130, fontSize: 14, lineHeight: 22},
b: {fontWeight: 'bold', align: 'right', color: '#333', fontSize: 14, width: 54, lineHeight: 22}
}
},
},
tooltip: {},
color: ['#02A499', '#F8B425', '#EC4461', '#D846E4', '#38A4F8'],
series: {
name: '重点青少年类型分布',
center: [100, '50%'], radius: 80,
type: 'pie', label: false,
itemStyle: {borderColor: '#fff', borderWidth: 2},
},
dataset: {
source: companyCategoryCountMapData
}
},
dangerousTypeCountMap: {
legend: {
orient: 'vertical', left: 220, y: 'center',
itemGap: 4, itemWidth: 8, itemHeight: 8,
formatter: name => {
let item = dangerousTypeCountMapData.find(e => e?.[0] == name)
return ` {a|${name.replace(/(.{10}).*/g, '$1...')}} {b|${item?.[1]}}`
},
tooltip: {show: true},
textStyle: {
rich: {
a: {color: '#666', width: 166, fontSize: 14, lineHeight: 22},
b: {fontWeight: 'bold', align: 'right', color: '#333', fontSize: 14, lineHeight: 22}
}
},
},
tooltip: {},
color: ['#02A499', '#F8B425', '#EC4461', '#D846E4', '#38A4F8'],
series: {
name: '重点青少年性别分布', type: 'pie',
center: [100, '50%'], radius: [40, 80], label: false,
itemStyle: {borderColor: '#fff', borderWidth: 2},
},
dataset: {
source: dangerousTypeCountMapData
}
},
socialTypeCountMap: {
legend: {
orient: 'vertical', left: 220, y: 'center',
itemGap: 4, itemWidth: 8, itemHeight: 8,
formatter: name => {
let item = socialTypeCountMapData.find(e => e?.[0] == name)
return ` {a|${name.replace(/(.{10}).*/g, '$1...')}} {b|${item?.[1]}}`
},
tooltip: {show: true},
textStyle: {
rich: {
a: {color: '#666', width: 130, fontSize: 14, lineHeight: 22},
b: {fontWeight: 'bold', align: 'right', color: '#333', fontSize: 14, width: 54, lineHeight: 22}
}
},
},
tooltip: {},
color: ['#02A499', '#F8B425', '#EC4461', '#D846E4', '#38A4F8'],
series: {
name: '重点青少年类型分布',
center: [100, '50%'], radius: 80,
type: 'pie', label: false,
itemStyle: {borderColor: '#fff', borderWidth: 2},
},
dataset: {
source: socialTypeCountMapData
}
},
foreignCountMap: {
legend: {
orient: 'vertical', left: 220, y: 'center',
itemGap: 4, itemWidth: 8, itemHeight: 8,
formatter: name => {
let item = foreignCountMapData.find(e => e?.[0] == name)
return ` {a|${name.replace(/(.{10}).*/g, '$1...')}} {b|${item?.[1]}}`
},
tooltip: {show: true},
textStyle: {
rich: {
a: {color: '#666', width: 166, fontSize: 14, lineHeight: 22},
b: {fontWeight: 'bold', align: 'right', color: '#333', fontSize: 14, lineHeight: 22}
}
},
},
tooltip: {},
color: ['#02A499', '#F8B425', '#EC4461', '#D846E4', '#38A4F8'],
series: {
name: '重点青少年性别分布', type: 'pie',
center: [100, '50%'], radius: [40, 80], label: false,
itemStyle: {borderColor: '#fff', borderWidth: 2},
},
dataset: {
source: foreignCountMapData
}
},
}
}
},
data() {
return {
selectedAreaId: "",
meta: {},
charts: {
orgMemberCountMap: null,
buildPartyCountMap: null,
companyCategoryCountMap: null,
dangerousTypeCountMap: null,
socialTypeCountMap: null,
foreignCountMap: null,
}
}
},
methods: {
getAreas(node, resolve) {
if (node.level == 0) {
let {areaName: name, areaId: id} = this.user.info
resolve([{name, id}])
} else {
let {id} = node?.data
this.instance.post("/admin/area/queryAreaByParentId", null, {
params: {id}
}).then(res => {
if (res?.data) {
resolve(res.data.map(e => ({...e, leaf: e.type == 5})))
}
})
}
},
handleTreeFilter(v, data) {
return data.name.indexOf(v) > -1
},
getStaData() {
let {bizType} = this.top
return this.instance.post("/app/apptwoneworganization/countByAreaIdAndBizType", null, {
params: {areaId: this.selectedAreaId, bizType}
}).then(res => {
if (res?.data) {
this.meta = res.data
}
})
},
handleSelectArea({id}) {
this.selectedAreaId = id
this.getStaData().then(() => this.getChartData())
},
initEcharts() {
Object.keys(this.charts).map(id => {
let ref = document.getElementById(id + "Chart")
if (ref) this.charts[id] = echarts.init(ref)
})
this.getChartData()
},
getChartData() {
Object.keys(this.charts).map(e => {
this.charts[e]?.setOption(this.chartOps?.[e])
})
}
},
created() {
this.dict.load("twoNewOrgCompanyCategory", 'twoNewOrgDangerousType',
'twoNewOrgConcernDegree', 'orgMemberTypes', 'twoNewOrgSocialType', 'twoNewOrgIsForeign')
this.selectedAreaId = JSON.parse(JSON.stringify(this.user.info.areaId))
},
mounted() {
this.initEcharts()
this.getStaData().then(() => this.getChartData())
}
}
</script>
<style lang="scss" scoped>
.staPane {
height: 100%;
::v-deep .ai-list__blank {
display: flex;
height: 100% !important;
gap: 16px;
.el-scrollbar {
flex: 1;
min-width: 0;
.el-scrollbar__wrap {
overflow-x: hidden;
}
}
.mainPane {
display: flex;
flex-direction: column;
gap: 16px;
& > .el-row {
width: 100%;
gap: 16px;
height: auto;
& > div {
flex: 1;
min-width: 0;
}
}
}
.cardPane {
background: #FFFFFF;
box-shadow: 0 0 4px 0 rgba(0, 0, 0, 0.05);
border-radius: 4px;
&.orgCountMap {
padding: 16px 24px;
box-sizing: border-box;
height: 120px;
font-size: 14px;
color: #888;
display: flex;
flex-direction: column;
gap: 8px;
b {
font-size: 16px;
color: #333333;
&.count {
font-size: 24px;
color: #2266FF;
}
}
}
}
}
#orgMemberCountMapChart, #buildPartyCountMapChart {
width: 100%;
height: 270px;
}
#companyCategoryCountMapChart, #dangerousTypeCountMapChart, #socialTypeCountMapChart, #foreignCountMapChart {
width: 100%;
height: 220px;
}
}
</style>