You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

549 lines
29 KiB

<template>
<div v-if="pageType === 1" class="category-summary-style" ref="parent">
<a-spin :spinning="isLoading" tip="正在加载数据,请稍候..." size="large" style="position: absolute;top: 50%;left: 50%">
</a-spin>
<template v-if="!isLoadingForm">
<div v-if="formList.length === 0" style="line-height: 23rem;font-size: 1.5rem;text-align: center">
对不起,当前没有启用的类目,请先在系统设置中进行类目设置
</div>
<template v-else>
<div class="title-line-outer">
<div class="title-line-inner">
<FormList v-if="!isLoadingForm && formList.length > 0" type="horizontal" :list="formList" @formChange="onFormChange" :selectedData="selectedForm"/>
</div>
</div>
<div class="title-line-outer">
<div class="title-line-inner">
<a-button type="link" :disabled="isLoading" style="color:#31a8fa" @click="onShowSearchColumn">
高级筛选
<a-icon type="filter" style="font-size: 1rem"></a-icon>
</a-button>
<a-button type="link" :disabled="isLoading || (categoryInfoData.field_list && categoryInfoData.field_list.length) === 3" style="color:#31a8fa" @click="onShowFieldFilter">
显示字段
<a-icon type="eye" style="font-size: 1rem"></a-icon>
</a-button>
<a-button class="left-top-add-btn-style" style="right: 8rem" type="primary" :disabled="!(!isLoading && categoryInfoData.value_ids && categoryInfoData.value_ids !== '')" @click="exportInfo('all')">
导出全部
</a-button>
<a-button class="left-top-add-btn-style" type="primary" :disabled="!(!isLoading && categoryInfoData.value_ids && categoryInfoData.value_ids !== '')" @click="exportInfo('select')">
批量导出
</a-button>
</div>
</div>
<div class="table-container-style">
<a-table :rowSelection ="{fixed:true,selectedRowKeys:selectedRows,onChange:selectedRowsChange}"
:columns="getColumns" :dataSource="categoryInfoData.form_data_list" rowKey="value_id" :scroll="{x:true}" :pagination="false">
<span slot="dictionary" slot-scope="value"><!--字典类型字段-->
{{getDictionaryValue(value)}}
</span>
<span slot="associate" slot-scope="value"><!--字典类型字段-->
{{getDictionaryValue(value)}}
</span>
<span slot="img" slot-scope="value" style="display:flex;justify-items: center;justify-content: center"><!--图片-->
<ShowAttachment v-if="value && value !== '' && value !== '[]' && Array.isArray(JSON.parse(value))" :type="2" :img="getImg(value)" :file-list="getFileList(value)"
picture-width="8rem" picture-height="4.5rem" :badge-count="getBadgeCount(value)"/>
</span>
<span slot="attachment" slot-scope="value"><!--附件类型字段-->
<ShowAttachment v-if="value && value !== '' && value !== '[]' && Array.isArray(JSON.parse(value))" :type="1" :file-list="getFileList(value)" :badge-count="getBadgeCount(value)"/>
</span>
<span slot="editor" slot-scope="value" v-html="value"></span><!--//附件类型字段-->
<span slot="depart_person" slot-scope="value"><!--部门人员类型字段-->
{{getDeptPersonValue(value)}}
</span>
<template slot="operate" slot-scope="value,record">
<i class="office-operate-search operate-style" title="查看" @click="view(record)" style="font-size: 1rem;cursor: pointer;color:#31a8fa "></i>
</template>
</a-table>
</div>
<a-pagination :current="pageNumber" :pageSize="pageSize" :hideOnSinglePage="true" :total="totalRow" class="pagination-style" @change="pageChange"/>
<ModalPanel add-child-type="slot" modal-title="显示类目" :show="showFieldFilter" modalWidth="60%" @callback="modalCallback">
<FieldFilter :all-field="allColumn" :selected-field="tableColumn" ref="fieldFilter"/>
</ModalPanel>
<ModalPanel add-child-type="slot" modal-title="高级筛选" :show="showSearchColumn" modalWidth="60%" @callback="onSearchColumnCallback" :destroyOnClose="false">
<SearchColumnPanel ref="searchColumnPanel" :columnList="columnList"/>
</ModalPanel>
</template>
</template>
</div>
<edit-and-view-form v-else :pageType="3" :dataNumType="selectedForm.data_num_type" :dataInfo="formData" :showOperateList="false"
@back="returnBack" :form_id="selectedForm.form_id" :businessType="4" :person-info="personInfo"/>
</template>
<script>
import {Button,Spin,Icon,Pagination,Table,Modal} from 'ant-design-vue'
import FormList from '../commonComponents/formList/FormList'
import InterfaceConfig from './interfaceConfig'
import ShowAttachment from '../../../components/common/showAttachment/ShowAttachment'
import CommonOperate from '../utils/commonOperate'
import ModalPanel from '../../../components/common/modal/ModalPanel'
import FieldFilter from '../commonComponents/fieldFilter/FieldFilter'
import _ from 'lodash'
import SearchColumnPanel from './SearchColumnPanel'
import ManagementInterfaceConfig from '../teacherInfoManagement/interfaceConfig'
import EditAndViewForm from '../formCommon/EditAndViewForm'
import StaticParams from "../../../global-llibs/staticParams"
export default {
name: "CategorySummary",
props:["isAdmin"],
data:function(){
return {
selectedPersonId:"",
isLoading:true,
isLoadingForm:true,
selectedForm:{},
formList:[],
selectedPersonObj:{},
categoryInfoData:{},
tableColumn:[],
allColumn:[],
pageNumber:1,
pageSize:10,
totalRow:0,
selectedRows:[],
showFieldFilter:false,
showSearchColumn:false,
pageType:1,
personInfo:null,
formData:null,
columnList:[],
columnList_resource:[]
}
},
components:{
AButton:Button,
ASpin:Spin,
FormList,
AIcon:Icon,
APagination:Pagination,
ATable:Table,
ShowAttachment,
ModalPanel,
FieldFilter,
SearchColumnPanel,
EditAndViewForm
},
computed:{
getColumns:function(){
let ary = [];
// if (this.fieldsList && this.fieldsList.length > 0){
ary.push({title:"序号",customRender:(text,record,index)=>{return index + 1},fixed:'left',align:'center',width:60})
ary.push({title:"教师编号",dataIndex:"workers_no",fixed:'left',align:'center',width:100})
ary.push({title:"教师姓名",dataIndex:"person_name",fixed:'left',align:'center',width:150})
ary.push( {title:"单位(部门)",customRender:(text,record,)=>
{return record.org_name + (record.dept_name && record.dept_name !== "" && record.dept_name !== record.org_name?
"(" + record.dept_name + ")":"")},fixed:'left',align:'center',width:200})
this.tableColumn.forEach((field)=>{
let type = parseInt(field.field_type)
if (parseInt(field.field_input_type) !== 2 && type !== 20 && type < 200 && type !== 11){
//字典填充类型的单行文本、文本标签、子表单及布局字段不能出现在表头中
let obj = {title:field.field_name,dataIndex:field.column_name,align:'center'};
if ([3,4,6,15,25,26].some((num)=>{return type === num})){//字典类型的
obj.scopedSlots = {"customRender":"dictionary"}
}else if (type === 9){//附件类型
obj.scopedSlots = {"customRender":"img"}
}else if (type === 10){//附件类型
obj.scopedSlots = {"customRender":"attachment"}
}else if (type === 11){//富文本
obj.scopedSlots = {"customRender":"editor"}
}else if ([17,18].some((num)=>{return type === num})){//部门 人员
obj.scopedSlots = {"customRender":"depart_person"}
}else if(27 === type){
obj.scopedSlots = {"customRender":"associate"}
}
ary.push(obj)
}
})
ary.push({title:"操作",scopedSlots:{customRender:"operate"},fixed:'right',align:'center'})
// }
return ary
}
},
methods:{
returnBack:function(){
this.pageType = 1;
},
view:function(record){
let params = {
org_id:this.BaseConfig.person_info_my.bureau_id,
system_id:10,
form_id:this.selectedForm.form_id,
value_id:record.value_id,
teacher_id:record.person_id
}
this.InterfaceConfig.callInterface([{
url:ManagementInterfaceConfig.getTeacherInfoByValueId.url,
method:ManagementInterfaceConfig.getTeacherInfoByValueId.method,
params:params,
isTestLogin:ManagementInterfaceConfig.getTeacherInfoByValueId.isTestLogin
}],(data)=>{
let result = data[0].data;
if (result.code === 2000){
this.formData = result.data;
this.personInfo = {
person_id:this.formData.form_data_list[0].person_id,
org_name:this.formData.form_data_list[0].org_name,
dept_name:this.formData.form_data_list[0].dept_name,
person_name:this.formData.form_data_list[0].person_name,
workers_no: this.formData.form_data_list[0].workers_no?this.formData.form_data_list[0].workers_no:"",
dept_id:this.formData.form_data_list[0].dept_id,
}
this.pageType = 2;
}
})
},
onShowSearchColumn:function(){
this.showSearchColumn = true;
},
onSearchColumnCallback:function(type){
if(type[0] === "ok"){
this.pageNumber = 1;
this.getDataList();
}else{
this.columnList = _.cloneDeep(this.columnList_resource);
}
this.showSearchColumn = false;
},
onShowFieldFilter:function(){
this.showFieldFilter = true;
},
modalCallback:function(type){
if(type[0] === "ok"){
let ary = [];
if (this.$refs.fieldFilter){
this.$refs.fieldFilter.all.forEach((item)=>{
if (item.selected === true){
ary.push(item);
}
});
}
if (ary.length === 0){
this.$refs.fieldFilter.showTips("至少选择一个显示字段");
return;
}else{
this.tableColumn = ary;
}
}
this.showFieldFilter = false
},
/*
* 获取字典类型字段值
* */
getDictionaryValue:function(value){
return CommonOperate.getDictionaryValue(value);
},
getDeptPersonValue:function(value){
return CommonOperate.getDeptPersonValue(value);
},
getBadgeCount:function(value){
let ary = JSON.parse(value);
return ary.length > 1?ary.length:0;
},
getFileList:function(value){
return JSON.parse(value);
},
getImg:function(value){
return JSON.parse(value)[0];
},
selectedRowsChange:function(selectedRows){
this.selectedRows = selectedRows;
},
pageChange:function(page){
this.pageNumber = page;
this.getDataList();
},
exportInfo:function(type){
if (type === 'select' && this.selectedRows.length === 0){
Modal.warning({
title:"批量导出类目信息",
content:"请选择需要导出类目信息的人员",
okText:"我知道了",
centered:true
});
return;
}
let field_ids = [];
this.tableColumn.forEach((item)=>{
field_ids.push(item.field_id)
});
let url = this.BaseConfig.url_path_action + "/intellioa/java/teacher/downloadTeacherInfoByFormId?org_id=" + this.BaseConfig.person_info_my.bureau_id
+ "&system_id=10&value_ids=" + (type === 'select'?this.selectedRows.join(","):this.categoryInfoData.value_ids) + "&form_id="+this.selectedForm.form_id +
"&field_ids=" + field_ids.join(",");
// let url = "http://10.10.14.199/dsideal_yy/ypt/intellioa/java/teacher/downloadTeacherInfoByFormId?org_id=" + this.BaseConfig.person_info_my.bureau_id
// + "&system_id=10&value_ids=" + (type === 'select'?this.selectedRows.join(","):this.categoryInfoData.value_ids) + "&form_id="+this.selectedForm.form_id +
// "&field_ids=" + field_ids.join(",");
window.location.href = url;
},
onFormChange:function(form){
this.pageNumber = 1;
this.selectedForm = form;
this.tableColumn = [];
this.allColumn = [];
this.getSearchColumnList()
},
getDataList:function() {
this.isLoading = true;
let params = {
org_id:this.BaseConfig.person_info_my.bureau_id,
system_id:10,
form_id:this.selectedForm.form_id,
page_number:this.pageNumber,
page_size:this.pageSize
};
if (this.$refs.searchColumnPanel){
let com = this.$refs.searchColumnPanel;
if (com.dept_id && com.dept_id.length > 0 && com.dept_id.every((id)=>{return id !== "all"})){//部门选择
params.dept_ids = com.dept_id.join(",");
}
if (com.selectedPerson && com.selectedPerson.length > 0 && com.selectedPerson.every((person)=>{return person.person_id !== "all"})){
//人员选择
let ary = [];
com.selectedPerson.forEach((item)=>{
ary.push(item.person_id)
});
params.person_ids = ary.join(",");
}
if (this.columnList && this.columnList.length > 0){//自定义的高级搜索字段
let search_json = [];
this.columnList.forEach((column)=>{
let type = parseInt(column.field_type);
let value = "";
if (type === 1 || type === 2){//单行/多行文本
if (column.column_value && StaticParams.trim(column.column_value) !== ""){
search_json.push({
column_name:column.column_name,
compare_type:2,
column_value:StaticParams.trim(column.column_value)
})
}
}else if ([3,4,6].some((t)=>{return t === type})){
if (column.column_value && this.TypesCheck.isArray(column.column_value) && column.column_value.length > 0){
//单选 多选 下拉选
column.column_value.forEach((item,index)=>{
value += item + "!" + column.json.props.datas.filter((data)=>{return data.dic_code === item})[0].dic_value
if (index < column.column_value.length - 1){
value += "+"
}
})
search_json.push({
column_name:column.column_name,
compare_type:3,
column_value:value
})
}
}else if (type === 5){//日期时间组件
let obj = {
column_name:column.column_name,
}
if(column.column_value_start && StaticParams.trim(column.column_value_start) !== ""){//时间左值存在
if(column.column_value_end && StaticParams.trim(column.column_value_end) !== ""){//时间右值也存在
if (column.column_value_start === column.column_value_end){
obj.compare_type = 4;
obj.column_value = column.column_value_start;
}else{
obj.compare_type = 5;
obj.column_value = (column.column_value_start < column.column_value_end ?
column.column_value_start:column.column_value_end) + "," + (column.column_value_start < column.column_value_end ?
column.column_value_end:column.column_value_start);
}
}else{
obj.compare_type = 4;
obj.column_value = column.column_value_start;
}
}else if (column.column_value_end && StaticParams.trim(column.column_value_end) !==" "){//时间右值存在
obj.compare_type = 4;
obj.column_value = column.column_value_end;
}
if (obj.column_value){
search_json.push(obj)
}
}else if ([12,13,14].some((t)=>{return t === type})){
//计数器、评价、滑块
let obj = {
column_name:column.column_name,
}
if(column.column_value_start && column.column_value_start !==""){//数值左值存在
if(column.column_value_end && column.column_value_end !==""){//数值右值也存在
if (column.column_value_start === column.column_value_end){
obj.compare_type = 8;
obj.column_value = column.column_value_start;
}else{
obj.compare_type = 7;
obj.column_value = (column.column_value_start < column.column_value_end ?
column.column_value_start:column.column_value_end) + "," + (column.column_value_start < column.column_value_end ?
column.column_value_end:column.column_value_start);
}
}else{
obj.compare_type = 8;
obj.column_value = column.column_value_start;
}
}else if (column.column_value_end && column.column_value_end !==""){//数值右值存在
obj.compare_type = 8;
obj.column_value = column.column_value_end;
}
if (obj.column_value){
search_json.push(obj)
}
}else if([15,25,26].some((t)=>{return t === type})){
//地域、学段学科、专业
if(column.json.props.value && this.TypesCheck.isArray(column.json.props.value) && column.json.props.value.length > 0){
column.json.props.value.forEach((item,index)=>{
item.forEach((child,childIndex)=>{
value += child + "!" + column.json.props.value_name[index][childIndex]
if (childIndex < item.length - 1){
value += ","
}
})
if(index < column.json.props.value.length - 1){
value += "+"
}
});
search_json.push({
column_name:column.column_name,
compare_type:3,
column_value:value
})
}
}else if (type === 17 || type === 18){//部门选择 人员选择组件
if(column.json.props.value && this.TypesCheck.isArray(column.json.props.value) && column.json.props.value.length > 0){
column.json.props.value.forEach((item,index)=>{
if (type === 17){
value += item.id + "!" + item.name
}else{
value += item.person_id + "!" + item.person_name
}
if (index < column.json.props.value.length - 1){
value += "+"
}
});
search_json.push({
column_name:column.column_name,
compare_type:6,
column_value:value
})
}
}
})
if (search_json.length > 0){
params.search_json = JSON.stringify(search_json);
}
}
}
this.InterfaceConfig.callInterface([{
url:InterfaceConfig.getTeacherInfoListBySearchColumn.url,
method:InterfaceConfig.getTeacherInfoListBySearchColumn.method,
params:params,
isTestLogin:InterfaceConfig.getTeacherInfoListBySearchColumn.isTestLogin
}],(data)=>{
let result = data[0].data;
if (result.code === 2000){
this.selectedRows = [];
this.totalRow = result.data.total_row;
this.categoryInfoData = result.data;
if (this.tableColumn.length === 0){
this.tableColumn = _.cloneDeep(result.data.field_list);
this.tableColumn.splice(0,3);
this.tableColumn.forEach((item)=>{
item.form_id = item.field_id;
item.form_name = item.field_name;
});
this.allColumn = _.cloneDeep(this.tableColumn);
}
this.isLoading = false;
}
});
},
getSearchColumnList:function () {
this.InterfaceConfig.callInterface([{
url:InterfaceConfig.getTeacherSearchColumnListByFormId.url,
method:InterfaceConfig.getTeacherSearchColumnListByFormId.method,
params:{
org_id:this.BaseConfig.person_info_my.bureau_id,
system_id:10,
form_id:this.selectedForm.form_id,
},
isTestLogin:InterfaceConfig.getTeacherSearchColumnListByFormId.isTestLogin
}],(data)=>{
let result = data[0].data;
if (result.code === 2000){
this.columnList_resource = result.data.field_list;
this.columnList_resource.forEach((item)=>{
item.json = JSON.parse(item.field_json);
let field_type = parseInt(item.field_type);
if ([3,4,6].some((type)=>{return type === field_type})){
item.column_value = [];
}else if([5,12,13,14].some((type)=>{return type === field_type})){
item.column_value_start = null;
item.column_value_end = null;
}else if([15,25,26,17,18].some((type)=>{return type === field_type})){
if (field_type === 17 || field_type === 18){
item.json.props.is_multiple_choice = true;
}else{
item.json.props.value_name = [];
}
item.json.props.value = [];
}else{
item.column_value = "";
}
});
this.columnList = _.cloneDeep(this.columnList_resource);
this.getDataList();
}
});
}
},
mounted() {
this.InterfaceConfig.callInterface([{
url:"intellioa/teacher/informationManagement/getSystemFunctionList",
method:"get",
params:{
org_id:this.BaseConfig.person_info_my.bureau_id,
system_id:10,
person_id:this.BaseConfig.userInfo.person_id_cookie
},
isTestLogin:true
}],(data)=>{
let result = data[0].data
if (result.code === 2000){
this.isLoadingForm = false;
this.formList = this.isAdmin === true ? result.data.all_form_list:result.data.view_form_list
if (this.formList.length > 0){
this.selectedForm = this.formList[0];
this.getSearchColumnList();
}else{
this.isLoading = false;
}
}
})
}
}
</script>
<style scoped lang="scss">
.category-summary-style{
height: 100%;
overflow: auto;
}
</style>