清单模板

This commit is contained in:
caoqianming 2021-06-17 17:25:26 +08:00
parent ba8c71e056
commit ad395c2649
4 changed files with 50 additions and 2 deletions

View File

@ -63,6 +63,7 @@
</el-table> </el-table>
</el-card> </el-card>
<el-dialog <el-dialog
v-if="dialogVisible"
:visible.sync="dialogVisible" :visible.sync="dialogVisible"
:title="dialogType === 'edit' ? '编辑资料' : '新增资料'" :title="dialogType === 'edit' ? '编辑资料' : '新增资料'"
> >
@ -94,6 +95,21 @@
placeholder="详情" placeholder="详情"
/> />
</el-form-item> </el-form-item>
<el-form-item label="模板" prop="template">
<el-upload
ref="upload"
:action="upUrl"
:on-preview="handlePreview"
:on-success="handleUpSuccess"
:on-remove="handleRemove"
:headers="upHeaders"
:file-list="fileList"
:limit="1"
accept=".doc,.docx,.xls,.xlsx,.ppt,.pptx"
>
<el-button size="small" type="primary">上传文件</el-button>
</el-upload>
</el-form-item>
<el-form-item label="排序" prop="sort"> <el-form-item label="排序" prop="sort">
<el-input-number <el-input-number
v-model="Content.sortnum" v-model="Content.sortnum"
@ -129,16 +145,22 @@ import Pagination from "@/components/Pagination"; // secondary package based on
import Treeselect from "@riophae/vue-treeselect"; import Treeselect from "@riophae/vue-treeselect";
import "@riophae/vue-treeselect/dist/vue-treeselect.css"; import "@riophae/vue-treeselect/dist/vue-treeselect.css";
import { getDictList, getDictTypeList } from "@/api/dict"; import { getDictList, getDictTypeList } from "@/api/dict";
import { upUrl, upHeaders } from "@/api/file";
const defaultContent = { const defaultContent = {
name: "", name: "",
desc: "", desc: "",
sortnum:1,
type: null, type: null,
can_doself: false, can_doself: false,
template: null
}; };
export default { export default {
components: { Pagination, Treeselect }, components: { Pagination, Treeselect },
data() { data() {
return { return {
upHeaders: upHeaders(),
upUrl: upUrl(),
fileList:[],
Content: defaultContent, Content: defaultContent,
contentList: [], contentList: [],
typeOptions: [], typeOptions: [],
@ -163,6 +185,19 @@ export default {
this.getTypeAll(); this.getTypeAll();
}, },
methods: { methods: {
handlePreview(file) {
if ("url" in file) {
window.open(file.url);
} else {
window.open(file.response.data.path);
}
},
handleUpSuccess(res, file, filelist) {
this.Content.template = res.data.path;
},
handleRemove(file, filelist){
this.Content.template = null;
},
checkPermission, checkPermission,
filterNode(value, data) { filterNode(value, data) {
@ -193,6 +228,7 @@ export default {
this.Content = Object.assign({}, defaultContent); this.Content = Object.assign({}, defaultContent);
this.dialogType = "new"; this.dialogType = "new";
this.dialogVisible = true; this.dialogVisible = true;
this.fileList=[]
this.$nextTick(() => { this.$nextTick(() => {
this.$refs["Form"].clearValidate(); this.$refs["Form"].clearValidate();
}); });
@ -201,6 +237,14 @@ export default {
this.Content = Object.assign({}, scope.row); // copy obj this.Content = Object.assign({}, scope.row); // copy obj
this.dialogType = "edit"; this.dialogType = "edit";
this.dialogVisible = true; this.dialogVisible = true;
if (this.Content.template) {
this.fileList = [
{
name:'清单模板',
url: this.Content.template,
},
];
}
this.$nextTick(() => { this.$nextTick(() => {
this.$refs["Form"].clearValidate(); this.$refs["Form"].clearValidate();
}); });

View File

@ -15,6 +15,9 @@
<el-form-item label="所属任务" v-if="record.task_"> <el-form-item label="所属任务" v-if="record.task_">
{{ record.task_.name }}/{{ record.task_.end_date }} {{ record.task_.name }}/{{ record.task_.end_date }}
</el-form-item> </el-form-item>
<el-form-item label="清单模板" v-if="record.content_.template">
<el-link :href="record.content_.template" type="primary">模板下载</el-link>
</el-form-item>
<el-form-item label="报送要求/备注" v-if="record.task_"> <el-form-item label="报送要求/备注" v-if="record.task_">
<span v-if="data.action != 'update'">{{ <span v-if="data.action != 'update'">{{
record.note record.note

View File

@ -25,7 +25,7 @@ class ContentSerializer(serializers.ModelSerializer):
class ContentListSerializer(serializers.ModelSerializer): class ContentListSerializer(serializers.ModelSerializer):
class Meta: class Meta:
model = Content model = Content
fields = ['name', 'desc', 'id'] fields = ['name', 'desc', 'id', 'template']
class TaskCreateUpdateSerializer(serializers.ModelSerializer): class TaskCreateUpdateSerializer(serializers.ModelSerializer):
class Meta: class Meta:
@ -38,6 +38,7 @@ class TaskListSerializer(serializers.ModelSerializer):
fields = ['name', 'end_date', 'note', 'state', 'id'] fields = ['name', 'end_date', 'note', 'state', 'id']
class RecordSerializer(serializers.ModelSerializer): class RecordSerializer(serializers.ModelSerializer):
content_ = ContentListSerializer(source='content', read_only=True)
task_ = TaskListSerializer(source='task', read_only=True) task_ = TaskListSerializer(source='task', read_only=True)
belong_dept_ = OrganizationSimpleSerializer(source='belong_dept', read_only=True) belong_dept_ = OrganizationSimpleSerializer(source='belong_dept', read_only=True)
files_ = FileSimpleSerializer(source='files', many=True, read_only=True) files_ = FileSimpleSerializer(source='files', many=True, read_only=True)

View File

@ -307,7 +307,7 @@ class UserViewSet(PageOrNot, ModelViewSet):
'id': user.id, 'id': user.id,
'username': user.username, 'username': user.username,
'name': user.name, 'name': user.name,
'dept': user.dept.pk, 'dept': user.dept.pk if user.dept else '',
'dept_name':user.dept.name if user.dept else '', 'dept_name':user.dept.name if user.dept else '',
'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),