<add>[important]电子标签基本完成
This commit is contained in:
parent
c540e530de
commit
aa43b29533
12
src/axios/el.tag.js
Normal file
12
src/axios/el.tag.js
Normal file
|
|
@ -0,0 +1,12 @@
|
|||
import axios from '@/axios/base/base.axios';
|
||||
|
||||
export default {
|
||||
// 分页查询电子标签任务
|
||||
getElTagTaskWithPage(request) {
|
||||
return axios.post('/api/wcs/elTag/queryTaskWithPage', request);
|
||||
},
|
||||
// 更新电子标签任务 ---- 暂时只支持更新状态,需要改后端
|
||||
updateElTagTask(request) {
|
||||
return axios.post('/api/wcs/elTag/editTaskInfo', request);
|
||||
},
|
||||
}
|
||||
40
src/enum/elTag/eltag.task.enum.js
Normal file
40
src/enum/elTag/eltag.task.enum.js
Normal file
|
|
@ -0,0 +1,40 @@
|
|||
|
||||
// 电子标签任务状态
|
||||
export const elTagTaskStatusEnum = {
|
||||
creat: {
|
||||
value: 0,
|
||||
label: '新创建',
|
||||
color: 'info'
|
||||
},
|
||||
queue: {
|
||||
value: 1,
|
||||
label: '正在点亮',
|
||||
color: 'success'
|
||||
},
|
||||
running: {
|
||||
value: 2,
|
||||
label: '已确认',
|
||||
color: 'primary'
|
||||
},
|
||||
error: {
|
||||
value: 9,
|
||||
label: '异常',
|
||||
color: 'danger'
|
||||
}
|
||||
}
|
||||
|
||||
export function formatterElTagTaskStatusEnum(value) {
|
||||
switch (parseInt(value)){
|
||||
case elTagTaskStatusEnum.creat.value:
|
||||
return {label: elTagTaskStatusEnum.creat.label, color: elTagTaskStatusEnum.creat.color};
|
||||
case elTagTaskStatusEnum.queue.value:
|
||||
return {label: elTagTaskStatusEnum.queue.label, color: elTagTaskStatusEnum.queue.color};
|
||||
case elTagTaskStatusEnum.running.value:
|
||||
return {label: elTagTaskStatusEnum.running.label, color: elTagTaskStatusEnum.running.color};
|
||||
|
||||
case elTagTaskStatusEnum.error.value:
|
||||
return {label: elTagTaskStatusEnum.error.label, color: elTagTaskStatusEnum.error.color};
|
||||
default:
|
||||
return {label: `未知类型:${value}`, color: 'danger'};
|
||||
}
|
||||
}
|
||||
|
|
@ -18,6 +18,7 @@ const routes = [
|
|||
// 任务管理
|
||||
{ path: 'wmsTask', name: 'wmsTask', component:() => import('../view/tab/taskManage/WmsTask.vue') }, // Wms任务管理
|
||||
{ path: 'wcsTask', name: 'wcsTask', component:() => import('../view/tab/taskManage/WcsTask.vue') }, // Wcs任务管理
|
||||
{ path: 'elTagTask', name: 'elTagTask', component:() => import('../view/tab/taskManage/ElTagTask.vue') }, // 电子标签任务管理
|
||||
// 设备管理
|
||||
{ path: 'location', name: 'location', component:() => import('@/view/tab/equipmentManage/LocationData.vue') }, // 点位/库位管理
|
||||
{ path: 'stackerData', name: 'stackerData', component:() => import('@/view/tab/equipmentManage/StackerData.vue') }, // 堆垛机管理
|
||||
|
|
|
|||
156
src/view/component/elTagTask/EditElTagTask.vue
Normal file
156
src/view/component/elTagTask/EditElTagTask.vue
Normal file
|
|
@ -0,0 +1,156 @@
|
|||
<template>
|
||||
<div>
|
||||
<el-dialog :model-value="modelValue" :show-close="false" title="编辑电子标签任务"
|
||||
@close="() => $emit('update:modelValue', false)">
|
||||
<div>
|
||||
<el-form
|
||||
label-width="100px"
|
||||
:model="elTagTaskItem"
|
||||
>
|
||||
<el-form-item label="任务号:">
|
||||
<el-input v-model="elTagTaskItem.taskId" disabled/>
|
||||
</el-form-item>
|
||||
<el-form-item label="点位:">
|
||||
<el-input v-model="elTagTaskItem.location" disabled/>
|
||||
</el-form-item>
|
||||
<el-form-item label="订单号:">
|
||||
<el-input v-model="elTagTaskItem.orderId" disabled/>
|
||||
</el-form-item>
|
||||
<el-form-item label="载具号:">
|
||||
<el-input v-model="elTagTaskItem.vehicleNo" disabled/>
|
||||
</el-form-item>
|
||||
<el-form-item label="物料编号:">
|
||||
<el-input v-model="elTagTaskItem.goodsId" disabled/>
|
||||
</el-form-item>
|
||||
<el-form-item label="物料名称:">
|
||||
<el-input v-model="elTagTaskItem.goodsName" disabled/>
|
||||
</el-form-item>
|
||||
<el-form-item label="任务状态:">
|
||||
<el-select v-model="elTagTaskItem.taskStatus">
|
||||
<el-option v-for="item in elTagTaskStatusEnum" :key="item.value" :label="item.label" :value="item.value"/>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item label="需求数量:">
|
||||
<el-input v-model="elTagTaskItem.needNum" disabled/>
|
||||
</el-form-item>
|
||||
<el-form-item label="实际数量:">
|
||||
<el-input v-model="elTagTaskItem.pickNum" disabled/>
|
||||
</el-form-item>
|
||||
<el-form-item label="创建人:">
|
||||
<el-input v-model="elTagTaskItem.createPerson" disabled/>
|
||||
</el-form-item>
|
||||
<el-form-item label="备注信息:">
|
||||
<el-input v-model="elTagTaskItem.remark" disabled/>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
</div>
|
||||
<template #footer>
|
||||
<div>
|
||||
<el-button type="warning" @click="update">变更信息</el-button>
|
||||
<el-button type="danger" @click="$emit('update:modelValue', false)">关闭窗口</el-button>
|
||||
</div>
|
||||
</template>
|
||||
</el-dialog>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
// import 《组件名称》 from '《组件路径》 ';
|
||||
|
||||
import {elTagTaskStatusEnum} from "@/enum/elTag/eltag.task.enum";
|
||||
import {ElLoading, ElMessage, ElMessageBox} from "element-plus";
|
||||
import elTagApi from "@/axios/el.tag";
|
||||
|
||||
export default {
|
||||
// import 引入的组件需要注入到对象中才能使用
|
||||
components: {},
|
||||
props: ['modelValue', 'elTagTaskItem'],
|
||||
emits: ['update:modelValue'],
|
||||
data() {
|
||||
// 这里存放数据
|
||||
return {}
|
||||
},
|
||||
// 计算属性 类似于 data 概念
|
||||
computed: {
|
||||
elTagTaskStatusEnum() {
|
||||
return elTagTaskStatusEnum
|
||||
}
|
||||
},
|
||||
// 监控 data 中的数据变化
|
||||
watch: {},
|
||||
// 方法集合
|
||||
methods: {
|
||||
// 保存变更
|
||||
update() {
|
||||
ElMessageBox.confirm(`确定变更:${this.elTagTaskItem.taskId} d的任务状态?`,
|
||||
'警告',
|
||||
{
|
||||
confirmButtonText: '确定',
|
||||
cancelButtonText: '取消',
|
||||
type: 'warning',
|
||||
}).catch(() => {})
|
||||
.then(()=>{
|
||||
const loading = ElLoading.service({
|
||||
lock: true,
|
||||
text: '请稍后...',
|
||||
})
|
||||
elTagApi.updateElTagTask({taskId: this.elTagTaskItem.taskId, taskStatus: this.elTagTaskItem.taskStatus}).then((response) => {
|
||||
const responseData = response.data
|
||||
if (responseData.code === 0) {
|
||||
ElMessage({
|
||||
message: '变更成功',
|
||||
type: 'success',
|
||||
})
|
||||
this.$emit('update:modelValue', false)
|
||||
} else {
|
||||
// 服务报错
|
||||
ElMessage({
|
||||
message: '服务器返回失败:' + responseData.msg,
|
||||
type: 'warning',
|
||||
})
|
||||
}
|
||||
loading.close()
|
||||
}).catch((ex) => {
|
||||
// 通讯报错
|
||||
ElMessage({
|
||||
message: '请求服务器失败:' + ex,
|
||||
type: 'error',
|
||||
})
|
||||
loading.close()
|
||||
})
|
||||
})
|
||||
}
|
||||
},
|
||||
// 组合式 API
|
||||
setup() {
|
||||
},
|
||||
// 创建之前
|
||||
beforeCreate() {
|
||||
},
|
||||
// 创建完成(可以访问 this 实例)
|
||||
created() {
|
||||
},
|
||||
// 生命周期 - 挂载之前
|
||||
beforeMount() {
|
||||
},
|
||||
// 生命周期 - 挂载完成(可以访问 DOM 元素)
|
||||
mounted() {
|
||||
},
|
||||
// 更新之前
|
||||
beforeUpdate() {
|
||||
},
|
||||
// 更新之后
|
||||
updated() {
|
||||
},
|
||||
// 销毁之前
|
||||
beforeUnmount() {
|
||||
},
|
||||
// 销毁完成
|
||||
unmounted() {
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
||||
<style scoped>
|
||||
|
||||
</style>
|
||||
145
src/view/component/elTagTask/ElTagTaskList.vue
Normal file
145
src/view/component/elTagTask/ElTagTaskList.vue
Normal file
|
|
@ -0,0 +1,145 @@
|
|||
<template>
|
||||
<div>
|
||||
<el-row style="width: calc(100vw - 270px)">
|
||||
<h5>电子标签任务列表</h5>
|
||||
<el-table :data="modelValue" border stripe max-height="calc(100vh - 550px)">
|
||||
<el-table-column fixed prop="taskId" label="任务号" width="230px" align="center" show-overflow-tooltip/>
|
||||
<el-table-column prop="location" label="点位" width="120px" align="center" show-overflow-tooltip/>
|
||||
<el-table-column prop="orderId" label="订单号" width="100px" align="center" show-overflow-tooltip/>
|
||||
<el-table-column prop="vehicleNo" label="载具号" width="100px" align="center" show-overflow-tooltip/>
|
||||
<el-table-column prop="goodsId" label="物料编号" width="100px" align="center" show-overflow-tooltip/>
|
||||
<el-table-column prop="goodsName" label="物料名称" width="100px" align="center" show-overflow-tooltip/>
|
||||
<el-table-column prop="taskStatus" label="任务状态" width="140px" align="center">
|
||||
<template #default="scope">
|
||||
<el-tag class="ml-2" :type=formatterElTagTaskStatusEnum(scope.row.taskStatus).color>
|
||||
{{formatterElTagTaskStatusEnum(scope.row.taskStatus).label }}</el-tag>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column prop="needNum" label="需求数量" width="100px" align="center" show-overflow-tooltip/>
|
||||
<el-table-column prop="pickNum" label="实际数量" width="100px" align="center" show-overflow-tooltip/>
|
||||
<el-table-column prop="createPerson" label="创建人" width="100px" align="center" show-overflow-tooltip/>
|
||||
<el-table-column prop="createTime" label="创建时间" :formatter="formatterTime" width="160px" align="center" show-overflow-tooltip/>
|
||||
<el-table-column prop="lightTime" label="点亮时间" :formatter="formatterTime" width="160px" align="center" show-overflow-tooltip/>
|
||||
<el-table-column prop="confirmTime" label="确认时间" :formatter="formatterTime" width="160px" align="center" show-overflow-tooltip/>
|
||||
<el-table-column prop="remark" label="备注" show-overflow-tooltip min-width="80px"/>
|
||||
<el-table-column fixed="right" label="操作" align="center" width="80">
|
||||
<template #default="scope">
|
||||
<el-button-group class="ml-4">
|
||||
<el-tooltip content="变更状态" placement="top" effect="light">
|
||||
<el-button type="warning" size="small" @click="changeTaskStatus(scope.row)">
|
||||
<el-icon><Switch/></el-icon>
|
||||
</el-button>
|
||||
</el-tooltip>
|
||||
</el-button-group>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
</el-row>
|
||||
<el-row style="margin-top: 15px">
|
||||
<el-pagination
|
||||
small
|
||||
v-if="searchParams.page.totalRow > 0"
|
||||
background
|
||||
v-model:page-size="searchParams.page.pageSize"
|
||||
v-model:current-page="searchParams.page.pageIndex"
|
||||
:page-sizes="[20, 50, 100, 200, 500]"
|
||||
layout="prev, pager, next, jumper, sizes, total"
|
||||
:total="searchParams.page.totalRow"
|
||||
@size-change="searchData"
|
||||
@current-change="searchData"
|
||||
/>
|
||||
</el-row>
|
||||
<!-- 编辑状态的弹窗-->
|
||||
<EditElTagTask v-model="showEditForm" v-model:elTagTaskItem="elTagTaskItem"></EditElTagTask>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
// import 《组件名称》 from '《组件路径》 ';
|
||||
|
||||
import {Switch} from "@element-plus/icons-vue";
|
||||
import formatterTime from "@/plugins/formatter/formatter.time";
|
||||
import {formatterElTagTaskStatusEnum} from "@/enum/elTag/eltag.task.enum";
|
||||
import EditElTagTask from "@/view/component/elTagTask/EditElTagTask.vue";
|
||||
|
||||
export default {
|
||||
// import 引入的组件需要注入到对象中才能使用
|
||||
components: {EditElTagTask, Switch},
|
||||
props: ['modelValue', 'searchParams'],
|
||||
emits: ['update:modelValue','update:searchParams','pageChange'],
|
||||
data() {
|
||||
// 这里存放数据
|
||||
return {
|
||||
formatterTime: formatterTime.formatCellValueTime,
|
||||
// 展示编辑状态的弹窗
|
||||
showEditForm: false,
|
||||
// 编辑状态的弹窗数据
|
||||
elTagTaskItem: {}
|
||||
}
|
||||
},
|
||||
// 计算属性 类似于 data 概念
|
||||
computed: {
|
||||
},
|
||||
// 监控 data 中的数据变化
|
||||
watch: {},
|
||||
// 方法集合
|
||||
methods: {
|
||||
formatterElTagTaskStatusEnum,
|
||||
// 变更任务状态
|
||||
changeTaskStatus(row) {
|
||||
this.elTagTaskItem = {
|
||||
taskId: row.taskId,
|
||||
location: row.location,
|
||||
orderId: row.orderId,
|
||||
vehicleNo: row.vehicleNo,
|
||||
goodsId: row.goodsId,
|
||||
goodsName: row.goodsName,
|
||||
taskStatus: row.taskStatus,
|
||||
needNum: row.needNum,
|
||||
pickNum: row.pickNum,
|
||||
createPerson: row.createPerson,
|
||||
createTime: row.createTime,
|
||||
lightTime: row.lightTime,
|
||||
confirmTime: row.confirmTime,
|
||||
remark: row.remark
|
||||
}
|
||||
this.showEditForm = true
|
||||
},
|
||||
|
||||
searchData() {
|
||||
this.$emit('pageChange', this.searchParams)
|
||||
},
|
||||
},
|
||||
// 组合式 API
|
||||
setup() {
|
||||
},
|
||||
// 创建之前
|
||||
beforeCreate() {
|
||||
},
|
||||
// 创建完成(可以访问 this 实例)
|
||||
created() {
|
||||
},
|
||||
// 生命周期 - 挂载之前
|
||||
beforeMount() {
|
||||
},
|
||||
// 生命周期 - 挂载完成(可以访问 DOM 元素)
|
||||
mounted() {
|
||||
},
|
||||
// 更新之前
|
||||
beforeUpdate() {
|
||||
},
|
||||
// 更新之后
|
||||
updated() {
|
||||
},
|
||||
// 销毁之前
|
||||
beforeUnmount() {
|
||||
},
|
||||
// 销毁完成
|
||||
unmounted() {
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
||||
<style scoped>
|
||||
|
||||
</style>
|
||||
134
src/view/component/elTagTask/SearchForm.vue
Normal file
134
src/view/component/elTagTask/SearchForm.vue
Normal file
|
|
@ -0,0 +1,134 @@
|
|||
<template>
|
||||
<div style="border-radius: 5px; border: #2c3e5033 solid 1px; padding: 10px">
|
||||
<el-row>
|
||||
<el-form :model="searchParams" label-width="120" label-position="left" >
|
||||
<el-form-item label="查询关键字:">
|
||||
<el-input placeholder="输入 点位/任务号/箱号/订单号 查询..." v-model="searchParams.searchStr" clearable></el-input>
|
||||
</el-form-item>
|
||||
<el-form-item label="任务状态:">
|
||||
<el-select v-model="searchParams.elTagTaskStatus" multiple placeholder="请选择需要查询的任务状态">
|
||||
<el-option v-for="item in elTagTaskStatusEnum" :key="item.value" :label="item.label" :value="item.value"/>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item label="任务创建时间:">
|
||||
<el-date-picker
|
||||
v-model="searchParams.timeRange"
|
||||
type="datetimerange"
|
||||
format="YYYY-MM-DD HH:mm:ss"
|
||||
value-format="YYYY-MM-DDTHH:mm:ss"
|
||||
unlink-panels
|
||||
range-separator="至"
|
||||
start-placeholder="开始时间"
|
||||
end-placeholder="截止时间"
|
||||
/>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
</el-row>
|
||||
<el-row>
|
||||
<el-button type="primary" @click="searchBtn">查询/刷新</el-button>
|
||||
<!-- <el-button type="success" @click="">新增任务</el-button>-->
|
||||
</el-row>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
// import 《组件名称》 from '《组件路径》 ';
|
||||
|
||||
import {elTagTaskStatusEnum} from "@/enum/elTag/eltag.task.enum";
|
||||
import {ElLoading, ElMessage} from "element-plus";
|
||||
import elTagApi from "@/axios/el.tag"
|
||||
|
||||
export default {
|
||||
// import 引入的组件需要注入到对象中才能使用
|
||||
components: {},
|
||||
props: ['modelValue', 'searchParams'],
|
||||
emits: ['update:modelValue','update:searchParams'],
|
||||
data() {
|
||||
// 这里存放数据
|
||||
return {}
|
||||
},
|
||||
// 计算属性 类似于 data 概念
|
||||
computed: {
|
||||
elTagTaskStatusEnum() {
|
||||
return elTagTaskStatusEnum
|
||||
}
|
||||
},
|
||||
// 监控 data 中的数据变化
|
||||
watch: {},
|
||||
// 方法集合
|
||||
methods: {
|
||||
// 查询
|
||||
searchBtn() {
|
||||
this.searchParams.page.pageIndex = 1
|
||||
this.searchParams.page.pageSize = 50
|
||||
this.$emit('update:searchParams', this.searchParams)
|
||||
this.searchData(this.searchParams)
|
||||
},
|
||||
searchData(searchParams) {
|
||||
const loading = ElLoading.service({
|
||||
lock: true,
|
||||
text: '加载中...',
|
||||
})
|
||||
this.$emit('update:modelValue', [])
|
||||
elTagApi.getElTagTaskWithPage(searchParams).then((response) => {
|
||||
const responseData = response.data
|
||||
if (responseData.code === 0) {
|
||||
ElMessage({
|
||||
message: '查询成功',
|
||||
type: 'success',
|
||||
})
|
||||
// 正确请求,展示数据
|
||||
this.searchParams.page.totalRow = parseInt(responseData["tag"])
|
||||
this.$emit('update:searchParams', this.searchParams)
|
||||
this.$emit('update:modelValue', Object.freeze(responseData["returnData"]))
|
||||
} else {
|
||||
// 服务报错
|
||||
ElMessage({
|
||||
message: '服务器返回失败:' + responseData.msg,
|
||||
type: 'warning',
|
||||
})
|
||||
}
|
||||
loading.close()
|
||||
}).catch((ex) => {
|
||||
// 通讯报错
|
||||
ElMessage({
|
||||
message: '请求服务器失败:' + ex,
|
||||
type: 'error',
|
||||
})
|
||||
loading.close()
|
||||
})
|
||||
},
|
||||
},
|
||||
// 组合式 API
|
||||
setup() {
|
||||
},
|
||||
// 创建之前
|
||||
beforeCreate() {
|
||||
},
|
||||
// 创建完成(可以访问 this 实例)
|
||||
created() {
|
||||
},
|
||||
// 生命周期 - 挂载之前
|
||||
beforeMount() {
|
||||
},
|
||||
// 生命周期 - 挂载完成(可以访问 DOM 元素)
|
||||
mounted() {
|
||||
},
|
||||
// 更新之前
|
||||
beforeUpdate() {
|
||||
},
|
||||
// 更新之后
|
||||
updated() {
|
||||
},
|
||||
// 销毁之前
|
||||
beforeUnmount() {
|
||||
},
|
||||
// 销毁完成
|
||||
unmounted() {
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
||||
<style scoped>
|
||||
|
||||
</style>
|
||||
83
src/view/tab/taskManage/ElTagTask.vue
Normal file
83
src/view/tab/taskManage/ElTagTask.vue
Normal file
|
|
@ -0,0 +1,83 @@
|
|||
<template>
|
||||
<div>
|
||||
<el-row>
|
||||
<SearchForm style="width: 100%" v-model="elTagTaskList" v-model:search-params="searchParams" ref="searchForm"></SearchForm>
|
||||
</el-row>
|
||||
<el-row>
|
||||
<ElTagTaskList v-model="elTagTaskList" v-model:search-params="searchParams" @page-change="pageChange"></ElTagTaskList>
|
||||
</el-row>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
// import 《组件名称》 from '《组件路径》 ';
|
||||
import SearchForm from "@/view/component/elTagTask/SearchForm.vue";
|
||||
import ElTagTaskList from "@/view/component/elTagTask/ElTagTaskList.vue";
|
||||
|
||||
|
||||
export default {
|
||||
// import 引入的组件需要注入到对象中才能使用
|
||||
components: {ElTagTaskList, SearchForm},
|
||||
props: [],
|
||||
emits: [],
|
||||
data() {
|
||||
// 这里存放数据
|
||||
return {
|
||||
// 搜索参数
|
||||
searchParams: {
|
||||
searchStr: '',
|
||||
elTagTaskStatus: [0,1,2,9],
|
||||
timeRange: [],
|
||||
page: {
|
||||
pageIndex: 1,
|
||||
pageSize: 50,
|
||||
totalRow: 0
|
||||
}
|
||||
},
|
||||
// 任务列表
|
||||
elTagTaskList: []
|
||||
}
|
||||
},
|
||||
// 计算属性 类似于 data 概念
|
||||
computed: {},
|
||||
// 监控 data 中的数据变化
|
||||
watch: {},
|
||||
// 方法集合
|
||||
methods: {
|
||||
pageChange(searchParams) {
|
||||
this.$refs.searchForm.searchData(searchParams)
|
||||
},
|
||||
},
|
||||
// 组合式 API
|
||||
setup() {
|
||||
},
|
||||
// 创建之前
|
||||
beforeCreate() {
|
||||
},
|
||||
// 创建完成(可以访问 this 实例)
|
||||
created() {
|
||||
},
|
||||
// 生命周期 - 挂载之前
|
||||
beforeMount() {
|
||||
},
|
||||
// 生命周期 - 挂载完成(可以访问 DOM 元素)
|
||||
mounted() {
|
||||
},
|
||||
// 更新之前
|
||||
beforeUpdate() {
|
||||
},
|
||||
// 更新之后
|
||||
updated() {
|
||||
},
|
||||
// 销毁之前
|
||||
beforeUnmount() {
|
||||
},
|
||||
// 销毁完成
|
||||
unmounted() {
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
||||
<style scoped>
|
||||
|
||||
</style>
|
||||
Loading…
Reference in New Issue
Block a user