公司级别等

This commit is contained in:
caoqianming 2021-03-31 09:49:42 +08:00
parent 60b84ab310
commit c8b26e675a
15 changed files with 179 additions and 34 deletions

View File

@ -28,6 +28,9 @@ const mutations = {
}, },
SET_PERMS: (state, perms) => { SET_PERMS: (state, perms) => {
state.perms = perms state.perms = perms
},
SET_DEPT: (state, dept) => {
state.dept = dept
} }
} }
@ -100,7 +103,7 @@ const actions = {
reject('验证失败,重新登陆.') reject('验证失败,重新登陆.')
} }
const { perms, name, avatar } = data const { perms, name, avatar, dept } = data
// perms must be a non-empty array // perms must be a non-empty array
if (!perms || perms.length <= 0) { if (!perms || perms.length <= 0) {
@ -110,6 +113,7 @@ const actions = {
commit('SET_PERMS', perms) commit('SET_PERMS', perms)
commit('SET_NAME', name) commit('SET_NAME', name)
commit('SET_AVATAR', avatar) commit('SET_AVATAR', avatar)
commit('SET_DEPT', dept)
resolve(data) resolve(data)
}).catch(error => { }).catch(error => {
reject(error) reject(error)

View File

@ -219,7 +219,8 @@
<el-link <el-link
v-if=" v-if="
scope.row.state == '已上报' && scope.row.state == '已上报' &&
checkPermission(['record_reject']) checkPermission(['record_reject']) &&
scope.row.belong_dept != $store.state.user.dept
" "
type="danger" type="danger"
size="small" size="small"

View File

@ -24,11 +24,12 @@
</div> </div>
<div class="ma" v-if="record.task_"> <div class="ma" v-if="record.task_">
<span class="term">报送要求/备注</span> <span class="term">报送要求/备注</span>
<span class="desc" v-if = "data.action != 'update'">{{ record.note }}</span>
<el-input <el-input
v-model="record.note" v-model="record.note"
placeholder="" placeholder=""
type="textarea" type="textarea"
:readonly="data.action != 'update' && data.action != 'reject'" v-else
> >
</el-input> </el-input>
</div> </div>
@ -42,11 +43,12 @@
</div> </div>
<div class="ma"> <div class="ma">
<span class="term">上报说明</span> <span class="term">上报说明</span>
<span class="desc" v-if = "data.action != 'up'">{{ record.noteb }}</span>
<el-input <el-input
v-model="record.noteb" v-model="record.noteb"
placeholder="" placeholder=""
type="textarea" type="textarea"
:readonly="data.action != 'up'" v-else
> >
</el-input> </el-input>
</div> </div>
@ -57,6 +59,17 @@
:disabled="data.action == 'view'" :disabled="data.action == 'view'"
></el-switch> ></el-switch>
</div> </div>
<div class="ma" >
<span class="term">修改意见</span>
<span class="desc" v-if = "data.action != 'reject'">{{ record.opinion }}</span>
<el-input
v-model="record.opinion"
placeholder=""
type="textarea"
v-else
>
</el-input>
</div>
<div class="ma"> <div class="ma">
<span class="term">已上传文件</span> <span class="term">已上传文件</span>
</div> </div>

View File

@ -104,7 +104,9 @@
<el-table-column label="公司名称"> <el-table-column label="公司名称">
<template slot-scope="scope" v-if="scope.row.dept_">{{ <template slot-scope="scope" v-if="scope.row.dept_">{{
scope.row.dept_.name scope.row.dept_.name
}}</template> }}
<span style="color:darkblue">{{scope.row.dept_.type_name}}</span>
</template>
</el-table-column> </el-table-column>
<el-table-column label="上报率"> <el-table-column label="上报率">
<template slot-scope="scope"> {{ scope.row.up_rate }}% </template> <template slot-scope="scope"> {{ scope.row.up_rate }}% </template>

View File

@ -31,11 +31,11 @@
:tree-props="{ children: 'children', hasChildren: 'hasChildren' }" :tree-props="{ children: 'children', hasChildren: 'hasChildren' }"
> >
<el-table-column type="index" width="50" /> <el-table-column type="index" width="50" />
<el-table-column label="组织名称"> <el-table-column label="组织名称" width="400">
<template slot-scope="scope">{{ scope.row.name }}</template> <template slot-scope="scope">{{ scope.row.name }}</template>
</el-table-column> </el-table-column>
<el-table-column label="组织类型"> <el-table-column label="组织类型">
<template slot-scope="scope">{{ scope.row.type }}</template> <template slot-scope="scope">{{ scope.row.type_name }}</template>
</el-table-column> </el-table-column>
<el-table-column label="配置"> <el-table-column label="配置">
<template slot-scope="scope"> <template slot-scope="scope">
@ -95,9 +95,9 @@
<el-select v-model="org.type" placeholder="请选择"> <el-select v-model="org.type" placeholder="请选择">
<el-option <el-option
v-for="item in DeptTypeoptions" v-for="item in DeptTypeoptions"
:key="item.value" :key="item.id"
:label="item.label" :label="item.name"
:value="item.value"> :value="item.id">
</el-option> </el-option>
</el-select> </el-select>
</el-form-item> </el-form-item>
@ -118,6 +118,7 @@
<script> <script>
import { getOrgAll, createOrg, deleteOrg, updateOrg } from "@/api/org"; import { getOrgAll, createOrg, deleteOrg, updateOrg } from "@/api/org";
import { getDictList } from "@/api/dict";
import { genTree } from "@/utils"; import { genTree } from "@/utils";
import checkPermission from "@/utils/permission"; import checkPermission from "@/utils/permission";
import Treeselect from "@riophae/vue-treeselect"; import Treeselect from "@riophae/vue-treeselect";
@ -148,24 +149,21 @@ export default {
name: [{ required: true, message: "请输入名称", trigger: "blur" }], name: [{ required: true, message: "请输入名称", trigger: "blur" }],
pid: [{ required: true, message: "请选择上级", trigger: "change" }], pid: [{ required: true, message: "请选择上级", trigger: "change" }],
}, },
DeptTypeoptions: [ DeptTypeoptions: [],
{
value: "公司",
label: "公司",
},
{
value: "部门",
label: "部门",
},
],
}; };
}, },
computed: {}, computed: {},
created() { created() {
this.getList(); this.getList();
this.getDepttypeOptions();
}, },
methods: { methods: {
checkPermission, checkPermission,
getDepttypeOptions() {
getDictList({type__code:'org_type', is_used:true}).then(res=>{
this.DeptTypeoptions = res.data
})
},
getList() { getList() {
this.listLoading = true; this.listLoading = true;
getOrgAll().then((response) => { getOrgAll().then((response) => {

View File

@ -0,0 +1,18 @@
# Generated by Django 3.0.5 on 2021-03-31 00:31
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('supervision', '0014_auto_20210330_1557'),
]
operations = [
migrations.AddField(
model_name='record',
name='opinion',
field=models.TextField(blank=True, null=True, verbose_name='修改意见'),
),
]

View File

@ -0,0 +1,18 @@
# Generated by Django 3.0.5 on 2021-03-31 00:31
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('system', '0009_organization_can_supervision'),
]
operations = [
migrations.AlterField(
model_name='organization',
name='sort',
field=models.CharField(default='', max_length=100, verbose_name='排序'),
),
]

View File

@ -0,0 +1,19 @@
# Generated by Django 3.0.5 on 2021-03-31 00:42
from django.db import migrations, models
import django.db.models.deletion
class Migration(migrations.Migration):
dependencies = [
('system', '0010_auto_20210331_0831'),
]
operations = [
migrations.AlterField(
model_name='organization',
name='type',
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='system.Dict', verbose_name='公司类型'),
),
]

View File

@ -0,0 +1,19 @@
# Generated by Django 3.0.5 on 2021-03-31 00:49
from django.db import migrations, models
import django.db.models.deletion
class Migration(migrations.Migration):
dependencies = [
('system', '0011_auto_20210331_0842'),
]
operations = [
migrations.AlterField(
model_name='organization',
name='type',
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='system.Dict', verbose_name='组织类型'),
),
]

View File

@ -0,0 +1,17 @@
# Generated by Django 3.0.5 on 2021-03-31 00:50
from django.db import migrations
class Migration(migrations.Migration):
dependencies = [
('system', '0012_auto_20210331_0849'),
]
operations = [
migrations.RemoveField(
model_name='organization',
name='type',
),
]

View File

@ -0,0 +1,19 @@
# Generated by Django 3.0.5 on 2021-03-31 00:54
from django.db import migrations, models
import django.db.models.deletion
class Migration(migrations.Migration):
dependencies = [
('system', '0013_remove_organization_type'),
]
operations = [
migrations.AddField(
model_name='organization',
name='type',
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='system.Dict', verbose_name='组织类型'),
),
]

View File

@ -0,0 +1,21 @@
# Generated by Django 3.0.5 on 2021-03-31 01:06
from django.db import migrations
class Migration(migrations.Migration):
dependencies = [
('system', '0014_organization_type'),
]
operations = [
migrations.RemoveField(
model_name='dict',
name='enabled',
),
migrations.RemoveField(
model_name='historicaldict',
name='enabled',
),
]

View File

@ -55,13 +55,8 @@ class Organization(SoftModel):
""" """
组织架构 组织架构
""" """
organization_type_choices = (
('公司', '公司'),
('部门', '部门')
)
name = models.CharField('名称', max_length=60) name = models.CharField('名称', max_length=60)
type = models.CharField('类型', max_length=20, type = models.ForeignKey('system.dict', verbose_name='组织类型', null=True, blank=True, on_delete=models.SET_NULL)
choices=organization_type_choices, default='部门')
pid = models.ForeignKey('self', null=True, blank=True, pid = models.ForeignKey('self', null=True, blank=True,
on_delete=models.SET_NULL, verbose_name='') on_delete=models.SET_NULL, verbose_name='')
sort = models.CharField('排序', default="", max_length=100) sort = models.CharField('排序', default="", max_length=100)
@ -151,7 +146,6 @@ class Dict(SoftModel):
name = models.CharField('名称', max_length=30, unique=True) name = models.CharField('名称', max_length=30, unique=True)
code = models.CharField('代码', max_length=30, null=True, blank=True) code = models.CharField('代码', max_length=30, null=True, blank=True)
desc = models.TextField('描述', blank=True, null=True) desc = models.TextField('描述', blank=True, null=True)
enabled = models.BooleanField('是否有效', default=True)
type = models.ForeignKey( type = models.ForeignKey(
DictType, on_delete=models.CASCADE, verbose_name='类型') DictType, on_delete=models.CASCADE, verbose_name='类型')
sort = models.IntegerField('排序', default=1) sort = models.IntegerField('排序', default=1)

View File

@ -70,8 +70,8 @@ class OrganizationSerializer(serializers.ModelSerializer):
""" """
组织架构序列化 组织架构序列化
""" """
type = serializers.ChoiceField(choices=Organization.organization_type_choices, default='部门') # type = serializers.ChoiceField(choices=Dict.objects.filter(type__code='org_type').values_list('id','name'))
type_name = serializers.StringRelatedField(source='type', read_only=True)
class Meta: class Meta:
model = Organization model = Organization
fields = '__all__' fields = '__all__'
@ -144,9 +144,10 @@ class UserSimpleSerializer(serializers.ModelSerializer):
fields = ['id', 'name', 'username'] fields = ['id', 'name', 'username']
class OrganizationSimpleSerializer(serializers.ModelSerializer): class OrganizationSimpleSerializer(serializers.ModelSerializer):
type_name = serializers.StringRelatedField(source='type', read_only=True)
class Meta: class Meta:
model = Organization model = Organization
fields = ['id', 'name'] fields = ['id', 'name', 'type_name']
class FileSimpleSerializer(serializers.ModelSerializer): class FileSimpleSerializer(serializers.ModelSerializer):
class Meta: class Meta:

View File

@ -126,7 +126,7 @@ class DictTypeViewSet(ModelViewSet):
queryset = DictType.objects.all() queryset = DictType.objects.all()
serializer_class = DictTypeSerializer serializer_class = DictTypeSerializer
pagination_class = None pagination_class = None
search_fields = ['^name'] search_fields = ['name']
ordering_fields = ['id'] ordering_fields = ['id']
ordering = 'id' ordering = 'id'
@ -139,7 +139,8 @@ class DictViewSet(ModelViewSet):
'put': 'dict_update', 'delete': 'dict_delete'} 'put': 'dict_update', 'delete': 'dict_delete'}
queryset = Dict.objects.all() queryset = Dict.objects.all()
serializer_class = DictSerializer serializer_class = DictSerializer
search_fields = ['^name'] search_fields = ['name', 'code']
filterset_fields = ['type__code', 'type', 'is_used']
ordering_fields = ['id'] ordering_fields = ['id']
ordering = 'id' ordering = 'id'
def paginate_queryset(self, queryset): def paginate_queryset(self, queryset):
@ -163,7 +164,7 @@ class PositionViewSet(ModelViewSet):
queryset = Position.objects.all() queryset = Position.objects.all()
serializer_class = PositionSerializer serializer_class = PositionSerializer
pagination_class = None pagination_class = None
search_fields = ['^name'] search_fields = ['name']
ordering_fields = ['id'] ordering_fields = ['id']
ordering = 'id' ordering = 'id'
@ -291,7 +292,7 @@ class UserViewSet(ModelViewSet):
'id': user.id, 'id': user.id,
'username': user.username, 'username': user.username,
'name': user.name, 'name': user.name,
'dept': user.dept, 'dept': user.dept.pk,
'roles': user.roles.all().values_list('name', flat=True), 'roles': user.roles.all().values_list('name', flat=True),
# 'avatar': request._request._current_scheme_host + '/media/' + str(user.image), # 'avatar': request._request._current_scheme_host + '/media/' + str(user.image),
'avatar': user.avatar, 'avatar': user.avatar,