Merge branch 'dev-scheduling' of http://42.192.7.176:3000/suojin/jonhon-mes-web into dev-scheduling

dev-scheduling
zhangdi 2 months ago
commit e9fe530f08
  1. 26
      src/views/basicData/warehouseMaintenance.vue
  2. 234
      src/views/desk/completedTasks.vue
  3. 259
      src/views/desk/myMessage.vue
  4. 178
      src/views/desk/todoList.vue
  5. 1
      src/views/inboundOutboundManagement/otherIssuing/index.vue
  6. 2
      src/views/inboundOutboundManagement/otherIssuing/otherIssuingDailog.vue
  7. 14
      src/views/inboundOutboundManagement/returnReceiving.vue
  8. 20
      src/views/oem/baseTemplate/index.vue
  9. 4
      src/views/oem/facInnerApproval/approvalDialog.vue
  10. 691
      src/views/oem/facInnerApproval/index.vue
  11. 4
      src/views/oem/oemApproval/approvalDialog.vue
  12. 61
      src/views/oem/oemApproval/index.vue
  13. 34
      src/views/statisticalAnalysis/warehouseAnalysis/inventorySummary.vue
  14. 3
      src/views/warehouseManagement/materialMaintenance.vue
  15. 129
      src/views/wel/components/notice.vue

@ -271,18 +271,19 @@ export default {
remoteMethod(query){ remoteMethod(query){
if (query !== '') { if (query !== '') {
this.selectLoading = true; this.selectLoading = true;
getAllUser({ getUserByRoleAlias({
current:1,size:9999,realName:query current:1,size:9999,realName:query,
roleAlias:'保管员'
}).then(res =>{ }).then(res =>{
this.keepList = res.data.data.records this.keepList = res.data.data
this.selectLoading = false; this.selectLoading = false;
}) })
} else { } else {
// this.options = []; // this.options = [];
getAllUser({ getUserByRoleAlias({
current:1,size:9999 current:1,size:9999,roleAlias:'保管员'
}).then(res =>{ }).then(res =>{
this.keepList = res.data.data.records this.keepList = res.data.data
}) })
} }
}, },
@ -292,11 +293,12 @@ export default {
this.checkUser = '' this.checkUser = ''
this.chooseWare = [] this.chooseWare = []
this.noChooseWare = [] this.noChooseWare = []
getAllUser({ getUserByRoleAlias({
current:1, current:1,
size:999999 size:999999,
roleAlias:"保管员"
}).then(res =>{ }).then(res =>{
this.keepList = res.data.data.records this.keepList = res.data.data
}) })
}else{ }else{
this.checkWare = "" this.checkWare = ""
@ -478,12 +480,12 @@ export default {
this.getLocation() this.getLocation()
}else if(this.tabPosition == "inventorySetup"){ }else if(this.tabPosition == "inventorySetup"){
this.checkUser = '' this.checkUser = ''
getAllUser({ getUserByRoleAlias({
// roleAlias:"" roleAlias:"保管员",
current:1, current:1,
size:99999 size:99999
}).then(res =>{ }).then(res =>{
this.keepList = res.data.data.records this.keepList = res.data.data
}) })
} }
}, },

@ -0,0 +1,234 @@
<template>
<basic-container>
<avue-crud
:option="option"
:table-loading="loading"
:data="data"
ref="crud"
v-model="form"
v-model:page="page"
@search-change="searchChange"
@search-reset="searchReset"
@current-change="currentChange"
@size-change="sizeChange"
@refresh-change="refreshChange"
@on-load="onLoad"
>
<template #title="{row}">
<span @click="hanleView(row)" style="color:#284c89;cursor:pointer">{{row.title}}</span>
</template>
<template #status="{row}">
<el-tag v-if="row.status === 1" type="success">审核通过</el-tag>
<el-tag v-if="row.status === 2" type="danger">审核拒绝</el-tag>
</template>
</avue-crud>
</basic-container>
</template>
<script>
export default {
data() {
return {
form: {},
selectionList: [],
query: {},
loading: true,
page: {
pageSize: 10,
currentPage: 1,
total: 0,
},
option: {
columnSort: true,
tip: false,
height: "auto",
align: "center",
calcHeight: 32,
simplePage: false,
searchShow: true,
searchMenuSpan: 6,
searchIcon: true,
searchIndex: 3,
tree: false,
border: true,
index: true,
selection: false,
viewBtn: false,
delBtn: true,
editBtn: true,
editBtnText: "修改",
editBtnIcon: " ",
delBtnIcon: " ",
addBtn: false,
labelWidth: 120,
searchLabelWidth: 120,
menu: true,
menuWidth: 200,
dialogWidth: 600,
dialogClickModal: false,
searchEnter: true,
excelBtn: true,
gridBtn: false,
searchShowBtn: false,
showOverflowTooltip: true,
searchLabelPosition: "left",
searchLabelPosition: "left",
searchGutter: 24,
searchSpan: 6,
menuAlign: "left",
gridBtn: false,
searchMenuPosition: "right",
addBtnIcon: " ",
viewBtnIcon: " ",
delBtnIcon: " ",
editBtnIcon: " ",
menu:false,
column: [
{
label: '类型',
prop: 'type',
sortable: false,
type: 'select',
filter: true,
span: 12,
search: true,
searchLabelWidth: 90,
dicData: [
{ label: '外协审批', value: 1 },
{ label: '仓管审批', value: 2 },
{ label: '槽液审批', value: 3 },
],
},
{
label: '标题',
prop: 'title',
sortable: false,
filter: true,
span: 12,
search: true,
searchLabelWidth: 90,
},
{
label: '创建人',
prop: 'createUser',
sortable: false,
filter: true,
span: 12,
search: false,
searchLabelWidth: 90,
},
{
label: '申请时间',
prop: 'createTime',
type: 'date',
searchRange: true,
sortable: false,
filter: true,
span: 12,
search: true,
hide:true,
searchLabelWidth: 90,
},
{
label: '创建时间',
prop: 'createTime',
sortable: false,
filter: true,
span: 12,
search: false,
searchLabelWidth: 90,
},
{
label: '状态',
prop: 'status',
sortable: false,
type:"select",
dicData: [
{
label: '审批通过',
value: '1',
},
{
label: '审批驳回',
value: '2',
},
],
filter: true,
span: 12,
search: true,
searchLabelWidth: 90,
},
{
label: '审批时间',
prop: 'approvalTime',
sortable: false,
filter: true,
span: 12,
search: false,
searchLabelWidth: 90,
},
],
},
data: [],
};
},
methods: {
searchReset() {
this.query = {};
this.onLoad(this.page);
},
searchChange(params, done) {
this.query = params;
this.page.currentPage = 1;
this.onLoad();
done();
},
currentChange(currentPage) {
this.page.currentPage = currentPage;
},
sizeChange(pageSize) {
this.page.pageSize = pageSize;
},
refreshChange() {
this.onLoad();
},
onLoad(page, params = {}) {
this.loading = true;
this.data = [
{
id: 1,
type: 1,
title: '请审核张三提交的外协审批流程',
createUser: '张三',
status:1,
approvalTime:"2026-01-18 22:15:30",
createTime: '2026-01-05 09:06:32',
},
{
id: 2,
type: 2,
title: '请审核李四提交的仓管审批流程',
createUser: '张三',
status:1,
approvalTime:"2026-01-18 22:15:30",
createTime: '2026-01-12 09:06:32',
},
{
id: 3,
type: 3,
title: '请审核王五提交的槽液审批流程',
createUser: '张三',
status:2,
approvalTime:"2026-01-18 22:15:30",
createTime: '2026-01-15 09:06:32',
},
];
this.page.total = this.data.length;
this.loading = false;
},
},
};
</script>
<style></style>

@ -0,0 +1,259 @@
<template>
<basic-container>
<avue-crud
:option="option"
:table-loading="loading"
:data="data"
ref="crud"
v-model="form"
v-model:page="page"
@search-change="searchChange"
@search-reset="searchReset"
@current-change="currentChange"
@size-change="sizeChange"
@refresh-change="refreshChange"
@selection-change="selectionChange"
@on-load="onLoad"
>
<template #status="{row}">
<el-tag v-if="row.status === 1" type="info">已读</el-tag>
<el-tag v-if="row.status === 2" type="success">未读</el-tag>
</template>
<template #menu-left>
<el-button type="primary" @click="handleRead">标记已读</el-button>
</template>
<template #content="{row}">
<span @click="hanleView(row)" style="color:#284c89;cursor:pointer">{{row.content}}</span>
</template>
</avue-crud>
</basic-container>
</template>
<script>
export default {
data() {
return {
form: {},
selectionList: [],
query: {},
loading: true,
page: {
pageSize: 10,
currentPage: 1,
total: 0,
},
option: {
columnSort: true,
tip: false,
height: "auto",
align: "center",
calcHeight: 32,
simplePage: false,
searchShow: true,
searchMenuSpan: 6,
searchIcon: true,
searchIndex: 3,
tree: false,
border: true,
index: true,
selection: true,
viewBtn: false,
delBtn: true,
editBtn: true,
editBtnText: "修改",
editBtnIcon: " ",
delBtnIcon: " ",
addBtn: false,
labelWidth: 120,
searchLabelWidth: 120,
menu: true,
menuWidth: 200,
// dialogWidth: 600,
dialogClickModal: false,
searchEnter: true,
excelBtn: true,
gridBtn: false,
searchShowBtn: false,
showOverflowTooltip: true,
searchLabelPosition: "left",
searchLabelPosition: "left",
searchGutter: 24,
searchSpan: 6,
menuAlign: "left",
gridBtn: false,
searchMenuPosition: "right",
addBtnIcon: " ",
viewBtnIcon: " ",
delBtnIcon: " ",
editBtnIcon: " ",
menu:false,
column: [
{
label: '标题',
prop: 'title',
sortable: false,
filter: true,
span: 12,
search: true,
searchLabelWidth: 90,
display:false,
},
{
label: '内容',
prop: 'content',
sortable: false,
filter: true,
span: 12,
width:600,
search: false,
overHidden:true,
searchLabelWidth: 90,
display:false,
},
{
label: '消息类型',
prop: 'type',
sortable: false,
type: 'select',
filter: true,
span: 24,
search: true,
searchLabelWidth: 90,
dicData: [
{ label: '系统消息', value: 1 },
{ label: '业务消息', value: 2 },
],
},
{
label: '状态',
prop: 'status',
sortable: false,
type:"select",
display:false,
dicData: [
{
label: '已读',
value: '1',
},
{
label: '未读',
value: '2',
},
],
filter: true,
span: 12,
search: true,
searchLabelWidth: 90,
},
{
label: '发送时间',
prop: 'approvalTime',
type: 'date',
format:"YYYY-MM-DD",
valueFormat:"YYYY-MM-DD",
searchRange:true,
sortable: false,
filter: true,
search: true,
span:24,
searchLabelWidth: 90,
},
{
label: '内容',
prop: 'content',
component: 'avue-ueditor',
action: '/blade-resource/oss/endpoint/put-file',
propsHttp: {
res: 'data',
url: 'link',
},
hide: true,
minRows: 4,
span: 24,
},
],
},
data: [],
};
},
methods: {
searchReset() {
this.query = {};
this.onLoad(this.page);
},
searchChange(params, done) {
this.query = params;
this.page.currentPage = 1;
this.onLoad();
done();
},
selectionChange(list){
this.selectionList = list;
},
currentChange(currentPage) {
this.page.currentPage = currentPage;
},
sizeChange(pageSize) {
this.page.pageSize = pageSize;
},
refreshChange() {
this.onLoad();
},
hanleView(row){
this.$refs.crud.rowView(row)
},
handleRead(){
if(this.selectionList.length == 0){
this.$message.error('请至少选择一条数据!');
return
}
let tmp = this.selectionList.find(item => item.status == 1)
if(tmp){
this.$message.error('请选择状态为【未读】的数据!')
return
}
},
onLoad(page, params = {}) {
this.loading = true;
this.data = [
{
id: 1,
type: 1,
title: '请审核张三提交的外协审批流程',
content:"审批信息审批信息审批信息审批信息审批信息审批信息审批信息审批信息审批信息审批信息",
createUser: '张三',
status:1,
approvalTime:"2026-01-18 22:15:30",
createTime: '2026-01-05 09:06:32',
},
{
id: 2,
type: 2,
title: '请审核李四提交的仓管审批流程',
content:"审批信息审批信息审批信息审批信息审批信息审批信息审批信息审批信息审批信息审批信息",
createUser: '张三',
status:1,
approvalTime:"2026-01-18 22:15:30",
createTime: '2026-01-12 09:06:32',
},
{
id: 3,
type: 1,
title: '请审核王五提交的槽液审批流程',
content:"审批信息审批信息审批信息审批信息审批信息审批信息审批信息审批信息审批信息审批信息",
createUser: '张三',
status:2,
approvalTime:"2026-01-18 22:15:30",
createTime: '2026-01-15 09:06:32',
},
];
this.page.total = this.data.length;
this.loading = false;
},
},
};
</script>
<style></style>

@ -0,0 +1,178 @@
<template>
<basic-container>
<avue-crud
:option="option"
:table-loading="loading"
:data="data"
ref="crud"
v-model="form"
v-model:page="page"
@search-change="searchChange"
@search-reset="searchReset"
@current-change="currentChange"
@size-change="sizeChange"
@refresh-change="refreshChange"
@on-load="onLoad"
>
<template #title="{row}">
<span @click="hanleView(row)" style="color:#284c89;cursor:pointer">{{row.title}}</span>
</template>
</avue-crud>
</basic-container>
</template>
<script>
export default {
data() {
return {
form: {},
selectionList: [],
query: {},
loading: true,
page: {
pageSize: 10,
currentPage: 1,
total: 0,
},
option: {
height: 'auto',
calcHeight: 32,
tip: false,
searchShow: true,
searchMenuSpan: 6,
border: true,
index: true,
viewBtn: true,
editBtn: false,
addBtn: false,
delBtn: false,
menuWidth: 120,
dialogType: 'drawer',
searchLabelPosition: 'left',
searchLabelPosition: 'left',
searchGutter: 24,
searchSpan: 6,
menu:false,
menuAlign: 'left',
gridBtn: false,
searchMenuPosition: 'right',
addBtnIcon: ' ',
viewBtnIcon: ' ',
delBtnIcon: ' ',
editBtnIcon: ' ',
searchShowBtn: false,
align: 'center',
column: [
{
label: '类型',
prop: 'type',
sortable: false,
type: 'select',
filter: true,
span: 12,
search: true,
searchLabelWidth: 90,
dicData: [
{ label: '外协审批', value: 1 },
{ label: '仓管审批', value: 2 },
{ label: '槽液审批', value: 3 },
],
},
{
label: '标题',
prop: 'title',
sortable: false,
filter: true,
span: 12,
search: true,
searchLabelWidth: 90,
},
{
label: '创建人',
prop: 'createUser',
sortable: false,
filter: true,
span: 12,
search: false,
searchLabelWidth: 90,
},
{
label: '申请时间',
prop: 'createTime',
type: 'date',
searchRange: true,
sortable: false,
filter: true,
span: 12,
search: true,
hide:true,
searchLabelWidth: 90,
},
{
label: '创建时间',
prop: 'createTime',
sortable: false,
filter: true,
span: 12,
search: false,
searchLabelWidth: 90,
},
],
},
data: [],
};
},
methods: {
searchReset() {
this.query = {};
this.onLoad(this.page);
},
searchChange(params, done) {
this.query = params;
this.page.currentPage = 1;
this.onLoad();
done();
},
currentChange(currentPage) {
this.page.currentPage = currentPage;
},
sizeChange(pageSize) {
this.page.pageSize = pageSize;
},
refreshChange() {
this.onLoad();
},
onLoad(page, params = {}) {
this.loading = true;
this.data = [
{
id: 1,
type: 1,
title: '请审核张三提交的外协审批流程',
createUser: '张三',
createTime: '2026-01-05 09:06:32',
},
{
id: 2,
type: 2,
title: '请审核李四提交的仓管审批流程',
createUser: '张三',
createTime: '2026-01-12 09:06:32',
},
{
id: 3,
type: 3,
title: '请审核王五提交的槽液审批流程',
createUser: '张三',
createTime: '2026-01-15 09:06:32',
},
];
this.page.total = this.data.length;
this.loading = false;
},
},
};
</script>
<style></style>

@ -339,6 +339,7 @@ export default {
// public static final Short BF_TYPE_GLASS_CAKE = 3; // public static final Short BF_TYPE_GLASS_CAKE = 3;
dicData:[ dicData:[
{ label: "到期维护报废", value: 1 }, { label: "到期维护报废", value: 1 },
{ label: "未报废", value: 0 },
{ label: "归还报废", value: 2 }, { label: "归还报废", value: 2 },
{ label: "玻璃饼报废", value: 3 } { label: "玻璃饼报废", value: 3 }
], ],

@ -39,7 +39,7 @@
<el-select v-model="stOtherOutRecord.userId" filterable <el-select v-model="stOtherOutRecord.userId" filterable
class="item-choose"> class="item-choose">
<el-option v-for="(item, index) in userData" :key="item.id" <el-option v-for="(item, index) in userData" :key="item.id"
:label="item.realName" :value="item.id" /> :label="`${item.realName}(${item.workNo})`" :value="item.id" />
</el-select> </el-select>
</el-form-item> </el-form-item>
</el-col> </el-col>

@ -278,6 +278,20 @@ export default {
}, },
], ],
}, },
{
label: "单价",
prop: "invadjMoney",
span: 24,
overflow: true,
search: false,
// rules: [
// {
// required: true,
// message: "",
// trigger: "blur",
// },
// ],
},
{ {
label: "单位", label: "单位",
prop: "prtum", prop: "prtum",

@ -101,14 +101,18 @@ export default {
search: true, search: true,
searchLabelWidth: 80, searchLabelWidth: 80,
type:'select', type:'select',
dicData:[ dicUrl:"/api/blade-desk/BA/craftAbility/findList",
{ props:{
label:'镀金' label:"caName",value:"id"
}, }
{ // dicData:[
label:'镀银' // {
} // label:''
] // },
// {
// label:''
// }
// ]
}, },
{ {
label: '厂家', label: '厂家',

@ -18,6 +18,10 @@ export default {
type: Boolean, type: Boolean,
default: false default: false
}, },
woId:{
type: String,
default: ''
}
}, },
data() { data() {
return { return {

@ -6,6 +6,7 @@
:data="data" :data="data"
v-model="form" v-model="form"
v-model:page="page" v-model:page="page"
v-model:search="search"
ref="crud" ref="crud"
@row-del="rowDel" @row-del="rowDel"
@search-change="searchChange" @search-change="searchChange"
@ -17,22 +18,24 @@
@on-load="onLoad" @on-load="onLoad"
> >
<template #menu-left> <template #menu-left>
<el-button type="primary" @click="approval()">批量审批</el-button> <el-button type="primary" @click="handleApproval('batch')">批量审批</el-button>
</template> </template>
<template #menu-right> </template> <template #menu-right> </template>
<template #menu="scope"> <template #menu="scope">
<el-button type="text" @click="approval(scope.row)">审批</el-button> <el-button type="text" @click="handleApproval('one',scope.row)">审批</el-button>
</template> </template>
</avue-crud> </avue-crud>
<approvalDialog <approvalDialog
v-if="isOpen" v-if="isOpen"
:woId="woId"
:showDialog="isOpen" :showDialog="isOpen"
@closeDialog="closeDialog" @closeDialog="closeDialog"
></approvalDialog> ></approvalDialog>
</basic-container> </basic-container>
</template> </template>
<script> <script>
import {getList,oemApproval} from "@/api/outsourcingManagement/oemApproval"
import approvalDialog from "./approvalDialog.vue"; import approvalDialog from "./approvalDialog.vue";
export default { export default {
components: { components: {
@ -41,6 +44,10 @@ export default {
data() { data() {
return { return {
selectionList: [], selectionList: [],
woId:'',
loading:false,
query:{},
search:{},
option: { option: {
height: "auto", height: "auto",
calcHeight: 32, calcHeight: 32,
@ -97,7 +104,7 @@ export default {
filter: true, filter: true,
span: 12, span: 12,
search: true, search: true,
width: 120, width: 180,
searchLabelWidth: 90, searchLabelWidth: 90,
}, },
{ {
@ -108,7 +115,7 @@ export default {
filter: true, filter: true,
span: 12, span: 12,
search: true, search: true,
width: 120, width: 180,
}, },
{ {
label: "批次号", label: "批次号",
@ -163,6 +170,10 @@ export default {
{ {
label: "建立时间", label: "建立时间",
prop: "createTime", prop: "createTime",
type: "date",
searchRange: true,
format: "YYYY-MM-DD",
valueFormat: "YYYY-MM-DD",
sortable: true, sortable: true,
filter: true, filter: true,
span: 12, span: 12,
@ -180,7 +191,7 @@ export default {
}, },
{ {
label: "审核状态", label: "审核状态",
prop: "runStatusTitle", prop: "approvalStatus",
sortable: true, sortable: true,
filter: true, filter: true,
span: 12, span: 12,
@ -192,11 +203,11 @@ export default {
dicData: [ dicData: [
{ {
label: "待审核", label: "待审核",
value: 1, value: 2,
}, },
{ {
label: "审核通过", label: "审核通过",
value: 2, value: 4,
}, },
{ {
label: "审核不通过", label: "审核不通过",
@ -253,13 +264,39 @@ export default {
isOpen: false, isOpen: false,
}; };
}, },
created(){
this.search.approvalStatus = 2
this.query = this.search;
},
methods: { methods: {
approval(row) { searchChange(params, done){
this.query = params;
this.page.currentPage = 1
this.onLoad()
done()
},
searchReset(){
this.search.approvalStatus = 2
this.query = this.search;
this.onLoad()
},
currentChange(currentPage){
this.page.currentPage = currentPage
},
sizeChange(pageSize){
this.page.pageSize = pageSize
},
handleApproval(type,row) {
console.log('row--------',row) console.log('row--------',row)
if(!row && this.selectionList.length == 0){ if(type == 'batch' && this.selectionList.length == 0){
this.$message.error("请至少选择一条数据"); this.$message.error("请至少选择一条数据");
return return
} }
if(type == 'batch'){
this.woId = this.selectionList.map(item => item.id).join(',')
}else{
this.woId = row.id
}
this.isOpen = true; this.isOpen = true;
}, },
closeDialog(val) { closeDialog(val) {
@ -285,316 +322,332 @@ export default {
}, },
onLoad() { onLoad() {
this.loading = true; this.loading = true;
this.data = [ let params = {
{ ...this.query,
approvalMan: null, startTime:(this.query.createTime && this.query.createTime.length != 0) ? this.query.createTime[0] : undefined,
approvalMemo: null, endTime:(this.query.createTime && this.query.createTime.length != 0) ? this.query.createTime[1] : undefined,
approvalTime: null, }
collaborate: true, const {createTime,...searchParam} = params
createMan: { getList({
userId: 541, current:this.page.currentPage,
userName: "崔殿龙", size:this.page.pageSize,
}, runType:2,
createTime: "2024-01-22 09:48:54", ...searchParam,
deliverKey: null, }).then(res =>{
inCustomer: null, this.data = res.data.data.records
inTeam: null, this.page.total = res.data.data.total
keyValue: 8246, this.loading = false
memo: "11111", })
outCustomer: null, // this.data = [
outTeam: { // {
tsCode: "006", // approvalMan: null,
tsId: 66, // approvalMemo: null,
tsName: "化学镀镍一班郭家梁", // approvalTime: null,
}, // collaborate: true,
prWorkOrder: { // createMan: {
approvalStatus: 2, // userId: 541,
batchArea: 43.48, // userName: "殿",
batchNo: "Y0382304283", // },
bsOemCustomer: null, // createTime: "2024-01-22 09:48:54",
ca: "E386-化学镀镍", // deliverKey: null,
cardNo: "1016870429", // inCustomer: null,
closeMan: null, // inTeam: null,
closeTime: null, // keyValue: 8246,
collaborate: false, // memo: "11111",
collaborateText: "否", // outCustomer: null,
createTime: "2023-04-14 18:19:35", // outTeam: {
currentBsOemCustomer: null, // tsCode: "006",
currentMakeTeam: { // tsId: 66,
tsCode: "006", // tsName: "",
tsId: 66, // },
tsName: "化学镀镍一班郭家梁", // prWorkOrder: {
}, // approvalStatus: 2,
demandDate: "2023-04-18", // batchArea: 43.48,
dispatcher: { // batchNo: "Y0382304283",
userId: 355, // bsOemCustomer: null,
userName: "07188", // ca: "E386-",
}, // cardNo: "1016870429",
frontProcedureSet: null, // closeMan: null,
handoverTime: null, // closeTime: null,
hrTypeBool: null, // collaborate: false,
inventoryQty: 0.0, // collaborateText: "",
jcName: null, // createTime: "2023-04-14 18:19:35",
keyValue: 2485, // currentBsOemCustomer: null,
lastInstoreTime: null, // currentMakeTeam: {
lossQty: 0, // tsCode: "006",
mainProcessingUnit: "化学镀镍一班郭家梁", // tsId: 66,
makeQty: 100.0, // tsName: "",
makeTeam: { // },
tsCode: "006", // demandDate: "2023-04-18",
tsId: 66, // dispatcher: {
tsName: "化学镀镍一班郭家梁", // userId: 355,
}, // userName: "07188",
makeUnit: "化学镀镍一班郭家梁", // },
meetCycle: 0, // frontProcedureSet: null,
memo: null, // handoverTime: null,
mesCardNo: null, // hrTypeBool: null,
moCode: null, // inventoryQty: 0.0,
moLocal: null, // jcName: null,
nextBsOemCustomer: null, // keyValue: 2485,
nextMakeTeam: { // lastInstoreTime: null,
tsCode: "006", // lossQty: 0,
tsId: 66, // mainProcessingUnit: "",
tsName: "化学镀镍一班郭家梁", // makeQty: 100.0,
}, // makeTeam: {
nextOrders: "0010", // tsCode: "006",
nextProcedureSet: { // tsId: 66,
assist: false, // tsName: "",
assistTitle: "否", // },
createMan: { // makeUnit: "",
userId: 1, // meetCycle: 0,
userName: "admin", // memo: null,
}, // mesCardNo: null,
createTime: "2022-11-15 10:30:45", // moCode: null,
cycle: 0.0, // moLocal: null,
cyropactorControl: true, // nextBsOemCustomer: null,
deleted: false, // nextMakeTeam: {
eleRate: true, // tsCode: "006",
eleStream: true, // tsId: 66,
keyValue: 7, // tsName: "",
mainProcess: true, // },
mainProcessTitle: "是", // nextOrders: "0010",
niValue: true, // nextProcedureSet: {
phValue: true, // assist: false,
ppsCode: "003", // assistTitle: "",
ppsId: 7, // createMan: {
ppsName: "化学镀镍", // userId: 1,
special: false, // userName: "admin",
specialTitle: "否", // },
team: null, // createTime: "2022-11-15 10:30:45",
updateTime: "2022-11-15 10:30:45", // cycle: 0.0,
vSpeed: true, // cyropactorControl: true,
}, // deleted: false,
notInQty: 100.0, // eleRate: true,
nowWorkCenter: { // eleStream: true,
area: 13000.0, // keyValue: 7,
batchNo: null, // mainProcess: true,
bigBatch: false, // mainProcessTitle: "",
bsJfCenter: { // niValue: true,
createMan: { // phValue: true,
userId: 1, // ppsCode: "003",
userName: "admin", // ppsId: 7,
}, // ppsName: "",
createTime: "2024-12-09 00:00:00", // special: false,
deleted: false, // specialTitle: "",
jcCode: "RBZX", // team: null,
jcId: 1, // updateTime: "2022-11-15 10:30:45",
jcName: "热表中心", // vSpeed: true,
keyValue: 1, // },
updateTime: "2024-12-09 00:00:00", // notInQty: 100.0,
}, // nowWorkCenter: {
checkout: false, // area: 13000.0,
craftAbility: "化学镀镍", // batchNo: null,
createMan: { // bigBatch: false,
userId: 1, // bsJfCenter: {
userName: "admin", // createMan: {
}, // userId: 1,
createTime: "2023-02-06 12:31:36", // userName: "admin",
deleted: false, // },
describe: null, // createTime: "2024-12-09 00:00:00",
endPoint: null, // deleted: false,
keyValue: 81, // jcCode: "RBZX",
leaderUser: { // jcId: 1,
userId: 541, // jcName: "",
userName: "崔殿龙", // keyValue: 1,
}, // updateTime: "2024-12-09 00:00:00",
limitType: 0, // },
processes: "上挂、下挂、交检、化学镀镍、喷砂", // checkout: false,
quantity: null, // craftAbility: "",
roundCycle: null, // createMan: {
saturation: 85.0, // userId: 1,
sign: "4", // userName: "admin",
startPoint: null, // },
team: "化学镀镍一班崔胜伟、化学镀镍一班郭家梁", // createTime: "2023-02-06 12:31:36",
updateTime: "2023-03-06 18:42:47", // deleted: false,
wcCode: "001", // describe: null,
wcId: 81, // endPoint: null,
wcName: "化学镀镍作业中心", // keyValue: 81,
whetherPlate: false, // leaderUser: {
}, // userId: 541,
oem: false, // userName: "殿",
oemOut: true, // },
oemType: -1, // limitType: 0,
oldRunStatus: null, // processes: "",
orderMarkTitle: "热表中心", // quantity: null,
orderWoCode: "WO-221296443-R06", // roundCycle: null,
orderWoCodeDeliverKey: null, // saturation: 85.0,
orders: "0005", // sign: "4",
outTime: null, // startPoint: null,
pgrId: null, // team: "",
pickingStatus: 0, // updateTime: "2023-03-06 18:42:47",
pickingStatusTitle: "未领取", // wcCode: "001",
pjYieldOrder: { // wcId: 81,
batchNo: "Y0382304283", // wcName: "",
bsProcedureQua: null, // whetherPlate: false,
businessType: 1, // },
businessTypeTitle: "热表中心", // oem: false,
cardNo: "1016870429", // oemOut: true,
craftId: null, // oemType: -1,
curStatus: 0, // oldRunStatus: null,
curStatusTitle: "待接收", // orderMarkTitle: "",
custodian: "杨肖肖", // orderWoCode: "WO-221296443-R06",
demandDate: "2023-06-16", // orderWoCodeDeliverKey: null,
dsCraft: null, // orders: "0005",
dsPart: null, // outTime: null,
entrustDept: "采购与物流中心(成件)", // pgrId: null,
failureMan: { // pickingStatus: 0,
userId: 326, // pickingStatusTitle: "",
userName: "02051", // pjYieldOrder: {
}, // batchNo: "Y0382304283",
failureMemo: "分派成功!", // bsProcedureQua: null,
failureTime: null, // businessType: 1,
fatherYoId: null, // businessTypeTitle: "",
keyValue: 156703, // cardNo: "1016870429",
manualIncrease: false, // craftId: null,
memo: "XXXX", // curStatus: 0,
newlevFlag: null, // curStatusTitle: "",
nextRoam: null, // custodian: "",
nextRoamName: null, // demandDate: "2023-06-16",
partCode: "21E8-154-1516-E9", // dsCraft: null,
partName: "18-线夹", // dsPart: null,
pdmUrl: null, // entrustDept: "()",
planUser: "白洁", // failureMan: {
plate: "XXX", // userId: 326,
poArea: 0.4348, // userName: "02051",
poCode: "WO-221296443", // },
poMemo: null, // failureMemo: "",
poProdLine: null, // failureTime: null,
poQty: 100.0, // fatherYoId: null,
primaryCraft: "库1-2(机加)-4(表)-库2", // keyValue: 156703,
priority: 1, // manualIncrease: false,
prodIdent: "JII", // memo: "XXXX",
produceBool: false, // newlevFlag: null,
productType: "XXXX", // nextRoam: null,
recseqno: null, // nextRoamName: null,
releaseDate: "2022-12-17", // partCode: "21E8-154-1516-E9",
reworkCode: null, // partName: "18-线",
reworkMemo: null, // pdmUrl: null,
reworkNo: null, // planUser: "",
roamName: null, // plate: "XXX",
roamNo: "B5286963", // poArea: 0.4348,
siteWork: false, // poCode: "WO-221296443",
sjKitPreparation: null, // poMemo: null,
sjMoldPreparation: null, // poProdLine: null,
syncTime: "2023-04-14 14:42:49", // poQty: 100.0,
useDept: "制造一部(38999)", // primaryCraft: "1-2-4-2",
useDeptcode: null, // priority: 1,
yieldType: 1, // prodIdent: "JII",
yoCode: "WX-2212694911", // produceBool: false,
yoId: 156703, // productType: "XXXX",
}, // recseqno: null,
planEndDate: "2023-04-18 18:19:35", // releaseDate: "2022-12-17",
planner: { // reworkCode: null,
userId: 355, // reworkMemo: null,
userName: "07188", // reworkNo: null,
}, // roamName: null,
plateGoodsCode: null, // roamNo: "B5286963",
plateSingleQuota: 0.0, // siteWork: false,
plateSingleQuotaTotal: 0.0, // sjKitPreparation: null,
printCode: "HZQD20230509001", // sjMoldPreparation: null,
printFlag: true, // syncTime: "2023-04-14 14:42:49",
printMan: { // useDept: "(38999)",
userId: 541, // useDeptcode: null,
userName: "崔殿龙", // yieldType: 1,
}, // yoCode: "WX-2212694911",
printTime: "2023-05-09 19:08:13", // yoId: 156703,
priority: 1, // },
priorityTitle: "正常", // planEndDate: "2023-04-18 18:19:35",
procedureSet: { // planner: {
assist: false, // userId: 355,
assistTitle: "否", // userName: "07188",
createMan: { // },
userId: 1, // plateGoodsCode: null,
userName: "admin", // plateSingleQuota: 0.0,
}, // plateSingleQuotaTotal: 0.0,
createTime: "2022-11-15 10:30:29", // printCode: "HZQD20230509001",
cycle: 0.0, // printFlag: true,
cyropactorControl: false, // printMan: {
deleted: false, // userId: 541,
eleRate: true, // userName: "殿",
eleStream: true, // },
keyValue: 6, // printTime: "2023-05-09 19:08:13",
mainProcess: true, // priority: 1,
mainProcessTitle: "是", // priorityTitle: "",
niValue: false, // procedureSet: {
phValue: false, // assist: false,
ppsCode: "002", // assistTitle: "",
ppsId: 6, // createMan: {
ppsName: "上挂", // userId: 1,
special: false, // userName: "admin",
specialTitle: "否", // },
team: null, // createTime: "2022-11-15 10:30:29",
updateTime: "2022-11-15 10:30:29", // cycle: 0.0,
vSpeed: false, // cyropactorControl: false,
}, // deleted: false,
processingUnit: "化学镀镍一班郭家梁", // eleRate: true,
producycle: 4, // eleStream: true,
pushFlag: true, // keyValue: 6,
putStoreTime: null, // mainProcess: true,
qcReworkCode: null, // mainProcessTitle: "",
quotaExceptional: false, // niValue: false,
reInStore: false, // phValue: false,
readStatus: null, // ppsCode: "002",
readStatusTiTle: "未准备", // ppsId: 6,
recDept: null, // ppsName: "",
receptionTime: null, // special: false,
reworkCode: null, // specialTitle: "",
reworkMemo: null, // team: null,
reworkNo: null, // updateTime: "2022-11-15 10:30:29",
rsCode: null, // vSpeed: false,
runStatus: 3, // },
runStatusTitle: "加工中", // processingUnit: "",
schedStatus: 0, // producycle: 4,
scrapQty: 0.0, // pushFlag: true,
sendDownTime: "2023-04-14 18:19:35", // putStoreTime: null,
smBatch: "是", // qcReworkCode: null,
subList: null, // quotaExceptional: false,
subRunStatus: null, // reInStore: false,
testQty: 0, // readStatus: null,
tools: null, // readStatusTiTle: "",
totalArea: 43.48, // recDept: null,
woCode: "WO-221296443-R06", // receptionTime: null,
woId: 2485, // reworkCode: null,
wpId: 14788, // reworkMemo: null,
ybCode: null, // reworkNo: null,
ybLocal: null, // rsCode: null,
}, // runStatus: 3,
printFlag: false, // runStatusTitle: "",
printMan: null, // schedStatus: 0,
runStatus: 2, // scrapQty: 0.0,
runStatusTitle: "审批中", // sendDownTime: "2023-04-14 18:19:35",
runType: 1, // smBatch: "",
runTypeTitle: "转外协", // subList: null,
systemData: false, // subRunStatus: null,
woCode: "WO-221296443-R06", // testQty: 0,
worId: 8246, // tools: null,
}, // totalArea: 43.48,
]; // woCode: "WO-221296443-R06",
this.page.total = this.data.length; // woId: 2485,
this.loading = false; // wpId: 14788,
setTimeout(() => { // ybCode: null,
this.selectionClear(); // ybLocal: null,
}, 500); // },
// printFlag: false,
// printMan: null,
// runStatus: 2,
// runStatusTitle: "",
// runType: 1,
// runTypeTitle: "",
// systemData: false,
// woCode: "WO-221296443-R06",
// worId: 8246,
// },
// ];
// this.page.total = this.data.length;
// this.loading = false;
// setTimeout(() => {
// this.selectionClear();
// }, 500);
}, },
}, },
}; };

@ -18,6 +18,10 @@ export default {
type: Boolean, type: Boolean,
default: false default: false
}, },
woId:{
type: String,
default: ''
}
}, },
data() { data() {
return { return {

@ -6,6 +6,7 @@
:data="data" :data="data"
v-model="form" v-model="form"
v-model:page="page" v-model:page="page"
v-model:search="search"
ref="crud" ref="crud"
@row-del="rowDel" @row-del="rowDel"
@search-change="searchChange" @search-change="searchChange"
@ -17,11 +18,11 @@
@on-load="onLoad" @on-load="onLoad"
> >
<template #menu-left> <template #menu-left>
<el-button type="primary" @click="approval()">批量审批</el-button> <el-button type="primary" @click="handleApproval('batch')">批量审批</el-button>
</template> </template>
<template #menu-right> </template> <template #menu-right> </template>
<template #menu="scope"> <template #menu="scope">
<el-button type="text" size="mini" @click="approval(scope.row.tbId)" <el-button type="text" size="mini" @click="handleApproval('one',scope.row)"
>审批</el-button >审批</el-button
> >
</template> </template>
@ -30,6 +31,7 @@
<approvalDialog <approvalDialog
v-if="isOpen" v-if="isOpen"
:showDialog="isOpen" :showDialog="isOpen"
:woId="woId"
@closeDialog="closeDialog" @closeDialog="closeDialog"
></approvalDialog> ></approvalDialog>
</basic-container> </basic-container>
@ -98,7 +100,7 @@ export default {
filter: true, filter: true,
span: 12, span: 12,
search: true, search: true,
width: 120, width: 180,
searchLabelWidth: 90, searchLabelWidth: 90,
}, },
{ {
@ -109,7 +111,7 @@ export default {
filter: true, filter: true,
span: 12, span: 12,
search: true, search: true,
width: 120, width: 180,
}, },
{ {
label: "批次号", label: "批次号",
@ -164,6 +166,10 @@ export default {
{ {
label: "建立时间", label: "建立时间",
prop: "createTime", prop: "createTime",
type: "date",
searchRange:true,
format: "YYYY-MM-DD",
valueFormat: "YYYY-MM-DD",
sortable: true, sortable: true,
filter: true, filter: true,
span: 12, span: 12,
@ -181,7 +187,7 @@ export default {
}, },
{ {
label: "审核状态", label: "审核状态",
prop: "runStatusTitle", prop: "approvalStatus",
sortable: true, sortable: true,
filter: true, filter: true,
span: 12, span: 12,
@ -189,15 +195,14 @@ export default {
width: 120, width: 120,
type: "select", type: "select",
searchOrder: 5, searchOrder: 5,
searchValue: 1,
dicData: [ dicData: [
{ {
label: "待审核", label: "待审核",
value: 1, value: 2,
}, },
{ {
label: "审核通过", label: "审核通过",
value: 2, value: 4,
}, },
{ {
label: "审核不通过", label: "审核不通过",
@ -246,6 +251,7 @@ export default {
], ],
}, },
form: {}, form: {},
search:{},
query:{}, query:{},
loading:false, loading:false,
page: { page: {
@ -254,15 +260,42 @@ export default {
total: 0, total: 0,
}, },
isOpen: false, isOpen: false,
woId:'',
}; };
}, },
created(){
this.search.approvalStatus = 2
this.query = this.search;
},
methods: { methods: {
approval(row) { searchChange(params, done){
this.query = params;
this.page.currentPage = 1
this.onLoad()
done()
},
searchReset(){
this.search.approvalStatus = 2
this.query = this.search;
this.onLoad()
},
currentChange(currentPage){
this.page.currentPage = currentPage
},
sizeChange(pageSize){
this.page.pageSize = pageSize
},
handleApproval(type,row) {
console.log('row--------',row) console.log('row--------',row)
if(!row && this.selectionList.length == 0){ if(type == 'batch' && this.selectionList.length == 0){
this.$message.error("请至少选择一条数据"); this.$message.error("请至少选择一条数据");
return return
} }
if(type == 'batch'){
this.woId = this.selectionList.map(item => item.id).join(',')
}else{
this.woId = row.id
}
this.isOpen = true; this.isOpen = true;
}, },
closeDialog(val) { closeDialog(val) {
@ -288,11 +321,17 @@ export default {
}, },
onLoad() { onLoad() {
this.loading = true; this.loading = true;
let params = {
...this.query,
startTime:(this.query.createTime && this.query.createTime.length != 0) ? this.query.createTime[0] : undefined,
endTime:(this.query.createTime && this.query.createTime.length != 0) ? this.query.createTime[1] : undefined,
}
const {createTime,...searchParam} = params
getList({ getList({
current:this.page.currentPage, current:this.page.currentPage,
size:this.page.pageSize, size:this.page.pageSize,
runType:1, runType:1,
...this.query, ...searchParam,
}).then(res =>{ }).then(res =>{
this.data = res.data.data.records this.data = res.data.data.records
this.page.total = res.data.data.total this.page.total = res.data.data.total

@ -386,7 +386,7 @@ export default {
}, },
{ {
label: '生产标识', label: '生产标识',
prop: 'inQuantityLevel', prop: 'quantityLevel',
width: 200, width: 200,
search: false, search: false,
sortable: true, sortable: true,
@ -489,7 +489,7 @@ export default {
}, },
{ {
label: '入库时间', label: '入库时间',
prop: 'inOutDate', prop: 'createTime',
width: 200, width: 200,
search: true, search: true,
sortable: true, sortable: true,
@ -508,18 +508,18 @@ export default {
}, },
], ],
}, },
{ // {
label: '入库数量', // label: '',
prop: 'inQuantity', // prop: 'inQuantity',
width: 200, // width: 200,
rules: [ // rules: [
{ // {
required: true, // required: true,
message: '请输入入库日期', // message: '',
trigger: 'blur', // trigger: 'blur',
}, // },
], // ],
}, // },
// { // {
// label: '', // label: '',
// prop: 'inOutDate', // prop: 'inOutDate',
@ -666,10 +666,10 @@ export default {
this.loading = true this.loading = true
let params = { let params = {
...this.query, ...this.query,
startInOutDate:this.query.inOutDate && this.query.inOutDate.length != 0 && this.query.inOutDate[0], startInOutDate:this.query.createTime && this.query.createTime.length != 0 && this.query.createTime[0],
endInOutDate:this.query.inOutDate && this.query.inOutDate.length != 0 && this.query.inOutDate[0] endInOutDate:this.query.createTime && this.query.createTime.length != 0 && this.query.createTime[1]
} }
const {inOutDate,...invalideParams} = params const {createTime,...invalideParams} = params
getList({ getList({
current:this.page.currentPage, current:this.page.currentPage,
size:this.page.pageSize, size:this.page.pageSize,

@ -528,6 +528,9 @@ export default {
res.data.data.records.forEach(item =>{ res.data.data.records.forEach(item =>{
item.minWarning = item.minWarning == 1 ? true : false item.minWarning = item.minWarning == 1 ? true : false
}) })
// res.data.data.records.map(item =>{
// item.gcId = item.gcId == 0 ? null :item.gcId
// })
this.data = res.data.data.records this.data = res.data.data.records
this.page.total = res.data.data.total; this.page.total = res.data.data.total;
}) })

@ -1,25 +1,93 @@
<template> <template>
<div class="notice_box"> <div class="notice_box">
<div class="title_box"> <div class="title_box">
<span class="title">公告</span> <span class="title">通知中心</span>
<span style="color: #409EFF;font-size: 14px;cursor: pointer;" @click="loadMore">查看更多</span> <!-- <span style="color: #409EFF;font-size: 14px;cursor: pointer;" @click="loadMore">查看更多</span> -->
</div> </div>
<div class="notice_data"> <el-tabs v-model="activeName" @tab-click="handleClick">
<el-tab-pane label="我的待办" name="backlog">
<div class="back_box">
<div class="back_item" v-for="item in backlogData" :key="item.id">
<div class="back_top">
<div class="title">{{item.title}}</div>
<div>{{ item.createTime.substring(0,10) == today ? item.createTime.substring(11,16)
: item.createTime.substring(0,4) == year ? item.createTime.substring(5,10) : item.createTime.substring(0,10)}}
</div>
</div>
<div class="bottom">
{{item.content}}
</div>
</div>
</div>
<!-- <div class="btn_box">查看更多</div> -->
<el-button v-if="backlogData.length >= 3" type="primary" @click="handleMore(1)">查看更多</el-button>
</el-tab-pane>
<el-tab-pane label="消息通知" name="notice">
<div class="back_box">
<div class="back_item" v-for="item in noticeArr" :key="item.id">
<div class="back_top">
<div class="title">{{item.title}}</div>
<div>{{ item.createTime.substring(0,10) == today ? item.createTime.substring(11,16)
: item.createTime.substring(0,4) == year ? item.createTime.substring(5,10) : item.createTime.substring(0,10)}}
</div>
</div>
<div class="bottom">
{{item.content}}
</div>
</div>
</div>
<!-- <div class="btn_box">查看更多</div> -->
<el-button v-if="noticeArr.length >= 3" type="primary" @click="handleMore(2)">查看更多</el-button>
</el-tab-pane>
</el-tabs>
<!-- <div class="notice_data">
<div class="notice_data_item" v-for="item in noticeArr" :key="item.content"> <div class="notice_data_item" v-for="item in noticeArr" :key="item.content">
<el-tag :type="item.category == 1 ? 'primary' : 'success'">{{ item.categoryName }}</el-tag> <el-tag :type="item.category == 1 ? 'primary' : 'success'">{{ item.categoryName }}</el-tag>
<div class="notice_title">{{ item.title }}</div> <div class="notice_title">{{ item.title }}</div>
</div> </div>
</div> </div> -->
</div> </div>
</template> </template>
<script> <script>
import {getList} from '@/api/desk/notice' import {getList} from '@/api/desk/notice'
import router from '@/router/'; import router from '@/router/';
import {dateFormat} from '@/utils/date'
export default { export default {
data(){ data(){
return{ return{
today:dateFormat(new Date(),"yyyy-MM-dd"),
year:dateFormat(new Date(),"yyyy"),
activeName:"backlog",
backlogData:[
{
id:'1963789019681054722',
title:"审批请求待处理",
content:"张伟提交的转外协申请,等待您的审批",
createTime:"2026-03-06 09:05:05",
},
{
id:'1963789019681054722',
title:"审批请求待处理",
content:"张伟提交的转外协申请,等待您的审批",
createTime:"2026-03-05 09:05:05",
},
{
id:'1963789019681054722',
title:"审批请求待处理",
content:"张伟提交的转外协申请,等待您的审批",
createTime:"2024-03-05 09:05:05",
},
// {
// id:'1963789019681054722',
// title:"",
// content:"",
// createTime:"2024-03-05 09:05:05",
// }
],
noticeArr:[ noticeArr:[
{ {
"id": "1963789019681054722", "id": "1963789019681054722",
@ -63,6 +131,13 @@ export default {
loadMore(){ loadMore(){
this.$router.push('/desk/notice'); this.$router.push('/desk/notice');
}, },
handleMore(type){
if(type == 1){
this.$router.push('/desk/todoList');
}else{
this.$router.push('/desk/myMessage');
}
}
} }
} }
</script> </script>
@ -77,11 +152,57 @@ export default {
display: flex; display: flex;
justify-content: space-between; justify-content: space-between;
align-items: center; align-items: center;
border-bottom: 1px solid #eee;
padding-bottom: 10px;
.title{ .title{
font-weight: 550; font-weight: 550;
} }
} }
::v-deep .el-tabs__nav-wrap::after{
height: 1px !important;
}
.back_box{
padding: 0 10px;
.back_item{
border-bottom: 1px solid #eee;
margin-bottom: 10px;
.back_top{
display: flex;
justify-content: space-between;
.title{
font-weight: 450;
color: #1F2937;
width: 70%;
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
}
.time{
color: #6B7280;
}
}
.bottom{
margin: 10px 0;
color: #4B5563;
width: 100%;
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
}
}
}
.el-button{
width: 280px;
height: 36px;
margin-left: 15px;
// margin-top: 20px;
position: fixed;
bottom: 35px;
}
.notice_data{ .notice_data{
padding: 20px 0; padding: 20px 0;

Loading…
Cancel
Save