<add>[important]添加箱式线任务的查询功能
This commit is contained in:
parent
08a2f6b046
commit
ee5526e31e
8
src/axios/convey.js
Normal file
8
src/axios/convey.js
Normal file
|
|
@ -0,0 +1,8 @@
|
||||||
|
import axios from '@/axios/base/base.axios';
|
||||||
|
|
||||||
|
export default {
|
||||||
|
// 分页查询箱式线任务
|
||||||
|
getConveyTaskWithPage(req) {
|
||||||
|
return axios.post('/api/wcs/conveyTask/queryConveyTaskWithPage', req)
|
||||||
|
}
|
||||||
|
}
|
||||||
32
src/enum/convey/convey.task.status.enum.js
Normal file
32
src/enum/convey/convey.task.status.enum.js
Normal file
|
|
@ -0,0 +1,32 @@
|
||||||
|
// 箱式线任务状态
|
||||||
|
export const conveyTaskStatusEnum = {
|
||||||
|
create: {
|
||||||
|
value: 0,
|
||||||
|
label: '任务创建',
|
||||||
|
color: 'info'
|
||||||
|
},
|
||||||
|
moved: {
|
||||||
|
value: 1,
|
||||||
|
label: '已经移栽',
|
||||||
|
color: 'warning'
|
||||||
|
},
|
||||||
|
arrive: {
|
||||||
|
value: 2,
|
||||||
|
label: '已到达',
|
||||||
|
color: 'success'
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
export function formatterConveyTaskStatusEnum(value) {
|
||||||
|
switch (parseInt(value)){
|
||||||
|
case conveyTaskStatusEnum.create.value:
|
||||||
|
return {label: conveyTaskStatusEnum.create.label, color: conveyTaskStatusEnum.create.color};
|
||||||
|
case conveyTaskStatusEnum.moved.value:
|
||||||
|
return {label: conveyTaskStatusEnum.moved.label, color: conveyTaskStatusEnum.moved.color};
|
||||||
|
case conveyTaskStatusEnum.arrive.value:
|
||||||
|
return {label: conveyTaskStatusEnum.arrive.label, color: conveyTaskStatusEnum.arrive.color};
|
||||||
|
|
||||||
|
default:
|
||||||
|
return {label: `未知类型:${value}`, color: 'danger'};
|
||||||
|
}
|
||||||
|
}
|
||||||
38
src/enum/convey/convey.task.type.enum.js
Normal file
38
src/enum/convey/convey.task.type.enum.js
Normal file
|
|
@ -0,0 +1,38 @@
|
||||||
|
// 箱式线任务类型
|
||||||
|
export const conveyTaskTypeEnum = {
|
||||||
|
pick: {
|
||||||
|
value: 1,
|
||||||
|
label: '拣选任务',
|
||||||
|
color: 'primary'
|
||||||
|
},
|
||||||
|
replenish: {
|
||||||
|
value: 2,
|
||||||
|
label: '补货任务',
|
||||||
|
color: 'warning'
|
||||||
|
},
|
||||||
|
deliver: {
|
||||||
|
value: 3,
|
||||||
|
label: '发货任务',
|
||||||
|
color: 'success'
|
||||||
|
},
|
||||||
|
check: {
|
||||||
|
value: 4,
|
||||||
|
label: '复核任务',
|
||||||
|
color: 'info'
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
export function formatterConveyTaskTypeEnum(value) {
|
||||||
|
switch (parseInt(value)){
|
||||||
|
case conveyTaskTypeEnum.pick.value:
|
||||||
|
return {label: conveyTaskTypeEnum.pick.label, color: conveyTaskTypeEnum.pick.color};
|
||||||
|
case conveyTaskTypeEnum.replenish.value:
|
||||||
|
return {label: conveyTaskTypeEnum.replenish.label, color: conveyTaskTypeEnum.replenish.color};
|
||||||
|
case conveyTaskTypeEnum.deliver.value:
|
||||||
|
return {label: conveyTaskTypeEnum.deliver.label, color: conveyTaskTypeEnum.deliver.color};
|
||||||
|
case conveyTaskTypeEnum.check.value:
|
||||||
|
return {label: conveyTaskTypeEnum.check.label, color: conveyTaskTypeEnum.check.color};
|
||||||
|
default:
|
||||||
|
return {label: `未知类型:${value}`, color: 'danger'};
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -19,10 +19,11 @@ const routes = [
|
||||||
{ path: 'wmsTask', name: 'wmsTask', component:() => import('../view/tab/taskManage/WmsTask.vue') }, // Wms任务管理
|
{ 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: 'wcsTask', name: 'wcsTask', component:() => import('../view/tab/taskManage/WcsTask.vue') }, // Wcs任务管理
|
||||||
{ path: 'elTagTask', name: 'elTagTask', component:() => import('../view/tab/taskManage/ElTagTask.vue') }, // 电子标签任务管理
|
{ path: 'elTagTask', name: 'elTagTask', component:() => import('../view/tab/taskManage/ElTagTask.vue') }, // 电子标签任务管理
|
||||||
|
{ path: 'conveyTask', name: 'conveyTask', component:() => import('../view/tab/taskManage/ConveyTask.vue') }, // 输送线任务管理
|
||||||
// 设备管理
|
// 设备管理
|
||||||
{ path: 'location', name: 'location', component:() => import('@/view/tab/equipmentManage/LocationData.vue') }, // 点位/库位管理
|
{ path: 'location', name: 'location', component:() => import('@/view/tab/equipmentManage/LocationData.vue') }, // 点位/库位管理
|
||||||
{ path: 'stackerData', name: 'stackerData', component:() => import('@/view/tab/equipmentManage/StackerData.vue') }, // 堆垛机管理
|
{ path: 'stackerData', name: 'stackerData', component:() => import('@/view/tab/equipmentManage/StackerData.vue') }, // 堆垛机管理
|
||||||
{path: 'elTagLocationData', name: 'elTagLocationData', component:() => import('@/view/tab/equipmentManage/ElTagLocationData.vue')}, // 电子标签货位管理
|
{ path: 'elTagLocationData', name: 'elTagLocationData', component:() => import('@/view/tab/equipmentManage/ElTagLocationData.vue')}, // 电子标签货位管理
|
||||||
// 数据查询
|
// 数据查询
|
||||||
{ path: 'apiAccept', name: 'apiAccept', component:() => import('../view/tab/dataQuery/ApiAccept.vue') }, // 接口接收记录
|
{ path: 'apiAccept', name: 'apiAccept', component:() => import('../view/tab/dataQuery/ApiAccept.vue') }, // 接口接收记录
|
||||||
{ path: 'apiRequest', name: 'apiRequest', component:() => import('../view/tab/dataQuery/ApiRequest.vue') }, // 接口请求记录
|
{ path: 'apiRequest', name: 'apiRequest', component:() => import('../view/tab/dataQuery/ApiRequest.vue') }, // 接口请求记录
|
||||||
|
|
|
||||||
127
src/view/component/conveyTask/ConveyTaskList.vue
Normal file
127
src/view/component/conveyTask/ConveyTaskList.vue
Normal file
|
|
@ -0,0 +1,127 @@
|
||||||
|
<!-- -->
|
||||||
|
<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 fixed prop="taskGroup" label="任务组" width="120px" align="center" show-overflow-tooltip/>
|
||||||
|
<el-table-column prop="vehicleNo" label="载具号" width="120px" align="center" show-overflow-tooltip/>
|
||||||
|
<el-table-column prop="taskType" label="任务类型" width="140px" align="center">
|
||||||
|
<template #default="scope">
|
||||||
|
<el-tag class="ml-2" :type=formatterConveyTaskTypeEnum(scope.row.taskType).color>
|
||||||
|
{{formatterConveyTaskTypeEnum(scope.row.taskType).label }}</el-tag>
|
||||||
|
</template>
|
||||||
|
</el-table-column>
|
||||||
|
<el-table-column prop="taskStatus" label="任务状态" width="140px" align="center">
|
||||||
|
<template #default="scope">
|
||||||
|
<el-tag class="ml-2" :type=formatterConveyTaskStatusEnum(scope.row.taskStatus).color>
|
||||||
|
{{formatterConveyTaskStatusEnum(scope.row.taskStatus).label }}</el-tag>
|
||||||
|
</template>
|
||||||
|
</el-table-column>
|
||||||
|
<el-table-column prop="location" label="目标点位" width="100px" align="center" show-overflow-tooltip/>
|
||||||
|
<el-table-column prop="arriveLocation" 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="moveTime" label="移栽时间" :formatter="formatterTime" width="160px" align="center" show-overflow-tooltip/>
|
||||||
|
<el-table-column prop="completeTime" 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="edit(scope.row)">
|
||||||
|
<el-icon><Edit/></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>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
// import 《组件名称》 from '《组件路径》 ';
|
||||||
|
|
||||||
|
|
||||||
|
import {Edit, Switch} from "@element-plus/icons-vue";
|
||||||
|
import {formatterConveyTaskStatusEnum} from "@/enum/convey/convey.task.status.enum";
|
||||||
|
import {formatterConveyTaskTypeEnum} from "@/enum/convey/convey.task.type.enum";
|
||||||
|
import formatterTime from "@/plugins/formatter/formatter.time";
|
||||||
|
|
||||||
|
export default {
|
||||||
|
// import 引入的组件需要注入到对象中才能使用
|
||||||
|
components: {Edit, Switch},
|
||||||
|
props: ['modelValue', 'searchParams'],
|
||||||
|
emits: ['update:modelValue', 'update:searchParams', 'pageChange'],
|
||||||
|
data() {
|
||||||
|
// 这里存放数据
|
||||||
|
return {}
|
||||||
|
},
|
||||||
|
// 计算属性 类似于 data 概念
|
||||||
|
computed: {
|
||||||
|
},
|
||||||
|
// 监控 data 中的数据变化
|
||||||
|
watch: {},
|
||||||
|
// 方法集合
|
||||||
|
methods: {
|
||||||
|
formatterTime: formatterTime.formatCellValueTime,
|
||||||
|
formatterConveyTaskTypeEnum,
|
||||||
|
formatterConveyTaskStatusEnum,
|
||||||
|
searchData(){
|
||||||
|
this.$emit('pageChange', this.searchParams)
|
||||||
|
},
|
||||||
|
edit(row) {
|
||||||
|
|
||||||
|
}
|
||||||
|
},
|
||||||
|
// 组合式 API
|
||||||
|
setup() {
|
||||||
|
},
|
||||||
|
// 创建之前
|
||||||
|
beforeCreate() {
|
||||||
|
},
|
||||||
|
// 创建完成(可以访问 this 实例)
|
||||||
|
created() {
|
||||||
|
},
|
||||||
|
// 生命周期 - 挂载之前
|
||||||
|
beforeMount() {
|
||||||
|
},
|
||||||
|
// 生命周期 - 挂载完成(可以访问 DOM 元素)
|
||||||
|
mounted() {
|
||||||
|
},
|
||||||
|
// 更新之前
|
||||||
|
beforeUpdate() {
|
||||||
|
},
|
||||||
|
// 更新之后
|
||||||
|
updated() {
|
||||||
|
},
|
||||||
|
// 销毁之前
|
||||||
|
beforeUnmount() {
|
||||||
|
},
|
||||||
|
// 销毁完成
|
||||||
|
unmounted() {
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style lang="scss" scoped>
|
||||||
|
|
||||||
|
|
||||||
|
</style>
|
||||||
147
src/view/component/conveyTask/SearchForm.vue
Normal file
147
src/view/component/conveyTask/SearchForm.vue
Normal file
|
|
@ -0,0 +1,147 @@
|
||||||
|
<!-- -->
|
||||||
|
<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.conveyTaskType" multiple placeholder="请选择需要查询的任务类型">
|
||||||
|
<el-option v-for="item in conveyTaskTypeEnum" :key="item.value" :label="item.label" :value="item.value"/>
|
||||||
|
</el-select>
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item label="任务状态:">
|
||||||
|
<el-select v-model="searchParams.conveyTaskStatus" multiple placeholder="请选择需要查询的任务状态">
|
||||||
|
<el-option v-for="item in conveyTaskStatusEnum" :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="showAddForm = true">新增任务</el-button>
|
||||||
|
</el-row>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
// import 《组件名称》 from '《组件路径》 ';
|
||||||
|
|
||||||
|
import conveyApi from "@/axios/convey";
|
||||||
|
import {conveyTaskTypeEnum} from "@/enum/convey/convey.task.type.enum";
|
||||||
|
import {conveyTaskStatusEnum} from "@/enum/convey/convey.task.status.enum";
|
||||||
|
import {ElLoading, ElMessage} from "element-plus";
|
||||||
|
|
||||||
|
export default {
|
||||||
|
// import 引入的组件需要注入到对象中才能使用
|
||||||
|
components: {},
|
||||||
|
props: ['searchParams', 'modelValue'],
|
||||||
|
emits: ['update:searchParams', 'update:modelValue'],
|
||||||
|
data() {
|
||||||
|
// 这里存放数据
|
||||||
|
return {}
|
||||||
|
},
|
||||||
|
// 计算属性 类似于 data 概念
|
||||||
|
computed: {
|
||||||
|
conveyTaskStatusEnum() {
|
||||||
|
return conveyTaskStatusEnum
|
||||||
|
},
|
||||||
|
conveyTaskTypeEnum() {
|
||||||
|
return conveyTaskTypeEnum
|
||||||
|
}
|
||||||
|
},
|
||||||
|
// 监控 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', [])
|
||||||
|
conveyApi.getConveyTaskWithPage(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',
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}).catch((ex) => {
|
||||||
|
// 通讯报错
|
||||||
|
ElMessage({
|
||||||
|
message: '请求服务器失败:' + ex,
|
||||||
|
type: 'error',
|
||||||
|
})
|
||||||
|
}).finally(() => {
|
||||||
|
loading.close()
|
||||||
|
})
|
||||||
|
},
|
||||||
|
showAddForm() {
|
||||||
|
|
||||||
|
}
|
||||||
|
},
|
||||||
|
// 组合式 API
|
||||||
|
setup() {
|
||||||
|
},
|
||||||
|
// 创建之前
|
||||||
|
beforeCreate() {
|
||||||
|
},
|
||||||
|
// 创建完成(可以访问 this 实例)
|
||||||
|
created() {
|
||||||
|
},
|
||||||
|
// 生命周期 - 挂载之前
|
||||||
|
beforeMount() {
|
||||||
|
},
|
||||||
|
// 生命周期 - 挂载完成(可以访问 DOM 元素)
|
||||||
|
mounted() {
|
||||||
|
},
|
||||||
|
// 更新之前
|
||||||
|
beforeUpdate() {
|
||||||
|
},
|
||||||
|
// 更新之后
|
||||||
|
updated() {
|
||||||
|
},
|
||||||
|
// 销毁之前
|
||||||
|
beforeUnmount() {
|
||||||
|
},
|
||||||
|
// 销毁完成
|
||||||
|
unmounted() {
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style lang="scss" scoped>
|
||||||
|
|
||||||
|
|
||||||
|
</style>
|
||||||
86
src/view/tab/taskManage/ConveyTask.vue
Normal file
86
src/view/tab/taskManage/ConveyTask.vue
Normal file
|
|
@ -0,0 +1,86 @@
|
||||||
|
<!-- -->
|
||||||
|
<template>
|
||||||
|
<div>
|
||||||
|
<el-row >
|
||||||
|
<SearchForm ref="searchForm" v-model:searchParams="searchParams" v-model="conveyTaskList" style="width: 100%"></SearchForm>
|
||||||
|
</el-row>
|
||||||
|
<el-row>
|
||||||
|
<ConveyTaskList v-model="conveyTaskList" v-model:searchParams="searchParams" @pageChange="pageChange"></ConveyTaskList>
|
||||||
|
</el-row>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
// import 《组件名称》 from '《组件路径》 ';
|
||||||
|
import SearchForm from "@/view/component/conveyTask/SearchForm.vue";
|
||||||
|
import ConveyTaskList from "@/view/component/conveyTask/ConveyTaskList.vue";
|
||||||
|
|
||||||
|
export default {
|
||||||
|
// import 引入的组件需要注入到对象中才能使用
|
||||||
|
components: { SearchForm, ConveyTaskList},
|
||||||
|
props: [],
|
||||||
|
emits: [],
|
||||||
|
data() {
|
||||||
|
// 这里存放数据
|
||||||
|
return {
|
||||||
|
// 搜索参数
|
||||||
|
searchParams: {
|
||||||
|
searchStr: '',
|
||||||
|
conveyTaskType: [1,2,3,4],
|
||||||
|
conveyTaskStatus: [0,1,],
|
||||||
|
timeRange: [],
|
||||||
|
page: {
|
||||||
|
pageIndex: 1,
|
||||||
|
pageSize: 50,
|
||||||
|
totalRow: 0
|
||||||
|
}
|
||||||
|
},
|
||||||
|
// 任务列表
|
||||||
|
conveyTaskList: []
|
||||||
|
}
|
||||||
|
},
|
||||||
|
// 计算属性 类似于 data 概念
|
||||||
|
computed: {},
|
||||||
|
// 监控 data 中的数据变化
|
||||||
|
watch: {},
|
||||||
|
// 方法集合
|
||||||
|
methods: {
|
||||||
|
pageChange() {
|
||||||
|
this.$refs.searchForm.searchData(this.searchParams)
|
||||||
|
}
|
||||||
|
},
|
||||||
|
// 组合式 API
|
||||||
|
setup() {
|
||||||
|
},
|
||||||
|
// 创建之前
|
||||||
|
beforeCreate() {
|
||||||
|
},
|
||||||
|
// 创建完成(可以访问 this 实例)
|
||||||
|
created() {
|
||||||
|
},
|
||||||
|
// 生命周期 - 挂载之前
|
||||||
|
beforeMount() {
|
||||||
|
},
|
||||||
|
// 生命周期 - 挂载完成(可以访问 DOM 元素)
|
||||||
|
mounted() {
|
||||||
|
},
|
||||||
|
// 更新之前
|
||||||
|
beforeUpdate() {
|
||||||
|
},
|
||||||
|
// 更新之后
|
||||||
|
updated() {
|
||||||
|
},
|
||||||
|
// 销毁之前
|
||||||
|
beforeUnmount() {
|
||||||
|
},
|
||||||
|
// 销毁完成
|
||||||
|
unmounted() {
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style lang="scss" scoped>
|
||||||
|
|
||||||
|
|
||||||
|
</style>
|
||||||
Loading…
Reference in New Issue
Block a user