班组管理 问题修改 12.230

zhc4dev
zhc077 2 years ago
parent a8e198640a
commit 752f1b4803
  1. 2
      ant-design-vue-jeecg/src/views/processassessment/assessmentCourse/modules/SeAssessmentcourseModal.vue
  2. 234
      ant-design-vue-jeecg/src/views/system/User2ListRef.vue
  3. 3
      ant-design-vue-jeecg/src/views/team/GroupxList.vue
  4. 7
      ant-design-vue-jeecg/src/views/team/GroupxMemberList.vue
  5. 34
      ant-design-vue-jeecg/src/views/team/StationList.vue
  6. 62
      ant-design-vue-jeecg/src/views/team/modules/GroupxMemberModal.vue
  7. 4
      ant-design-vue-jeecg/src/views/team/modules/GroupxModal.vue
  8. 2
      ant-design-vue-jeecg/src/views/team/modules/StationModal.vue
  9. 60
      jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/controller/SysUserController.java
  10. 16
      jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/team/controller/StationController.java
  11. 25
      jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/team/entity/Groupx.java
  12. 23
      jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/team/entity/GroupxMember.java
  13. 12
      jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/team/entity/Station.java

@ -33,7 +33,7 @@
add () {
this.visible=true
this.$nextTick(()=>{
this.$refs.realForm.add();
this.$refs.realForm.add()
})
},
edit (record) {

@ -0,0 +1,234 @@
<template>
<a-card :bordered="false">
<!-- table区域-begin -->
<div>
<div class="ant-alert ant-alert-info" style="margin-bottom: 16px;">
<i class="anticon anticon-info-circle ant-alert-icon"></i>已选择&nbsp;<a
style="font-weight: 600">{{ selectedRowKeys.length }}</a>&nbsp;&nbsp;
<a style="margin-left: 24px" @click="onClearSelected">清空</a>
</div>
<a-table
ref="table"
bordered
size="middle"
rowKey="id"
:columns="columns"
:dataSource="dataSource"
:pagination="ipagination"
:loading="loading"
:rowSelection="{selectedRowKeys: selectedRowKeys, onChange: onSelectChange}"
@change="handleTableChange">
</a-table>
</div>
<!-- table区域-end -->
</a-card>
</template>
<script>
import UserModal from './modules/UserModal'
import PasswordModal from './modules/PasswordModal'
import {putAction, getFileAccessHttpUrl, getAction} from '@/api/manage';
import {frozenBatch} from '@/api/api'
import {JeecgListMixin} from '@/mixins/JeecgListMixin'
import SysUserAgentModal from "./modules/SysUserAgentModal";
import JInput from '@/components/jeecg/JInput'
import UserRecycleBinModal from './modules/UserRecycleBinModal'
import JSuperQuery from '@/components/jeecg/JSuperQuery'
import JThirdAppButton from '@/components/jeecgbiz/thirdApp/JThirdAppButton'
import UserModalDetail from './modules/UserModalDetail'
import {filterObj} from "@/utils/util";
export default {
name: "User2ListRef",
mixins: [JeecgListMixin],
components: {
JThirdAppButton,
SysUserAgentModal,
UserModal,
PasswordModal,
JInput,
UserRecycleBinModal,
JSuperQuery,
UserModalDetail
},
data() {
return {
description: '这是用户管理页面',
queryParam: {},
groupxId:'',
recycleBinVisible: false,
columns: [
/*{
title: '#',
dataIndex: '',
key:'rowIndex',
width:60,
align:"center",
customRender:function (t,r,index) {
return parseInt(index)+1;
}
},*/
{
title: '用户账号',
align: "center",
dataIndex: 'username',
width: 120,
sorter: true
},
{
title: '用户姓名',
align: "center",
width: 100,
dataIndex: 'realname',
},
// {
// title: '',
// align: "center",
// width: 120,
// dataIndex: 'avatar',
// scopedSlots: {customRender: "avatarslot"}
// },
// {
// title: '',
// align: "center",
// width: 80,
// dataIndex: 'sex_dictText',
// sorter: true
// },
// {
// title: '',
// align: "center",
// width: 100,
// dataIndex: 'birthday'
// },
{
title: '手机号码',
align: "center",
width: 100,
dataIndex: 'phone'
},
// {
// title: '',
// align: "center",
// width: 180,
// dataIndex: 'orgCodeTxt'
// },
// {
// title: '',
// align: "center",
// width: 180,
// dataIndex: 'departIds_dictText'
// },
{
title: '状态',
align: "center",
width: 80,
dataIndex: 'status_dictText'
},
// {
// title: '',
// dataIndex: 'action',
// scopedSlots: {customRender: 'action'},
// align: "center",
// width: 170
// }
],
// superQueryFieldList: [
// {type: 'input', value: 'username', text: '',},
// {type: 'input', value: 'realname', text: '',},
// {type: 'select', value: 'sex', text: '', dictCode: 'sex'},
// ],
url: {
syncUser: "/act/process/extActProcess/doSyncUser",
listByDepartId: "/sys/user/listByDepartId",
delete: "/sys/user/delete",
deleteBatch: "/sys/user/deleteBatch",
exportXlsUrl: "/sys/user/exportXls",
importExcelUrl: "sys/user/importExcel",
},
}
},
computed: {
importExcelUrl: function () {
return `${window._CONFIG['domianURL']}/${this.url.importExcelUrl}`;
}
},
created() {
this.loadData();
},
methods: {
// valueChange(value) {
// if (value) this.loadData()
// },
//
loadParameter() {
if (this.loadRouteType === false) {
this.groupxId = this.$router.
this.loadRouteType = true;
}
},
loadData2(groupxId) {
alert("loadData groupxId:"+groupxId)
if (!this.url.listByDepartId) {
this.$message.error("请设置url.list属性!")
return
}
// 1
// if (arg === 1) {
// this.ipagination.current = 1;
// }
this.loadParameter();
var params = this.getQueryParams();//
this.loading = true;
console.log("----------------the params:", params);
getAction(this.url.listByDepartId, params).then((res) => {
if (res.success) {
this.dataSource = res.result.records || res.result;
if (res.result.total) {
this.ipagination.total = res.result.total;
} else {
this.ipagination.total = 0;
}
} else {
this.$message.warning(res.message)
}
}).finally(() => {
this.dataSource.forEach(item => {
item['stationName'] = this.stationName;
item['stationNum'] = this.stationNum;
})
this.loading = false
})
},
getQueryParams() {
//
let sqp = {}
if (this.superQueryParams) {
sqp['superQueryParams'] = encodeURI(this.superQueryParams)
sqp['superQueryMatchType'] = this.superQueryMatchType
}
var param = Object.assign(sqp, this.queryParam, this.isorter, this.filters);
param.field = this.getQueryField();
param.pageNo = this.ipagination.current;
param.pageSize = this.ipagination.pageSize;
param.groupxId = this.groupxId;
return filterObj(param);
},
onClearSelected() {
this.selectedRowKeys = [];
this.selectionRows = [];
this.selectedMainId = ''
},
onSelectChange(selectedRowKeys) {
console.log('selectedRowKeys changed: ', selectedRowKeys);
this.selectedRowKeys = selectedRowKeys;
},
}
}
</script>

@ -158,7 +158,8 @@ export default {
{
title: '负责人',
align: "center",
dataIndex: 'enterprisesManager'
// dataIndex: 'enterprisesManager'
dataIndex: 'enterprisesManager_dictText'
},
{
title: '手机号',

@ -138,10 +138,15 @@ export default {
align: "center",
dataIndex: 'groupName'
},
{
title: '工号',
align: "center",
dataIndex: 'workNo_dictText'
},
{
title: '成员名称',
align: "center",
dataIndex: 'userId'
dataIndex: 'userId_dictText'
},
{
title: '加入时间',

@ -10,7 +10,7 @@
<!-- <a-form-item label="车间ID">-->
<!-- <a-input placeholder="请输入车间ID" v-model="queryParam.departId"></a-input>-->
<!-- </a-form-item>-->
<a-form-model-item label="车间">
<a-form-model-item label="车间名称">
<!-- <a-input placeholder="请输入部门编号" v-model="model.departId"/>-->
<j-select-depart placeholder="请选择车间" v-model="queryParam.departId"/>
</a-form-model-item>
@ -78,6 +78,26 @@
class="j-table-force-nowrap"
:rowSelection="{selectedRowKeys: selectedRowKeys, onChange: onSelectChange}"
@change="handleTableChange">
<span slot="toolsIds_dictText" slot-scope="text, record">
<a-popover>
<template slot="content">
<p>{{ text }}</p>
</template>
<a style="overflow: hidden;text-overflow: ellipsis;white-space: nowrap;display: inline-block;width: 100px">{{ text }}</a>
</a-popover>
</span>
<span slot="machineIds_dictText" slot-scope="text, record">
<a-popover>
<template slot="content">
<p>{{ text }}</p>
</template>
<a style="overflow: hidden;text-overflow: ellipsis;white-space: nowrap;display: inline-block;width: 100px">{{ text }}</a>
</a-popover>
</span>
<span slot="action1" slot-scope="text, record">
<a @click="jumpPage1(record)">管理</a>
</span>
@ -150,6 +170,18 @@ export default {
align: "center",
dataIndex: 'stationName'
},
{
title: '设备',
align: "center",
dataIndex: 'machineIds_dictText',
scopedSlots: {customRender: 'machineIds_dictText'}
},
{
title: '工具',
align: "center",
dataIndex: 'toolsIds_dictText',
scopedSlots: {customRender: 'toolsIds_dictText'}
},
{
title: '备注',
align: "center",

@ -5,42 +5,28 @@
:visible="visible"
:confirmLoading="confirmLoading"
switchFullscreen
@ok="handleOk"
@ok="handleOk2"
@cancel="handleCancel"
cancelText="关闭">
<a-spin :spinning="confirmLoading">
<a-form-model ref="form" :model="model" :rules="validatorRules">
<!-- <a-form-model-item :labelCol="labelCol" :wrapperCol="wrapperCol" prop="groupxId" label="请选择班组">-->
<!-- &lt;!&ndash; <a-input placeholder="请选择班组" v-model="model.groupxId" />&ndash;&gt;-->
<!-- <j-search-select-tag placeholder="请选择班组" v-model="model.groupxId" dict="groupx,group_name,id"/>-->
<!-- </a-form-model-item>-->
<a-form-model-item :label-col="labelCol" :wrapper-col="wrapperCol" prop="userId" label="班组成员">
<!-- <j-select-user-by-dep v-model="model.userId" :multi="false"></j-select-user-by-dep>-->
<j-select-multi-user placeholder="请选择成员" v-model="model.userId"></j-select-multi-user>
</a-form-model-item>
<!-- <a-form-model-item :labelCol="labelCol" :wrapperCol="wrapperCol" prop="joinTime" label="加入时间">-->
<!-- <a-date-picker showTime valueFormat='YYYY-MM-DD HH:mm:ss' v-model="model.joinTime"/>-->
<!-- </a-form-model-item>-->
</a-form-model>
</a-spin>
<User2ListRef ref="modalForm"></User2ListRef>
</j-modal>
</template>
<script>
import {httpAction} from '@/api/manage'
import moment from "moment"
import User2ListRef from '@views/system/User2ListRef'
export default {
name: "GroupxMemberModal",
components: {User2ListRef},
data() {
return {
title: "操作",
visible: false,
model: {
groupxId: '',
userId: '',
},
labelCol: {
xs: {span: 24},
@ -68,12 +54,11 @@ export default {
,
}
},
created() {
},
methods: {
add(groupxId) {
this.model.groupxId = groupxId;
console.log("Modal层接收到上级参数-groupxId:" + this.model.groupxId);
this.$refs["modalForm"].loadData2(this.model.groupxId);
this.edit(this.model);
},
// add () {
@ -90,6 +75,41 @@ export default {
this.visible = false;
this.$refs.form.clearValidate();
},
handleOk2() {
// this.$refs["modalForm2"].loadData(this.model.groupxId);
this.model.userId = this.$refs["modalForm"].selectedRowKeys.toString();
// console.log("model.toolids:"+this.model.toolsId);
const that = this;
//
// this.$refs.form.validate(valid => {
// if (valid) {
that.confirmLoading = true;
let httpurl = '';
let method = '';
if (!this.model.id) {
httpurl += this.url.addBatch;
method = 'post';
} else {
httpurl += this.url.edit;
method = 'put';
}
console.log("----------the add() model:", JSON.stringify(this.model));
httpAction(httpurl, this.model, method).then((res) => {
if (res.success) {
that.$message.success(res.message);
that.$emit('ok');
} else {
that.$message.warning(res.message);
}
}).finally(() => {
that.confirmLoading = false;
that.close();
})
// } else {
// return false;
// }
// })
},
handleOk() {
const that = this;
//

@ -117,14 +117,14 @@ export default {
methods: {
getEnterprisesManagerValChange() {
this.enterprisesManager = "sys_user,username,username,id in (select user_id from sys_user_depart where dep_id='" + this.model.departId + "')";
this.enterprisesManager = "sys_user,realname,id,id in (select user_id from sys_user_depart where dep_id='" + this.model.departId + "')";
// this.enterprisesManager = "zy_process,process_name,id,id in(select process_id from zy_product_process where product_id='1')";
},
getMobile() {
let that = this;
let param = {
"username": that.model.enterprisesManager,
"id": that.model.enterprisesManager,
// "departId": that.model.departId,
}
// alert(param.toString());

@ -16,7 +16,7 @@
<!-- label="车间ID">-->
<!-- <a-input placeholder="请输入车间ID" v-model="model.departId"/>-->
<!-- </a-form-model-item>-->
<a-form-model-item :labelCol="labelCol" :wrapperCol="wrapperCol" prop="departId" label="车间">
<a-form-model-item :labelCol="labelCol" :wrapperCol="wrapperCol" prop="departId" label="车间名称">
<!-- <a-input placeholder="请输入部门编号" v-model="model.departId"/>-->
<!-- <j-select-depart placeholder="请选择车间" v-model="model.departId"/>-->
<j-dict-select-tag type="list" v-model="model.departId" dictCode="sys_depart,depart_name,id,org_category='2'" placeholder="请选择车间" />

@ -104,6 +104,7 @@ public class SysUserController {
/**
* 获取用户列表数据
*
* @param user
* @param pageNo
* @param pageSize
@ -137,8 +138,47 @@ public class SysUserController {
return result;
}
/**
* 根据部门id查询用户
*
* @param user
* @param pageNo
* @param pageSize
* @param req
* @return
*/
@RequestMapping(value = "/listByDepartId", method = RequestMethod.GET)
public Result<IPage<SysUser>> listByDepartId(SysUser user,
@RequestParam(name = "departId") String departId,
@RequestParam(name = "pageNo", defaultValue = "1") Integer pageNo,
@RequestParam(name = "pageSize", defaultValue = "10") Integer pageSize,
HttpServletRequest req) {
Result<IPage<SysUser>> result = new Result<IPage<SysUser>>();
// QueryWrapper<SysUser> queryWrapper = QueryGenerator.initQueryWrapper(user, req.getParameterMap());
// queryWrapper.ne("username", "_reserve_user_external");
Page<SysUser> page = new Page<SysUser>(pageNo, pageSize);
// IPage<SysUser> pageList = sysUserService.page(page, queryWrapper);
IPage<SysUser> pageList = sysUserService.getUserByDepId(page, departId, "");
//批量查询用户的所属部门
//step.1 先拿到全部的 useids
//step.2 通过 useids,一次性查询用户的所属部门名字
// List<String> userIds = pageList.getRecords().stream().map(SysUser::getId).collect(Collectors.toList());
// if (userIds != null && userIds.size() > 0) {
// Map<String, String> useDepNames = sysUserService.getDepNamesByUserIds(userIds);
// pageList.getRecords().forEach(item -> {
// item.setOrgCodeTxt(useDepNames.get(item.getId()));
// });
// }
result.setSuccess(true);
result.setResult(pageList);
// log.info(pageList.toString());
return result;
}
/**
* 获取员工列表数据
*
* @param user
* @param pageNo
* @param pageSize
@ -251,6 +291,7 @@ public class SysUserController {
/**
* 冻结&解冻用户
*
* @param jsonObject
* @return
*/
@ -453,6 +494,7 @@ public class SysUserController {
/**
* 用户选择组件 专用 根据用户账号或部门分页查询
*
* @param departId
* @param username
* @return
@ -583,9 +625,9 @@ public class SysUserController {
}
/**
* @功能根据id 批量查询
* @param userIds
* @return
* @功能根据id 批量查询
*/
@RequestMapping(value = "/queryByIds", method = RequestMethod.GET)
public Result<Collection<SysUser>> queryByIds(@RequestParam String userIds) {
@ -664,8 +706,10 @@ public class SysUserController {
return result;
}
}
/**
* 删除指定角色的用户关系
*
* @param
* @return
*/
@ -904,6 +948,7 @@ public class SysUserController {
/**
* 查询当前用户的所有部门/当前部门编码
*
* @return
*/
@RequestMapping(value = "/getCurrentUserDeparts", method = RequestMethod.GET)
@ -925,8 +970,6 @@ public class SysUserController {
}
/**
* 用户注册接口
*
@ -1021,6 +1064,7 @@ public class SysUserController {
/**
* 根据用户名或手机号查询用户信息
*
* @param
* @return
*/
@ -1165,6 +1209,7 @@ public class SysUserController {
/**
* APP端接口获取用户列表 根据用户名和真实名 模糊匹配
*
* @param keyword
* @param pageNo
* @param pageSize
@ -1257,6 +1302,7 @@ public class SysUserController {
/**
* 移动端修改用户信息
*
* @param jsonObject
* @return
*/
@ -1311,8 +1357,10 @@ public class SysUserController {
}
return result;
}
/**
* 移动端保存设备信息
*
* @param clientId
* @return
*/
@ -1334,6 +1382,7 @@ public class SysUserController {
}
return result;
}
/**
* 根据userid获取用户信息和部门员工信息
*
@ -1358,8 +1407,10 @@ public class SysUserController {
}
return Result.ok(map);
}
/**
* 移动端查询部门用户信息
*
* @param departId
* @return
*/
@ -1372,8 +1423,10 @@ public class SysUserController {
result.setResult(childrenUser);
return result;
}
/**
* 移动端查询用户信息(通过用户名模糊查询)
*
* @param keyword
* @return
*/
@ -1403,6 +1456,7 @@ public class SysUserController {
/**
* 根据用户名修改手机号
*
* @param json
* @return
*/

@ -16,7 +16,11 @@ import org.jeecg.modules.activiti.entity.ActBusiness;
import org.jeecg.modules.system.entity.SysDepart;
import org.jeecg.modules.system.service.ISysDepartService;
import org.jeecg.modules.team.entity.Station;
import org.jeecg.modules.team.entity.StationMachine;
import org.jeecg.modules.team.entity.StationTool;
import org.jeecg.modules.team.service.IStationMachineService;
import org.jeecg.modules.team.service.IStationService;
import org.jeecg.modules.team.service.IStationToolService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.util.ObjectUtils;
import org.springframework.web.bind.annotation.*;
@ -45,6 +49,12 @@ public class StationController extends JeecgController<Station, IStationService>
@Autowired
private ISysDepartService iSysDepartService;
@Autowired
private IStationToolService iStationToolService;
@Autowired
private IStationMachineService iStationMachineService;
/**
* 分页列表查询
*
@ -70,7 +80,11 @@ public class StationController extends JeecgController<Station, IStationService>
Collections.sort(records, Comparator.comparingInt(Station::getStationNum));
List<String> ids = records.stream().map(o -> o.getDepartId()).collect(Collectors.toList());
List<SysDepart> departList = iSysDepartService.list(new LambdaQueryWrapper<SysDepart>().in(SysDepart::getId, ids));
records.forEach(e -> {
records.stream().forEach(e -> {
List<StationTool> stationTools = iStationToolService.list(new LambdaQueryWrapper<StationTool>().eq(StationTool::getStationId, e.getId()));
e.setToolsIds(stationTools.stream().map(StationTool::getToolsId).collect(Collectors.joining(",")));
List<StationMachine> machineList = iStationMachineService.list(new LambdaQueryWrapper<StationMachine>().eq(StationMachine::getStationId, e.getId()));
e.setMachineIds(machineList.stream().map(StationMachine::getMachineId).collect(Collectors.joining(",")));
departList.forEach(j -> {
if (e.getDepartId().equals(j.getId())) {
e.setDepartName(j.getDepartName());

@ -28,28 +28,41 @@ import java.util.Date;
@ApiModel(value = "groupx对象", description = "班组")
public class Groupx {
/**id*/
/**
* id
*/
@TableId(type = IdType.ASSIGN_ID)
@ApiModelProperty(value = "id")
private String id;
/**部门id*/
/**
* 部门id
*/
@Excel(name = "部门id", width = 15)
@ApiModelProperty(value = "部门id")
@Dict(dictTable = "sys_depart", dicText = "depart_name", dicCode = "id")
private String departId;
/**班组名称*/
/**
* 班组名称
*/
@Excel(name = "班组名称", width = 15)
@ApiModelProperty(value = "班组名称")
private String groupName;
/**负责人;fk用户表id*/
/**
* 负责人;fk用户表id
*/
@Excel(name = "负责人;fk用户表id", width = 15)
@ApiModelProperty(value = "负责人;fk用户表id")
@Dict(dictTable = "sys_user", dicText = "realname", dicCode = "id")
private String enterprisesManager;
/**手机号*/
/**
* 手机号
*/
@Excel(name = "手机号", width = 15)
@ApiModelProperty(value = "手机号")
private String mobile;
/**创建时间*/
/**
* 创建时间
*/
@Excel(name = "创建时间", width = 20, format = "yyyy-MM-dd HH:mm:ss")
@JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss")
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")

@ -1,6 +1,7 @@
package org.jeecg.modules.team.entity;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.fasterxml.jackson.annotation.JsonFormat;
@ -9,6 +10,7 @@ import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;
import org.jeecg.common.aspect.annotation.Dict;
import org.jeecgframework.poi.excel.annotation.Excel;
import org.springframework.format.annotation.DateTimeFormat;
@ -27,19 +29,32 @@ import java.util.Date;
@ApiModel(value = "groupx_member对象", description = "班组成员管理")
public class GroupxMember {
/**id*/
/**
* id
*/
@TableId(type = IdType.ASSIGN_ID)
@ApiModelProperty(value = "id")
private String id;
/**班组id FK 班组表*/
/**
* 班组id FK 班组表
*/
@Excel(name = "班组id FK 班组表", width = 15)
@ApiModelProperty(value = "班组id FK 班组表")
private String groupxId;
/**用户id FK 用户表*/
/**
* 用户id FK 用户表
*/
@Excel(name = "用户id FK 用户表", width = 15)
@ApiModelProperty(value = "用户id FK 用户表")
@Dict(dictTable = "sys_user", dicText = "realname", dicCode = "id")
private String userId;
/**加入时间*/
@TableField(exist = false)
@Dict(dictTable = "sys_user", dicText = "work_no", dicCode = "id")
private String workNo;
/**
* 加入时间
*/
@Excel(name = "加入时间", width = 20, format = "yyyy-MM-dd HH:mm:ss")
@JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss")
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")

@ -84,4 +84,16 @@ public class Station {
@Excel(name = "备注", width = 15)
@ApiModelProperty(value = "备注")
private String description;
@TableField(exist = false)
@ApiModelProperty(value = "设备id列表")
@Dict(dictTable = "zy_devicetype", dicText = "name", dicCode = "id")
private String machineIds;
/**
* 工具id列表
*/
@TableField(exist = false)
@ApiModelProperty(value = "工具id列表")
@Dict(dictTable = "zy_tool", dicText = "name", dicCode = "id")
private String toolsIds;
}

Loading…
Cancel
Save