This commit is contained in:
shilixia 2020-06-19 16:37:52 +08:00
commit 8f74257841
9 changed files with 165 additions and 46 deletions

View File

@ -38,7 +38,7 @@
>刷新重置</el-button> >刷新重置</el-button>
</div> </div>
<div style="margin-top:6px"> <div style="margin-top:6px">
<el-button type="primary" icon="el-icon-plus" @click="handleAdd">新增</el-button> <el-button type="primary" icon="el-icon-plus" @click="handleCreate">新增</el-button>
</div> </div>
<el-table <el-table
v-loading="listLoading" v-loading="listLoading"
@ -68,6 +68,24 @@
</el-table-column> </el-table-column>
<el-table-column align="header-center" label="状态"> <el-table-column align="header-center" label="状态">
<template slot-scope="scope">{{ scope.row.status }}</template> <template slot-scope="scope">{{ scope.row.status }}</template>
</el-table-column>
<el-table-column label="操作">
<template slot-scope="scope">
<el-button
type="primary"
size="small"
icon="el-icon-edit"
:disabled="!checkPermission(['standard_update'])"
@click="handleUpdate(scope)"
/>
<el-button
type="danger"
size="small"
icon="el-icon-delete"
:disabled="!checkPermission(['standard_delete'])"
@click="handleDelete(scope)"
/>
</template>
</el-table-column> </el-table-column>
</el-table> </el-table>
<pagination <pagination
@ -106,29 +124,36 @@
<el-form-item label="发布日期" prop="publish_date"> <el-form-item label="发布日期" prop="publish_date">
<el-date-picker <el-date-picker
v-model="standard.publish_date" v-model="standard.publish_date"
value-format="yyyy-MM-dd"
type="date" type="date"
placeholder="选择日期"> placeholder="选择日期">
</el-date-picker> </el-date-picker>
</el-form-item> </el-form-item>
<el-form-item label="实施日期" prop="implement_date"> <el-form-item label="实施日期" prop="implement_date">
<el-date-picker <el-date-picker
v-model="standard.implement_date" v-model="standard.implement_date"
type="date" type="date"
value-format="yyyy-MM-dd"
placeholder="选择日期"> placeholder="选择日期">
</el-date-picker> </el-date-picker>
</el-form-item> </el-form-item>
</el-form>
<el-form-item label="文件" prop="path"> <el-form-item label="文件" prop="path">
<el-upload <el-upload
v-if="standard.path"
:on-preview="handlePreview"
:on-success="handleSuccess"
:action="upUrl" :action="upUrl"
:headers="upHeaders" :headers="upHeaders"
:show-file-list="false"
:limit="1" :limit="1"
:file-list="fileList"
> >
<el-button size="small" type="primary">点击上传</el-button> <el-button size="small" type="primary" >点击上传</el-button>
</el-upload> </el-upload>
</el-form-item> </el-form-item>
</el-form>
<div style="text-align:right;"> <div style="text-align:right;">
<el-button type="danger" @click="dialogVisible=false">取消</el-button> <el-button type="danger" @click="dialogVisible=false">取消</el-button>
<el-button type="primary" @click="confirm('Form')">确认</el-button> <el-button type="primary" @click="confirm('Form')">确认</el-button>
@ -137,9 +162,10 @@
</div> </div>
</template> </template>
<script> <script>
import { getStandardList } from "@/api/standard" import { getStandardList, createStandard, updateStandard, deleteStandard } from "@/api/standard"
import { upUrl, upHeaders} from "@/api/file" import { upUrl, upHeaders} from "@/api/file"
import Pagination from "@/components/Pagination" import Pagination from "@/components/Pagination"
import checkPermission from '@/utils/permission'
const defaultStandard = { const defaultStandard = {
id:null, id:null,
code:null, code:null,
@ -175,13 +201,15 @@ export default {
publish_date: [{ required: true, message: "请输入发布日期", trigger: "change" }], publish_date: [{ required: true, message: "请输入发布日期", trigger: "change" }],
implement_date: [{ required: true, message: "请输入实施日期", trigger: "change" }], implement_date: [{ required: true, message: "请输入实施日期", trigger: "change" }],
status: [{ required: true, message: "请选择状态", trigger: "change" }] status: [{ required: true, message: "请选择状态", trigger: "change" }]
} },
fileList:[]
}; };
}, },
created() { created() {
this.getList(); this.getList();
}, },
methods: { methods: {
checkPermission,
getList() { getList() {
this.listLoading = true; this.listLoading = true;
getStandardList(this.listQuery).then(response => { getStandardList(this.listQuery).then(response => {
@ -202,14 +230,73 @@ export default {
this.listQuery.page = 1; this.listQuery.page = 1;
this.getList(); this.getList();
}, },
handleAdd() { handleCreate() {
this.standard = Object.assign({}, defaultStandard); this.standard = Object.assign({}, defaultStandard);
this.fileList = []
this.dialogType = "create"; this.dialogType = "create";
this.dialogVisible = true; this.dialogVisible = true;
this.$nextTick(() => { this.$nextTick(() => {
this.$refs["Form"].clearValidate(); this.$refs["Form"].clearValidate();
}); });
}, },
handleUpdate(scope) {
this.standard = Object.assign({}, scope.row) // copy obj
if(this.standard.path){
this.fileList=[{
name:this.standard.code + this.standard.name,
url:this.standard.path
}]
}
this.dialogType = 'update'
this.dialogVisible = true
this.$nextTick(() => {
this.$refs['Form'].clearValidate()
})
},
handlePreview(file) {
if ('url' in file){
window.open(file.url)
}else{
window.open(file.response.data.path)
}
},
handleSuccess(response, file, fileList) {
this.standard.path = response.data.path
},
async confirm(form) {
this.$refs[form].validate(valid => {
if (valid) {
const isEdit = this.dialogType === "edit";
if (isEdit) {
updateUser(this.user.id, this.user).then(res => {
if (res.code >= 200) {
this.getList();
this.dialogVisible = false
this.$notify({
title: "成功",
message: "编辑成功",
type: "success",
duration: 2000
});
}
});
} else {
createStandard(this.standard).then(res => {
this.getList();
this.dialogVisible = false
this.$notify({
title: "成功",
type: "success",
})
}).catch(error=>{})
}
} else {
return false;
}
});
}
} }
}; };
</script> </script>

View File

@ -319,7 +319,6 @@ export default {
const isEdit = this.dgT1 === 'edit' const isEdit = this.dgT1 === 'edit'
if (isEdit) { if (isEdit) {
updateDictType(this.dicttype.id, this.dicttype).then(res => { updateDictType(this.dicttype.id, this.dicttype).then(res => {
if (res.code >= 200) {
this.getDictTypeList() this.getDictTypeList()
this.dgV1 = false this.dgV1 = false
this.$notify({ this.$notify({
@ -328,11 +327,9 @@ export default {
type: 'success', type: 'success',
duration: 2000 duration: 2000
}) })
} }).catch(error=>{})
})
} else { } else {
createDictType(this.dicttype).then(res => { createDictType(this.dicttype).then(res => {
if (res.code >= 200) {
this.getDictTypeList() this.getDictTypeList()
this.dgV1 = false this.dgV1 = false
this.$notify({ this.$notify({
@ -341,8 +338,7 @@ export default {
type: 'success', type: 'success',
duration: 2000 duration: 2000
}) })
} }).catch(error=>{})
})
} }
} else { } else {
return false return false
@ -355,7 +351,6 @@ export default {
const isEdit = this.dgT2 === 'edit' const isEdit = this.dgT2 === 'edit'
if (isEdit) { if (isEdit) {
updateDict(this.dict.id, this.dict).then(res => { updateDict(this.dict.id, this.dict).then(res => {
if (res.code >= 200) {
this.getList() this.getList()
this.dgV2 = false this.dgV2 = false
this.$notify({ this.$notify({
@ -364,11 +359,9 @@ export default {
type: 'success', type: 'success',
duration: 2000 duration: 2000
}) })
} }).catch(error=>{})
})
} else { } else {
createDict(this.dict).then(res => { createDict(this.dict).then(res => {
if (res.code >= 200) {
this.getList() this.getList()
this.dgV2 = false this.dgV2 = false
this.$notify({ this.$notify({
@ -377,8 +370,7 @@ export default {
type: 'success', type: 'success',
duration: 2000 duration: 2000
}) })
} }).catch(error=>{})
})
} }
} else { } else {
return false return false

View File

@ -250,11 +250,7 @@ export default {
methods: { methods: {
checkPermission, checkPermission,
handleAvatarSuccess(res, file) { handleAvatarSuccess(res, file) {
if (res.code >= 200) {
this.user.avatar = res.data.path this.user.avatar = res.data.path
} else {
this.$message.error("头像上传失败!")
}
}, },
beforeAvatarUpload(file) { beforeAvatarUpload(file) {
const isLt2M = file.size / 1024 / 1024 < 2; const isLt2M = file.size / 1024 / 1024 < 2;
@ -344,7 +340,6 @@ export default {
const isEdit = this.dialogType === "edit"; const isEdit = this.dialogType === "edit";
if (isEdit) { if (isEdit) {
updateUser(this.user.id, this.user).then(res => { updateUser(this.user.id, this.user).then(res => {
if (res.code >= 200) {
this.getList(); this.getList();
this.dialogVisible = false; this.dialogVisible = false;
this.$notify({ this.$notify({
@ -353,11 +348,9 @@ export default {
type: "success", type: "success",
duration: 2000 duration: 2000
}); });
}
}); });
} else { } else {
createUser(this.user).then(res => { createUser(this.user).then(res => {
if (res.code >= 200) {
this.getList(); this.getList();
this.dialogVisible = false; this.dialogVisible = false;
this.$notify({ this.$notify({
@ -366,7 +359,6 @@ export default {
type: "success", type: "success",
duration: 2000 duration: 2000
}); });
}
}); });
} }
} else { } else {

View File

@ -0,0 +1,18 @@
# Generated by Django 3.0.7 on 2020-06-16 09:20
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('certset', '0003_auto_20200616_1158'),
]
operations = [
migrations.AddField(
model_name='unittype',
name='description',
field=models.TextField(blank=True, null=True, verbose_name='描述'),
),
]

View File

@ -0,0 +1,18 @@
# Generated by Django 3.0.7 on 2020-06-16 09:20
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('system', '0019_auto_20200612_1448'),
]
operations = [
migrations.AlterField(
model_name='file',
name='name',
field=models.CharField(blank=True, max_length=300, null=True, verbose_name='名称'),
),
]

View File

@ -0,0 +1,18 @@
# Generated by Django 3.0.7 on 2020-06-16 09:22
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('system', '0020_auto_20200616_1720'),
]
operations = [
migrations.AlterField(
model_name='file',
name='mime',
field=models.CharField(blank=True, max_length=300, null=True, verbose_name='文件格式'),
),
]

View File

@ -2,30 +2,24 @@ from rest_framework import status
from rest_framework.response import Response from rest_framework.response import Response
from rest_framework.settings import api_settings from rest_framework.settings import api_settings
class CreateModelAMixin: class CreateUpdateModelAMixin:
""" """
业务用基本表A用 业务用基本表A用
""" """
def perform_create(self, serializer): def perform_create(self, serializer):
serializer.save(create_by = self.request.user) serializer.save(create_by = self.request.user)
class UpdateModelAMixin:
"""
业务用基本表A用
"""
def perform_update(self, serializer): def perform_update(self, serializer):
serializer.save(update_by = self.request.user) serializer.save(update_by = self.request.user)
class CreateModelBMixin: class CreateUpdateModelBMixin:
""" """
业务用基本表B用 业务用基本表B用
""" """
def perform_create(self, serializer): def perform_create(self, serializer):
serializer.save(create_by = self.request.user, belong_dept=self.request.user.dept) serializer.save(create_by = self.request.user, belong_dept=self.request.user.dept)
class UpdateModelBMixin:
"""
业务用基本表B用
"""
def perform_update(self, serializer): def perform_update(self, serializer):
serializer.save(update_by = self.request.user) serializer.save(update_by = self.request.user)

View File

@ -198,7 +198,7 @@ class File(CommonAModel):
""" """
文件存储表,业务表根据具体情况选择是否外键关联 文件存储表,业务表根据具体情况选择是否外键关联
""" """
name = models.CharField('名称', max_length=30, null=True, blank=True) name = models.CharField('名称', max_length=300, null=True, blank=True)
size = models.IntegerField('文件大小', default=1, null=True, blank=True) size = models.IntegerField('文件大小', default=1, null=True, blank=True)
file = models.FileField('文件', upload_to='%Y/%m/%d/') file = models.FileField('文件', upload_to='%Y/%m/%d/')
type_choices = ( type_choices = (
@ -208,7 +208,7 @@ class File(CommonAModel):
('图片', '图片'), ('图片', '图片'),
('其它', '其它') ('其它', '其它')
) )
mime = models.CharField('文件格式', max_length=50, null=True, blank=True) mime = models.CharField('文件格式', max_length=300, null=True, blank=True)
type = models.CharField('文件类型', max_length=50, choices=type_choices, default='文档') type = models.CharField('文件类型', max_length=50, choices=type_choices, default='文档')
path = models.CharField('地址', max_length=1000, null=True, blank=True) path = models.CharField('地址', max_length=1000, null=True, blank=True)

View File

@ -23,7 +23,7 @@ from rest_framework_simplejwt.tokens import RefreshToken
from utils.queryset import get_child_queryset2 from utils.queryset import get_child_queryset2
from .filters import UserFilter from .filters import UserFilter
from .mixins import CreateModelAMixin from .mixins import CreateUpdateModelAMixin
from .models import (Dict, DictType, File, Organization, Permission, Position, from .models import (Dict, DictType, File, Organization, Permission, Position,
Role, User) Role, User)
from .permission import RbacPermission, get_permission_list from .permission import RbacPermission, get_permission_list
@ -233,7 +233,7 @@ class UserViewSet(ModelViewSet):
} }
return Response(data) return Response(data)
class FileViewSet(ModelViewSet): class FileViewSet(CreateUpdateModelAMixin, ModelViewSet):
""" """
文件增删改查 文件增删改查
""" """