案件包分案相关

This commit is contained in:
liuxi 2024-12-03 17:06:56 +08:00
parent f8163fc394
commit eb11d66e67
19 changed files with 1594 additions and 114 deletions

View File

@ -0,0 +1,295 @@
<template>
<div class="upload-file-wrap">
<el-row :gutter="24">
<el-col :span="span" v-if="isInCount">
<div class="el-col-ctn-box-import">
<div class="el-col-upload-box">
<el-upload
class="el-upload-box"
ref="upload"
drag
action=""
:accept="accept"
:show-file-list="false"
:http-request="httpRequest"
>
<div class="upload-file">
<div class="f14 color-text-secondary text-center">
<span class="color-1960F4">点击上传</span>
<span class="m-h-8 color-000">/</span>拖拽到此区域
</div>
</div>
</el-upload>
<div class="text-center color-text-secondary f12 p-v-8">请上传Excel文件大小在60M以内</div>
</div>
</div>
</el-col>
<!--上传的图片预览-->
<el-col :span="span" v-for="(item,i) in lists" :key="i" >
<div class="el-col-ctn-box-import"
@click="handlePreview(item)">
<div class="el-col-upload-box">
<div class="upload-preview-box">
<img v-if="item.deletable && !readOnly"
class="upload-delete-icon" src="../assets/image/icon_close.png" alt=""
@click.stop.prevent="handleDelete(item, i)">
<div class="upload-file">
<el-image class="el-image-upload" :src="item.iconFrontSrc" fit="scale-down"></el-image>
</div>
</div>
<div class="f14 text-center color-text-regular line-height-30">
{{showFileName ? item.fileName : uploadName}}
</div>
</div>
</div>
</el-col>
</el-row>
</div>
</template>
<script>
import projectConfig from "../services/projectConfig";
export default {
name: "uploadFile",
props: {
span: {
// layout
type: Number,
default: 5
},
accept: {
type: String,
default: '*',
},
imageHeight: {
//
type: String,
default: ''
},
imageMode: {
// ,uni image
type: String,
default: 'aspectFit'
},
readOnly: {
// true-false-
type: Boolean,
default: false
},
fileList: {
//
type: [Array, Object],
default: () => {
return [
//{ url:, fileName: }
]
}
},
uploadName: {
//
type: String,
default: '上传'
},
maxCount: {
//
type: Number,
default: 1
},
selectCount: {
//
type: Number,
default: 1
},
customUpload: {
//
type: Boolean,
default: false
},
autoUpload: {
//
type: Boolean,
default: true
},
showFileName: {
//
type: Boolean,
default: false
},
splitFileTitle: {
//
type: Boolean,
default: true
},
},
data() {
return {
lists: [
//{url: , fileName: , deletable: , readStatus: , iconFrontSrc: }
],
srcList: [],
}
},
computed: {
isInCount() {
return (this.lists.length < this.maxCount) && !this.readOnly
},
},
watch: {
//
fileList: {
immediate: true,
handler() {
this.formatFileList()
}
},
},
methods: {
formatFileList() {
let fileList = this.fileList || []
this.srcList = []
fileList = JSON.parse(JSON.stringify(fileList))
// console.log('upload===========formatFileList()==========fileList', fileList)
const lists = fileList.map(item => {
let obj = Object.assign(item)
obj.deletable = typeof(obj.deletable) === 'boolean' ? obj.deletable : true
let text = obj.url || obj.fileName
obj.fileType = this.$util.getFileExtension(text)
// ()
obj.iconFrontSrc = this.$util.getIcon(obj)
let previewUrl = `/manage-center/minio/preview/${obj.url}`
if(obj.url.includes('http')){
previewUrl = obj.url
}
obj.previewUrl = previewUrl
if(this.$util.getFileType(text) === 'image') {
//
obj.iconFrontSrc = obj.previewUrl
}
this.srcList.push(obj.iconFrontSrc)
return obj
});
this.lists = lists
console.log('uploadFile----:', this.lists)
// this.isInCount = (lists.length < this.maxCount) && !this.readOnly
},
async httpRequest(param) {
console.log('httpRequest上传文件',param)
let fileType = this.$util.getFileExtension(param.file.name)
if(this.accept !== '*' && this.accept.indexOf(fileType) === -1) {
this.$message.warning(`不能上传${fileType}格式的文件`)
return
}
let size = param.file.size/1024/1024
if(size > 60){
this.$message.warning(`文件大小不能超过60M`)
return
}
try{
let formData = new FormData()
// console.log('',param.file)
formData.append('file', param.file)
// let uploadFileRes = await fetchApi.uploadFile(formData);
let uploadFileRes = await this.$fetchApi.uploadFile(formData);
// console.log(uploadFileRes,11111)
let fileList = JSON.parse(JSON.stringify(this.fileList))
fileList.push({
url: uploadFileRes.url,
})
this.$emit('handleUploadFile',{fileList:fileList,uploadFileRes:uploadFileRes})
}catch (e) {
this.$message.error(e.msg)
}
},
async handlePreview(item) {
console.log(item)
try {
let res = await this.$fetchApi.getMinioToken({objectName: item.url})
console.log(res)
window.open(`${item.previewUrl}?token=${res}`, '_target')
}catch (e) {
this.$message.error(e.msg || e)
}
},
handleDelete(item, i) {
this.lists.splice(i, 1)
let fileList = JSON.parse(JSON.stringify(this.fileList))
fileList.splice(i, 1)
this.$emit('handleUploadFile', {fileList:fileList,uploadFileRes:{}})
}
},
}
</script>
<style lang="scss">
.el-col-ctn-box-import{
width: 344px;
height: 180px;
.el-col-upload-box{
width: 344px;
height: 180px;
border-radius: 4px;
overflow: hidden;
}
.el-upload-dragger{
width: 100%;
height: 144px;
}
.el-upload-box{
width: 100%;
height: 144px;
// border: 2px dashed #EBEEF5;
}
}
.el-col-ctn-box-import .el-upload,
.el-col-ctn-box-import .upload-file{
width: 100% !important;
}
.el-col-ctn-box-import .upload-preview-box{
position: relative;
height: 144px;
border: 1px dashed #EBEEF5;
}
.el-col-ctn-box-import .upload-delete-icon{
width: 30px;
height: auto;
position: absolute;
right: 0;
top: 0;
cursor: pointer;
z-index: 11111;
}
.el-col-ctn-box-import .upload-file{
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
width: 100%;
height: 144px;
}
.el-col-ctn-box-import .uploader-file-icon{
font-size: 32px;
color: $color-text-secondary;
}
.el-col-ctn-box-import .el-image-upload{
border-radius: 4px;
padding: 5px;
box-sizing: border-box;
}
.el-col-ctn-box-import .txt-center{
height: 40px;
line-height: 20px;
}
.line-height-30{
line-height: 30px;
}
</style>

View File

@ -15,12 +15,12 @@
<el-col :span="24">
<div class="flex-row align-items-center">
<div class="mr-8 flex-shrink-0">部门</div>
<div class="mr-8 flex-shrink-0">区域</div>
<div class="width100">
<el-select v-model="deptIds"
size="medium"
multiple
clearable placeholder="请选择部门"
clearable placeholder="请选择区域"
@change="handleChangeDept"
class="width100">
<el-option
@ -112,7 +112,7 @@ import api from "@/services/caseManagement";
},
data() {
return {
deptIds:[],//id
deptIds:[],//id
queryParam:{
planStartTime:'',
planEndTime:'',
@ -147,7 +147,7 @@ import api from "@/services/caseManagement";
]
},
],
departmentOptions:[],//
departmentOptions:[],//
isIndeterminate:true,
checkedAll:[],
@ -155,10 +155,10 @@ import api from "@/services/caseManagement";
};
},
mounted () {
this.getDeptList();//
this.getDeptList();//
},
methods: {
//
//
getDeptList(){
let data = {
companyId: this.$store.state.userinfo.companyId,
@ -181,7 +181,7 @@ import api from "@/services/caseManagement";
this.peopleList=[]
},
// id
// id
getUserByDeptList(){
let data = {
ids:this.deptIds
@ -221,7 +221,7 @@ import api from "@/services/caseManagement";
})
})
this.peopleList = list
// console.log('',this.peopleList)
// console.log('',this.peopleList)
}
})
},

View File

@ -67,9 +67,9 @@
<el-row :gutter="56">
<el-col :span="8">
<div class="flex-row-center align-items-center height-40 mb-24">
<span class="tabs__search-criteria-title flex-shrink-0 pr-16">部门</span>
<span class="tabs__search-criteria-title flex-shrink-0 pr-16">区域</span>
<el-select v-model="queryParam.deptId"
clearable placeholder="请选择部门"
clearable placeholder="请选择区域"
@keydown.enter.native="handleSearch"
:disabled="deptDisabled"
class="width100">
@ -248,7 +248,7 @@ import api from "@/services/caseManagement";
},
mediateStatusData:[],//
financialProductsTypeOptions:[],//
departmentOptions:[],//
departmentOptions:[],//
queryParam: {
financialOrgName:'',//
caseNo: '',//
@ -258,13 +258,13 @@ import api from "@/services/caseManagement";
creditorPhone:'',//
endTime: '',//
beginTime:'',//
deptId:'',//id
deptId:'',//id
current:1,
size:10,
caseName:'',//
dataAuthUserId:'',//id
dataAuthDeptId:'',//id
dataAuthDeptId:'',//id
mediatorId:'',//id
resultStatus:'',//
@ -291,7 +291,7 @@ import api from "@/services/caseManagement";
},
{
prop: "deptId",
label: "归属部门",
label: "归属区域",
showOverflowTooltip: true,
formatter: this.formatdeptName,
},
@ -327,7 +327,7 @@ import api from "@/services/caseManagement";
importCaseDialog:null,//
addCaseDialog:null,//
editCaseDrawer:null,//
deptDisabled:false,//
deptDisabled:false,//
caseStatusData:[],//
caseStatusShow:true,//
@ -339,8 +339,8 @@ import api from "@/services/caseManagement";
this.getCaseCount();//
this.getMediateStatusEnum();//
this.getDict();//
this.getDeptList();//
//
this.getDeptList();//
//
let identifier = this.$store.state.userinfo.identifier
if(identifier=='mediator'){
this.deptDisabled = true
@ -481,7 +481,7 @@ import api from "@/services/caseManagement";
}
})
},
//
//
getDeptList(){
let data = {
companyId: this.$store.state.userinfo.companyId,
@ -505,7 +505,7 @@ import api from "@/services/caseManagement";
}
})
},
// id
// id
formatdeptName(row, column, cellValue, index){
let obj = this.departmentOptions.find((item) => {
return item.id == row.deptId

View File

@ -0,0 +1,391 @@
<template>
<div>
<el-dialog
:title="caseAllocationDialog.title"
:visible="true"
width="880px"
append-to-body
:close-on-click-modal="false"
@close="handleClose"
>
<div class="dialog-content">
<div class="pb-16">
<el-row :gutter="20" type="flex" align="middle">
<el-col :span="24">
<div class="flex-row align-items-center">
<div class="mr-8 flex-shrink-0">区域</div>
<div class="width100">
<el-select v-model="deptId"
size="medium"
clearable placeholder="请选择区域"
@change="handleChangeDept"
class="width100">
<el-option
v-for="item in departmentOptions"
:key="item.id"
:label="item.name"
:value="item.id"
class="width100"
>
</el-option>
</el-select>
</div>
</div>
</el-col>
</el-row>
</div>
<el-scrollbar class="bor bg-color-light min-height250">
<div class="department-wrap">
<div v-for="(item,inx) in peopleList" :key="inx" class="department-wrap-list">
<div class="department-dept">
<el-checkbox v-model="checkedAll" :label="item.deptId" @change="handleCheckChange(1,inx,item,item.deptId,$event)">{{item.name}}({{item.count}})</el-checkbox>
</div>
<div class="flex-row justify-content-start flex-flow-wrap ">
<div v-for="(v,i) in item.values" :key="i" class="pt-16" style="flex:0 0 25%">
<el-checkbox v-model="checkedAll" :label="v.id" @change="handleCheckChange(2,inx,v,item.deptId,$event)">{{v.realName}}</el-checkbox>
</div>
</div>
</div>
</div>
</el-scrollbar>
<div class="p-v-24">
<el-form ref="ruleForm"
:model="queryParam"
:rules="rulesClient"
label-width="120px"
class="demo-ruleForm">
<el-row :gutter="20" type="flex" align="middle">
<el-col :span="24">
<el-form-item label="分配方式" prop="dispatchType" label-width="80px">
<template>
<el-radio v-model="queryParam.dispatchType" :label="1">平均分配</el-radio>
<el-radio v-model="queryParam.dispatchType" :label="2">调解中案件量最少</el-radio>
<el-radio v-model="queryParam.dispatchType" :label="3">当天分案量最少</el-radio>
<el-radio v-model="queryParam.dispatchType" :label="4">当月分案量最少</el-radio>
<el-radio v-model="queryParam.dispatchType" :label="5">同案由调解成功率最高</el-radio>
</template>
</el-form-item>
</el-col>
</el-row>
</el-form>
</div>
</div>
<span slot="footer" class="dialog-footer">
<el-button @click="handleClose()">取消</el-button>
<el-button type="primary" @click="handleSubmit()">确认</el-button>
</span>
</el-dialog>
</div>
</template>
<script>
import api from "@/services/caseManagement";
export default {
components: {
},
props: {
caseAllocationDialog: {
type: Object,
default: () => {
return {}
},
},
},
data() {
return {
deptId:[],//id
queryParam:{
id:'',//ID
dispatchType:1,//12345
},
userList:[],
rulesClient: {
dispatchType: [
{ required: true, message: '请选择分案方式', trigger: 'change',},
],
},
peopleList:[
{deptId:1,name:'调解一部',count:10,
values:[
{id:1,deptId:1,realName:'张三' },
{id:2,deptId:1,realName:'张三' },
{id:3,deptId:1,realName:'张三' },
{id:4,deptId:1,realName:'张三' },
{id:5,deptId:1,realName:'里面' },
]
}
],
departmentOptions:[],//
checkedAll:[],
chooseChecked:[],
};
},
mounted () {
this.getDeptList();//
},
methods: {
//
getDeptList(){
let data = {
companyId: this.$store.state.userinfo.companyId,
current: 1,
size: 500,
pid:0
}
api.getDeptList(data).then(res => {
if (!res.code) {
this.departmentOptions = res.records;
this.deptId = this.departmentOptions[0].id
this.getByDeptList()
}
})
},
handleChangeDept(e){
this.checkedAll=[]
this.chooseChecked=[]
this.getByDeptList()
this.peopleList=[]
},
// id
getByDeptList(){
api.getDeptList({companyId:this.$store.state.userinfo.companyId,current:1,size:500,pid:this.deptId}).then(res => {
if (!res.code)
{
let deptList = []
res.records.forEach(item =>{
let userlist = []
api.getUserByDeptList({ids:[item.id]}).then(res => {
res.forEach(item =>{
userlist.push({
id:item.id,
realName:item.realName,
checked:false
})
})
})
deptList.push({
deptId:item.id,
name:item.name,
count:item.count,
checked:false,
values:userlist
})
})
this.peopleList = deptList
}
})
},
handleCheckChange(type,a=0,chooseItem,deptId,event){
// console.log(chooseItem,event,a,'this.peopleList')
let self = this
if(type==2){//
let index = 0;
self.peopleList[a].values.map((item)=>{
if(self.checkedAll.indexOf(item.id)>-1){
index+=1
}
})
if(index>0){
if(self.checkedAll.indexOf(self.peopleList[a].deptId)<0){
self.checkedAll.push(self.peopleList[a].deptId)
}
}else{
if(self.checkedAll.indexOf(self.peopleList[a].deptId)>0){
self.checkedAll.splice(self.checkedAll.indexOf(self.peopleList[a].deptId),1)
}
}
if(event)
{
if(this.chooseChecked.length==0){self.chooseChecked.push({deptId:deptId,child:[]})}
this.chooseChecked.forEach((item,index) => {
let haveDeptId = self.chooseChecked.find(citem=>{
return citem.deptId===deptId
})
if(haveDeptId != undefined)
{
if(item.deptId==deptId)
{
item.child.push({deptId:deptId,id:chooseItem.id,realName:chooseItem.realName})
}
}
else
{
self.chooseChecked.push({deptId:deptId,child:[{deptId:deptId,id:chooseItem.id,realName:chooseItem.realName}]})
}
});
}
else
{
this.chooseChecked.forEach((item,index) => {
item.child.forEach((itemchild,index) => {
if(itemchild.id==chooseItem.id)
{
item.child.splice(index,1)
}
});
});
}
let childnum = this.chooseChecked.find(item=>{
return item.deptId === deptId
}).child.length;
let allchildnum = this.peopleList.find(item=>{
return item.deptId === deptId
}).values.length;
if(childnum != allchildnum)
{
if(self.checkedAll.indexOf(deptId)>-1){
self.checkedAll.splice(self.checkedAll.indexOf(deptId),1)
}
}
else
{
if(self.checkedAll.indexOf(deptId)<0){
self.checkedAll.push(deptId)
}
}
}else{
if(self.checkedAll.indexOf(self.peopleList[a].deptId)>-1){
self.peopleList[a].values.map((item)=>{
if(self.checkedAll.findIndex((n)=> n==item.id)<0){
self.checkedAll.push(item.id)
// self.checkedAll.push({id:item.id,realName:item.realName,deptId:self.peopleList[a].deptId})
}
})
}else{
self.peopleList[a].values.map((item)=>{
if(self.checkedAll.findIndex((n)=> n==item.id)>-1){
self.checkedAll.splice(self.checkedAll.findIndex((n)=> n==item.id),1)
}
})
}
let haveDeptId=self.chooseChecked.find(citem=>{
return citem.deptId === deptId
})
if(event)
{
if(haveDeptId == undefined)
{
let addchild=[]
self.peopleList.forEach((item,index) => {
if(item.deptId==deptId)
{
item.values.forEach((item,index) => {
addchild.push({deptId:deptId,id:item.id,realName:item.realName})
});
}
});
self.chooseChecked.push({deptId:deptId,child:addchild})
}
}
else
{
if(haveDeptId != undefined)
{
self.chooseChecked.forEach((item,index) => {
if(item.deptId==deptId)
{
self.chooseChecked.splice(index,1)
}
});
}
}
}
// console.log(this.checkedAll,self.chooseChecked,'checkedAll')
},
handleSubmit(){
if(!this.$clickThrottle()) { return }//
let chooseUser=[]
this.chooseChecked.forEach((item,index) => {
item.child.forEach((item,index) => {
chooseUser.push({deptId:item.deptId,id:item.id,realName:item.realName})
});
});
if(chooseUser.length == 0)
{
this.$message({
showClose: true,
message: '请先选择调解员!',
type: 'warning'
});
return false
}
this.$refs.ruleForm.validate((valid) => {
if(valid) {
let data = {
id:this.caseAllocationDialog.ObjectInfo.id,
dispatchType:this.queryParam.dispatchType,
userList:chooseUser
}
api.postpkgdispatchCase(data).then(res => {
this.$message({
showClose: true,
message: '调解案件分配成功!',
type: 'success'
});
this.$parent.getCaseInfoList()
this.handleClose()
})
}
})
},
handleSearch(){
},
handleChangeDate(){
let planStart = new Date(this.queryParam.planStartTime);
let planEnd = new Date(this.queryParam.planEndTime);
if (planEnd < planStart) {
this.$message({
showClose: true,
message: '开始日期不能大于结束日期!',
type: 'warning'
});
this.queryParam.planEndTime=''
}
},
handleClose() {
this.$emit('update:caseAllocationDialog', null)
},
}
};
</script>
<style scoped lang="scss">
.dialog-content{
padding: 16px 24px;
max-height:500px
}
.department-wrap{
padding: 16px 24px;
max-height: 250px;
.department-wrap-list{
margin-bottom:32px;
}
.department-wrap-list:last-child{
margin-bottom:0;
}
}
.min-height250{min-height: 250px;}
.department-dept ::v-deep .el-checkbox__label {color: $color-000000}
</style>

View File

@ -0,0 +1,192 @@
<template>
<div>
<el-dialog
:title="importCaseDialog.title"
:visible="true"
width="580px"
append-to-body
:close-on-click-modal="false"
@close="handleClose">
<!-- 基本信息 -->
<div>
<div class="p-h-24">
<el-form ref="ruleFormBase"
:model="baseInfo"
:rules="rulesClient"
label-width="150px"
class="demo-ruleForm">
<el-row type="flex" align="middle">
<el-col :span="24">
<el-form-item label="案件包名" prop="pkgName">
<el-input
v-model.trim="baseInfo.pkgName"
placeholder="请输入案件包名"
clearable
maxlength="25"
></el-input>
</el-form-item>
</el-col>
</el-row>
<el-row type="flex" align="middle">
<el-col :span="24">
<el-form-item label="委案机构" prop="entrustingAgencyName">
<el-input
v-model.trim="baseInfo.entrustingAgencyName"
placeholder="请输入委案机构"
clearable
maxlength="25"
></el-input>
</el-form-item>
</el-col>
</el-row>
<el-row type="flex" align="middle">
<el-col :span="24">
<el-form-item label="委案日期" prop="planStartTime">
<el-date-picker class="width100"
v-model="baseInfo.planStartTime"
type="date"
value-format="yyyy-MM-dd HH:mm:ss"
placeholder="选择委案日期">
</el-date-picker>
</el-form-item>
</el-col>
</el-row>
<el-row type="flex" align="middle">
<el-col :span="24">
<el-form-item label="委案期限(月)" prop="months">
<el-input-number v-model="baseInfo.months" :min="0" :max="100" class="width100"></el-input-number>
</el-form-item>
</el-col>
</el-row>
<el-row type="flex" align="middle">
<el-col :span="24">
<el-form-item label="上传文件" prop="fileInfo">
<upload-import :file-list="fileList" :max-count="1"
:show-file-name="true"
accept=".xls,.xlsx"
@handleUploadFile="handleUploadFile">
</upload-import>
</el-form-item>
</el-col>
</el-row>
</el-form>
</div>
</div>
<span slot="footer" class="dialog-footer">
<el-button @click="handleClose">取消</el-button>
<el-button
type="primary"
@click="handleSubmit">确认保存
</el-button>
</span>
</el-dialog>
</div>
</template>
<script>
import apipk from "@/services/casePackageManagement";
export default {
components: {
uploadImport:() => import('@/components/uploadImportPackage.vue'),//
},
props: {
importCaseDialog: {
type: Object,
default: () => {
return {}
},
},
},
data() {
return {
baseInfo:{
pkgName:'',//
entrustingAgencyName:'',//
planStartTime:'',//
months:1,//
fileInfo:null,
},
rulesClient: {
pkgName: [
{ required: true, message: '请输入案件包名', trigger: 'change',},
],
planStartTime: [
{ required: true, message: '请输入委案时间', trigger: 'change',},
],
months: [
{ required: true, message: '请输入委案期限', trigger: 'change',},
],
fileInfo: [
{ required: true, message: '请上传文件', trigger: 'change',},
]
},
financialProductsTypeOptions:[],//
fileList:[],//
};
},
mounted () {
},
methods: {
handleSubmit(){
if(!this.$clickThrottle()) { return }//
this.$refs.ruleFormBase.validate((valid) => {
if (valid){
let data = {
...this.baseInfo,//
}
apipk.CasePkgimport(data).then(res => {
this.handleClose()
this.$parent.getCaseInfoList(1)
})
}
})
},
//
handleUploadFile(JsonData){
console.log('获取上传文件信息',JsonData.uploadFileRes)
let fileitem = JSON.parse(JSON.stringify(JsonData.fileList))
this.fileList = fileitem.map((item,i) => {
let time = this.$util.getTimestamp()
let fileType = this.$util.getFileExtension(item.url)
let fileName = `${time}.${fileType}`
return {
url: item.url,
fileName:fileName,
}
})
if(fileitem.length == 0 ){
this.baseInfo.fileInfo = null
}
else
{
this.baseInfo.fileInfo = JsonData.uploadFileRes
}
},
handleClose() {
this.$emit('update:importCaseDialog', null)
},
}
};
</script>
<style scoped lang="scss">
.dialog-content{
padding: 16px 24px;
// max-height:500px
}
</style>

View File

@ -24,7 +24,7 @@
<el-col :span="8">
<div class="flex-row-center align-items-center height-40 mb-24">
<span class="tabs__search-criteria-title flex-shrink-0 pr-16">委案机构</span>
<el-select v-model="queryParam.productTypeId"
<el-select v-model="queryParam.entrustingAgencyName"
clearable placeholder="请选择委案机构"
@keydown.enter.native="handleSearch"
class="width100">
@ -49,25 +49,18 @@
<el-col :span="8">
<div class="flex-row-center align-items-center height-40 mb-24">
<span class="tabs__search-criteria-title flex-shrink-0 pr-16">案件即将到期</span>
<el-select v-model="queryParam.resultStatus"
<el-select v-model="queryParam.willEnd"
clearable placeholder="请选择案件是否即将到期"
@keydown.enter.native="handleSearch"
:disabled="deptDisabled"
class="width100">
<el-option
v-for="item in caseStatusData"
:key="item.code"
:label="item.desc"
:value="item.code">
</el-option>
<el-option label="是" value="true"></el-option>
<el-option label="否" value="false"></el-option>
</el-select>
</div>
</el-col>
</el-row>
<el-row :gutter="56" v-if="caseStatusShow">
</el-row>
<el-row :gutter="56">
<el-col :span="18">
<div class="flex-row align-items-center height-40 mb-24">
@ -106,7 +99,6 @@
<el-button size="small" type="primary" @click="handleImport">批量导入案件</el-button>
<el-button size="small" @click="handleAddForm">添加案件</el-button>
<el-button size="small" @click="handleBatchDelete">错误修复</el-button>
<el-button size="small" type="primary" @click="handleCaseAllocation">案件分配</el-button>
</div>
</div>
@ -116,19 +108,28 @@
<el-table-column type="selection" width="55" ></el-table-column>
<el-table-column prop="pkgName" label="案件包名称" show-overflow-tooltip ></el-table-column>
<el-table-column prop="entrustingAgencyName" label="委案机构" show-overflow-tooltip ></el-table-column>
<el-table-column prop="resultStatus" label="产品类别" show-overflow-tooltip ></el-table-column>
<el-table-column prop="planStartTime" label="委案时间" show-overflow-tooltip ></el-table-column>
<el-table-column prop="resultStatus" label="委案期限" show-overflow-tooltip ></el-table-column>
<el-table-column prop="resultStatus" label="案件数量" show-overflow-tooltip ></el-table-column>
<el-table-column prop="resultStatus" label="待分案" show-overflow-tooltip ></el-table-column>
<el-table-column prop="resultStatus" label="已分案" show-overflow-tooltip ></el-table-column>
<!-- <el-table-column prop="resultStatus" label="产品类别" show-overflow-tooltip ></el-table-column> -->
<el-table-column prop="planStartTime" label="委案时间" show-overflow-tooltip >
<template slot-scope="scope">
<span >{{ scope.row.planStartTime | formaDate("yyyy-MM-dd") }}</span>
</template>
</el-table-column>
<el-table-column prop="months" label="委案期限(月)" show-overflow-tooltip ></el-table-column>
<el-table-column prop="caseTotal" label="案件数量" show-overflow-tooltip ></el-table-column>
<el-table-column prop="resultStatus" label="待分案" show-overflow-tooltip >
<template slot-scope="scope">
<span >{{ scope.row.caseTotal - scope.row.assignTotal}}</span>
</template>
</el-table-column>
<el-table-column prop="assignTotal" label="已分案" show-overflow-tooltip ></el-table-column>
<el-table-column label="操作" width="370">
<template slot-scope="scope">
<div class="flex-row align-items-center">
<el-button size="mini" @click="handleEdit(scope)">查看</el-button>
<el-button size="mini" @click="handleEdit(scope)">案件分案</el-button>
<el-button size="mini" @click="handleCaseAllocation(scope)">案件分配</el-button>
<el-button size="mini" @click="handleEdit(scope)">预设还款方案</el-button>
<el-button size="mini" @click="handleDelete(scope)">删除</el-button>
<el-button size="mini" v-if="scope.row.assignTotal == 0" @click="handleDelete(scope)">删除</el-button>
<el-button size="mini" v-if="scope.row.assignTotal > 0" @click="handleBack(scope)">撤回分案</el-button>
</div>
</template>
</el-table-column>
@ -149,23 +150,23 @@
</div>
</div>
<!-- 导入 -->
<!-- <importCaseDialog v-if="importCaseDialog" :importCaseDialog.sync="importCaseDialog" /> -->
<importPackageDialog v-if="importCaseDialog" :importCaseDialog.sync="importCaseDialog" />
<!-- 新增 -->
<!-- <addCaseDialog v-if="addCaseDialog" :addCaseDialog.sync="addCaseDialog" /> -->
<!-- 编辑 -->
<!-- <editCaseDrawer v-if="editCaseDrawer" :editCaseDrawer.sync="editCaseDrawer"/> -->
<!-- 案件分配-->
<!-- <caseAllocationDialog v-if="caseAllocationDialog" :caseAllocationDialog.sync="caseAllocationDialog" /> -->
<caseAllocationDialog v-if="caseAllocationDialog" :caseAllocationDialog.sync="caseAllocationDialog" />
</div>
</template>
<script>
import api from "@/services/casePackageManagement";
export default {
components: {
// importCaseDialog: () => import('./components/importCaseDialog'),//
importPackageDialog: () => import('./components/importPackageDialog'),//
// addCaseDialog: () => import('./components/addCaseDialog'),//
// editCaseDrawer: () => import('./components/editCaseDrawer'),//
// caseAllocationDialog: () => import('./components/caseAllocationDialog'),//
caseAllocationDialog: () => import('./components/caseAllocationDialog'),//
},
data() {
return {
@ -176,12 +177,13 @@ import api from "@/services/casePackageManagement";
mediateStatusData:[],//
financialProductsTypeOptions:[],//
departmentOptions:[],//
departmentOptions:[],//
queryParam: {
pkgName:'',//
pkgNo: '',//
entrustingAgencyName: '',//
endTime: '',//
beginTime:'',//
willEnd:'',
current:1,
size:10,
},
@ -193,14 +195,14 @@ import api from "@/services/casePackageManagement";
importCaseDialog:null,//
addCaseDialog:null,//
editCaseDrawer:null,//
deptDisabled:false,//
deptDisabled:false,//
}
},
created() {
//
//
let identifier = this.$store.state.userinfo.identifier
if(identifier=='mediator'){
this.deptDisabled = true
@ -215,11 +217,7 @@ import api from "@/services/casePackageManagement";
contentHeight(){
let oh = document.documentElement.clientHeight;
if(this.showSearch){
if(this.caseStatusShow){
return oh-56-48-430-32
}else{
return oh-56-48-366-32
}
return oh-56-48-366-32
}else{
return oh-56-48-175-32
@ -231,7 +229,7 @@ import api from "@/services/casePackageManagement";
//
handleImport(){
this.importCaseDialog={
title:'导入案件',
title:'批量导入案件',
}
},
//
@ -274,6 +272,22 @@ import api from "@/services/casePackageManagement";
});
}).catch(() => {});
},
//
handleBack(scope){
this.$confirm("请确定是否撤回分案?", "提示", {
confirmButtonText: "确定",
cancelButtonText: "取消",
type: "warning",
}).then(() => {
if(!this.$clickThrottle()) { return }//
// api.CasePkgdeleteById({id:scope.row.id}).then((res) => {
// this.$message.success("");
// this.getCaseInfoList(1)
// });
}).catch(() => {});
},
//
handleAddForm(){
this.addCaseDialog={
@ -281,9 +295,21 @@ import api from "@/services/casePackageManagement";
}
},
//
handleCaseAllocation(){
handleCaseAllocation(scope){
if((scope.row.caseTotal - scope.row.assignTotal) <= 0)
{
this.$message({
showClose: true,
message: '该案件包没有待分配的案件!',
type: 'warning'
});
return false
}
this.caseAllocationDialog={
title:'案件分配',
ObjectInfo:scope.row
}
},
//
@ -296,6 +322,10 @@ import api from "@/services/casePackageManagement";
},
//
getCaseInfoList(val){
this.queryParam.planBegin = this.queryParam.beginTime
this.queryParam.planEnd = this.queryParam.endTime
this.queryParam.current = val
api.getCasePkgQuery(this.queryParam).then(res => {
if (!res.code) {
@ -304,14 +334,6 @@ import api from "@/services/casePackageManagement";
}
})
},
formatProductType(row, column, cellValue, index){
// console.log('row',row)
let obj = this.financialProductsTypeOptions.find((item) => {
return item.code == row.productTypeId
})
return row.productTypeId != null ? <div>{obj?obj.codeName:'-'}</div> : '-'
},
handleToggleSearch() {
this.showSearch = !this.showSearch
},

View File

@ -67,9 +67,9 @@
<el-row :gutter="56">
<el-col :span="8">
<div class="flex-row-center align-items-center height-40 mb-24">
<span class="tabs__search-criteria-title flex-shrink-0 pr-16">部门</span>
<span class="tabs__search-criteria-title flex-shrink-0 pr-16">区域</span>
<el-select v-model="queryParam.deptId"
clearable placeholder="请选择部门"
clearable placeholder="请选择区域"
@keydown.enter.native="handleSearch"
class="width100">
<el-option
@ -238,13 +238,13 @@ import api from "@/services/caseManagement";
creditorPhone:'',//
endTime: '',//
beginTime:'',//
deptId:'',//id
deptId:'',//id
current:1,
size:10,
caseName:'',//
dataAuthUserId:'',//id
dataAuthDeptId:'',//id
dataAuthDeptId:'',//id
mediatorId:'',//id
resultStatus:'',//
@ -271,7 +271,7 @@ import api from "@/services/caseManagement";
},
{
prop: "deptId",
label: "归属部门",
label: "归属区域",
showOverflowTooltip: true,
formatter: this.formatdeptName,
},
@ -296,11 +296,11 @@ import api from "@/services/caseManagement";
],
tableData: [],
financialProductsTypeOptions:[],//
departmentOptions:[],//
departmentOptions:[],//
total:0,
uniqueSelection:[],
editCaseDrawer:null,//
deptDisabled:false,//
deptDisabled:false,//
caseStatusData:[],//
caseStatusShow:true,//
}
@ -309,8 +309,8 @@ import api from "@/services/caseManagement";
this.getCaseCount();//
this.getMediateStatusEnum();//
this.getDict();//
this.getDeptList();//
//
this.getDeptList();//
//
let identifier = this.$store.state.userinfo.identifier
if(identifier=='mediator'){
this.deptDisabled = true
@ -387,7 +387,7 @@ import api from "@/services/caseManagement";
}
})
},
//
//
getDeptList(){
let data = {
companyId: this.$store.state.userinfo.companyId,
@ -485,7 +485,7 @@ import api from "@/services/caseManagement";
},
// id
// id
formatdeptName(row, column, cellValue, index){
let obj = this.departmentOptions.find((item) => {
return item.id == row.deptId

View File

@ -0,0 +1,163 @@
<template>
<div>
<el-dialog
:title="addOrEditAreaConfig.title"
:visible="true"
width="400px"
append-to-body
:close-on-click-modal="false"
@close="handleClose"
>
<el-scrollbar class="bor">
<div class="dialog-content">
<el-form ref="ruleForm"
:model="deptInfo"
:rules="rulesClient"
label-width="140px"
class="demo-ruleForm">
<el-row type="flex" align="middle">
<el-col :span="24">
<el-form-item label="区域名称" prop="name">
<el-input
v-model.trim="deptInfo.name"
placeholder="请输入" maxlength="20"
clearable
></el-input>
</el-form-item>
</el-col>
</el-row>
<el-row type="flex" align="middle">
<el-col :span="24">
<el-form-item label="区域描述" prop="remark">
<el-input
type="textarea"
:rows="3"
placeholder="请输入内容" maxlength="50"
v-model="deptInfo.remark">
</el-input>
</el-form-item>
</el-col>
</el-row>
</el-form>
</div>
</el-scrollbar>
<span slot="footer" class="dialog-footer">
<el-button @click="handleClose()">取消</el-button>
<el-button type="primary" @click="handleSubmit()">确认</el-button>
</span>
</el-dialog>
</div>
</template>
<script>
import systemManageApi from "@/services/systemManage";
export default {
components: {
},
props: {
addOrEditAreaConfig: {
type: Object,
default: () => {
return {}
},
},
},
data() {
return {
deptInfo:{
name:'',//
remark:'',//
companyId:this.$store.state.userinfo.companyId,//id 0
},
rulesClient: {
name: [
{ required: true, message: '请输入区域名称', trigger: 'change',},
],
remark: [
{ required: false, message: '请输入区域描述', trigger: 'change',},
],
}
};
},
async created() {
//
if(Object.keys(this.addOrEditAreaConfig.data).length>0){
this.getDeptById()
}
},
methods: {
// id
getDeptById(){
let data={
id:this.addOrEditAreaConfig.data.id
}
systemManageApi.getDeptById(data).then(res => {
if (!res.code) {
this.deptInfo = {
name:res.name,
remark:res.remark,
companyId:res.companyId
}
}
})
},
handleSubmit(){
if(!this.$clickThrottle()) { return }
let _this=this;
this.$refs.ruleForm.validate((valid) => {
if(valid) {
if(Object.keys(this.addOrEditAreaConfig.data).length>0)
{
_this.deptInfo.id = this.addOrEditAreaConfig.data.id
systemManageApi.updateDeptById(_this.deptInfo).then(res => {
this.$message({
showClose: true,
message: '编辑区域成功!',
type: 'success'
});
this.$parent.getDeptList(1)
this.handleClose()
})
}
else
{
systemManageApi.addDept(_this.deptInfo).then(res => {
this.$message({
showClose: true,
message: '新增区域成功!',
type: 'success'
});
this.$parent.getDeptList(1)
this.handleClose()
})
}
}
})
},
handleChangeSort(){
},
handleClose() {
this.$emit('update:addOrEditAreaConfig', null)
},
}
};
</script>
<style lang="scss" scoped>
.dialog-content{
padding: $size16;
max-height:500px
}
::v-deep .el-dialog__header{
border-bottom: 1px solid $border-color-lighter !important;
}
::v-deep .el-dialog__footer{
border-top: 1px solid $border-color-lighter !important;
}
</style>

View File

@ -0,0 +1,164 @@
<template>
<div>
<el-dialog
:title="addOrEditDeptConfig.title"
:visible="true"
width="400px"
append-to-body
:close-on-click-modal="false"
@close="handleClose"
>
<el-scrollbar class="bor">
<div class="dialog-content">
<el-form ref="ruleForm"
:model="deptInfo"
:rules="rulesClient"
label-width="140px"
class="demo-ruleForm">
<el-row type="flex" align="middle">
<el-col :span="24">
<el-form-item label="部门名称" prop="name">
<el-input
v-model.trim="deptInfo.name"
placeholder="请输入" maxlength="20"
clearable
></el-input>
</el-form-item>
</el-col>
</el-row>
<el-row type="flex" align="middle">
<el-col :span="24">
<el-form-item label="部门描述" prop="remark">
<el-input
type="textarea"
:rows="3"
placeholder="请输入内容" maxlength="50"
v-model="deptInfo.remark">
</el-input>
</el-form-item>
</el-col>
</el-row>
</el-form>
</div>
</el-scrollbar>
<span slot="footer" class="dialog-footer">
<el-button @click="handleClose()">取消</el-button>
<el-button type="primary" @click="handleSubmit()">确认</el-button>
</span>
</el-dialog>
</div>
</template>
<script>
import systemManageApi from "@/services/systemManage";
export default {
components: {
},
props: {
addOrEditDeptConfig: {
type: Object,
default: () => {
return {}
},
},
},
data() {
return {
deptInfo:{
pid:this.addOrEditDeptConfig.data.id,//1
name:'',//
remark:'',//
companyId:this.$store.state.userinfo.companyId,//id 0
},
rulesClient: {
name: [
{ required: true, message: '请输入部门名称', trigger: 'change',},
],
remark: [
{ required: false, message: '请输入部门描述', trigger: 'change',},
],
}
};
},
async created() {
//
if(Object.keys(this.addOrEditDeptConfig.data).length>0 && this.addOrEditDeptConfig.data.pid != 0){
this.getDeptById()
}
},
methods: {
// id
getDeptById(){
let data={
id:this.addOrEditDeptConfig.data.id
}
systemManageApi.getDeptById(data).then(res => {
if (!res.code) {
this.deptInfo = {
name:res.name,
remark:res.remark,
companyId:res.companyId
}
}
})
},
handleSubmit(){
if(!this.$clickThrottle()) { return }
let _this=this;
this.$refs.ruleForm.validate((valid) => {
if(valid) {
if(Object.keys(this.addOrEditDeptConfig.data).length>0 && this.addOrEditDeptConfig.data.pid != 0)
{
_this.deptInfo.id = this.addOrEditDeptConfig.data.id
systemManageApi.updateDeptById(_this.deptInfo).then(res => {
this.$message({
showClose: true,
message: '编辑部门成功!',
type: 'success'
});
this.$parent.getDeptList(1,this.addOrEditDeptConfig.data.pid)
this.handleClose()
})
}
else
{
systemManageApi.addDept(_this.deptInfo).then(res => {
this.$message({
showClose: true,
message: '新增部门成功!',
type: 'success'
});
this.$parent.getDeptList(1,this.addOrEditDeptConfig.data.id)
this.handleClose()
})
}
}
})
},
handleChangeSort(){
},
handleClose() {
this.$emit('update:addOrEditDeptConfig', null)
},
}
};
</script>
<style lang="scss" scoped>
.dialog-content{
padding: $size16;
max-height:500px
}
::v-deep .el-dialog__header{
border-bottom: 1px solid $border-color-lighter !important;
}
::v-deep .el-dialog__footer{
border-top: 1px solid $border-color-lighter !important;
}
</style>

View File

@ -0,0 +1,206 @@
<template>
<div class="layout-content-wrap background-color-fff border-radius-8">
<div class="border-b-solid-lighter-1 p-h-24">
<div class="flex-row justify-content-between height-56 align-items-center">
<div class="color-text-primary f22">团队管理</div>
<div class="flex-row color-text-regular f14">
<div class="mr-24">
<el-input
placeholder="请输入搜索内容"
suffix-icon="el-icon-search"
v-model.trim="queryData.name"
size="small"
clearable
@change="handleSearch"
@keydown.enter.native="handleSearch"
>
</el-input>
</div>
<el-button type="primary" @click="handleAddForm" size="small">新增区域</el-button>
</div>
</div>
</div>
<div class="layout-tabs-content-box">
<!-- table -->
<div class="">
<el-table ref="monthlyPlanTable"
:data="tableData"
:header-cell-style="{background:'#F5F7FA'}"
row-key="id"
lazy
:load="load"
:tree-props="{children: 'children', hasChildren: 'hasChildren'}"
>
<el-table-column prop="name" label="团队名称" width="250"></el-table-column>
<el-table-column label="区域负责人">
<template slot-scope="scope">
<div class="flex-row">
{{ListToString(scope.row.masterName)}}
</div>
</template>
</el-table-column>
<el-table-column label="团队负责人手机号">
<template slot-scope="scope">
<div class="flex-row">
{{ListToString(scope.row.masterPhone)}}
</div>
</template>
</el-table-column>
<el-table-column prop="count" label="团队人数" width="120"></el-table-column>
<el-table-column prop="remark" label="团队描述" width="350"></el-table-column>
<el-table-column label="操作" width="190">
<template slot-scope="scope">
<div class="flex-row">
<div class="f14 color-1960F4 cursor-pointer mr-8" v-if="scope.row.pid == 0" @click="handleAddDeptForm(scope)">添加部门</div>
<div class="f14 color-1960F4 cursor-pointer mr-8" v-if="scope.row.pid == 0" @click="handleAddForm(scope)">编辑</div>
<div class="f14 color-1960F4 cursor-pointer mr-8" v-else @click="handleAddDeptForm(scope)">编辑</div>
<div class="f14 color-1960F4 cursor-pointer" @click="handleDelete(scope)">删除</div>
</div>
</template>
</el-table-column>
</el-table>
<div class="text-center p-v-24">
<el-pagination
@size-change="getDeptList"
@current-change="getDeptList"
:current-page="queryData.current"
:page-size="queryData.size"
layout="total, prev, pager, next, jumper"
:total="total">
</el-pagination>
</div>
</div>
</div>
<!-- 新增-编辑 -->
<addOrEditAreaDialog v-if="addOrEditAreaConfig" :addOrEditAreaConfig.sync="addOrEditAreaConfig" />
<addOrEditDeptDialog v-if="addOrEditDeptConfig" :addOrEditDeptConfig.sync="addOrEditDeptConfig" />
</div>
</template>
<script>
import systemManageApi from "@/services/systemManage";
export default {
components: {
addOrEditDeptDialog: () => import('./components/addOrEditDeptDialog.vue'),
addOrEditAreaDialog: () => import('./components/addOrEditAreaDialog.vue'),
},
data() {
return {
tableData:[],
queryData: {
pid:0,
name:'',
current: 1,
size: 10,
companyId:this.$store.state.userinfo.companyId,//id 0
},
total: 0,
addOrEditDeptConfig:null,//
addOrEditAreaConfig:null,//
map: new Map(),
};
},
created() {
this.getDeptList(1)
},
methods: {
//
handleAddForm(scope){
let title = scope.row?'编辑区域':'新增区域'
let data = scope.row?scope.row:''
this.addOrEditAreaConfig={
title:title,
data: data
}
},
//
handleAddDeptForm(scope){
let title = '新增部门'
let data = scope.row
this.addOrEditDeptConfig={
title:title,
data: data
}
},
//
handleSearch(){
this.queryData.current = 1;
this.queryData.size = 10;
this.getDeptList()
},
getDeptList(val,parentId = 0){
console.log(parentId,'parentId')
if(parentId == 0)
{
if(val!=undefined){this.queryData.current = val}
systemManageApi.getDeptList(this.queryData).then(res => {
if (!res.code) {
this.tableData = res.records;
this.tableData.forEach(item =>{
item.hasChildren = true
})
this.total = res.total;
}
})
}
else
{
this.refresh(parentId)
}
},
//
handleDelete(scope){
this.$confirm("此操作将永久删除该区域, 是否继续?", "提示", {
confirmButtonText: "确定",
cancelButtonText: "取消",
type: "warning",
}).then(() => {
if(!this.$clickThrottle()) { return }//
systemManageApi.deleteDeptById({ id: scope.row.id }).then((res) => {
this.$message.success("成功");
this.getDeptList(1,scope.row.pid)
});
}).catch((e) => {});
},
ListToString(letlist){
let letString=''
if(letlist){
letlist.forEach((element,index) => {
if(index==0){letString=element}else{letString+=','+element}
});
}
return letString;
},
load(tree, treeNode, resolve) {
// console.log(tree,treeNode,resolve)
systemManageApi.getDeptList({pid:tree.id,name:"",current:1,size:50,companyId:this.$store.state.userinfo.companyId}).then(res => {
if (!res.code) {
// treeNode
this.map.set(tree.id, {tree,treeNode,resolve});
resolve(res.records)
}
})
},
// idtreeNode
refresh(parentId) {
if(this.map.get(parentId)) {
const {tree,treeNode,resolve} = this.map.get(parentId);
if(tree) {
this.load(tree, treeNode, resolve);
}
}
},
}
};
</script>
<style lang="scss" scoped>
.el-table--fit {
border:1px solid $border-color-lighter !important;
border-bottom: 0!important;
}
</style>

View File

@ -27,8 +27,8 @@
:data="tableData"
:header-cell-style="{background:'#F5F7FA'}"
>
<el-table-column prop="name" label="部门名称" width="250"></el-table-column>
<el-table-column label="部门负责人">
<el-table-column prop="name" label="部门名称" width="350"></el-table-column>
<!-- <el-table-column label="部门负责人">
<template slot-scope="scope">
<div class="flex-row">
{{ListToString(scope.row.masterName)}}
@ -41,9 +41,9 @@
{{ListToString(scope.row.masterPhone)}}
</div>
</template>
</el-table-column>
<el-table-column prop="count" label="部门人数" width="120"></el-table-column>
<el-table-column prop="remark" label="部门描述" width="350"></el-table-column>
</el-table-column> -->
<el-table-column prop="count" label="部门人数" width="160"></el-table-column>
<el-table-column prop="remark" label="部门描述"></el-table-column>
<el-table-column label="操作" width="170">
<template slot-scope="scope">
<div class="flex-row">
@ -134,9 +134,12 @@
},
ListToString(letlist){
let letString=''
letlist.forEach((element,index) => {
if(index==0){letString=element}else{letString+=','+element}
});
if(letlist){
letlist.forEach((element,index) => {
if(index==0){letString=element}else{letString+=','+element}
});
}
return letString;
}

View File

@ -1,5 +1,5 @@
<template>
<div class="layout-content-wrap">
<div class="layout-content-wrap background-color-fff border-radius-8">
<div class="border-b-solid-lighter-1 p-h-24">
<div class="flex-row justify-content-between height-56 align-items-center">

View File

@ -1,5 +1,5 @@
<template>
<div class="layout-content-wrap ">
<div class="layout-content-wrap background-color-fff border-radius-8">
<div class="layout-tabs-content-box">
<div class="height-30 flex-row align-items-center justify-content-between mb-24">

View File

@ -67,21 +67,24 @@
</el-row>
<el-row type="flex" align="middle">
<el-col :span="24">
<el-form-item label="选择部门" prop="deptId">
<el-select v-model="userInfo.deptId" placeholder="请选择" class="width100">
<el-option
v-for="item in deptOptions"
:key="item.id"
:label="item.name"
:value="item.id">
</el-option>
</el-select>
<el-form-item label="选择团队" prop="deptId">
<el-cascader class="width100"
v-model="userInfo.deptIds"
:options="deptOptions"
:props="{ expandTrigger: 'hover' }"
@change="handleCascaderChange">
<template slot-scope="{ node, data }">
<span>{{ data.name }}</span>
<span v-if="!node.isLeaf"> ({{ data.children.length }}) </span>
</template>
</el-cascader>
</el-form-item>
</el-col>
</el-row>
<el-row type="flex" align="middle">
<el-col :span="24">
<el-form-item label="部门负责人" prop="deptFlag">
<el-form-item label="区域负责人" prop="deptFlag">
<el-switch
v-model="userInfo.identity"
active-color="#535AFF"
@ -135,6 +138,7 @@ export default {
realName:'',
roleIds:[],
deptId:'',
deptIds:[],
type: 2,
status:1,
identity:3
@ -151,7 +155,7 @@ export default {
{ required: true, message: '请选择员工角色', trigger: ['blur','change'] }
],
deptId: [
{ required: true, message: '请选择部门', trigger: ['blur','change'] }
{ required: true, message: '请选择团队', trigger: ['blur','change'] }
],
phone: [
{ required: true, message: '请输入手机号码', trigger: 'blur' },
@ -209,6 +213,34 @@ export default {
handleClose() {
this.$emit('update:addOrEditUserConfig', null)
},
//
ShowRecursive(childlist) {
let _this=this
childlist.forEach(function(item) {
if(item.children.length > 0)
{
//
item.label = item.name
item.value = item.id
_this.ShowRecursive(item.children);
}
else
{
if(item.pid != 0)
{
item.children = null
}
item.label = item.name
item.value = item.id
}
if(_this.userInfo.deptId == item.id){
_this.userInfo.deptIds = [item.pid,item.id]
}
})
},
handleCascaderChange(e){
this.userInfo.deptId = e[1]
}
},
async created()
{
@ -222,18 +254,14 @@ export default {
});
})
api.getDeptList({current: 1,size: 100,companyId:this.$store.state.userinfo.companyId}).then(res => {
res.records.forEach(element => {
this.deptOptions.push({name:element.name,id:String(element.id)})
});
api.getDeptTree({current: 1,size: 100,companyId:this.$store.state.userinfo.companyId}).then(res => {
this.deptOptions = res
this.ShowRecursive(this.deptOptions)
})
if(Object.keys(this.addOrEditUserConfig.data).length>0)
{
// api.getUserById({id:this.addOrEditUserConfig.data.id}).then(res => {
// })
this.userInfo = JSON.parse(JSON.stringify(this.addOrEditUserConfig.data));
}

View File

@ -1,5 +1,5 @@
<template>
<div class="layout-content-wrap">
<div class="layout-content-wrap background-color-fff border-radius-8">
<div class="border-b-solid-lighter-1 p-h-24">
<div class="flex-row justify-content-between height-56 align-items-center">
<div class="color-text-primary f22">用户列表</div>

View File

@ -68,11 +68,17 @@ const routes = [
component: () => import("@/pages/system-management/role-permissions-management"),
meta: { title: "角色权限管理", icon: 'menu-role-permissions-management' },
},
{
path: "/system-management/area-management",
name: "/system-management/area-management",
component: () => import("@/pages/system-management/area-management"),
meta: { title: "区域管理", icon: 'menu-department-management' },
},
{
path: "/system-management/department-management",
name: "/system-management/department-management",
component: () => import("@/pages/system-management/department-management"),
meta: { title: "部门管理", icon: 'menu-department-management' },
meta: { title: "团队管理", icon: 'menu-department-management' },
},
]
},

View File

@ -9,11 +9,11 @@ const caseManagementApi = {
getDict: data => {
return service.service.post(`${apiAdmin}data/dict/getDict`, data, {hideLoading:true})
},
// 部门
// 区域
getDeptList: data => {
return service.service.post(`${apiAdmin}company/dept/getDeptList`, data)
},
// 根据部门id列表查看用户列表
// 根据区域id列表查看用户列表
getUserByDeptList: data => {
return service.service.post(`${apiAdmin}system/user/getUserByDeptList`, data, {hideLoading:true})
},
@ -100,6 +100,11 @@ const caseManagementApi = {
return service.service.post(`${apiMediate}cases/caseInfo/getNextCaseById`, data)
},
// 案件包手动分案
postpkgdispatchCase: data => {
return service.service.post(`${apiMediate}api/case_pkg/dispatchCase`, data)
},
//========================end::案件管理======================================
}
export default caseManagementApi;

View File

@ -99,28 +99,33 @@ const systemLogApi = {
return service.service.post(`${apiAdmin}system/role/updateRoleResource`, data)
},
//========================start::部门管理======================================
// 部门列表
//========================start::区域管理======================================
// 区域列表
getDeptList: data => {
return service.service.post(`${apiAdmin}company/dept/getDeptList`, data)
},
// 新增部门
// 区域列表
getDeptTree: data => {
return service.service.post(`${apiAdmin}company/dept/getDeptTree`, data)
},
// 新增区域
addDept: data => {
return service.service.post(`${apiAdmin}company/dept/addDept`, data)
},
// 修改部门
// 修改区域
updateDeptById: data => {
return service.service.post(`${apiAdmin}company/dept/updateDeptById`, data)
},
// 删除部门
// 删除区域
deleteDeptById: data => {
return service.service.post(`${apiAdmin}company/dept/deleteDeptById`, data)
},
// 部门详情查看
// 区域详情查看
getDeptById: data => {
return service.service.post(`${apiAdmin}company/dept/getDeptById`, data)
},
//========================end::部门管理======================================
//========================end::区域管理======================================
}
export default systemLogApi;

View File

@ -18,7 +18,7 @@ const systemLogApi = {
return service.service.post(`${apiMediate}statistics/workbench/lineChartStatistics`, data, {hideLoading:true})
},
// 部门业绩查询
// 区域业绩查询
rankingStatistics: data => {
return service.service.post(`${apiMediate}statistics/workbench/rankingStatistics`, data, {hideLoading:true})
},