一级库页面调整

master
taozi 4 months ago
parent c292cbad6b
commit c1b7dc213e
  1. 6
      src/views/firstOrder/components/approvalProcessDialog.vue
  2. 65
      src/views/firstOrder/components/inDialog.vue
  3. 84
      src/views/firstOrder/components/outDialog.vue
  4. 1
      src/views/firstOrder/inbound.vue
  5. 12
      src/views/firstOrder/list.vue
  6. 7
      src/views/firstOrder/outbound.vue
  7. 54
      src/views/materials/index.vue
  8. 15
      src/views/secondOrder/components/approvalProcessDialog.vue
  9. 69
      src/views/secondOrder/outbound.vue

@ -92,7 +92,7 @@ export default {
margin: 0 auto 0
}
:deep(.el-dialog__body) {
height: 300px;
}
// :deep(.el-dialog__body) {
// height: 300px;
// }
</style>

@ -91,16 +91,24 @@
</el-table-column>
<el-table-column prop="theInboundQuantity" label="本次入库数量">
<template slot-scope="scope">
<el-input-number size="mini" v-model="scope.row.theInboundQuantity" :min="1" style="width: 100%;"
<el-input-number size="mini" v-model="scope.row.theInboundQuantity" :min="0" style="width: 100%;"
@change="syncInboundQuantity(scope.row)" v-if='inDialogType != "details"'></el-input-number>
<span v-else>{{ scope.row.theInboundQuantity || 0 }}</span>
<span v-else>{{ scope.row.theInboundQuantity === undefined ? 0 : scope.row.theInboundQuantity }}</span>
</template>
</el-table-column>
<el-table-column prop="unitPrice" label="单价">
<template slot-scope="scope">
<el-input-number size="mini" v-model="scope.row.unitPrice" :min="0" style="width: 100%;"
@change="syncUnitPrice(scope.row)"
v-if='inDialogType != "details" && scope.row.type !== "YH"'></el-input-number>
<span v-else-if='scope.row.type === "YH"'>-</span>
<span v-else>{{ scope.row.unitPrice || 0 }}</span>
</template>
</el-table-column>
</el-table>
<!-- 单项选择 -->
<el-table :data="sizeForm.singleData" border style="width: 100%" v-show="sizeForm.option == 2">
<el-table :data="sizeForm.singleData" border style="width: 100%" v-show="sizeForm.option == 2" align="center">
<el-table-column prop="materialCode" label="物资编码"></el-table-column>
<el-table-column prop="materialName" label="物资名称">
<template slot-scope="scope">
@ -134,7 +142,7 @@
</el-table-column>
<el-table-column prop="theInboundQuantity" label="本次入库数量">
<template slot-scope="scope">
<el-input-number size="mini" v-model="scope.row.theInboundQuantity" :min="1" style="width: 100%;"
<el-input-number size="mini" v-model="scope.row.theInboundQuantity" :min="0" style="width: 100%;"
@change="syncInboundQuantity(scope.row)" v-if='inDialogType != "details"'></el-input-number>
<span v-else>{{ scope.row.theInboundQuantity || 0 }}</span>
</template>
@ -142,7 +150,9 @@
<el-table-column prop="unitPrice" label="单价">
<template slot-scope="scope">
<el-input-number size="mini" v-model="scope.row.unitPrice" :min="0" style="width: 100%;"
@change="syncUnitPrice(scope.row)" v-if='inDialogType != "details"'></el-input-number>
@change="syncUnitPrice(scope.row)"
v-if='inDialogType != "details" && scope.row.type !== "YH"'></el-input-number>
<span v-else-if='scope.row.type === "YH"'>-</span>
<span v-else>{{ scope.row.unitPrice || 0 }}</span>
</template>
</el-table-column>
@ -174,12 +184,20 @@
</template>
</el-table-column>
<el-table-column prop="unitPrice" label="单价">
<template slot-scope="scope">
<span v-if='scope.row.type === "YH"'>-</span>
<span v-else>{{ scope.row.unitPrice || 0 }}</span>
</template>
</el-table-column>
</el-table-column>
<el-table-column prop="date" label="入库信息">
<el-table-column prop="theInboundQuantity" label="数量">
</el-table-column>
<el-table-column prop="unitPrice" label="单价">
<template slot-scope="scope">
<span v-if='scope.row.type === "YH"'>-</span>
<span v-else>{{ scope.row.unitPrice || 0 }}</span>
</template>
</el-table-column>
</el-table-column>
<el-table-column prop="date" label="入库后库存">
@ -189,6 +207,10 @@
</template>
</el-table-column>
<el-table-column prop="unitPrice" label="单价">
<template slot-scope="scope">
<span v-if='scope.row.type === "YH"'>-</span>
<span v-else>{{ scope.row.unitPrice || 0 }}</span>
</template>s
</el-table-column>
</el-table-column>
<el-table-column prop="date" label="入库信息">
@ -220,11 +242,10 @@
</template>
</el-table-column>
<el-table-column prop="unit" label="单位"></el-table-column>
<el-table-column prop="inboundQuantity" label="数量">
</el-table-column>
<el-table-column prop="unitPrice" label="单价">
<template slot-scope="scope">
{{ scope.row.unitPrice || 0 }}
<span v-if='scope.row.type === "YH"'>-</span>
<span v-else>{{ scope.row.unitPrice || 0 }}</span>
</template>
</el-table-column>
</el-table-column>
@ -233,7 +254,8 @@
</el-table-column>
<el-table-column prop="unitPrice" label="单价">
<template slot-scope="scope">
{{ scope.row.unitPrice }}
<span v-if='scope.row.type === "YH"'>-</span>
<span v-else>{{ scope.row.unitPrice || 0 }}</span>
</template>
</el-table-column>
</el-table-column>
@ -245,7 +267,8 @@
</el-table-column>
<el-table-column prop="unitPrice" label="单价">
<template slot-scope="scope">
{{ scope.row.unitPrice || 0 }}
<span v-if='scope.row.type === "YH"'>-</span>
<span v-else>{{ scope.row.unitPrice || 0 }}</span>
</template>
</el-table-column>
</el-table-column>
@ -435,6 +458,7 @@ export default {
// const randomNum = Math.floor(Math.random() * 100000000) + 1;
// this.sizeForm.orderNo = String(randomNum).padStart(8, '0');//
this.sizeForm.inDate = new Date()//
this.sizeForm.inTableData.theInboundQuantity = 0
},
//
handleCloseDetail() {
@ -450,7 +474,7 @@ export default {
status: '',//
materialId: '',
materialName: '',
theInboundQuantity: 1,
theInboundQuantity: 0,
unitPrice: 0,
})
} else {
@ -465,7 +489,7 @@ export default {
status: '',//
materialId: '',
materialName: '',
theInboundQuantity: 1,
theInboundQuantity: 0,
unitPrice: 0,
};
this.sizeForm.singleData.push(newRow);
@ -564,8 +588,8 @@ export default {
this.$message.error("物资名称不能为空");
return;
}
if (!row.theInboundQuantity || row.theInboundQuantity <= 0) {
this.$message.error("本次入库数量必须大于0");
if (!row.theInboundQuantity || row.theInboundQuantity < 0) {
this.$message.error("本次入库数量不能为空");
return;
}
if (row.unitPrice === undefined || row.unitPrice < 0) {
@ -594,8 +618,8 @@ export default {
this.$message.error("物资名称不能为空");
return;
}
if (!row.theInboundQuantity || row.theInboundQuantity <= 0) {
this.$message.error("本次入库数量必须大于0");
if (!row.theInboundQuantity || row.theInboundQuantity < 0) {
this.$message.error("本次入库数量不能为空");
return;
}
if (row.unitPrice === undefined || row.unitPrice <= 0) {
@ -636,7 +660,7 @@ export default {
} else {
this.$message.error(res.data.message || "提交失败");
}
} catch (error) {
} catch (error) {
this.$message.error(error.message || "服务器错误");
}
@ -653,7 +677,7 @@ export default {
// type
handleTypeChange(row) {
if (row.type === 'YH') {
// 600
// row.unitPrice = null;
if (Number(row.unitPrice) > 600) {
this.$confirm('单价大于600元,确定要选择为易耗品吗?', '提示', {
confirmButtonText: '确定',
@ -681,4 +705,9 @@ export default {
font-weight: 600;
padding: 18px 0;
}
::v-deep .el-table td,
::v-deep .el-table th {
text-align: center !important;
}
</style>

@ -39,6 +39,15 @@
</el-radio-group>
</el-form-item>
</el-col>
<el-col :span="12" v-if="sizeForm.options === 2">
<el-form-item label="选项">
<el-radio-group v-model="sizeForm.radio" :disabled="outDialogType == 'details'">
<el-radio :label="1">易耗品</el-radio>
<el-radio :label="2">耐用品</el-radio>
<el-radio :label="3">全部</el-radio>
</el-radio-group>
</el-form-item>
</el-col>
<el-col :span="12" v-if="sizeForm.options == 1">
<el-form-item label="需求单名称">
<el-input v-model="sizeForm.demandEndInfo" disabled></el-input>
@ -69,6 +78,11 @@
{{ scope.row.type === "NY" ? "耐用品" : (scope.row.type === "YH" ? "易耗品" : "") }}
</template>
</el-table-column>
<el-table-column prop="type" label="出库类型">
<template slot-scope="scope">
{{ scope.row.type === "NY" ? "出库单" : (scope.row.type === "YH" ? "发放单" : "") }}
</template>
</el-table-column>
<el-table-column prop="unit" label="单位">
</el-table-column>
<el-table-column prop="departmentName" label="部门" v-if="sizeForm.options === 2">
@ -91,17 +105,11 @@
</el-table-column>
<el-table-column prop="theOutboundQuantity" label="本次出库数量">
<template slot-scope="scope">
<el-input-number size="mini" v-model="scope.row.theOutboundQuantity" :min="1" style="width: 100%;"
<el-input-number size="mini" v-model="scope.row.theOutboundQuantity" :min="0" style="width: 100%;"
@change="syncInboundQuantity(scope.row)" :disabled="outDialogType == 'details'"></el-input-number>
<!-- <span v-else>{{ scope.row.theOutboundQuantity || 0 }}</span> -->
</template>
</el-table-column>
<!-- <el-table-column prop="status" label="出库情况">
<template slot-scope="scope">
<el-button type="text" @click="putIn(scope.row)" v-if="scope.row.status == 1">出库</el-button>
<span v-if="scope.row.status == 0">已出库</span>
</template>
</el-table-column> -->
</el-table>
<div class="form-title" v-if="outDialogType !== 'details'">出库账目表格</div>
<el-table :data="sizeForm.inTableData" border style="width: 100%" v-if="outDialogType !== 'details'">
@ -117,6 +125,11 @@
{{ scope.row.type === "NY" ? "耐用品" : (scope.row.type === "YH" ? "易耗品" : "") }}
</template>
</el-table-column>
<el-table-column prop="type" label="出库类型">
<template slot-scope="scope">
{{ scope.row.type === "NY" ? "出库单" : (scope.row.type === "YH" ? "发放单" : "") }}
</template>
</el-table-column>
<el-table-column prop="departmentName" label="部门" v-if="sizeForm.options == 2">
<template slot-scope="scope">
<span>
@ -130,14 +143,10 @@
<el-table-column prop="date" label="出库信息" v-if="sizeForm.options == 1">
<el-table-column prop="outboundQuantity" label="数量">
<template slot-scope="scope">
{{ scope.row.outboundQuantity || 0 }}
</template>
{{ scope.row.outboundQuantity || 0 }}
</template>
</el-table-column>
</el-table-column>
<!-- <el-table-column prop="date" label="出库后库存" v-if="sizeForm.options == 1">
<el-table-column prop="str10" label="数量">
</el-table-column>
</el-table-column> -->
</el-table>
</el-form>
<span slot="footer" class="dialog-footer">
@ -170,6 +179,15 @@
</el-select>
</el-form-item>
</el-col>
<el-col :span="24">
<el-form-item label="选项">
<el-radio-group v-model="sizeForm.radio" :disabled="outDialogType == 'details'">
<el-radio :label="1">易耗品</el-radio>
<el-radio :label="2">耐用品</el-radio>
<el-radio :label="3">全部</el-radio>
</el-radio-group>
</el-form-item>
</el-col>
</el-row>
</el-form>
@ -206,12 +224,12 @@
{{ scope.row.outboundQuantity || 0 }}
</template>
</el-table-column>
<el-table-column prop="theOutboundQuantity" label="本次出库数量">
<!-- <el-table-column prop="theOutboundQuantity" label="本次出库数量">
<template slot-scope="scope">
<el-input-number size="mini" v-model="scope.row.theOutboundQuantity" :min="1" style="width: 100%;"
@change="syncInboundQuantity(scope.row)" :disabled="outDialogType == 'details'"></el-input-number>
</template>
</el-table-column>
</el-table-column> -->
</el-table>
<span slot="footer" class="dialog-footer">
@ -259,8 +277,9 @@ export default {
inTableData: [],
ldOneOutStorageDetailVOList: [],
demandEndInfo: '',//
outDate: '',//
outDate: '',//
options: 2,//
radio: 1, // 1 2
materialType: '1',//
status: '',//1 2
// materialld: '',//Id
@ -269,7 +288,6 @@ export default {
name: "用户名称"
},
},
uniqueListDialogVisible: false, //
uniqueList: [],
goodsList: [],
goodsSelectList: [],
@ -289,8 +307,11 @@ export default {
const now = new Date()
const year = now.getFullYear();
const month = String(now.getMonth() + 1).padStart(2, '0');
const day = String(now.getDate()).padStart(2, '0');
return `${year}${month}${day}`;
const day = String(now.getDate()).padStart(2, '0')
const hour = String(now.getHours()).padStart(2, '0')
const minute = String(now.getMinutes()).padStart(2, '0')
const second = String(now.getSeconds()).padStart(2, '0')
return `${year}-${month}-${day} ${hour}:${minute}:${second}`
}
},
mounted() {
@ -304,6 +325,9 @@ export default {
this.getMaterialList()
},
methods: {
addInit() {
this.sizeForm.outDate = new Date()//
},
//
syncInboundQuantity(row) {
row.theOutboundQuantity = Number(row.theOutboundQuantity);
@ -377,12 +401,12 @@ export default {
})
if (res.data && res.data.result) {
this.sizeForm.inTableData = res.data.result.duplicateList
this.sizeForm.inTableData = res.data.result.uniqueList
const selectedDept = this.departmentList.find(
dept => dept.departmentId === this.inBatchForm.department
);
const deptName = selectedDept ? selectedDept.department : '';
this.sizeForm.inTableData = res.data.result.duplicateList.map(item => ({
this.sizeForm.inTableData = res.data.result.uniqueList.map(item => ({
...item,
IdDemandEndld: this.inBatchForm.batchType,
// department: this.inBatchForm.department,
@ -395,10 +419,14 @@ export default {
if (selectedQuarter) {
this.sizeForm.demandEndInfo = selectedQuarter.quarterName;
}
if (res.data.result.uniqueList != null && res.data.result.uniqueList.length > 0) {
this.goodsVisible = true
this.goodsList = res.data.result.uniqueList
//radio
if (this.sizeForm.radio === 3) {
if (res.data.result.duplicateList != null && res.data.result.duplicateList.length > 0) {
this.goodsVisible = true
this.goodsList = res.data.result.duplicateList
}
}
} else {
this.$message.warning('未获取到详细数据');
}
@ -516,7 +544,6 @@ export default {
try {
const res = await editList(this.id);
const { ldOneOutStorage, ldOneOutStorageDetails = [] } = res.data.result || {};
if (!ldOneOutStorage) {
this.$message.error("回显数据异常");
return;
@ -534,20 +561,18 @@ export default {
this.sizeForm.inTableData = handledDetailList;
} catch (error) {
console.error("回显失败:", error);
this.$message.error("获取详情数据失败");
}
}
},
addInit() {
this.sizeForm.outDate = new Date()//
},
//
inTableAdd() {
this.sizeForm.inTableData.push({})
},
//
async radioChange() {
// this.resetAllForms()
this.sizeForm.inTableData = []
if (this.sizeForm.options === 1) {
await this.getQuarterList()
@ -556,6 +581,7 @@ export default {
}
},
},
watch: {
//

@ -73,6 +73,7 @@
v-if="approvalProcessShow"
@closeDialog="closeDialog"
:approveList="approveList"
:id="id"
></approvalProcessDialog>
</basic-container>
</template>

@ -11,8 +11,9 @@
</template>
</avue-crud>
</basic-container>
<!-- 记录弹窗 -->
<el-dialog title="记录" :visible.sync="dialogLogVisible" width="50%" :close-on-click-modal="false"
:append-to-body="true">
:append-to-body="true" >
<el-tabs v-model="transactionType" @tab-click="handleTabClick">
<el-tab-pane label="出库" name="1"></el-tab-pane>
<el-tab-pane label="入库" name="2"></el-tab-pane>
@ -21,11 +22,11 @@
<el-table-column type="index" width="50"> </el-table-column>
<el-table-column prop="quantity" label="数量">
</el-table-column>
<el-table-column prop="money" label="单价" v-if="transactionType == '2'">
<el-table-column prop="money" label="单价" v-if="transactionType == '2' && row.type == 'YH' ">
</el-table-column>
<el-table-column prop="operatorName" label="操作人" >
</el-table-column>
<el-table-column prop="operationTime" label="时间" :formatter="formatTime">
<el-table-column prop="operationTime" label="时间" :formatter="formatTime" width="180">
</el-table-column>
<el-table-column prop="departmentName" label="部门"> </el-table-column>
</el-table>
@ -34,11 +35,7 @@
</template>
<script>
// import { getList, remove } from "@/api/report/report";
import { getList, recordList } from "@/api/firstOrder/list";
import { mapGetters } from "vuex";
export default {
data() {
return {
@ -161,7 +158,6 @@ export default {
};
},
computed: {
...mapGetters(["userInfo", "permission"]),
permissionList() {
return {
addBtn: false,

@ -102,6 +102,13 @@ export default {
headerAlign: "center",
align: "center",
},
{
label: "出库类型",
prop: "outType",
width: 140,
headerAlign: "center",
align: "center",
},
{
label: "出库日期",
prop: "outDate",

@ -3,17 +3,17 @@
<basic-container>
<avue-crud :option="option" v-model="form" :data="data" @row-del="rowDel" @on-load="onLoad"
:table-loading="loading" @row-update="rowUpdate" @row-save="rowSave" @search-change="searchChange"
@search-reset="searchReset" :page.sync="page"></avue-crud>
@search-reset="searchReset" :page.sync="page">
</avue-crud>
</basic-container>
</div>
</template>
<script>
import { mapGetters } from "vuex";
import { getList, add, remove, update, getCode } from "@/api/materials/list";
export default {
data() {
return {
form: {},
form: {imageUrl: ""},
selectionList: [],
query: {},
loading: true,
@ -95,6 +95,27 @@ export default {
return value;
}
},
{
label: '图片',
prop: 'picture',
type: 'upload',
multiple: true,
headerAlign: "center",
align: "center",
span: 12,
propsHttp: { //
// url: 'picture', //
// name: 'name', //
// res: 'data' //
},
formatter: (row, column) => {
const value = row.picture;
if (value === null || value === undefined || value === "") {
return "无"
}
return value;
}
},
],
},
data: [],
@ -103,24 +124,6 @@ export default {
tableData: [],
};
},
computed: {
...mapGetters(["userInfo", "permission"]),
permissionList() {
return {
addBtn: false,
viewBtn: false,
delBtn: false,
editBtn: false,
};
},
ids() {
let ids = [];
this.selectionList.forEach((ele) => {
ids.push(ele.id);
});
return ids.join(",");
},
},
mounted() {
this.tableData = this.ckTable;
this.fetchMaterialCode();
@ -188,14 +191,7 @@ export default {
},
//
rowSave(row, done, loading) {
// const submitData = {
// ...row,
// code: row.materialCode,
// materialCode: undefined
// };
// console.log(submitData,'submitData')
add(row).then(
() => {
this.onLoad(this.page);
this.$message({
@ -215,7 +211,6 @@ export default {
update(row).then(
() => {
this.onLoad(this.page);
this.$message({
type: "success",
message: "操作成功!",
@ -228,7 +223,6 @@ export default {
}
);
},
//
rowDel(row, index, done) {
this.$confirm("确定将选择数据删除?", {

@ -15,19 +15,10 @@
:description="item.time || ''"
></el-step>
</el-steps>
<!-- <span slot="footer" class="dialog-footer">
<el-button @click="handleCloseDetail()"> </el-button>
</span> -->
</el-dialog>
</div>
</template>
<script>
import {
getAllQuarter,
getPurchasesByIds,
getMaterialList,
getDetailList,
} from "@/api/firstOrder/inbound";
export default {
props: {
showDialog: {
@ -79,7 +70,7 @@ export default {
.teps-con{
margin:0 auto 0
}
:deep(.el-dialog__body) {
height: 300px;
}
// :deep(.el-dialog__body) {
// height: 300px;
// }
</style>

@ -1,66 +1,35 @@
<template>
<basic-container>
<avue-crud
:option="option"
:table-loading="loading"
:data="data"
ref="crud"
v-model="form"
:page.sync="page"
:permission="permissionList"
@search-change="searchChange"
@search-reset="searchReset"
@current-change="currentChange"
@size-change="sizeChange"
@refresh-change="refreshChange"
@on-load="onLoad"
>
<avue-crud :option="option" :table-loading="loading" :data="data" ref="crud" v-model="form" :page.sync="page"
:permission="permissionList" @search-change="searchChange" @search-reset="searchReset"
@current-change="currentChange" @size-change="sizeChange" @refresh-change="refreshChange" @on-load="onLoad">
<template slot-scope="scope" slot="menuLeft">
<el-button size="small" @click.stop="handleDesign()" type="primary"
>新增出库单
<el-button size="small" @click.stop="handleDesign()" type="primary">新增出库单
</el-button>
</template>
<template #menu="scope">
<el-button type="text" @click.stop="approvalProcessFn(scope.row)"
>审批流程</el-button
>
<el-button type="text" @click.stop="approvalProcessFn(scope.row)">审批流程</el-button>
<el-button type="text" @click.stop="handleDetails(scope.row)">详情</el-button>
</template>
<template slot-scope="scope" slot="xuqiudanmingcheng">
<el-button
type="text"
@click.stop="purchaseFn(scope.row)"
v-if="scope.row.xuqiudanmingcheng != ''"
>{{ scope.row.xuqiudanmingcheng }}</el-button
>
<el-button type="text" @click.stop="purchaseFn(scope.row)" v-if="scope.row.xuqiudanmingcheng != ''">{{
scope.row.xuqiudanmingcheng }}</el-button>
<span v-else></span>
</template>
</avue-crud>
<outDialog
v-if="outDialogVisible"
:repairVisible="outDialogVisible"
:outDialogTiltle="outDialogTiltle"
:outDialogType="outDialogType"
@handleCloseDetail="handleCloseDetail"
type="二级库"
>
<outDialog v-if="outDialogVisible" :repairVisible="outDialogVisible" :outDialogTiltle="outDialogTiltle"
:outDialogType="outDialogType" @handleCloseDetail="handleCloseDetail" type="二级库">
</outDialog>
<!-- 需求单明细 -->
<needDialog
:showDialog="purchaseOpen"
v-if="purchaseOpen"
@closeDialog="closeDialog"
:purchaseTitle="purchaseTitle"
></needDialog>
<needDialog :showDialog="purchaseOpen" v-if="purchaseOpen" @closeDialog="closeDialog"
:purchaseTitle="purchaseTitle">
</needDialog>
<!-- 审批流程 -->
<approvalProcessDialog
:showDialog="approvalProcessShow"
v-if="approvalProcessShow"
@closeDialog="closeDialog"
></approvalProcessDialog>
<approvalProcessDialog :showDialog="approvalProcessShow" v-if="approvalProcessShow" @closeDialog="closeDialog">
</approvalProcessDialog>
</basic-container>
</template>
@ -120,7 +89,7 @@ export default {
menuAlign: "left",
searchMenuPosition: "right",
excelBtn: true,
menuWidth:140,
menuWidth: 140,
column: [
// {
// label: "",
@ -169,7 +138,7 @@ export default {
dicData: [
{
label: "未出库",
value:0,
value: 0,
},
{
label: "已出库",
@ -187,7 +156,7 @@ export default {
outDialogVisible: false,
outDialogTiltle: "出库",
outDialogType: "",
approvalProcessShow:false,
approvalProcessShow: false,
};
},
@ -195,13 +164,13 @@ export default {
approvalProcessFn(row) {
this.approvalProcessShow = true;
},
//
//
handleDetails(row) {
this.outDialogVisible = true
this.outDialogType = 'details'
this.outDialogTiltle = '详情'
this.id = row.id
console.log(this.id,'id')
console.log(this.id, 'id')
},
purchaseFn(row) {
this.purchaseOpen = true;

Loading…
Cancel
Save