Merge remote-tracking branch 'origin/zhoulingpo' into zhoulingpo
This commit is contained in:
@@ -0,0 +1,62 @@
|
|||||||
|
import { instance as request } from '@/utils/request'
|
||||||
|
|
||||||
|
export default {
|
||||||
|
//外层
|
||||||
|
addDic (data) {
|
||||||
|
return request({
|
||||||
|
url: '/api/sys/dict/add',
|
||||||
|
method: 'post',
|
||||||
|
data
|
||||||
|
})
|
||||||
|
},
|
||||||
|
editDic (data) {
|
||||||
|
return request({
|
||||||
|
url: '/api/sys/dict/edit',
|
||||||
|
method: 'put',
|
||||||
|
data
|
||||||
|
})
|
||||||
|
},
|
||||||
|
getDic (data) {
|
||||||
|
return request({
|
||||||
|
url: '/api/sys/dict/page',
|
||||||
|
method: 'get',
|
||||||
|
params:data
|
||||||
|
})
|
||||||
|
},
|
||||||
|
delDic (data) {
|
||||||
|
return request({
|
||||||
|
url: '/api/sys/dict/delete',
|
||||||
|
method: 'delete',
|
||||||
|
params:data
|
||||||
|
})
|
||||||
|
},
|
||||||
|
//内层
|
||||||
|
addItemDic (data) {
|
||||||
|
return request({
|
||||||
|
url: '/api/sys/dictItem/add',
|
||||||
|
method: 'post',
|
||||||
|
data
|
||||||
|
})
|
||||||
|
},
|
||||||
|
editItemDic (data) {
|
||||||
|
return request({
|
||||||
|
url: '/api/sys/dictItem/edit',
|
||||||
|
method: 'put',
|
||||||
|
data
|
||||||
|
})
|
||||||
|
},
|
||||||
|
getItemDic (data) {
|
||||||
|
return request({
|
||||||
|
url: '/api/sys/dictItem/page',
|
||||||
|
method: 'get',
|
||||||
|
params:data
|
||||||
|
})
|
||||||
|
},
|
||||||
|
delItemDic (data) {
|
||||||
|
return request({
|
||||||
|
url: '/api/sys/dictItem/delete',
|
||||||
|
method: 'delete',
|
||||||
|
params:data
|
||||||
|
})
|
||||||
|
},
|
||||||
|
}
|
||||||
@@ -24,4 +24,5 @@ export default {
|
|||||||
params:data
|
params:data
|
||||||
})
|
})
|
||||||
},
|
},
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -12,6 +12,10 @@
|
|||||||
label: '权限申请流程',
|
label: '权限申请流程',
|
||||||
value: '1'
|
value: '1'
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
label: '报告上传流程',
|
||||||
|
value: '2'
|
||||||
|
},
|
||||||
],
|
],
|
||||||
formDisableFlag: false,
|
formDisableFlag: false,
|
||||||
nowOrder: '',
|
nowOrder: '',
|
||||||
|
|||||||
@@ -0,0 +1,190 @@
|
|||||||
|
<template>
|
||||||
|
<div class="el-transfer ">
|
||||||
|
<transfer-panel v-bind="$props" ref="leftPanel" :data="sourceData" :title="titles[0] || t('el.transfer.titles.0')"
|
||||||
|
:default-checked="leftDefaultChecked" :placeholder="filterPlaceholder || t('el.transfer.filterPlaceholder')"
|
||||||
|
@checked-change="onSourceCheckedChange"
|
||||||
|
@scroll.a.native="load"
|
||||||
|
>
|
||||||
|
<slot name="left-footer">
|
||||||
|
<!-- <el-pagination @current-change="handleLogCurrentChange"-->
|
||||||
|
<!-- :current-page="q.pageNo" :page-size="q.pageSize"-->
|
||||||
|
<!-- layout="total, prev, pager, next" :total="total" />-->
|
||||||
|
</slot>
|
||||||
|
</transfer-panel>
|
||||||
|
<div class="el-transfer__buttons">
|
||||||
|
<div>
|
||||||
|
<el-button type="primary" :class="['el-transfer__button', hasButtonTexts ? 'is-with-texts' : '']"
|
||||||
|
@click.native="addToLeft" :disabled="listTwoChecked.length === 0 && rightChecked.length === 0">
|
||||||
|
<i class="el-icon-arrow-left"></i>
|
||||||
|
<span v-if="buttonTexts[0] !== undefined">{{ buttonTexts[0] }}</span>
|
||||||
|
</el-button>
|
||||||
|
</div>
|
||||||
|
<div>
|
||||||
|
<el-button type="primary" :class="['el-transfer__button', hasButtonTexts ? 'is-with-texts' : '']"
|
||||||
|
@click.native="addToRight" :disabled="leftChecked.length === 0">
|
||||||
|
<span v-if="buttonTexts[1] !== undefined">{{ buttonTexts[1] }}</span>
|
||||||
|
<i class="el-icon-arrow-right"></i>
|
||||||
|
</el-button>
|
||||||
|
</div>
|
||||||
|
<div>
|
||||||
|
<!-- 新增的button -->
|
||||||
|
<el-button type="primary" :class="['el-transfer__button', hasButtonTexts ? 'is-with-texts' : '']"
|
||||||
|
@click.native="addToListTwo" :disabled="leftChecked.length === 0">
|
||||||
|
<span v-if="buttonTexts[1] !== undefined">{{ buttonTexts[2] }}</span>
|
||||||
|
<i class="el-icon-arrow-right"></i>
|
||||||
|
</el-button>
|
||||||
|
</div>
|
||||||
|
<slot name="buttons"></slot>
|
||||||
|
</div>
|
||||||
|
<transfer-panel v-bind="$props" ref="rightPanel" :data="targetData" :title="titles[1] || t('el.transfer.titles.1')"
|
||||||
|
:default-checked="rightDefaultChecked" :placeholder="filterPlaceholder || t('el.transfer.filterPlaceholder')"
|
||||||
|
@checked-change="onTargetCheckedChange">
|
||||||
|
<slot name="right-footer">
|
||||||
|
|
||||||
|
</slot>
|
||||||
|
</transfer-panel>
|
||||||
|
<!-- 新增的list -->
|
||||||
|
<transfer-panel class="m-l-20 list2" v-bind="$props" ref="rightPanel" :data="listTwoData"
|
||||||
|
:title="titles[2] || t('el.transfer.titles.1')" :default-checked="listTwoDefaultChecked"
|
||||||
|
:placeholder="filterPlaceholder || t('el.transfer.filterPlaceholder')"
|
||||||
|
@checked-change="onlistTwoCheckedChange">
|
||||||
|
<slot name="right-footer"></slot>
|
||||||
|
</transfer-panel>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
import { Transfer } from 'element-ui'
|
||||||
|
|
||||||
|
export default {
|
||||||
|
extends: Transfer,
|
||||||
|
props: {
|
||||||
|
loadingMore:{
|
||||||
|
type: Boolean,
|
||||||
|
default: false
|
||||||
|
},
|
||||||
|
listTwo: {
|
||||||
|
type: Array,
|
||||||
|
default: () => []
|
||||||
|
},
|
||||||
|
listTwoDefaultChecked: {
|
||||||
|
type: Array,
|
||||||
|
default: () => []
|
||||||
|
},
|
||||||
|
},
|
||||||
|
data() {
|
||||||
|
return {
|
||||||
|
total:0,
|
||||||
|
// 列表2选中的数据
|
||||||
|
listTwoChecked: []
|
||||||
|
};
|
||||||
|
},
|
||||||
|
computed: {
|
||||||
|
listTwoData() {
|
||||||
|
if (this.targetOrder === 'original') {
|
||||||
|
return this.data.filter(item => this.listTwo.indexOf(item[this.props.key]) > -1);
|
||||||
|
} else {
|
||||||
|
return this.listTwo.reduce((arr, cur) => {
|
||||||
|
const val = this.dataObj[cur];
|
||||||
|
if (val) {
|
||||||
|
arr.push(val);
|
||||||
|
}
|
||||||
|
return arr;
|
||||||
|
}, []);
|
||||||
|
}
|
||||||
|
},
|
||||||
|
sourceData() {
|
||||||
|
return this.data.filter(item => this.value.indexOf(item[this.props.key]) === -1
|
||||||
|
&& this.listTwo.indexOf(item[this.props.key]) === -1);
|
||||||
|
},
|
||||||
|
},
|
||||||
|
methods: {
|
||||||
|
|
||||||
|
//触发父组件下一页
|
||||||
|
load(){
|
||||||
|
// if(!this.loadingMore){
|
||||||
|
// this.loadingMore=true
|
||||||
|
// this.$emit("loadMore")
|
||||||
|
// }
|
||||||
|
alert("hhhh")
|
||||||
|
},
|
||||||
|
addToListTwo() {
|
||||||
|
debugger
|
||||||
|
let currentValue = this.listTwo.slice();
|
||||||
|
const itemsToBeMoved = [];
|
||||||
|
const key = this.props.key;
|
||||||
|
this.data.forEach(item => {
|
||||||
|
const itemKey = item[key];
|
||||||
|
if (
|
||||||
|
this.leftChecked.indexOf(itemKey) > -1 &&
|
||||||
|
this.listTwo.indexOf(itemKey) === -1
|
||||||
|
) {
|
||||||
|
itemsToBeMoved.push(itemKey);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
currentValue = this.targetOrder === 'unshift'
|
||||||
|
? itemsToBeMoved.concat(currentValue)
|
||||||
|
: currentValue.concat(itemsToBeMoved);
|
||||||
|
|
||||||
|
// 更新列表2
|
||||||
|
this.$emit('update:listTwo', currentValue);
|
||||||
|
console.log(this.listTwo,"listTwo")
|
||||||
|
},
|
||||||
|
// 列表2设备选择
|
||||||
|
onlistTwoCheckedChange(val, movedKeys) {
|
||||||
|
this.listTwoChecked = val;
|
||||||
|
if (movedKeys === undefined) return;
|
||||||
|
this.$emit('right-check-change', val, movedKeys);
|
||||||
|
},
|
||||||
|
addToLeft() {
|
||||||
|
// 列表1
|
||||||
|
let currentValue = this.value.slice();
|
||||||
|
// 列表2
|
||||||
|
let listTwo = this.listTwo.slice();
|
||||||
|
this.rightChecked.forEach(item => {
|
||||||
|
const index = currentValue.indexOf(item);
|
||||||
|
if (index > -1) {
|
||||||
|
currentValue.splice(index, 1);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
this.listTwoChecked.forEach(item => {
|
||||||
|
const index = listTwo.indexOf(item);
|
||||||
|
if (index > -1) {
|
||||||
|
listTwo.splice(index, 1);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
// 更新列表1
|
||||||
|
this.$emit('input', currentValue);
|
||||||
|
// 更新列表2
|
||||||
|
this.$emit('update:listTwo', listTwo);
|
||||||
|
this.$emit('change', currentValue, 'left', this.rightChecked);
|
||||||
|
},
|
||||||
|
},
|
||||||
|
watch: {
|
||||||
|
listTwo(val) {
|
||||||
|
this.dispatch('ElFormItem', 'el.form.change', val);
|
||||||
|
},
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style lang="scss" scoped>
|
||||||
|
::v-deep .el-transfer{
|
||||||
|
position: relative;
|
||||||
|
width: 100%;
|
||||||
|
height: 500px !important;
|
||||||
|
|
||||||
|
}
|
||||||
|
::v-deep .el-transfer-panel{
|
||||||
|
height: 400px;
|
||||||
|
width: 220px;
|
||||||
|
}
|
||||||
|
::v-deep .el-transfer-panel__list.is-filterable{
|
||||||
|
height: 255px;
|
||||||
|
}
|
||||||
|
.list2{
|
||||||
|
margin-left: 10px;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
@@ -66,6 +66,21 @@ const routes = [
|
|||||||
meta: {
|
meta: {
|
||||||
crumb: ['暂无权限']
|
crumb: ['暂无权限']
|
||||||
}
|
}
|
||||||
|
},{
|
||||||
|
path: 'dictionary',
|
||||||
|
name: 'dictionary',
|
||||||
|
component: () => import('../../views/System/dataDictionary.vue'),
|
||||||
|
meta: {
|
||||||
|
crumb: ['字典管理']
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
path: 'dicdeatil',
|
||||||
|
name: 'dicdeatil',
|
||||||
|
component: () => import('../../views/System/dictionaryDetail.vue'),
|
||||||
|
meta: {
|
||||||
|
crumb: ['字典详情']
|
||||||
|
}
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -6,3 +6,11 @@ export const PERMISSION = new Esenum([
|
|||||||
{ label: '预览+下载', value: "2" }
|
{ label: '预览+下载', value: "2" }
|
||||||
])
|
])
|
||||||
|
|
||||||
|
// 基础设置的枚举
|
||||||
|
// export const basMessage = new Esenum([
|
||||||
|
// {name:"水印前缀" ,value: "WATERMARK_PREFIX"}
|
||||||
|
// ])
|
||||||
|
export const basMessage = new Esenum({
|
||||||
|
mark: {name: "水印前缀", value: "WATERMARK_PREFIX",index:0}
|
||||||
|
})
|
||||||
|
|
||||||
|
|||||||
+3
-2
@@ -38,11 +38,12 @@
|
|||||||
|
|
||||||
<script>
|
<script>
|
||||||
import { Base64 } from 'js-base64'
|
import { Base64 } from 'js-base64'
|
||||||
|
import {basMessage} from '@/utils/Enum/enum'
|
||||||
export default {
|
export default {
|
||||||
name: 'Login',
|
name: 'Login',
|
||||||
data () {
|
data () {
|
||||||
return {
|
return {
|
||||||
|
basMessage,
|
||||||
form: {
|
form: {
|
||||||
username: '',
|
username: '',
|
||||||
password: '',
|
password: '',
|
||||||
@@ -134,7 +135,7 @@ export default {
|
|||||||
// 调用获取水印的前缀接口 获取前缀
|
// 调用获取水印的前缀接口 获取前缀
|
||||||
getMarket () {
|
getMarket () {
|
||||||
return new Promise((resolve,reject)=>{
|
return new Promise((resolve,reject)=>{
|
||||||
this.$api.setting.getOneSetting("水印前缀").then(res=>{
|
this.$api.setting.getOneSetting( this.basMessage['mark'].value).then(res=>{
|
||||||
if(res.data){
|
if(res.data){
|
||||||
resolve(res.data.configValue)
|
resolve(res.data.configValue)
|
||||||
|
|
||||||
|
|||||||
@@ -0,0 +1,454 @@
|
|||||||
|
<template>
|
||||||
|
<div class="content-height system-user">
|
||||||
|
<div class="title">
|
||||||
|
<span>字典管理</span>
|
||||||
|
</div>
|
||||||
|
<div class="search">
|
||||||
|
<el-row>
|
||||||
|
<el-col :span="20">
|
||||||
|
<div class="search-box-left">
|
||||||
|
<label>数据字典编码:</label>
|
||||||
|
<el-input v-model="q.dicCode" placeholder="请输入数据字典编码"></el-input>
|
||||||
|
<label>数据字典名称:</label>
|
||||||
|
<el-input v-model="q.dicName" placeholder="请输入数据字典名称"></el-input>
|
||||||
|
</div>
|
||||||
|
</el-col>
|
||||||
|
<el-col :span="4" align="right">
|
||||||
|
<div class="search-box-right">
|
||||||
|
<el-button type="primary" @click="search">查询</el-button>
|
||||||
|
<el-button @click="reset">重置</el-button>
|
||||||
|
</div>
|
||||||
|
</el-col>
|
||||||
|
<el-col :span="24">
|
||||||
|
<div class="operate-box">
|
||||||
|
<el-button @click="add">新增</el-button>
|
||||||
|
<el-button @click="getSelectUser">批量删除</el-button>
|
||||||
|
</div>
|
||||||
|
</el-col>
|
||||||
|
</el-row>
|
||||||
|
</div>
|
||||||
|
<div class="table">
|
||||||
|
<vxe-table ref="userTable" :data="tableData" :empty-render="{name: 'NotData'}" align="center" border stripe
|
||||||
|
v-table-min-height="'calc(100vh - 320px)'">
|
||||||
|
<vxe-column show-overflow type="checkbox" width="77"></vxe-column>
|
||||||
|
<vxe-column show-overflow show-header-overflow type="seq" title="序号" width="77">
|
||||||
|
<template #default="{ row, rowIndex }">
|
||||||
|
{{ rowIndex + (q.pageNo - 1) * q.pageSize + 1 }}
|
||||||
|
</template>
|
||||||
|
</vxe-column>
|
||||||
|
<vxe-column show-overflow show-header-overflow field="dicCode" title="数据字典编码"></vxe-column>
|
||||||
|
<vxe-column show-overflow show-header-overflow field="dicName" title="数据字典名称"></vxe-column>
|
||||||
|
<vxe-column show-overflow show-header-overflow field="description" title="描述"></vxe-column>
|
||||||
|
<vxe-column show-overflow show-header-overflow title="操作" width="200" fixed="right">
|
||||||
|
<template #default="{ row }">
|
||||||
|
<el-button type="text" @click="openRowData('view', row)">查看</el-button>
|
||||||
|
<el-button type="text" @click="openRowData('modify', row)">编辑</el-button>
|
||||||
|
<el-button type="text" class="del-btn" @click="deleteRow(row)">删除</el-button>
|
||||||
|
</template>
|
||||||
|
</vxe-column>
|
||||||
|
</vxe-table>
|
||||||
|
<el-pagination
|
||||||
|
@size-change="handleSizeChange"
|
||||||
|
@current-change="handleCurrentChange"
|
||||||
|
:current-page="q.pageNo"
|
||||||
|
:page-sizes="[5, 10, 20]"
|
||||||
|
:page-size="q.pageSize"
|
||||||
|
layout="total, sizes, prev, pager, next, jumper"
|
||||||
|
:total="total"/>
|
||||||
|
</div>
|
||||||
|
<!-- 新增/编辑/查看 用户 -->
|
||||||
|
<el-dialog :title="dialogTitle" :visible.sync="dialogUser" width="750px" :close-on-click-modal="false"
|
||||||
|
:close-on-press-escape="false" modal-append-to-body append-to-body>
|
||||||
|
<div class="user-form">
|
||||||
|
<el-form ref="dicRef" :rules="formRule" :model="form" label-width="186px" :disabled="mode === 'view'">
|
||||||
|
<el-form-item label="数据字典编码:" prop="dicCode">
|
||||||
|
<el-input v-model="form.dicCode" :disabled="mode === 'view' || mode === 'modify' " maxlength="20" show-word-limit placeholder="请输入数据字典编码"></el-input>
|
||||||
|
</el-form-item>
|
||||||
|
<!--<el-form-item label="密码:" :required="mode === 'add'" v-if="mode !== 'view'">-->
|
||||||
|
<!--<el-input v-model="form.password" maxlength="20" type="password" placeholder="请输入密码"></el-input>-->
|
||||||
|
<!--</el-form-item>-->
|
||||||
|
<!--<el-form-item label="确认密码:" :required="mode === 'add'" v-if="mode !== 'view'">-->
|
||||||
|
<!--<el-input v-model="repassword" maxlength="20" type="password" placeholder="请确认密码"></el-input>-->
|
||||||
|
<!--</el-form-item>-->
|
||||||
|
<el-form-item label="数据字典名称:" prop="dicName">
|
||||||
|
<el-input v-model="form.dicName" placeholder="请输入数据字典名称" maxlength="20" show-word-limit></el-input>
|
||||||
|
</el-form-item>
|
||||||
|
|
||||||
|
<el-form-item label="描述:" >
|
||||||
|
<el-input type="textarea" v-model="form.description" maxlength="500" show-word-limit placeholder="请输入描述"></el-input>
|
||||||
|
</el-form-item>
|
||||||
|
</el-form>
|
||||||
|
<div class="done">
|
||||||
|
<el-button v-if="mode !== 'view'" type="primary" @click="sysUserAddUser">确定</el-button>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</el-dialog>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
import { Base64 } from 'js-base64'
|
||||||
|
export default {
|
||||||
|
name: 'User',
|
||||||
|
data () {
|
||||||
|
return {
|
||||||
|
q: {
|
||||||
|
dicCode: '', // 用户名
|
||||||
|
dicName: '', // 角色名称
|
||||||
|
pageNo: 1,
|
||||||
|
pageSize: 10
|
||||||
|
},
|
||||||
|
total: 0,
|
||||||
|
tableData: [],
|
||||||
|
mode: '',
|
||||||
|
dialogUser: false,
|
||||||
|
form: {
|
||||||
|
dicCode:'',
|
||||||
|
dicName:'',
|
||||||
|
description:''
|
||||||
|
},
|
||||||
|
formRule:{
|
||||||
|
dicCode:[
|
||||||
|
{
|
||||||
|
required:true,
|
||||||
|
message:'数据字典编码不能为空',
|
||||||
|
trigger:'change'
|
||||||
|
}
|
||||||
|
],
|
||||||
|
dicName:[
|
||||||
|
{
|
||||||
|
required:true,
|
||||||
|
message:'数据字典名称不能为空',
|
||||||
|
trigger:'change'
|
||||||
|
}
|
||||||
|
],
|
||||||
|
|
||||||
|
},
|
||||||
|
repassword: '',
|
||||||
|
roleList: []
|
||||||
|
}
|
||||||
|
},
|
||||||
|
methods: {
|
||||||
|
search () {
|
||||||
|
this.q.pageNo = 1
|
||||||
|
this.sysUserList()
|
||||||
|
},
|
||||||
|
// 获取所有字典
|
||||||
|
sysUserList () {
|
||||||
|
this.$api.dictionary.getDic(this.q).then((res)=>{
|
||||||
|
this.tableData = res.data.records
|
||||||
|
this.total=res.data.total
|
||||||
|
})
|
||||||
|
},
|
||||||
|
// 重置
|
||||||
|
reset () {
|
||||||
|
this.q = {
|
||||||
|
account: '', // 用户名
|
||||||
|
roleName: '', // 角色名称
|
||||||
|
pageNo: 1,
|
||||||
|
pageSize: 10
|
||||||
|
}
|
||||||
|
this.total = 0
|
||||||
|
this.tableData = []
|
||||||
|
this.sysUserList()
|
||||||
|
},
|
||||||
|
// 单页数据量
|
||||||
|
handleSizeChange (val) {
|
||||||
|
this.q.pageSize = val
|
||||||
|
this.q.pageNo = 1
|
||||||
|
this.sysUserList()
|
||||||
|
},
|
||||||
|
// 第几页
|
||||||
|
handleCurrentChange (val) {
|
||||||
|
this.q.pageNo = val
|
||||||
|
this.sysUserList()
|
||||||
|
},
|
||||||
|
// 新增
|
||||||
|
add () {
|
||||||
|
|
||||||
|
this.mode = 'add'
|
||||||
|
this.form = {
|
||||||
|
dicCode:'',
|
||||||
|
dicName:'',
|
||||||
|
description:''
|
||||||
|
}
|
||||||
|
this.repassword = ''
|
||||||
|
this.dialogUser = true
|
||||||
|
this.$nextTick(()=>{
|
||||||
|
this.$refs.dicRef.clearValidate()
|
||||||
|
|
||||||
|
})
|
||||||
|
},
|
||||||
|
// // 启用/禁用
|
||||||
|
// sysUserIsUse (val, row) {
|
||||||
|
// this.$confirm(val === '0' ? '此操作将禁用所选用户, 是否继续?' : '此操作将启用所选用户, 是否继续?', '提示', {
|
||||||
|
// confirmButtonText: '确定',
|
||||||
|
// cancelButtonText: '取消',
|
||||||
|
// type: 'warning'
|
||||||
|
// }).then(() => {
|
||||||
|
// this.$api.user.sysUserIsUse({ USID: row.USID, type: val }).then(_ => {
|
||||||
|
// this.$message.success('操作成功')
|
||||||
|
// this.sysUserList()
|
||||||
|
// })
|
||||||
|
// }).catch(() => {
|
||||||
|
// row.ISUSE = val === '1' ? '0' : '1'
|
||||||
|
// })
|
||||||
|
// },
|
||||||
|
// 删除
|
||||||
|
deleteRow (row) {
|
||||||
|
this.deleteUser(row.id)
|
||||||
|
},
|
||||||
|
// 新增用户
|
||||||
|
sysUserAddUser () {
|
||||||
|
this.$refs.dicRef.validate(v=>{
|
||||||
|
if(v){
|
||||||
|
if(this.mode=='add'){
|
||||||
|
this.$api.dictionary.addDic(this.form).then((res)=>{
|
||||||
|
this.$message.success("新增成功")
|
||||||
|
this.sysUserList()
|
||||||
|
})
|
||||||
|
}else{
|
||||||
|
this.$api.dictionary.editDic(this.form).then((res)=>{
|
||||||
|
this.$message.success("编辑成功")
|
||||||
|
this.sysUserList()
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
this.dialogUser = false
|
||||||
|
}else{
|
||||||
|
this.$message.warning("请检查表单")
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
|
},
|
||||||
|
// 编辑查看用户
|
||||||
|
openRowData (mode, row) {
|
||||||
|
this.mode = mode
|
||||||
|
if(mode=='view'){
|
||||||
|
this.$router.push({
|
||||||
|
path:'/system/dicdeatil',
|
||||||
|
query:{
|
||||||
|
id:this.$route.query.id,
|
||||||
|
pId:row.id,
|
||||||
|
pName: row.dicName
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}else if(mode=='add'){
|
||||||
|
|
||||||
|
this.form = {
|
||||||
|
description:'',
|
||||||
|
dicName:'',
|
||||||
|
dicCode:''
|
||||||
|
}
|
||||||
|
this.dialogUser = true
|
||||||
|
}else{
|
||||||
|
this.form = JSON.parse(JSON.stringify(row))
|
||||||
|
this.dialogUser = true
|
||||||
|
}
|
||||||
|
|
||||||
|
},
|
||||||
|
|
||||||
|
// 多选用户
|
||||||
|
getSelectUser () {
|
||||||
|
const users = this.$refs.userTable.getCheckboxRecords()
|
||||||
|
if (!users.length) {
|
||||||
|
return this.$message.warning('请选择数据后在进行操作')
|
||||||
|
}
|
||||||
|
const ids = users.map(item => item.id).join(',')
|
||||||
|
this.deleteUser(ids)
|
||||||
|
},
|
||||||
|
// 删除用户
|
||||||
|
deleteUser (ids) {
|
||||||
|
this.$confirm('此操作将删除所选, 是否继续?', '提示', {
|
||||||
|
confirmButtonText: '确定',
|
||||||
|
cancelButtonText: '取消',
|
||||||
|
type: 'warning'
|
||||||
|
}).then(() => {
|
||||||
|
this.$api.dictionary.delDic({ids:ids} ).then(_ => {
|
||||||
|
this.$message.success('操作成功')
|
||||||
|
this.sysUserList()
|
||||||
|
})
|
||||||
|
})
|
||||||
|
},
|
||||||
|
|
||||||
|
},
|
||||||
|
computed: {
|
||||||
|
dialogTitle () {
|
||||||
|
switch (this.mode) {
|
||||||
|
case 'add':
|
||||||
|
return '新增'
|
||||||
|
case 'modify':
|
||||||
|
return '编辑'
|
||||||
|
case 'view':
|
||||||
|
return '查看'
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
created () {
|
||||||
|
this.sysUserList()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style lang="scss" scoped>
|
||||||
|
.system-user {
|
||||||
|
.title {
|
||||||
|
border-bottom: 1px solid #EBEEF5;
|
||||||
|
height: 42px;
|
||||||
|
line-height: 42px;
|
||||||
|
margin: 0 18px 0 22px;
|
||||||
|
|
||||||
|
span {
|
||||||
|
font-size: 16px;
|
||||||
|
font-weight: 600;
|
||||||
|
color: #262626;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.search {
|
||||||
|
.search-box-left {
|
||||||
|
padding-top: 20px;
|
||||||
|
display: flex;
|
||||||
|
justify-content: flex-start;
|
||||||
|
align-items: center;
|
||||||
|
|
||||||
|
label {
|
||||||
|
font-size: 14px;
|
||||||
|
font-weight: 400;
|
||||||
|
color: #595959;
|
||||||
|
margin-right: 5px;
|
||||||
|
padding-left: 22px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.year {
|
||||||
|
::v-deep .el-input__inner {
|
||||||
|
padding: 0 15px !important;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
::v-deep .el-input {
|
||||||
|
width: 167px;
|
||||||
|
margin-right: 5px;
|
||||||
|
}
|
||||||
|
|
||||||
|
@media screen and (max-width: 1366px) {
|
||||||
|
::v-deep .el-input {
|
||||||
|
width: 135px;
|
||||||
|
margin-right: 5px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
::v-deep .el-button {
|
||||||
|
float: right;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.search-box-right {
|
||||||
|
padding-top: 20px;
|
||||||
|
display: flex;
|
||||||
|
justify-content: flex-end;
|
||||||
|
align-items: center;
|
||||||
|
padding-right: 14px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.operate-box {
|
||||||
|
padding-left: 13px;
|
||||||
|
padding-bottom: 11px;
|
||||||
|
padding-top: 18px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.table {
|
||||||
|
margin: 0 14px 0 13px;
|
||||||
|
|
||||||
|
::v-deep .el-pagination {
|
||||||
|
margin-top: 13px;
|
||||||
|
padding-left: 20px;
|
||||||
|
padding-bottom: 10px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
.user-form {
|
||||||
|
padding-top: 26px;
|
||||||
|
|
||||||
|
::v-deep .el-form {
|
||||||
|
padding-right: 79px;
|
||||||
|
|
||||||
|
.el-form-item {
|
||||||
|
//margin-bottom: 10px;
|
||||||
|
|
||||||
|
.el-form-item__label {
|
||||||
|
height: 36px;
|
||||||
|
line-height: 36px;
|
||||||
|
font-size: 14px;
|
||||||
|
font-weight: 500;
|
||||||
|
color: #262626;
|
||||||
|
}
|
||||||
|
|
||||||
|
.el-input__inner {
|
||||||
|
min-height: 36px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.el-input__inner,
|
||||||
|
.el-textarea__inner {
|
||||||
|
font-size: 14px;
|
||||||
|
font-weight: 400;
|
||||||
|
color: #434343;
|
||||||
|
}
|
||||||
|
|
||||||
|
.el-select {
|
||||||
|
width: 100%;
|
||||||
|
}
|
||||||
|
|
||||||
|
.el-date-editor {
|
||||||
|
width: 100%;
|
||||||
|
|
||||||
|
.el-input__inner {
|
||||||
|
padding-left: 15px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.el-input__suffix {
|
||||||
|
font-size: 16px;
|
||||||
|
margin-top: 2px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.icon-auth {
|
||||||
|
.el-icon-arrow-up {
|
||||||
|
margin-top: 2px;
|
||||||
|
transform: rotateZ(0) !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
.el-icon-arrow-up:before {
|
||||||
|
content: '';
|
||||||
|
background: url("../../assets/imgs/icon-user.png") no-repeat center center;
|
||||||
|
display: inline-block;
|
||||||
|
width: 12px;
|
||||||
|
height: 14px;
|
||||||
|
background-size: 100% 100%;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.el-button {
|
||||||
|
width: 80px;
|
||||||
|
height: 36px;
|
||||||
|
padding: 0;
|
||||||
|
text-align: center;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.done {
|
||||||
|
text-align: center;
|
||||||
|
padding: 40px 0;
|
||||||
|
|
||||||
|
::v-deep .el-button {
|
||||||
|
width: 80px;
|
||||||
|
height: 36px;
|
||||||
|
padding: 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</style>
|
||||||
@@ -0,0 +1,447 @@
|
|||||||
|
<!-- 配置管理 - 标准法规属性管理详情页 -->
|
||||||
|
<template>
|
||||||
|
<div class="content-height">
|
||||||
|
<div class="laws-details-header">
|
||||||
|
<span class="back" title="返回" @click="back"><i class="el-icon-back" ></i>
|
||||||
|
</span>
|
||||||
|
<div class="title">
|
||||||
|
{{dicName}}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="search">
|
||||||
|
<el-row>
|
||||||
|
<el-col :span="20">
|
||||||
|
<div class="search-box-left">
|
||||||
|
<label>选项:</label>
|
||||||
|
<el-input v-model="q.itemName" placeholder="请输入选项"></el-input>
|
||||||
|
</div>
|
||||||
|
</el-col>
|
||||||
|
<el-col :span="4" align="right">
|
||||||
|
<div class="search-box-right">
|
||||||
|
<el-button type="primary" @click="search">查询</el-button>
|
||||||
|
<el-button @click="reset">重置</el-button>
|
||||||
|
</div>
|
||||||
|
</el-col>
|
||||||
|
<el-col :span="24">
|
||||||
|
<div class="operate-box">
|
||||||
|
<el-button @click="add">新增</el-button>
|
||||||
|
<el-button @click="getSelectUser">删除</el-button>
|
||||||
|
</div>
|
||||||
|
</el-col>
|
||||||
|
</el-row>
|
||||||
|
</div>
|
||||||
|
<div class="table">
|
||||||
|
<vxe-table ref="userTable" :data="tableData" :empty-render="{name: 'NotData'}" align="center" border stripe
|
||||||
|
v-table-min-height="'calc(100vh - 320px)'">
|
||||||
|
<vxe-column show-overflow type="checkbox" width="77"></vxe-column>
|
||||||
|
<vxe-column show-overflow show-header-overflow type="seq" title="序号" width="77">
|
||||||
|
<template #default="{ row, rowIndex }">
|
||||||
|
{{ rowIndex + (q.pageNo - 1) * q.pageSize + 1 }}
|
||||||
|
</template>
|
||||||
|
</vxe-column>
|
||||||
|
<vxe-column show-overflow show-header-overflow field="itemName" title="选项"></vxe-column>
|
||||||
|
<vxe-column show-overflow show-header-overflow field="itemValue" title="选项值"></vxe-column>
|
||||||
|
<vxe-column show-overflow show-header-overflow field="itemOrder" title="排序"></vxe-column>
|
||||||
|
<vxe-column show-overflow show-header-overflow field="itemDescription" title="描述"></vxe-column>
|
||||||
|
|
||||||
|
<!-- <vxe-column show-overflow show-header-overflow title="启用/禁用" width="100" fixed="right">-->
|
||||||
|
<!-- <template #default="{ row }">-->
|
||||||
|
<!-- <el-switch v-model="row.ISUSE" active-value="1" inactive-value="0"-->
|
||||||
|
<!-- @change="(val) => sysUserIsUse(val, row)"></el-switch>-->
|
||||||
|
<!-- </template>-->
|
||||||
|
<!-- </vxe-column>-->
|
||||||
|
<vxe-column show-overflow show-header-overflow title="操作" width="200" fixed="right">
|
||||||
|
<template #default="{ row }">
|
||||||
|
<el-button type="text" @click="openRowData('view', row)">查看</el-button>
|
||||||
|
<el-button type="text" @click="openRowData('modify', row)">编辑</el-button>
|
||||||
|
<el-button type="text" class="del-btn" @click="deleteRow(row)">删除</el-button>
|
||||||
|
</template>
|
||||||
|
</vxe-column>
|
||||||
|
</vxe-table>
|
||||||
|
<el-pagination
|
||||||
|
@size-change="handleSizeChange"
|
||||||
|
@current-change="handleCurrentChange"
|
||||||
|
:current-page="q.pageNo"
|
||||||
|
:page-sizes="[5, 10, 20]"
|
||||||
|
:page-size="q.pageSize"
|
||||||
|
layout="total, sizes, prev, pager, next, jumper"
|
||||||
|
:total="total"/>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
<el-dialog :title="dialogTitle " :visible.sync="dialogUser" width="750px" :close-on-click-modal="false"
|
||||||
|
:close-on-press-escape="false" modal-append-to-body append-to-body>
|
||||||
|
<div class="user-form">
|
||||||
|
<el-form ref="addForm" :model="form" label-width="186px" :disabled="mode === 'view'"
|
||||||
|
:rules="formRule">
|
||||||
|
<el-form-item label="选项:" prop="itemName">
|
||||||
|
<el-input v-model="form.itemName" maxlength="20" show-word-limit placeholder="请输入选项"></el-input>
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item label="选项值:" prop="itemValue" >
|
||||||
|
<el-input v-model="form.itemValue" maxlength="20" placeholder="请输入值" show-word-limit></el-input>
|
||||||
|
</el-form-item>
|
||||||
|
<!--<el-form-item label="确认密码:" :required="mode === 'add'" v-if="mode !== 'view'">-->
|
||||||
|
<!--<el-input v-model="repassword" maxlength="20" type="password" placeholder="请确认密码"></el-input>-->
|
||||||
|
<!--</el-form-item>-->
|
||||||
|
<el-form-item label="排序:" prop="itemOrder">
|
||||||
|
<el-input v-model="form.itemOrder"show-word-limit maxlength="10" placeholder="请输入排序"></el-input>
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item label="备注:" prop="itemDescription">
|
||||||
|
<el-input type="textarea" v-model="form.itemDescription" maxlength="500" show-word-limit placeholder="请输入备注"></el-input>
|
||||||
|
</el-form-item>
|
||||||
|
</el-form>
|
||||||
|
<div class="done">
|
||||||
|
<el-button v-if="mode !== 'view'" type="primary" @click="sysUserAddUser">确定</el-button>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</el-dialog>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
export default {
|
||||||
|
name: 'standLawsAttrDetails',
|
||||||
|
data(){
|
||||||
|
const validateData= (rule, value, callback) =>{
|
||||||
|
let test=/^[0-9]*$/
|
||||||
|
if (!test.test(value)) {
|
||||||
|
callback(new Error('请输入数字值'));
|
||||||
|
}else{
|
||||||
|
callback()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return{
|
||||||
|
form:{
|
||||||
|
itemName:'',
|
||||||
|
itemValue:'',
|
||||||
|
itemDescription:'',
|
||||||
|
itemOrder:''
|
||||||
|
},
|
||||||
|
total:0,
|
||||||
|
q:{
|
||||||
|
pageNo:1,
|
||||||
|
pageSize:10,
|
||||||
|
itemName:''
|
||||||
|
},
|
||||||
|
tableData:[{inde:1}],
|
||||||
|
mode:'',
|
||||||
|
dialogUser:false,
|
||||||
|
dicId:'',
|
||||||
|
dicName:'',
|
||||||
|
formRule:{
|
||||||
|
itemName:[{
|
||||||
|
required:true,
|
||||||
|
message:'选项不能为空',
|
||||||
|
trigger:'change'
|
||||||
|
}],
|
||||||
|
itemValue:[{
|
||||||
|
required:true,
|
||||||
|
message:'选项值不能为空',
|
||||||
|
trigger:'change'
|
||||||
|
}],
|
||||||
|
itemOrder:[{
|
||||||
|
required:true,
|
||||||
|
message:'排序不能为空',
|
||||||
|
trigger:'change'
|
||||||
|
},{
|
||||||
|
validator:validateData, trigger:'change'
|
||||||
|
|
||||||
|
}],
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
mounted() {
|
||||||
|
this.dicName=this.$route.query.pName
|
||||||
|
this.dicId=this.$route.query.pId
|
||||||
|
this.loadData()
|
||||||
|
},
|
||||||
|
methods:{
|
||||||
|
// 编辑查看用户
|
||||||
|
openRowData (mode, row) {
|
||||||
|
this.mode = mode
|
||||||
|
this.form=JSON.parse(JSON.stringify(row))
|
||||||
|
this.dialogUser = true
|
||||||
|
},
|
||||||
|
sysUserAddUser(){
|
||||||
|
this.$refs.addForm.validate(v=>{
|
||||||
|
if(v){
|
||||||
|
if(this.mode=='add'){
|
||||||
|
this.$api.dictionary.addItemDic(this.form).then((res)=>{
|
||||||
|
this.$message.success("新增成功")
|
||||||
|
this.loadData()
|
||||||
|
})
|
||||||
|
}else{
|
||||||
|
this.$api.dictionary.editItemDic(this.form).then((res)=>{
|
||||||
|
this.$message.success("编辑成功")
|
||||||
|
this.loadData()
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
this.dialogUser = false
|
||||||
|
}else{
|
||||||
|
this.$message.warning("请检查表单")
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
},
|
||||||
|
// 新增
|
||||||
|
add () {
|
||||||
|
this.mode = 'add'
|
||||||
|
this.form = {
|
||||||
|
itemName:'',
|
||||||
|
itemValue:'',
|
||||||
|
itemDescription:'',
|
||||||
|
itemOrder:'',
|
||||||
|
dicId:this.dicId
|
||||||
|
}
|
||||||
|
this.dialogUser = true
|
||||||
|
this.$nextTick(()=>{
|
||||||
|
this.$refs.addForm.clearValidate()
|
||||||
|
|
||||||
|
})
|
||||||
|
},
|
||||||
|
// 批量删除
|
||||||
|
getSelectUser () {
|
||||||
|
const users = this.$refs.userTable.getCheckboxRecords()
|
||||||
|
if (!users.length) {
|
||||||
|
return this.$message.warning('请选择数据后在进行操作')
|
||||||
|
}
|
||||||
|
const ids = users.map(item => item.id).join(',')
|
||||||
|
this.deleteUser(ids)
|
||||||
|
},
|
||||||
|
// 删除
|
||||||
|
deleteRow (row) {
|
||||||
|
this.deleteUser(row.id)
|
||||||
|
},
|
||||||
|
// 删除用户
|
||||||
|
deleteUser (ids) {
|
||||||
|
this.$confirm('此操作将删除所选, 是否继续?', '提示', {
|
||||||
|
confirmButtonText: '确定',
|
||||||
|
cancelButtonText: '取消',
|
||||||
|
type: 'warning'
|
||||||
|
}).then(() => {
|
||||||
|
this.$api.dictionary.delItemDic({ ids }).then(_ => {
|
||||||
|
this.$message.success('操作成功')
|
||||||
|
this.loadData()
|
||||||
|
})
|
||||||
|
})
|
||||||
|
},
|
||||||
|
handleSizeChange(size){
|
||||||
|
this.q.pageSize=size
|
||||||
|
this.loadData()
|
||||||
|
},
|
||||||
|
handleCurrentChange(page){
|
||||||
|
this.q.pageNo=page
|
||||||
|
this.loadData()
|
||||||
|
},
|
||||||
|
loadData(){
|
||||||
|
this.$api.dictionary.getItemDic({...this.q,dicId:this.dicId}).then((res)=>{
|
||||||
|
this.tableData = res.data.records
|
||||||
|
this.total=res.data.total
|
||||||
|
})
|
||||||
|
},
|
||||||
|
search() {
|
||||||
|
this.q.pageNo = 1
|
||||||
|
this.loadData()
|
||||||
|
},
|
||||||
|
reset() {
|
||||||
|
this.q = {
|
||||||
|
pageNo:1,
|
||||||
|
pageSize:10,
|
||||||
|
itemName:'',
|
||||||
|
dicId: this.dicId
|
||||||
|
}
|
||||||
|
this.loadData()
|
||||||
|
},
|
||||||
|
back(){
|
||||||
|
this.$router.back(-1)
|
||||||
|
}
|
||||||
|
},
|
||||||
|
computed: {
|
||||||
|
dialogTitle () {
|
||||||
|
switch (this.mode) {
|
||||||
|
case 'add':
|
||||||
|
return '新增'
|
||||||
|
case 'modify':
|
||||||
|
return '编辑'
|
||||||
|
case 'view':
|
||||||
|
return '查看'
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style lang="scss" scoped>
|
||||||
|
.laws-details-header{
|
||||||
|
display: flex;
|
||||||
|
padding: 10px 10px 0;
|
||||||
|
.title{
|
||||||
|
height: 30px;
|
||||||
|
line-height: 30px;
|
||||||
|
margin-left: 50px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
.back{
|
||||||
|
display: inline-block;
|
||||||
|
width: 30px;
|
||||||
|
height: 30px;
|
||||||
|
background: #1890FF;
|
||||||
|
color: #fff;
|
||||||
|
border-radius: 50%;
|
||||||
|
//text-align: center;
|
||||||
|
line-height: 30px;
|
||||||
|
font-size: 25px;
|
||||||
|
font-weight: 700;
|
||||||
|
cursor: pointer;
|
||||||
|
text-align: center;
|
||||||
|
vertical-align: sub;
|
||||||
|
|
||||||
|
}
|
||||||
|
.search {
|
||||||
|
.search-box-left {
|
||||||
|
padding-top: 20px;
|
||||||
|
display: flex;
|
||||||
|
justify-content: flex-start;
|
||||||
|
align-items: center;
|
||||||
|
|
||||||
|
label {
|
||||||
|
font-size: 14px;
|
||||||
|
font-weight: 400;
|
||||||
|
color: #595959;
|
||||||
|
margin-right: 5px;
|
||||||
|
padding-left: 22px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.year {
|
||||||
|
::v-deep .el-input__inner {
|
||||||
|
padding: 0 15px !important;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
::v-deep .el-input {
|
||||||
|
width: 167px;
|
||||||
|
margin-right: 5px;
|
||||||
|
}
|
||||||
|
|
||||||
|
@media screen and (max-width: 1366px) {
|
||||||
|
::v-deep .el-input {
|
||||||
|
width: 135px;
|
||||||
|
margin-right: 5px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
::v-deep .el-button {
|
||||||
|
float: right;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.search-box-right {
|
||||||
|
padding-top: 20px;
|
||||||
|
display: flex;
|
||||||
|
justify-content: flex-end;
|
||||||
|
align-items: center;
|
||||||
|
padding-right: 14px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.operate-box {
|
||||||
|
padding-left: 13px;
|
||||||
|
padding-bottom: 11px;
|
||||||
|
padding-top: 18px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.table {
|
||||||
|
margin: 0 14px 0 13px;
|
||||||
|
|
||||||
|
::v-deep .el-pagination {
|
||||||
|
margin-top: 13px;
|
||||||
|
padding-left: 20px;
|
||||||
|
padding-bottom: 10px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
.user-form {
|
||||||
|
padding-top: 26px;
|
||||||
|
|
||||||
|
::v-deep .el-form {
|
||||||
|
padding-right: 79px;
|
||||||
|
|
||||||
|
.el-form-item {
|
||||||
|
//margin-bottom: 10px;
|
||||||
|
|
||||||
|
.el-form-item__label {
|
||||||
|
height: 36px;
|
||||||
|
line-height: 36px;
|
||||||
|
font-size: 14px;
|
||||||
|
font-weight: 500;
|
||||||
|
color: #262626;
|
||||||
|
}
|
||||||
|
|
||||||
|
.el-input__inner {
|
||||||
|
min-height: 36px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.el-input__inner,
|
||||||
|
.el-textarea__inner {
|
||||||
|
font-size: 14px;
|
||||||
|
font-weight: 400;
|
||||||
|
color: #434343;
|
||||||
|
}
|
||||||
|
|
||||||
|
.el-select {
|
||||||
|
width: 100%;
|
||||||
|
}
|
||||||
|
|
||||||
|
.el-date-editor {
|
||||||
|
width: 100%;
|
||||||
|
|
||||||
|
.el-input__inner {
|
||||||
|
padding-left: 15px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.el-input__suffix {
|
||||||
|
font-size: 16px;
|
||||||
|
margin-top: 2px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.icon-auth {
|
||||||
|
.el-icon-arrow-up {
|
||||||
|
margin-top: 2px;
|
||||||
|
transform: rotateZ(0) !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
.el-icon-arrow-up:before {
|
||||||
|
content: '';
|
||||||
|
background: url("../../assets/imgs/icon-user.png") no-repeat center center;
|
||||||
|
display: inline-block;
|
||||||
|
width: 12px;
|
||||||
|
height: 14px;
|
||||||
|
background-size: 100% 100%;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.el-button {
|
||||||
|
width: 80px;
|
||||||
|
height: 36px;
|
||||||
|
padding: 0;
|
||||||
|
text-align: center;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.done {
|
||||||
|
text-align: center;
|
||||||
|
padding: 40px 0;
|
||||||
|
|
||||||
|
::v-deep .el-button {
|
||||||
|
width: 80px;
|
||||||
|
height: 36px;
|
||||||
|
padding: 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
</style>
|
||||||
+26
-18
@@ -1,31 +1,32 @@
|
|||||||
<template>
|
<template>
|
||||||
<div class="content-height">
|
<div class="content-height">
|
||||||
<el-row class="inputForm" v-for="i in formData">
|
<el-row class="inputForm" >
|
||||||
<el-col :span="6">
|
<el-col :span="6">
|
||||||
<div class="tag-item showLimit">
|
<div class="tag-item showLimit">
|
||||||
<label class="tag-title">{{i.configKey}}:</label>
|
<label class="tag-title">水印前缀:</label>
|
||||||
<el-input v-model="i.configValue" placeholder="请输入水印前缀"
|
<el-input v-model="formData.markValue" placeholder="请输入水印前缀"
|
||||||
maxlength="100" show-word-limit></el-input>
|
maxlength="100" show-word-limit></el-input>
|
||||||
</div>
|
</div>
|
||||||
</el-col>
|
</el-col>
|
||||||
<el-col :span="2" align="right" class="tag-btns">
|
<el-col :span="2" align="right" class="tag-btns">
|
||||||
<el-button type="primary" @click="save(i)">保存</el-button>
|
<el-button type="primary" @click="save('mark',0)">保存</el-button>
|
||||||
</el-col>
|
</el-col>
|
||||||
</el-row>
|
</el-row>
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script>
|
<script>
|
||||||
|
import {basMessage} from '@/utils/Enum/enum'
|
||||||
export default {
|
export default {
|
||||||
name: "index",
|
name: "index",
|
||||||
data(){
|
data(){
|
||||||
return {
|
return {
|
||||||
formData:[
|
basMessage,
|
||||||
{
|
formData:{
|
||||||
configKey:'水印前缀',
|
markValue:''
|
||||||
configValue:''
|
},
|
||||||
}
|
row0:{}
|
||||||
]
|
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
created() {
|
created() {
|
||||||
@@ -36,18 +37,25 @@ export default {
|
|||||||
loadMark(){
|
loadMark(){
|
||||||
this.$api.setting.getAllSetting().then(res=>{
|
this.$api.setting.getAllSetting().then(res=>{
|
||||||
if(res.data.length>0){
|
if(res.data.length>0){
|
||||||
this.formData=res.data
|
res.data.forEach( item=>{
|
||||||
console.log(res.data.data,"res.data.data")
|
switch (item.configKey){
|
||||||
|
case this.basMessage['mark'].value :
|
||||||
|
this.formData.markValue=item.configValue
|
||||||
|
this['row'+this.basMessage['mark'].index] = item
|
||||||
|
}
|
||||||
|
})
|
||||||
}else{
|
}else{
|
||||||
this.formData=[{
|
|
||||||
configKey:'水印前缀',
|
|
||||||
configValue:''
|
|
||||||
}]
|
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
},
|
},
|
||||||
save(i){
|
save(name,index){
|
||||||
this.$api.setting.saveMarket(i).then(res=>{
|
let param={
|
||||||
|
id: this["row"+index].id ? this["row"+index].id:'',
|
||||||
|
configValue: this.formData[name+'Value'],
|
||||||
|
configKey: this.basMessage[name].value
|
||||||
|
}
|
||||||
|
this.$api.setting.saveMarket(param).then(res=>{
|
||||||
this.$message.success(res.data)
|
this.$message.success(res.data)
|
||||||
})
|
})
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -156,7 +156,7 @@ export default {
|
|||||||
cancelButtonText: '取消',
|
cancelButtonText: '取消',
|
||||||
type: 'warning'
|
type: 'warning'
|
||||||
}).then(() => {
|
}).then(() => {
|
||||||
if (this.$route.query.taskDefinitionKey == 'aid4' ){
|
if (this.$route.query.taskDefinitionKey == 'reEdit' ){
|
||||||
// 有idde
|
// 有idde
|
||||||
console.log(this.value)
|
console.log(this.value)
|
||||||
debugger
|
debugger
|
||||||
@@ -217,7 +217,7 @@ export default {
|
|||||||
cancelButtonText: '取消',
|
cancelButtonText: '取消',
|
||||||
type: 'warning'
|
type: 'warning'
|
||||||
}).then(() => {
|
}).then(() => {
|
||||||
if (this.$route.query.taskDefinitionKey == 'aid4' ){
|
if (this.$route.query.taskDefinitionKey == 'reEdit' ){
|
||||||
if(row.id && row.id !=''){
|
if(row.id && row.id !=''){
|
||||||
// this.$api.permissionProcess.deletReport({ids:[row.id]}).then(()=>{
|
// this.$api.permissionProcess.deletReport({ids:[row.id]}).then(()=>{
|
||||||
this.$emit('updateTable',this.value.filter(item => item.id !== row.id),[row.reportId])
|
this.$emit('updateTable',this.value.filter(item => item.id !== row.id),[row.reportId])
|
||||||
|
|||||||
@@ -236,7 +236,7 @@ export default {
|
|||||||
})
|
})
|
||||||
|
|
||||||
}
|
}
|
||||||
if (this.$route.query.taskDefinitionKey == 'aid4' ) {
|
if (this.$route.query.taskDefinitionKey == 'reEdit' ) {
|
||||||
this.taskId = this.$store.getters.handleProcess.taskId
|
this.taskId = this.$store.getters.handleProcess.taskId
|
||||||
this.prcNum = this.$store.getters.handleProcess.prcNum
|
this.prcNum = this.$store.getters.handleProcess.prcNum
|
||||||
this.prcId = this.$store.getters.handleProcess.prcId
|
this.prcId = this.$store.getters.handleProcess.prcId
|
||||||
@@ -376,7 +376,7 @@ export default {
|
|||||||
},
|
},
|
||||||
handleReset() {
|
handleReset() {
|
||||||
this.processForm.prcName = ''
|
this.processForm.prcName = ''
|
||||||
if(this.$route.query.taskDefinitionKey == 'aid4'){
|
if(this.$route.query.taskDefinitionKey == 'reEdit'){
|
||||||
this.processForm.prcName = this.prcName
|
this.processForm.prcName = this.prcName
|
||||||
}
|
}
|
||||||
this.applicationForm = {
|
this.applicationForm = {
|
||||||
|
|||||||
@@ -17,33 +17,37 @@
|
|||||||
placeholder="请输入报告名称"></el-input>
|
placeholder="请输入报告名称"></el-input>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
</el-col>
|
</el-col>
|
||||||
<el-col :span="9" :offset="6" >
|
<el-col :span="9" :offset="6">
|
||||||
<el-form-item label="报告年份:" prop="year">
|
<el-form-item label="报告年份:" prop="year">
|
||||||
<el-date-picker :disabled="formControl" v-model="form.year" type="year" value-format="yyyy" placeholder="请选择报告年份"
|
<el-date-picker :disabled="formControl" v-model="form.year" type="year" value-format="yyyy"
|
||||||
prefix-icon="null" :picker-options="pickerOptions" />
|
placeholder="请选择报告年份"
|
||||||
|
prefix-icon="null" :picker-options="pickerOptions"/>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
</el-col>
|
</el-col>
|
||||||
</el-row>
|
</el-row>
|
||||||
<el-row>
|
<el-row>
|
||||||
<el-col :span="9">
|
<el-col :span="9">
|
||||||
<el-form-item label="报告所属部门:" prop="department">
|
<el-form-item label="报告所属部门:" prop="department">
|
||||||
<el-input :disabled="formControl" v-model="form.department" placeholder="请选择报告所属部门" maxlength="100" ></el-input>
|
<el-input :disabled="formControl" v-model="form.department" placeholder="请选择报告所属部门"
|
||||||
|
maxlength="100"></el-input>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
</el-col>
|
</el-col>
|
||||||
<el-col :span="9" :offset="6">
|
<el-col :span="9" :offset="6">
|
||||||
<el-form-item label="报告涉密等级:" prop="confidentialLevel">
|
<el-form-item label="报告涉密等级:" prop="confidentialLevel">
|
||||||
<el-select :disabled="formControl" v-model="form.confidentialLevel" placeholder="请选择报告涉密等级">
|
<el-select :disabled="formControl" v-model="form.confidentialLevel" placeholder="请选择报告涉密等级">
|
||||||
<el-option v-for="item in confidentialLevelOptions" :key="item.value" :label="item.label" :value="item.value">
|
<el-option v-for="item in confidentialLevelOptions" :key="item.value" :label="item.label"
|
||||||
|
:value="item.value">
|
||||||
</el-option>
|
</el-option>
|
||||||
</el-select>
|
</el-select>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
</el-col>
|
</el-col>
|
||||||
</el-row>
|
</el-row>
|
||||||
<el-row>
|
<el-row>
|
||||||
<el-col :span="9">
|
<el-col :span="9">
|
||||||
<el-form-item label="关键词:" prop="tags">
|
<el-form-item label="关键词:" prop="tags">
|
||||||
<vue-tags-input :disabled="formControl" :class="{'is-diable':formControl}" placeholder="请输入关键词" v-model="form.tags" :tags="tags"
|
<vue-tags-input :disabled="formControl" :class="{'is-diable':formControl}" placeholder="请输入关键词"
|
||||||
:avoid-adding-duplicates="false" @tags-changed="newTags =>{
|
v-model="form.tags" :tags="tags"
|
||||||
|
:avoid-adding-duplicates="false" @tags-changed="newTags =>{
|
||||||
if(newTags[newTags.length - 1].text.length <= 20){
|
if(newTags[newTags.length - 1].text.length <= 20){
|
||||||
if(tags.length < 10){
|
if(tags.length < 10){
|
||||||
tags = newTags
|
tags = newTags
|
||||||
@@ -57,10 +61,10 @@
|
|||||||
tags = newTags.slice(0,-1)
|
tags = newTags.slice(0,-1)
|
||||||
}
|
}
|
||||||
|
|
||||||
}" />
|
}"/>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
</el-col>
|
</el-col>
|
||||||
<el-col :span="9" :offset="6">
|
<el-col :span="9" :offset="6">
|
||||||
<el-form-item label="报告隐私等级:" prop="privacyLevelOptions">
|
<el-form-item label="报告隐私等级:" prop="privacyLevelOptions">
|
||||||
<el-select :disabled="formControl" v-model="form.privacyLevelOptions" placeholder="请选择报告隐私等级">
|
<el-select :disabled="formControl" v-model="form.privacyLevelOptions" placeholder="请选择报告隐私等级">
|
||||||
<el-option v-for="item in privacyLevelOptions" :key="item.value" :label="item.label" :value="item.value">
|
<el-option v-for="item in privacyLevelOptions" :key="item.value" :label="item.label" :value="item.value">
|
||||||
@@ -70,9 +74,10 @@
|
|||||||
</el-col>
|
</el-col>
|
||||||
</el-row>
|
</el-row>
|
||||||
<el-row>
|
<el-row>
|
||||||
<el-col :span="9">
|
<el-col :span="9">
|
||||||
<el-form-item label="标签:" prop="department">
|
<el-form-item label="标签:" prop="department">
|
||||||
<el-cascader :disabled="formControl" width="100%" v-model="form.labelList" :options="cascaderOptions" filterable
|
<el-cascader :disabled="formControl" width="100%" v-model="form.labelList" :options="cascaderOptions"
|
||||||
|
filterable
|
||||||
:props="{ checkStrictly: true }" clearable placeholder="请选择标签">
|
:props="{ checkStrictly: true }" clearable placeholder="请选择标签">
|
||||||
<template slot-scope="{ node, data }">
|
<template slot-scope="{ node, data }">
|
||||||
<span :title="data.label">{{ data.label }}</span>
|
<span :title="data.label">{{ data.label }}</span>
|
||||||
@@ -82,18 +87,20 @@
|
|||||||
</el-col>
|
</el-col>
|
||||||
</el-row>
|
</el-row>
|
||||||
<el-row>
|
<el-row>
|
||||||
<el-col :span="18">
|
<el-col :span="18">
|
||||||
<el-form-item label="内容摘要:" prop="mainContent">
|
<el-form-item label="内容摘要:" prop="mainContent">
|
||||||
<el-input :disabled="formControl" v-model="form.mainContent" placeholder="请填写内容摘要" type="textarea" maxlength="500"></el-input>
|
<el-input :disabled="formControl" v-model="form.mainContent" placeholder="请填写内容摘要" type="textarea"
|
||||||
|
maxlength="500"></el-input>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
</el-col>
|
</el-col>
|
||||||
</el-row>
|
</el-row>
|
||||||
<el-row>
|
<el-row>
|
||||||
<el-col :span="9">
|
<el-col :span="9">
|
||||||
<el-form-item label="上传报告:" required>
|
<el-form-item label="上传报告:" prop="fileId">
|
||||||
<el-upload action="#" :http-request="(params) => uploadFile(params)" :show-file-list="false"
|
<el-upload action="#" :http-request="(params) => uploadFile(params)" :show-file-list="true"
|
||||||
:before-upload="beforeUploadFile">
|
:before-upload="beforeUploadFile" :on-remove="handleRemove"
|
||||||
<el-button :disabled="formControl" >选择文件</el-button>
|
:file-list="fileList">
|
||||||
|
<el-button :disabled="formControl">选择文件</el-button>
|
||||||
</el-upload>
|
</el-upload>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
</el-col>
|
</el-col>
|
||||||
@@ -101,181 +108,344 @@
|
|||||||
<el-row>
|
<el-row>
|
||||||
<el-col :span="9">
|
<el-col :span="9">
|
||||||
<el-form-item label="权限设置:" required>
|
<el-form-item label="权限设置:" required>
|
||||||
<el-button :disabled="formControl">选择文件</el-button>
|
<el-button :disabled="formControl" @click="openDialog">权限设置</el-button>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
</el-col>
|
</el-col>
|
||||||
</el-row>
|
</el-row>
|
||||||
</el-form>
|
</el-form>
|
||||||
|
<el-dialog title="权限设置" :visible.sync="dialogUser" width="950px" :close-on-click-modal="false"
|
||||||
|
:close-on-press-escape="false" modal-append-to-body append-to-body>
|
||||||
|
<div class="user-form">
|
||||||
|
<div style="text-align: center">
|
||||||
|
<newTranslate
|
||||||
|
@loadMore="loadMore"
|
||||||
|
style="text-align: left; display: inline-block"
|
||||||
|
filterable
|
||||||
|
v-model="listOne"
|
||||||
|
:titles="['全部人员', '预览权限人员','预览和下载权限人员']"
|
||||||
|
:props="{
|
||||||
|
key: 'value',
|
||||||
|
label: 'desc'
|
||||||
|
}"
|
||||||
|
:loadingMore="loadingMore"
|
||||||
|
:data="allUser"
|
||||||
|
:listTwo.sync="listTwo"
|
||||||
|
:button-texts="['全部', '预览', '预览与下载']"
|
||||||
|
></newTranslate>
|
||||||
|
</div>
|
||||||
|
<div class="done">
|
||||||
|
<el-button type="default" @click="closeD">取消</el-button>
|
||||||
|
<el-button type="primary" v-if="!formControl" @click="saveCheck">确定</el-button>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</el-dialog>
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
<script>
|
<script>
|
||||||
import { fileType } from '@/utils/fileType'
|
import {fileType} from '@/utils/fileType'
|
||||||
|
import newTranslate from "../../../components/newTranslate";
|
||||||
import VueTagsInput from '@johmun/vue-tags-input';
|
import VueTagsInput from '@johmun/vue-tags-input';
|
||||||
export default {
|
|
||||||
components:{
|
|
||||||
VueTagsInput
|
|
||||||
},
|
|
||||||
props:{
|
|
||||||
formControl:{
|
|
||||||
type:Boolean,
|
|
||||||
default:false
|
|
||||||
},
|
|
||||||
formControlname:{
|
|
||||||
type:Boolean,
|
|
||||||
default:false
|
|
||||||
},
|
|
||||||
processForm:{
|
|
||||||
type:Object
|
|
||||||
}
|
|
||||||
},
|
|
||||||
data(){
|
|
||||||
return {
|
|
||||||
confidentialLevelOptions:[],
|
|
||||||
cascaderOptions: [],
|
|
||||||
privacyLevelOptions: [],
|
|
||||||
tags:[],
|
|
||||||
pickerOptions: {
|
|
||||||
disabledDate(time) {
|
|
||||||
return time.getFullYear() > new Date().getFullYear() + 1 || time.getFullYear() < new Date().getFullYear() - 10;
|
|
||||||
},
|
|
||||||
},
|
|
||||||
form:{
|
|
||||||
|
|
||||||
},
|
export default {
|
||||||
processFormRule:{
|
components: {
|
||||||
prcName:[
|
VueTagsInput,
|
||||||
{
|
newTranslate
|
||||||
required:true,
|
},
|
||||||
message:"流程名称不能为空",
|
props: {
|
||||||
trigger:'change'
|
|
||||||
},{
|
|
||||||
max:100,
|
|
||||||
message:"流程名称不能超过100字符",
|
|
||||||
trigger:'change'
|
|
||||||
}
|
|
||||||
],
|
|
||||||
name: [{
|
|
||||||
required:true,
|
|
||||||
message:"报告名称不能为空",
|
|
||||||
trigger:'change'
|
|
||||||
},{
|
|
||||||
max:100,
|
|
||||||
message:"报告名称不能超过100字符",
|
|
||||||
trigger:'change'
|
|
||||||
}],
|
|
||||||
mainContent: [{
|
|
||||||
max:500,
|
|
||||||
message:"内容摘要不能超过500字符",
|
|
||||||
trigger:'change'
|
|
||||||
}],
|
|
||||||
year: [{
|
|
||||||
required:true,
|
|
||||||
message:"报告年份不能为空",
|
|
||||||
trigger:'change'
|
|
||||||
}],
|
|
||||||
reportUserIdList:[
|
|
||||||
{
|
|
||||||
required:true,
|
|
||||||
message:"权限不能为空",
|
|
||||||
trigger:'change'
|
|
||||||
}
|
|
||||||
],
|
|
||||||
fileName:[
|
|
||||||
{
|
|
||||||
required:true,
|
|
||||||
message:"报告文件不能为空", trigger:'change'
|
|
||||||
|
|
||||||
}
|
formControl: {
|
||||||
]
|
type: Boolean,
|
||||||
|
default: false
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
},
|
||||||
methods:{
|
formControlname: {
|
||||||
//用递归方式去除children
|
type: Boolean,
|
||||||
getTreeData(data) {
|
default: false
|
||||||
for (var i = 0; i < data.length; i++) {
|
|
||||||
if (data[i].children.length < 1) {
|
|
||||||
// children若为空数组,则将children设为undefined
|
|
||||||
data[i].children = undefined;
|
|
||||||
} else {
|
|
||||||
// children若不为空数组,则继续 递归调用 本方法
|
|
||||||
this.getTreeData(data[i].children);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return data;
|
|
||||||
},
|
|
||||||
updateList(){
|
|
||||||
this.$api.report.labelList().then(res => {
|
|
||||||
this.cascaderOptions=this.getTreeData(res.data)
|
|
||||||
})
|
|
||||||
this.$forceUpdate()
|
|
||||||
},
|
|
||||||
// 上传文件
|
|
||||||
uploadFile(params) {
|
|
||||||
let fd = new FormData();
|
|
||||||
fd.append('file', params.file);
|
|
||||||
this.$api.report.reportUploadFile(fd).then(({ data }) => {
|
|
||||||
this.form.fileName = data.name;
|
|
||||||
this.form.fileId = data.key;
|
|
||||||
})
|
|
||||||
},
|
|
||||||
// 上传文件前
|
|
||||||
beforeUploadFile(file) {
|
|
||||||
let realFileType = file.name.split('.')[file.name.split('.').length - 1];
|
|
||||||
const isType = (
|
|
||||||
file.type === fileType.pdf || file.type === fileType.xls || file.type === fileType.xlsx || file.type === fileType.doc || file.type === fileType.docx || file.type === fileType.ppt || file.type === fileType.pptx
|
|
||||||
|| realFileType === 'pdf' || realFileType === 'xls' || realFileType === 'xlsx' || realFileType === 'doc' || realFileType === 'docx' || realFileType === 'ppt' || realFileType === 'pptx'
|
|
||||||
);
|
|
||||||
const isSize = file.size / 1024 / 1024 < 200;
|
|
||||||
if (!isType) {
|
|
||||||
this.$message.error('仅能上传 pdf|xls|xlsx|doc|docx|ppt|pptx 格式文件');
|
|
||||||
}
|
|
||||||
if (!isSize) {
|
|
||||||
this.$message.error('您最大可上传200M文件');
|
|
||||||
}
|
|
||||||
return isType && isSize;
|
|
||||||
},
|
|
||||||
submit(){
|
|
||||||
let flag
|
|
||||||
this.$refs.processFormRef.validate(v=>{
|
|
||||||
flag=v
|
|
||||||
return v
|
|
||||||
})
|
|
||||||
return flag
|
|
||||||
}
|
|
||||||
},
|
},
|
||||||
mounted() {
|
processForm: {
|
||||||
this.updateList()
|
type: Object
|
||||||
}
|
}
|
||||||
|
},
|
||||||
|
data() {
|
||||||
|
return {
|
||||||
|
loadingMore:false,
|
||||||
|
listTwo: [], //存储下载预览的
|
||||||
|
allUser: [], //存储全部的
|
||||||
|
listOne: [1],
|
||||||
|
dialogUser: false,
|
||||||
|
confidentialLevelOptions: [],
|
||||||
|
cascaderOptions: [],
|
||||||
|
privacyLevelOptions: [],
|
||||||
|
tags: [],
|
||||||
|
pickerOptions: {
|
||||||
|
disabledDate(time) {
|
||||||
|
return time.getFullYear() > new Date().getFullYear() + 1 || time.getFullYear() < new Date().getFullYear() - 10;
|
||||||
|
},
|
||||||
|
},
|
||||||
|
form: {},
|
||||||
|
processFormRule: {
|
||||||
|
fileId:[
|
||||||
|
{
|
||||||
|
required: true,
|
||||||
|
message: "上传报告不能为空",
|
||||||
|
trigger: 'change'
|
||||||
|
}
|
||||||
|
],
|
||||||
|
prcName: [
|
||||||
|
{
|
||||||
|
required: true,
|
||||||
|
message: "流程名称不能为空",
|
||||||
|
trigger: 'change'
|
||||||
|
}, {
|
||||||
|
max: 100,
|
||||||
|
message: "流程名称不能超过100字符",
|
||||||
|
trigger: 'change'
|
||||||
|
}
|
||||||
|
],
|
||||||
|
name: [{
|
||||||
|
required: true,
|
||||||
|
message: "报告名称不能为空",
|
||||||
|
trigger: 'change'
|
||||||
|
}, {
|
||||||
|
max: 100,
|
||||||
|
message: "报告名称不能超过100字符",
|
||||||
|
trigger: 'change'
|
||||||
|
}],
|
||||||
|
mainContent: [{
|
||||||
|
max: 500,
|
||||||
|
message: "内容摘要不能超过500字符",
|
||||||
|
trigger: 'change'
|
||||||
|
}],
|
||||||
|
year: [{
|
||||||
|
required: true,
|
||||||
|
message: "报告年份不能为空",
|
||||||
|
trigger: 'change'
|
||||||
|
}],
|
||||||
|
reportUserIdList: [
|
||||||
|
{
|
||||||
|
required: true,
|
||||||
|
message: "权限不能为空",
|
||||||
|
trigger: 'change'
|
||||||
|
}
|
||||||
|
],
|
||||||
|
fileName: [
|
||||||
|
{
|
||||||
|
required: true,
|
||||||
|
message: "报告文件不能为空", trigger: 'change'
|
||||||
|
|
||||||
|
}
|
||||||
|
]
|
||||||
|
|
||||||
|
},
|
||||||
|
q: {
|
||||||
|
pageNo: 1,
|
||||||
|
pageSize: 10
|
||||||
|
},
|
||||||
|
fileList:[]
|
||||||
|
}
|
||||||
|
},
|
||||||
|
watch:{
|
||||||
|
processForm(val){
|
||||||
|
debugger
|
||||||
|
this.form=this.processForm
|
||||||
|
}
|
||||||
|
},
|
||||||
|
methods: {
|
||||||
|
loadMore(){
|
||||||
|
this.q.pageNo++
|
||||||
|
this.getAllPerson()
|
||||||
|
},
|
||||||
|
closeD() {
|
||||||
|
if (this.$route.query.isBegin || this.$route.query.isDraft) {
|
||||||
|
this.listOne=[]
|
||||||
|
this.listTwo=[]
|
||||||
|
}else{
|
||||||
|
|
||||||
|
}
|
||||||
|
this.dialogUser = false
|
||||||
|
},
|
||||||
|
saveCheck() {
|
||||||
|
// 可以编辑
|
||||||
|
if (!this.formControl) {
|
||||||
|
// 第一次发起与草稿还要区分
|
||||||
|
if (this.$route.query.isBegin || this.$route.query.isDraft) {
|
||||||
|
let list1 = this.listOne.map(item => {
|
||||||
|
let obj = {
|
||||||
|
userId: item,
|
||||||
|
power: 1
|
||||||
|
}
|
||||||
|
return obj
|
||||||
|
})
|
||||||
|
let list2 = this.listTwo.map(item => {
|
||||||
|
let obj = {
|
||||||
|
userId: item,
|
||||||
|
power: 2
|
||||||
|
}
|
||||||
|
return obj
|
||||||
|
})
|
||||||
|
this.form.powerList=[...list1,...list2]
|
||||||
|
this.dialogUser = false
|
||||||
|
} else {
|
||||||
|
//如果是发起人编辑节点
|
||||||
|
let list1 = this.listOne.map(item => {
|
||||||
|
let obj = {
|
||||||
|
userId: item.id,
|
||||||
|
power: 1
|
||||||
|
}
|
||||||
|
return obj
|
||||||
|
})
|
||||||
|
let list2 = this.listTwo.map(item => {
|
||||||
|
let obj = {
|
||||||
|
userId: item.id,
|
||||||
|
power: 2
|
||||||
|
}
|
||||||
|
return obj
|
||||||
|
})
|
||||||
|
this.form.powerList = [...list1, ...list2]
|
||||||
|
}
|
||||||
|
}else{}
|
||||||
|
|
||||||
|
},
|
||||||
|
//获取全部人员
|
||||||
|
getAllPerson() {
|
||||||
|
this.$api.user.sysUserList(this.q).then(({data}) => {
|
||||||
|
let newlist = data.records.map(item => {
|
||||||
|
let obj = {
|
||||||
|
key: item.USID,
|
||||||
|
value: item.USID,
|
||||||
|
label: item.USID
|
||||||
|
}
|
||||||
|
return obj
|
||||||
|
})
|
||||||
|
this.allUser=[...this.allUser,...newlist]
|
||||||
|
this.total = data.total
|
||||||
|
this.q.pageNo = data.current
|
||||||
|
this.q.pageSize = data.size
|
||||||
|
if (!data.records.length && this.q.pageNo !== 1) {
|
||||||
|
this.q.pageNo = 1
|
||||||
|
this.sysUserList()
|
||||||
|
}
|
||||||
|
this.loadingMore=false
|
||||||
|
})
|
||||||
|
},
|
||||||
|
handleChange(value, direction, movedKeys) {
|
||||||
|
console.log(value, direction, movedKeys);
|
||||||
|
},
|
||||||
|
openDialog() {
|
||||||
|
this.dialogUser = true
|
||||||
|
},
|
||||||
|
handleRemove(file, fileList) {
|
||||||
|
console.log(file, fileList);
|
||||||
|
this.form.fileName ='';
|
||||||
|
this.form.fileId = '';
|
||||||
|
this.fileList=[]
|
||||||
|
},
|
||||||
|
//用递归方式去除children
|
||||||
|
getTreeData(data) {
|
||||||
|
for (var i = 0; i < data.length; i++) {
|
||||||
|
if (data[i].children.length < 1) {
|
||||||
|
// children若为空数组,则将children设为undefined
|
||||||
|
data[i].children = undefined;
|
||||||
|
} else {
|
||||||
|
// children若不为空数组,则继续 递归调用 本方法
|
||||||
|
this.getTreeData(data[i].children);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return data;
|
||||||
|
},
|
||||||
|
updateList() {
|
||||||
|
this.$api.report.labelList().then(res => {
|
||||||
|
this.cascaderOptions = this.getTreeData(res.data)
|
||||||
|
})
|
||||||
|
this.$forceUpdate()
|
||||||
|
},
|
||||||
|
// 上传文件
|
||||||
|
uploadFile(params) {
|
||||||
|
let fd = new FormData();
|
||||||
|
fd.append('file', params.file);
|
||||||
|
this.$api.report.reportUploadFile(fd).then(({data}) => {
|
||||||
|
this.form.fileName = data.name;
|
||||||
|
this.form.fileId = data.key;
|
||||||
|
this.fileList=[data]
|
||||||
|
})
|
||||||
|
},
|
||||||
|
// 上传文件前
|
||||||
|
beforeUploadFile(file) {
|
||||||
|
let realFileType = file.name.split('.')[file.name.split('.').length - 1];
|
||||||
|
const isType = (
|
||||||
|
file.type === fileType.pdf || file.type === fileType.xls || file.type === fileType.xlsx || file.type === fileType.doc || file.type === fileType.docx || file.type === fileType.ppt || file.type === fileType.pptx
|
||||||
|
|| realFileType === 'pdf' || realFileType === 'xls' || realFileType === 'xlsx' || realFileType === 'doc' || realFileType === 'docx' || realFileType === 'ppt' || realFileType === 'pptx'
|
||||||
|
);
|
||||||
|
const isSize = file.size / 1024 / 1024 < 200;
|
||||||
|
if (!isType) {
|
||||||
|
this.$message.error('仅能上传 pdf|xls|xlsx|doc|docx|ppt|pptx 格式文件');
|
||||||
|
}
|
||||||
|
if (!isSize) {
|
||||||
|
this.$message.error('您最大可上传200M文件');
|
||||||
|
}
|
||||||
|
return isType && isSize;
|
||||||
|
},
|
||||||
|
submit() {
|
||||||
|
let flag
|
||||||
|
this.$refs.processFormRef.validate(v => {
|
||||||
|
flag = v
|
||||||
|
return v
|
||||||
|
})
|
||||||
|
return flag
|
||||||
}
|
}
|
||||||
|
},
|
||||||
|
mounted()
|
||||||
|
{
|
||||||
|
this.updateList()
|
||||||
|
this.getAllPerson()
|
||||||
|
}
|
||||||
|
}
|
||||||
</script>
|
</script>
|
||||||
<style lang="scss" scoped>
|
<style lang="scss" scoped>
|
||||||
::v-deep .ti-input {
|
::v-deep .ti-input {
|
||||||
border-radius: 4px;
|
border-radius: 4px;
|
||||||
border: 1px solid #DCDFE6;
|
border: 1px solid #DCDFE6;
|
||||||
min-height: 40px;
|
min-height: 40px;
|
||||||
line-height: 40px;
|
line-height: 40px;
|
||||||
|
|
||||||
.ti-new-tag-input{
|
.ti-new-tag-input {
|
||||||
padding-left: 5px;
|
padding-left: 5px;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
.ti-new-tag-input::placeholder {
|
.ti-new-tag-input::placeholder {
|
||||||
color: #C0C4CC;
|
color: #C0C4CC;
|
||||||
font-size: 14px;
|
font-size: 14px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.ti-new-tag-input:-ms-input-placeholder {
|
.ti-new-tag-input:-ms-input-placeholder {
|
||||||
color: #C0C4CC;
|
color: #C0C4CC;
|
||||||
font-size: 14px;
|
font-size: 14px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.ti-new-tag-input:-moz-placeholder {
|
.ti-new-tag-input:-moz-placeholder {
|
||||||
color: #C0C4CC;
|
color: #C0C4CC;
|
||||||
font-size: 14px;
|
font-size: 14px;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
::v-deep .vue-tags-input :focus{
|
|
||||||
|
::v-deep .vue-tags-input :focus {
|
||||||
border: 1px solid #1890ff;
|
border: 1px solid #1890ff;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.user-form {
|
||||||
|
padding-top: 26px;
|
||||||
|
|
||||||
|
.done {
|
||||||
|
text-align: center;
|
||||||
|
padding: 40px 0;
|
||||||
|
|
||||||
|
::v-deep .el-button {
|
||||||
|
width: 80px;
|
||||||
|
height: 36px;
|
||||||
|
padding: 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
</style>
|
</style>
|
||||||
|
|||||||
@@ -102,7 +102,7 @@ export default {
|
|||||||
},
|
},
|
||||||
PERMISSION,
|
PERMISSION,
|
||||||
submitjson:{},
|
submitjson:{},
|
||||||
prcType:1
|
prcType:2
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
created () {
|
created () {
|
||||||
@@ -110,7 +110,7 @@ export default {
|
|||||||
this.prcNum=this.$store.getters.handleProcess.prcNum
|
this.prcNum=this.$store.getters.handleProcess.prcNum
|
||||||
this.prcId=this.$store.getters.handleProcess.prcId
|
this.prcId=this.$store.getters.handleProcess.prcId
|
||||||
this.prcName=this.$store.getters.handleProcess.prcName
|
this.prcName=this.$store.getters.handleProcess.prcName
|
||||||
this.$set(this.processForm,'prcName',this.prcName)
|
|
||||||
|
|
||||||
let params={
|
let params={
|
||||||
prcId: this.prcId,
|
prcId: this.prcId,
|
||||||
@@ -121,7 +121,7 @@ export default {
|
|||||||
}
|
}
|
||||||
this.getProcessDetail(params).then(res=>{
|
this.getProcessDetail(params).then(res=>{
|
||||||
this.processForm = JSON.parse(this.processOld.dataJson)
|
this.processForm = JSON.parse(this.processOld.dataJson)
|
||||||
|
this.$set(this.processForm,'prcName',this.prcName)
|
||||||
this.disabled=false
|
this.disabled=false
|
||||||
this.formControl= true
|
this.formControl= true
|
||||||
if(this.$route.query.type=='yiban'){
|
if(this.$route.query.type=='yiban'){
|
||||||
|
|||||||
@@ -188,7 +188,7 @@ export default {
|
|||||||
})
|
})
|
||||||
|
|
||||||
}
|
}
|
||||||
if (this.$route.query.taskDefinitionKey == 'aid4' ) {
|
if (this.$route.query.taskDefinitionKey == 'reEdit' ) {
|
||||||
this.taskId = this.$store.getters.handleProcess.taskId
|
this.taskId = this.$store.getters.handleProcess.taskId
|
||||||
this.prcNum = this.$store.getters.handleProcess.prcNum
|
this.prcNum = this.$store.getters.handleProcess.prcNum
|
||||||
this.prcId = this.$store.getters.handleProcess.prcId
|
this.prcId = this.$store.getters.handleProcess.prcId
|
||||||
@@ -231,7 +231,7 @@ export default {
|
|||||||
methods: {
|
methods: {
|
||||||
handleReset() {
|
handleReset() {
|
||||||
this.processForm.prcName = ''
|
this.processForm.prcName = ''
|
||||||
if(this.$route.query.taskDefinitionKey == 'aid4'){
|
if(this.$route.query.taskDefinitionKey == 'reEdit'){
|
||||||
this.processForm.prcName = this.prcName
|
this.processForm.prcName = this.prcName
|
||||||
}
|
}
|
||||||
this.applicationForm = {
|
this.applicationForm = {
|
||||||
@@ -270,7 +270,6 @@ export default {
|
|||||||
// console.log(checkedList)
|
// console.log(checkedList)
|
||||||
const parts = []
|
const parts = []
|
||||||
const partsName = []
|
const partsName = []
|
||||||
console.log(checkedList, '0009999')
|
|
||||||
checkedList.map((item, index) => {
|
checkedList.map((item, index) => {
|
||||||
parts.push(item.userId || item.USID)
|
parts.push(item.userId || item.USID)
|
||||||
partsName.push(item.uname)
|
partsName.push(item.uname)
|
||||||
@@ -304,7 +303,7 @@ export default {
|
|||||||
this.saveLoading = true
|
this.saveLoading = true
|
||||||
|
|
||||||
let submitJson = JSON.stringify({...this.assignForm, userId: this.$store.getters.userInfo.usid,approvalOpinion:this.assignForm.remark})
|
let submitJson = JSON.stringify({...this.assignForm, userId: this.$store.getters.userInfo.usid,approvalOpinion:this.assignForm.remark})
|
||||||
let dataJson = JSON.stringify(this.tableData)
|
let dataJson = JSON.stringify(this.processForm)
|
||||||
let params = {
|
let params = {
|
||||||
prcName: this.processForm.prcName,
|
prcName: this.processForm.prcName,
|
||||||
userId: this.$store.getters.userInfo.usid,
|
userId: this.$store.getters.userInfo.usid,
|
||||||
@@ -335,13 +334,14 @@ export default {
|
|||||||
console.log(this.$store.getters.userInfo.usid, " this.$store.getters.userInfo.USID")
|
console.log(this.$store.getters.userInfo.usid, " this.$store.getters.userInfo.USID")
|
||||||
this.$refs.assignFormRef.validate(async v => {
|
this.$refs.assignFormRef.validate(async v => {
|
||||||
debugger
|
debugger
|
||||||
let z=this.$refs.basMes.submit()
|
this.processForm=this.$refs.basMes.form
|
||||||
|
let z=this.$refs.basMes.submit()
|
||||||
if (v && z) {
|
if (v && z) {
|
||||||
//如果不是第一次
|
//如果不是第一次
|
||||||
if (this.initShow) {
|
if (this.initShow) {
|
||||||
let flag=await this.JuggleSub(this.taskId)
|
let flag=await this.JuggleSub(this.taskId)
|
||||||
if(flag){
|
if(flag){
|
||||||
let dataJson = JSON.stringify(this.tableData)
|
let dataJson = JSON.stringify(this.processForm)
|
||||||
let submitJson = JSON.stringify({...this.assignForm, userId: this.$store.getters.userInfo.usid,approvalOpinion:this.assignForm.remark})
|
let submitJson = JSON.stringify({...this.assignForm, userId: this.$store.getters.userInfo.usid,approvalOpinion:this.assignForm.remark})
|
||||||
this.completeProcess({
|
this.completeProcess({
|
||||||
dataJson,
|
dataJson,
|
||||||
@@ -368,7 +368,7 @@ export default {
|
|||||||
approveData: {
|
approveData: {
|
||||||
...this.processForm, ...this.assignForm,
|
...this.processForm, ...this.assignForm,
|
||||||
userId: this.$store.getters.userInfo.usid
|
userId: this.$store.getters.userInfo.usid
|
||||||
}, dataMsg: this.tableData
|
}, dataMsg: this.processForm
|
||||||
}
|
}
|
||||||
form.approvalOpinion = this.assignForm.remark
|
form.approvalOpinion = this.assignForm.remark
|
||||||
form.prcType = this.prcType
|
form.prcType = this.prcType
|
||||||
|
|||||||
@@ -118,7 +118,7 @@ export default {
|
|||||||
this.$store.commit('setHandleProcess',params)
|
this.$store.commit('setHandleProcess',params)
|
||||||
switch (row.prcType) {
|
switch (row.prcType) {
|
||||||
case '1' :
|
case '1' :
|
||||||
if (row.taskDefinitionKey == 'aid1' || row.taskDefinitionKey == 'aid4') {
|
if (row.taskDefinitionKey == 'start' || row.taskDefinitionKey == 'reEdit') {
|
||||||
this.$router.push({
|
this.$router.push({
|
||||||
path: '/permission/launch',
|
path: '/permission/launch',
|
||||||
query: {
|
query: {
|
||||||
@@ -136,7 +136,27 @@ export default {
|
|||||||
taskDefinitionKey:row.taskDefinitionKey
|
taskDefinitionKey:row.taskDefinitionKey
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
}
|
};break;
|
||||||
|
case '2' :
|
||||||
|
if (row.taskDefinitionKey == 'start' || row.taskDefinitionKey == 'reEdit') {
|
||||||
|
this.$router.push({
|
||||||
|
path: '/reportprocess/launch',
|
||||||
|
query: {
|
||||||
|
id: this.$route.query.id,
|
||||||
|
type:'yiban',
|
||||||
|
taskDefinitionKey:row.taskDefinitionKey
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}else{
|
||||||
|
this.$router.push({
|
||||||
|
path: '/reportprocess/examine',
|
||||||
|
query: {
|
||||||
|
id: this.$route.query.id,
|
||||||
|
type:'yiban',
|
||||||
|
taskDefinitionKey:row.taskDefinitionKey
|
||||||
|
}
|
||||||
|
})
|
||||||
|
};break;
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -109,7 +109,7 @@ export default {
|
|||||||
switch (row.prcType) {
|
switch (row.prcType) {
|
||||||
case '1' :
|
case '1' :
|
||||||
debugger
|
debugger
|
||||||
if (row.taskDefinitionKey == 'aid4') {
|
if (row.taskDefinitionKey == 'reEdit') {
|
||||||
this.$router.push({
|
this.$router.push({
|
||||||
path: '/permission/launch',
|
path: '/permission/launch',
|
||||||
query: {
|
query: {
|
||||||
@@ -127,7 +127,27 @@ export default {
|
|||||||
prcName: row.prcName
|
prcName: row.prcName
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
}
|
};break;
|
||||||
|
case '2' :
|
||||||
|
if (row.taskDefinitionKey == 'start' || row.taskDefinitionKey == 'reEdit') {
|
||||||
|
this.$router.push({
|
||||||
|
path: '/reportprocess/launch',
|
||||||
|
query: {
|
||||||
|
id: this.$route.query.id,
|
||||||
|
prcName: row.prcName,
|
||||||
|
taskDefinitionKey:row.taskDefinitionKey
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}else{
|
||||||
|
this.$router.push({
|
||||||
|
path: '/reportprocess/examine',
|
||||||
|
query: {
|
||||||
|
id: this.$route.query.id,
|
||||||
|
prcName: row.prcName,
|
||||||
|
taskDefinitionKey:row.taskDefinitionKey
|
||||||
|
}
|
||||||
|
})
|
||||||
|
};break;
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -121,7 +121,7 @@ export default {
|
|||||||
pId: this.pId
|
pId: this.pId
|
||||||
}
|
}
|
||||||
if(this.prcType == '1'){
|
if(this.prcType == '1'){
|
||||||
if(this.aid=='aid2'){
|
if(this.aid=='oneApply'){
|
||||||
params.replaceMap="oneApprove:"+ this.form.assignee+','+"oneApproveName:"+ this.form.assigneeName
|
params.replaceMap="oneApprove:"+ this.form.assignee+','+"oneApproveName:"+ this.form.assigneeName
|
||||||
}else{
|
}else{
|
||||||
params.replaceMap="twoApprove:"+ this.form.assignee+','+"twoApproveName:"+ this.form.assigneeName
|
params.replaceMap="twoApprove:"+ this.form.assignee+','+"twoApproveName:"+ this.form.assigneeName
|
||||||
|
|||||||
@@ -106,8 +106,8 @@ export default {
|
|||||||
res.isViewDetails = 1
|
res.isViewDetails = 1
|
||||||
res.prcType = prcType
|
res.prcType = prcType
|
||||||
res.prcNum = row.prcNum
|
res.prcNum = row.prcNum
|
||||||
if (res.taskDefinitionKey == 'aid1' ||
|
if (res.taskDefinitionKey == 'start' ||
|
||||||
res.taskDefinitionKey == 'aid4' ) {
|
res.taskDefinitionKey == 'reEdit' ) {
|
||||||
this.$router.push({
|
this.$router.push({
|
||||||
path: '/permission/launch',
|
path: '/permission/launch',
|
||||||
query: res,
|
query: res,
|
||||||
|
|||||||
Reference in New Issue
Block a user