25 changed files with 1024 additions and 74 deletions
@ -0,0 +1,18 @@ |
|||
package org.nl.wms.basedata_manage.service.dto; |
|||
|
|||
import lombok.AllArgsConstructor; |
|||
import lombok.Builder; |
|||
import lombok.Data; |
|||
import lombok.NoArgsConstructor; |
|||
|
|||
@Data |
|||
@Builder |
|||
@AllArgsConstructor |
|||
@NoArgsConstructor |
|||
public class StructattrChangeDto { |
|||
String inv; |
|||
String structCode; |
|||
String storagevehicleCode; |
|||
Boolean inBound; |
|||
String taskType; |
|||
} |
@ -0,0 +1,35 @@ |
|||
package org.nl.wms.warehouse_management.record.controller; |
|||
|
|||
|
|||
import org.nl.common.domain.query.PageQuery; |
|||
import org.nl.wms.warehouse_management.record.service.IStIvtStructivtflowService; |
|||
import org.nl.wms.warehouse_management.record.service.dto.StructIvtFlowQuery; |
|||
import org.springframework.beans.factory.annotation.Autowired; |
|||
import org.springframework.http.HttpStatus; |
|||
import org.springframework.http.ResponseEntity; |
|||
import org.springframework.web.bind.annotation.GetMapping; |
|||
import org.springframework.web.bind.annotation.RequestMapping; |
|||
|
|||
import org.springframework.web.bind.annotation.RestController; |
|||
|
|||
/** |
|||
* <p> |
|||
* 仓位库存变动记录表 前端控制器 |
|||
* </p> |
|||
* |
|||
* @author generator |
|||
* @since 2024-05-23 |
|||
*/ |
|||
@RestController |
|||
@RequestMapping("/api/stIvtStructivtflow") |
|||
public class StIvtStructivtflowController { |
|||
|
|||
@Autowired |
|||
private IStIvtStructivtflowService stIvtStructivtflowService; |
|||
|
|||
@GetMapping |
|||
public ResponseEntity<Object> query(StructIvtFlowQuery query, PageQuery page) { |
|||
return new ResponseEntity<>(stIvtStructivtflowService.pageQuery(query, page), HttpStatus.OK); |
|||
} |
|||
} |
|||
|
@ -0,0 +1,19 @@ |
|||
package org.nl.wms.warehouse_management.record.service; |
|||
|
|||
import com.baomidou.mybatisplus.extension.service.IService; |
|||
import org.nl.common.domain.query.PageQuery; |
|||
import org.nl.wms.warehouse_management.record.service.dao.StIvtStructivtflow; |
|||
import org.nl.wms.warehouse_management.record.service.dto.StructIvtFlowQuery; |
|||
|
|||
/** |
|||
* <p> |
|||
* 仓位库存变动记录表 服务类 |
|||
* </p> |
|||
* |
|||
* @author generator |
|||
* @since 2024-05-23 |
|||
*/ |
|||
public interface IStIvtStructivtflowService extends IService<StIvtStructivtflow> { |
|||
|
|||
Object pageQuery(StructIvtFlowQuery query, PageQuery page); |
|||
} |
@ -0,0 +1,113 @@ |
|||
package org.nl.wms.warehouse_management.record.service.dao; |
|||
|
|||
import java.math.BigDecimal; |
|||
|
|||
import com.alibaba.fastjson.JSONObject; |
|||
import com.baomidou.mybatisplus.annotation.TableField; |
|||
import com.baomidou.mybatisplus.annotation.TableId; |
|||
import com.baomidou.mybatisplus.annotation.TableName; |
|||
import java.io.Serializable; |
|||
|
|||
import lombok.Data; |
|||
import lombok.EqualsAndHashCode; |
|||
import org.nl.common.domain.handler.FastjsonSortTypeHandler; |
|||
|
|||
/** |
|||
* <p> |
|||
* 仓位库存变动记录表 |
|||
* </p> |
|||
* |
|||
* @author generator |
|||
* @since 2024-05-23 |
|||
*/ |
|||
@Data |
|||
@EqualsAndHashCode(callSuper = false) |
|||
@TableName(value = "st_ivt_structivtflow", autoResultMap = true) |
|||
public class StIvtStructivtflow implements Serializable { |
|||
|
|||
private static final long serialVersionUID = 1L; |
|||
|
|||
/** |
|||
* 记录标识 |
|||
*/ |
|||
@TableId |
|||
private String id; |
|||
|
|||
/** |
|||
* 仓库编码 |
|||
*/ |
|||
private String stor_code; |
|||
/** |
|||
* 库区编码 |
|||
*/ |
|||
private String sect_code; |
|||
/** |
|||
* 仓位编码 |
|||
*/ |
|||
private String struct_code; |
|||
|
|||
/** |
|||
* 载具编码 |
|||
*/ |
|||
private String vehicle_code; |
|||
/** |
|||
* 物料标识 |
|||
*/ |
|||
private String material_id; |
|||
|
|||
/** |
|||
* 批次 |
|||
*/ |
|||
private String pcsn; |
|||
|
|||
/** |
|||
* 总库存 |
|||
*/ |
|||
private BigDecimal qty; |
|||
/** |
|||
* 变动库存 |
|||
*/ |
|||
private BigDecimal change_qty; |
|||
|
|||
/** |
|||
* 冻结库存 |
|||
*/ |
|||
private BigDecimal frozen_qty; |
|||
|
|||
/** |
|||
* 载具物料参数 |
|||
*/ |
|||
@TableField(typeHandler = FastjsonSortTypeHandler.class) |
|||
private JSONObject vehicle_form_data; |
|||
|
|||
/** |
|||
* 单据编号 |
|||
*/ |
|||
private String source_form_type; |
|||
|
|||
/** |
|||
* 单据表名 |
|||
*/ |
|||
private String source_form_id; |
|||
|
|||
/** |
|||
* 变动类型1入库0出库 |
|||
*/ |
|||
private String task_type; |
|||
|
|||
/** |
|||
* 数量计量单位标识 |
|||
*/ |
|||
private String unit_id; |
|||
|
|||
/** |
|||
* 变动时间 |
|||
*/ |
|||
private String update_time; |
|||
|
|||
/** |
|||
* 库存增加 |
|||
*/ |
|||
private Boolean growth; |
|||
|
|||
} |
@ -0,0 +1,23 @@ |
|||
package org.nl.wms.warehouse_management.record.service.dao.mapper; |
|||
|
|||
import com.baomidou.mybatisplus.core.mapper.BaseMapper; |
|||
import org.apache.ibatis.annotations.Param; |
|||
import org.nl.common.domain.query.PageQuery; |
|||
import org.nl.wms.warehouse_management.record.service.dao.StIvtStructivtflow; |
|||
import org.nl.wms.warehouse_management.record.service.dto.StructIvtFlowQuery; |
|||
|
|||
import java.util.List; |
|||
import java.util.Map; |
|||
|
|||
/** |
|||
* <p> |
|||
* 仓位库存变动记录表 Mapper 接口 |
|||
* </p> |
|||
* |
|||
* @author generator |
|||
* @since 2024-05-23 |
|||
*/ |
|||
public interface StIvtStructivtflowMapper extends BaseMapper<StIvtStructivtflow> { |
|||
|
|||
List<Map> getPageQuery(@Param("query") StructIvtFlowQuery query, PageQuery pageQuery); |
|||
} |
@ -0,0 +1,39 @@ |
|||
<?xml version="1.0" encoding="UTF-8"?> |
|||
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> |
|||
<mapper namespace="org.nl.wms.warehouse_management.record.service.dao.mapper.StIvtStructivtflowMapper"> |
|||
<select id="getPageQuery" resultType="java.util.Map"> |
|||
SELECT |
|||
struct_flow.*, |
|||
struct.struct_name, |
|||
material.material_code, |
|||
material.material_name, |
|||
unit.unit_name |
|||
FROM |
|||
st_ivt_structivtflow struct_flow |
|||
left join st_ivt_structattr struct on struct.struct_code = struct_flow.struct_code |
|||
left join md_me_materialbase material on struct_flow.material_id = material.material_id |
|||
left join md_pb_measureunit unit on struct_flow.unit_id = unit.measure_unit_id |
|||
<where> |
|||
<if test="query.search != null and query.search != ''"> |
|||
and (struct.struct_code LIKE '%${query.search}%' |
|||
or struct.struct_name LIKE '%${query.search}%') |
|||
</if> |
|||
<if test="query.material_code != null and query.material_code != ''"> |
|||
and material.material_code LIKE '%${query.material_code}%' |
|||
</if> |
|||
<if test="query.vehicle_code != null and query.vehicle_code != ''"> |
|||
and struct_flow.vehicle_code LIKE '%${query.vehicle_code}%' |
|||
</if> |
|||
<if test="query.pcsn != null and query.pcsn != ''"> |
|||
and struct_flow.pcsn = '${query.pcsn}' |
|||
</if> |
|||
<if test="query.start_time != null and query.start_time != ''"> |
|||
and struct_flow.update_time >= #{query.start_time} |
|||
</if> |
|||
<if test="query.end_time != null and query.end_time != ''"> |
|||
and #{query.end_time} >= struct_flow.update_time |
|||
</if> |
|||
</where> |
|||
order by id desc |
|||
</select> |
|||
</mapper> |
@ -0,0 +1,18 @@ |
|||
package org.nl.wms.warehouse_management.record.service.dto; |
|||
|
|||
import lombok.Data; |
|||
import org.nl.common.domain.query.BaseQuery; |
|||
import org.nl.wms.warehouse_management.record.service.dao.StIvtStructivtflow; |
|||
|
|||
/* |
|||
* @author ZZQ |
|||
* @Date 2023/5/4 19:49 |
|||
*/ |
|||
@Data |
|||
public class StructIvtFlowQuery extends BaseQuery<StIvtStructivtflow> { |
|||
|
|||
private String search; |
|||
private String material_code; |
|||
private String vehicle_code; |
|||
private String pcsn; |
|||
} |
@ -0,0 +1,37 @@ |
|||
package org.nl.wms.warehouse_management.record.service.impl; |
|||
|
|||
|
|||
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; |
|||
import com.github.pagehelper.Page; |
|||
import com.github.pagehelper.PageHelper; |
|||
import org.nl.common.base.TableDataInfo; |
|||
import org.nl.common.domain.query.PageQuery; |
|||
import org.nl.wms.warehouse_management.record.service.IStIvtStructivtflowService; |
|||
import org.nl.wms.warehouse_management.record.service.dao.StIvtStructivtflow; |
|||
import org.nl.wms.warehouse_management.record.service.dao.mapper.StIvtStructivtflowMapper; |
|||
import org.nl.wms.warehouse_management.record.service.dto.StructIvtFlowQuery; |
|||
import org.springframework.stereotype.Service; |
|||
|
|||
import java.util.List; |
|||
import java.util.Map; |
|||
|
|||
/** |
|||
* <p> |
|||
* 仓位库存变动记录表 服务实现类 |
|||
* </p> |
|||
* |
|||
* @author generator |
|||
* @since 2024-05-23 |
|||
*/ |
|||
@Service |
|||
public class StIvtStructivtflowServiceImpl extends ServiceImpl<StIvtStructivtflowMapper, StIvtStructivtflow> implements IStIvtStructivtflowService { |
|||
|
|||
@Override |
|||
public Object pageQuery(StructIvtFlowQuery query, PageQuery pageQuery) { |
|||
Page<Object> page = PageHelper.startPage(pageQuery.getPage() + 1, pageQuery.getSize()); |
|||
List<Map> mst_detail = this.baseMapper.getPageQuery(query, pageQuery); |
|||
TableDataInfo<Map> build = TableDataInfo.build(mst_detail); |
|||
build.setTotalElements(page.getTotal()); |
|||
return build; |
|||
} |
|||
} |
@ -0,0 +1,153 @@ |
|||
<template> |
|||
<el-dialog |
|||
title="物料选择" |
|||
append-to-body |
|||
:visible.sync="dialogVisible" |
|||
destroy-on-close |
|||
width="1000px" |
|||
@close="close" |
|||
@open="open" |
|||
> |
|||
<el-form |
|||
:inline="true" |
|||
class="demo-form-inline" |
|||
label-position="right" |
|||
label-width="80px" |
|||
label-suffix=":" |
|||
> |
|||
<el-form-item label="物料名称"> |
|||
<el-input |
|||
v-model="query.search" |
|||
clearable |
|||
size="mini" |
|||
placeholder="物料名称" |
|||
@keyup.enter.native="crud.toQuery" |
|||
/> |
|||
</el-form-item> |
|||
<rrOperation /> |
|||
</el-form> |
|||
|
|||
<!--表格渲染--> |
|||
<el-table |
|||
ref="table" |
|||
v-loading="crud.loading" |
|||
:data="crud.data" |
|||
style="width: 100%;" |
|||
size="mini" |
|||
border |
|||
:cell-style="{'text-align':'center'}" |
|||
:header-cell-style="{background:'#f5f7fa',color:'#606266','text-align':'center'}" |
|||
@select="handleSelectionChange" |
|||
@select-all="onSelectAll" |
|||
@current-change="clickChange" |
|||
> |
|||
<el-table-column v-if="!isSingle" type="selection" width="55" /> |
|||
<el-table-column v-if="isSingle" label="选择" width="55"> |
|||
<template slot-scope="scope"> |
|||
<el-radio v-model="tableRadio" :label="scope.row"><i /></el-radio> |
|||
</template> |
|||
</el-table-column> |
|||
<el-table-column prop="material_code" label="物料编码" width="140" /> |
|||
<el-table-column prop="material_name" label="物料名称" width="170" show-overflow-tooltip /> |
|||
<el-table-column prop="material_spec" label="物料规格" width="170" show-overflow-tooltip/> |
|||
<el-table-column prop="class_name" label="物料分类" width="140" /> |
|||
<el-table-column prop="unit_name" label="计量单位" /> |
|||
<el-table-column prop="product_series_name" label="系列" /> |
|||
<el-table-column prop="update_optname" label="修改人" /> |
|||
<el-table-column prop="update_time" label="修改时间" width="135" /> |
|||
</el-table> |
|||
<!--分页组件--> |
|||
<pagination /> |
|||
<span slot="footer" class="dialog-footer"> |
|||
<el-button @click="dialogVisible = false">取 消</el-button> |
|||
<el-button type="primary" @click="submit">确 定</el-button> |
|||
</span> |
|||
</el-dialog> |
|||
</template> |
|||
|
|||
<script> |
|||
|
|||
import CRUD, { header, presenter } from '@crud/crud' |
|||
import rrOperation from '@crud/RR.operation' |
|||
import pagination from '@crud/Pagination' |
|||
import '@riophae/vue-treeselect/dist/vue-treeselect.css' |
|||
|
|||
export default { |
|||
name: 'MaterialDialog', |
|||
components: { rrOperation, pagination }, |
|||
dicts: ['is_used'], |
|||
cruds() { |
|||
return CRUD({ title: '物料选择', url: 'api/Materia', optShow: {}}) |
|||
}, |
|||
mixins: [presenter(), header()], |
|||
props: { |
|||
dialogShow: { |
|||
type: Boolean, |
|||
default: false |
|||
}, |
|||
isSingle: { |
|||
type: Boolean, |
|||
default: true |
|||
} |
|||
}, |
|||
data() { |
|||
return { |
|||
dialogVisible: false, |
|||
tableRadio: null, |
|||
tableData: [] |
|||
} |
|||
}, |
|||
watch: { |
|||
dialogShow: { |
|||
handler(newValue) { |
|||
this.dialogVisible = newValue |
|||
} |
|||
} |
|||
}, |
|||
methods: { |
|||
clickChange(item) { |
|||
this.tableRadio = item |
|||
}, |
|||
open() { |
|||
|
|||
}, |
|||
handleSelectionChange(val, row) { |
|||
if (val.length > 1) { |
|||
this.$refs.table.clearSelection() |
|||
this.$refs.table.toggleRowSelection(val.pop()) |
|||
} else { |
|||
this.checkrow = row |
|||
} |
|||
}, |
|||
onSelectAll() { |
|||
this.$refs.table.clearSelection() |
|||
}, |
|||
close() { |
|||
this.crud.resetQuery(false) |
|||
this.$emit('update:dialogShow', false) |
|||
}, |
|||
submit() { |
|||
// 处理单选 |
|||
if (this.isSingle && this.tableRadio) { |
|||
this.$emit('update:dialogShow', false) |
|||
this.$emit('materialChoose', this.tableRadio) |
|||
return |
|||
} |
|||
this.rows = this.$refs.table.selection |
|||
if (this.rows.length <= 0) { |
|||
this.$message('请先勾选物料') |
|||
return |
|||
} |
|||
this.crud.resetQuery(false) |
|||
this.$emit('update:dialogShow', false) |
|||
this.$emit('materialChoose', this.rows) |
|||
} |
|||
} |
|||
} |
|||
</script> |
|||
<style rel="stylesheet/scss" lang="scss" scoped> |
|||
::v-deep .el-dialog__body { |
|||
padding-top: 0px; |
|||
} |
|||
</style> |
|||
|
@ -0,0 +1,28 @@ |
|||
import request from '@/utils/request' |
|||
|
|||
export function add(data) { |
|||
return request({ |
|||
url: 'api/stIvtStructivtflow', |
|||
method: 'post', |
|||
data |
|||
}) |
|||
} |
|||
|
|||
export function del(ids) { |
|||
return request({ |
|||
url: 'api/stIvtStructivtflow', |
|||
method: 'delete', |
|||
data: ids |
|||
}) |
|||
} |
|||
|
|||
export function edit(data) { |
|||
return request({ |
|||
url: 'api/stIvtStructivtflow', |
|||
method: 'put', |
|||
data |
|||
}) |
|||
} |
|||
|
|||
|
|||
export default {add, edit, del} |
@ -0,0 +1,178 @@ |
|||
<template> |
|||
<div class="app-container"> |
|||
<!--工具栏--> |
|||
<div class="head-container"> |
|||
<el-form |
|||
:inline="true" |
|||
class="demo-form-inline" |
|||
label-position="right" |
|||
label-width="80px" |
|||
label-suffix=":" |
|||
> |
|||
<el-form-item label="仓位信息"> |
|||
<el-input |
|||
v-model="query.search" |
|||
clearable |
|||
style="width: 300px" |
|||
size="mini" |
|||
placeholder="请输入仓位信息" |
|||
prefix-icon="el-icon-search" |
|||
class="filter-item" |
|||
/> |
|||
</el-form-item> |
|||
<el-form-item label="物料编码"> |
|||
<el-input |
|||
v-model="query.material_code" |
|||
clearable |
|||
style="width: 300px" |
|||
size="mini" |
|||
placeholder="请输入物料编码" |
|||
prefix-icon="el-icon-search" |
|||
class="filter-item" |
|||
/> |
|||
</el-form-item> |
|||
<el-form-item label="载具编码"> |
|||
<el-input |
|||
v-model="query.vehicle_code" |
|||
clearable |
|||
style="width: 300px" |
|||
size="mini" |
|||
placeholder="请输入载具编码" |
|||
prefix-icon="el-icon-search" |
|||
class="filter-item" |
|||
/> |
|||
</el-form-item> |
|||
<el-form-item label="批次"> |
|||
<el-input |
|||
v-model="query.pcsn" |
|||
clearable |
|||
style="width: 300px" |
|||
size="mini" |
|||
placeholder="请输入批次信息" |
|||
prefix-icon="el-icon-search" |
|||
class="filter-item" |
|||
/> |
|||
</el-form-item> |
|||
<el-form-item label="变动日期" prop="analyseData"> |
|||
<el-date-picker |
|||
v-model="query.datepick" |
|||
type="daterange" |
|||
value-format="yyyy-MM-dd" |
|||
range-separator="至" |
|||
start-placeholder="开始日期" |
|||
end-placeholder="结束日期" |
|||
/> |
|||
</el-form-item> |
|||
<rrOperation /> |
|||
</el-form> |
|||
<!--如果想在工具栏加入更多按钮,可以使用插槽方式, slot = 'left' or 'right'--> |
|||
<crudOperation :permission="permission" /> |
|||
<el-table |
|||
ref="table" |
|||
v-loading="crud.loading" |
|||
:data="crud.data" |
|||
size="mini" |
|||
style="width: 100%;" |
|||
> |
|||
<el-table-column prop="stor_code" label="仓库" width="150" show-tooltip-when-overflow /> |
|||
<el-table-column prop="struct_code" label="仓位编码" width="150" show-tooltip-when-overflow /> |
|||
<el-table-column prop="material_code" label="物料编码" width="150" show-tooltip-when-overflow /> |
|||
<el-table-column prop="material_name" label="物料名称" width="150" show-tooltip-when-overflow /> |
|||
<el-table-column prop="vehicle_code" label="载具编码" width="150" show-tooltip-when-overflow /> |
|||
<el-table-column prop="growth" label="是否增加库存" width="150" show-tooltip-when-overflow> |
|||
<template slot-scope="scope"> |
|||
{{ scope.row.growth }} |
|||
</template> |
|||
</el-table-column> |
|||
<el-table-column prop="pcsn" label="批次" min-width="150" show-tooltip-when-overflow /> |
|||
<el-table-column prop="qty" label="总库存" min-width="150" show-tooltip-when-overflow /> |
|||
<el-table-column prop="frozen_qty" label="冻结库存" show-tooltip-when-overflow /> |
|||
<el-table-column prop="change_qty" label="变动库存" show-tooltip-when-overflow /> |
|||
<el-table-column prop="unit_name" label="单位" show-tooltip-when-overflow /> |
|||
<el-table-column prop="vehicle_form_data" label="物料扩展信息" width="300" show-tooltip-when-overflow /> |
|||
<el-table-column prop="source_form_type" label="单据编号" show-tooltip-when-overflow /> |
|||
<el-table-column prop="source_form_id" label="单据表名" min-width="120" show-tooltip-when-overflow /> |
|||
<el-table-column prop="task_type" show-overflow-tooltip show-tooltip-when-overflow label="变动类型" /> |
|||
<!-- <template slot-scope="scope">--> |
|||
<!-- {{ statusEnum.label.TASK_TYPE[scope.row.task_type] }}--> |
|||
<!-- </template>--> |
|||
<!-- </el-table-column>--> |
|||
<el-table-column prop="update_time" label="修改时间" width="120" show-tooltip-when-overflow /> |
|||
</el-table> |
|||
<!--分页组件--> |
|||
<pagination /> |
|||
</div> |
|||
</div> |
|||
</template> |
|||
|
|||
<script> |
|||
import curdStructIvtFlow from './curdStructIvtFlow' |
|||
import CRUD, { presenter, header, form, crud } from '@crud/crud' |
|||
import rrOperation from '@crud/RR.operation' |
|||
import crudOperation from '@crud/CRUD.operation' |
|||
import udOperation from '@crud/UD.operation' |
|||
import pagination from '@crud/Pagination' |
|||
|
|||
const defaultForm = { |
|||
id: null, |
|||
struct_code: null, |
|||
material_id: null, |
|||
pcsn: null, |
|||
qty: true, |
|||
frozen_qty: null, |
|||
vehicle_form_data: null, |
|||
source_form_type: null, |
|||
source_form_id: null, |
|||
task_type: null, |
|||
unit_id: null, |
|||
update_time: null, |
|||
growth: null, |
|||
vehicle_code: null |
|||
} |
|||
export default { |
|||
dicts: [], |
|||
name: 'StructIvtFlow', |
|||
components: { pagination, crudOperation, rrOperation, udOperation }, |
|||
statusEnums: ['TASK_TYPE'], |
|||
mixins: [presenter(), header(), form(defaultForm), crud()], |
|||
cruds() { |
|||
return CRUD({ |
|||
title: '库存变动记录', |
|||
url: 'api/stIvtStructivtflow', |
|||
optShow: { |
|||
add: false, |
|||
reset: true |
|||
}, |
|||
idField: 'id', |
|||
sort: 'id,desc', |
|||
crudMethod: { ...curdStructIvtFlow } |
|||
}) |
|||
}, |
|||
data() { |
|||
return { |
|||
permission: {}, |
|||
rules: {} |
|||
} |
|||
}, |
|||
created() { |
|||
}, |
|||
methods: { |
|||
// 钩子:在获取表格数据之前执行,false 则代表不获取数据 |
|||
[CRUD.HOOK.beforeRefresh]() { |
|||
if (this.query.datepick) { |
|||
this.query.start_time = this.query.datepick[0] |
|||
if (this.query.datepick.length > 1) { |
|||
this.query.end_time = this.query.datepick[1] |
|||
} |
|||
} else { |
|||
this.query.start_time = '' |
|||
this.query.end_time = '' |
|||
} |
|||
} |
|||
} |
|||
} |
|||
</script> |
|||
|
|||
<style scoped> |
|||
|
|||
</style> |
Loading…
Reference in new issue