任务跳转页面

yanfeiyong
严飞永 3 weeks ago
parent e348f75f49
commit 58cd90c427

@ -85,9 +85,9 @@ export const constantRoutes = [
},
{
path: "taskInfo",
component: () => import("@/views/auditPages/taskManagement/info"),
component: () => import("@/views/taskManagement/info"),
name: "TaskInfo",
meta: { title: "任务详情", icon: "user", activeMenu: "/task" },
meta: { title: "任务详情", icon: "user", activeMenu: "/task2" },
},
{
path: "taskAudit",
@ -106,6 +106,12 @@ export const constantRoutes = [
component: () => import("@/views/auditPages/taskManagement/audit"),
name: "taskAuditInfolishichakan",
meta: { title: "资产提交记录", icon: "user", activeMenu: "/task" },
},
{
path: 'mytaskInfo',
component: () => import('@/views/myTask/info'),
name: 'mytaskInfo',
meta: { title: '任务详情', icon: 'user', activeMenu: "/myTask2" }
},
{
path: "unitAuth",

@ -0,0 +1,8 @@
export const require = (imgPath) => {
try {
const handlePath = imgPath.replace('@', '..');
return new URL(handlePath, import.meta.url).href;
} catch (error) {
console.warn(error);
}
}

@ -1,5 +1,5 @@
<!-- 任务管理aaa -->
<template>
<!-- 任务核查 -->
<div class="L-task-info">
<div class="info-left info-left-two" id="L-size-main">
@ -38,21 +38,7 @@
<div class="info-bottom-box">
<el-form :inline="true" :model="formInline" size="small" class="demo-form-inline" v-if="index == 1">
<el-row>
<!-- <el-col :span="7">
<el-form-item label="核查单位:">
<el-input v-model="formInline.dwmc" placeholder="请输入"></el-input>
</el-form-item>
</el-col> -->
<!-- <el-col :span="9">
<el-form-item label="系统类型:">
<el-select v-model="formInline.xtlx" placeholder="请选择">
<el-option v-for="dict in dict.type.zc_xtlx" :key="dict.label" :label="dict.label"
:value="dict.value">
</el-option>
</el-select>
</el-form-item>
</el-col> -->
<el-col :span="7">
<el-col :span="7">
<el-form-item label="系统名称:">
<el-input v-model="formInline.xtmc" placeholder="请输入"></el-input>
</el-form-item>
@ -60,16 +46,11 @@
<el-col :span="7">
<el-form-item label="审核状态:">
<el-select v-model="formInline.status" placeholder="请选择">
<el-option label="未核查" value="0">
</el-option>
<el-option label="已核查" value="1">
</el-option>
<el-option label="审核通过" value="3">
</el-option>
<el-option label="审核不通过" value="4">
</el-option>
<el-option label="已关停" value="5">
</el-option>
<el-option label="未核查" value="0" />
<el-option label="已核查" value="1" />
<el-option label="审核通过" value="3" />
<el-option label="审核不通过" value="4" />
<el-option label="已关停" value="5" />
</el-select>
</el-form-item>
</el-col>
@ -86,14 +67,6 @@
<el-col :span="7">
<el-form-item label="单位名称:">
<el-input v-model="formInlineTwo.unitName" placeholder="请输入"></el-input>
<!-- <el-select v-model="formInline.unit" placeholder="请选择"> -->
<!-- <el-option
v-for="dict in dict.type.bms_approval_status"
:key="dict.value"
:label="dict.label"
:value="dict.value">
</el-option> -->
<!-- </el-select> -->
</el-form-item>
</el-col>
<el-col :span="4">
@ -106,25 +79,27 @@
</el-form>
<section v-if="index == 1">
<el-tabs v-model="activeName" @tab-click="handleClick">
<el-tab-pane :label="item.conent" :name="item.lable" :xtmcName="item.xtmcName"
v-for="item in chanckListTow"></el-tab-pane>
<el-tab-pane
v-for="item in chanckListTow"
:key="item.lable"
:label="item.conent"
:name="item.lable"
:xtmcName="item.xtmcName"
/>
</el-tabs>
<el-table v-loading="loading" :data="tableData" :height="tabHeader" :max-height="tabHeader"
:row-class-name="tableRowClassName">
<el-table
v-loading="loading"
:data="tableData"
:height="tabHeader"
:max-height="tabHeader"
:row-class-name="tableRowClassName"
>
<el-table-column type="index" width="50" label="序号" align="center" />
<!-- <el-table-column label="资产编号" key="id" width="200px" prop="id" align="center" /> -->
<el-table-column :label="xtmcName" prop="xtmc" align="center" />
<!-- <el-table-column label="系统类型" key="xtlx" prop="xtlx" align="center">
<template slot-scope="scope">
<dict-tag :options="dict.type.zc_xtlx" :value="scope.row.xtlx" />
</template>
</el-table-column> -->
<el-table-column label="核查单位" prop="zcdwmc" align="center" />
<el-table-column label="单位核查时间" prop="updateTime" align="center" />
<el-table-column label="审核状态" width="200px" prop="status" class-name="table-status"
align="center">
<template slot-scope="scope">
<el-table-column label="核查单位" prop="zcdwmc" align="center" />
<el-table-column label="单位核查时间" prop="updateTime" align="center" />
<el-table-column label="审核状态" width="200px" prop="status" class-name="table-status" align="center">
<template #default="scope">
<span v-if="scope.row.status == 0" style="color: #E6A23C;">
未核查
</span>
@ -143,24 +118,29 @@
</template>
</el-table-column>
<el-table-column label="操作" prop="userId" class-name="table-operation" align="center">
<template slot-scope="scope">
<template #default="scope">
<div style="display: flex;align-items: center;justify-content: center;">
<div style="display: flex;align-items: center;cursor: pointer;" @click="goInfo(1, scope.row)"
v-if="(scope.row.status != 4 && scope.row.status != 0) || ($route.query.pageType == 'look' || $route.meta.pageType == 'look')">
<div
style="display: flex;align-items: center;cursor: pointer;"
@click="goInfo(1, scope.row)"
v-if="(scope.row.status != 4 && scope.row.status != 0) || (route.query.pageType == 'look' || route.meta.pageType == 'look')"
>
<img src="@/assets/images/icon-ck@2x.png" alt="" style="width: 20px;margin-right: 5px;">
<span class="look-info" style="color: #1485EF;">查看</span>
</div>
<!-- v-if="scope.row.taskStatus == 1" -->
<div
v-if="($route.query.pageType == 'info' || $route.meta.pageType == 'info') && scope.row.status != 3 && scope.row.status != 5 && scope.row.status != 1"
v-if="(route.query.pageType == 'info' || route.meta.pageType == 'info') && scope.row.status != 3 && scope.row.status != 5 && scope.row.status != 1"
style="display: flex;align-items: center;cursor: pointer;margin-left: 10px;"
@click="goInfo(2, scope.row)">
@click="goInfo(2, scope.row)"
>
<img src="@/assets/images/icon-shenhe@2x.png" alt="" style="width: 15px;margin-right: 5px;">
<span class="del-info" style="color: #1485EF;">核查</span>
</div>
<!-- scope.row.status == 4 -->
<div style="display: flex;align-items: center;cursor: pointer;margin-left: 5px;"
@click="goInfo(3, scope.row)" v-show='scope.row.btgyy'>
<div
style="display: flex;align-items: center;cursor: pointer;margin-left: 5px;"
@click="goInfo(3, scope.row)"
v-show='scope.row.btgyy'
>
<img src="@/assets/images/icon-ck@2x.png" alt="" style="width: 20px;margin-right: 5px;">
<span class="look-info" style="color: #1485EF;">查看原因</span>
</div>
@ -169,24 +149,26 @@
</el-table-column>
</el-table>
</section>
<my-pagination id="L-pagination" :total="total" :page="pagination.current" :limit="pagination.size"
@pagination="getPagination" :current-page.sync="pagination.current"></my-pagination>
<my-pagination
id="L-pagination"
:total="total"
:page="pagination.current"
:limit="pagination.size"
@pagination="getPagination"
:current-page.sync="pagination.current"
/>
</div>
</main>
</div>
<div class="info-right" v-if="$route.query.pageType == 'look' || $route.meta.pageType == 'look'">
<div class="info-right" v-if="route.query.pageType == 'look' || route.meta.pageType == 'look'">
<div class="info-title">任务流程节点</div>
<div class="timeline">
<div class="timeline-items" v-for="(item, index) in timeLineData">
<div class="timeline-items" v-for="(item, index) in timeLineData" :key="index">
<div class="left-box">
<img class="main-img" :src="returnidimg(item.assetName)" alt="">
<!-- <img class="main-img" v-if="item.status == 2" src="" alt="">
<img class="main-img" v-if="item.status == 3" src="" alt="">
<img class="main-img" v-if="item.status == 4" src="" alt=""> -->
<img class="icon-jt" v-if="(index + 1) != timeLineData.length" src="@/assets/images/icon-jt@2x.png" alt="">
</div>
<div class="right-box">
<span class="span-title">{{ item.assetName }}:</span>
<span class="span-time">{{ item.xfTime }}</span>
</div>
@ -197,384 +179,340 @@
<el-descriptions>
<el-descriptions-item label="不通过原因">
{{ chakanyuanyin }}
</el-descriptions-item>
</el-descriptions>
</my-dialog>
</div>
</template>
<script>
import myPagination from "@/views/components/Pagination/index.vue"
import { getassetTaskid, geassetTaskcHc } from "@/api/renwuApi/index.js"
import { assetLcpage } from "@/api/renwuApi/index.js"
import myDialog from "@/views/components/myDialog/index.vue"
export default {
dicts: ['zc_xtlx'],
components: { myPagination, myDialog },
data() {
return {
index: 1,
formInline: {
},
formInlineTwo: {
unitName: "",
},
total: 0,
pagination: {
current: 1,
size: 10,
},
tableData: [
],
tableDataTwo: [
],
loading: false,
tabHeader: undefined,
timeLineData: [],
titleInfoObj: {},
chakanyuanyin: "",
activeName: "0",
xtmcName: "系统名称",
chanckList: [
{
lable: "0",
conent: "web资产",
xtmcName: "系统名称",
},
{
lable: "1",
conent: "小程序资产",
xtmcName: "小程序名称",
},
{
lable: "2",
conent: "公众号资产",
xtmcName: "公众号名称",
},
{
lable: "3",
conent: "电子邮件资产",
xtmcName: "电子邮箱后缀",
},
{
lable: "4",
conent: "移动应用程序资产",
xtmcName: "移动应用程序名称",
},
],
chanckListTow: [],
listTow: [],
}
},
mounted() {
this.cancalDebounce();
window.addEventListener('resize', this.cancalDebounce);
this.titleInfo()
this.assetLcpageList()
if (localStorage.getItem('ismypaginationTow')) {
console.log(JSON.parse(localStorage.getItem('ismypaginationTow')));
if (JSON.parse(localStorage.getItem('ismypaginationTow')).isfanhuiTow) {
this.formInline = JSON.parse(localStorage.getItem('ismypaginationTow'))
console.log(99999, this.formInline);
this.titleInfo()
} else {
console.log(99999, this.formInline);
localStorage.removeItem("ismypaginationTow")
}
}
<script setup>
import { ref, onMounted, onUnmounted, computed } from 'vue';
import { useRoute, useRouter } from 'vue-router';
import useUserStore from "@/store/modules/user";
import myPagination from "@/views/components/Pagination/index.vue";
import myDialog from "@/views/components/myDialog/index.vue";
import { getassetTaskid, geassetTaskcHc } from "@/api/renwuApi/index.js";
import { assetLcpage } from "@/api/renwuApi/index.js";
import {require} from "@/utils/require.js";
const route = useRoute();
const router = useRouter();
const userStore = useUserStore();
console.log("userStore:", userStore.roles);
const index = ref(1);
const formInline = ref({});
const formInlineTwo = ref({
unitName: "",
});
const total = ref(0);
const pagination = ref({
current: 1,
size: 10,
});
const tableData = ref([]);
const tableDataTwo = ref([]);
const loading = ref(false);
const tabHeader = ref(undefined);
const timeLineData = ref([]);
const titleInfoObj = ref({});
const chakanyuanyin = ref("");
const activeName = ref("0");
const xtmcName = ref("系统名称");
const liebiaoDialog = ref(null);
const chanckList = [
{
lable: "0",
conent: "web资产",
xtmcName: "系统名称",
},
destroyed() {
window.removeEventListener('resize', this.cancalDebounce);
{
lable: "1",
conent: "小程序资产",
xtmcName: "小程序名称",
},
methods: {
sendBack() {
if (localStorage.getItem('ismypagination')) {
let formInline = JSON.parse(localStorage.getItem('ismypagination'))
formInline.isfanhui = true
localStorage.setItem("ismypagination", JSON.stringify(formInline))
}
this.$router.go(-1);
},
handleClick(tab, event) {
console.log(tab.name);
// this.formInline = {
// }
this.activeName = tab.name
this.xtmcName = tab.$attrs.xtmcName
localStorage.setItem("activeName", this.activeName)
this.handleQuery()
},
//
returnidimg(iswenzi) {
// let obj = {
// '':require('@/assets/images/rwxf.png'),
// "":require('@/assets/images/wctj.png'),
// ",":require('@/assets/images/shbh.png'),
// "":require('@/assets/images/shtg.png'),
// }
let listsna = [
{
name: "下发",
imgdata: require('@/assets/images/rwxf.png'),
}, {
name: "提交",
imgdata: require('@/assets/images/wctj.png'),
}, {
name: "不通过",
imgdata: require('@/assets/images/shbh.png'),
}, {
name: "审核通过",
imgdata: require('@/assets/images/shtg.png'),
}, {
name: "驳回",
imgdata: require('@/assets/images/shbh.png'),
}
]
let item = listsna.find(item => iswenzi.includes(item.name))
if (item) {
return item.imgdata
} else {
return require('@/assets/images/wctj.png')
}
},
assetLcpageList() {
let obj = {
taskId: this.$route.query.id || this.$route.meta.id
}
assetLcpage(obj).then(res => {
this.timeLineData = res.data
})
},
importClose() { },
goInfo(type, row) {
//
if (type == 1) {
this.$router.push({
name: 'mytaskAuditInfo', query: {
pageType: "look",
taskId: row.taskId,
assetId: row.id,
type: this.activeName,
}
})
}
//
if (type == 2) {
this.$router.push({
name: 'mytaskAuditInfo', query: {
pageType: "change",
taskId: row.taskId,
assetId: row.id,
type: this.activeName,
}
})
}
//
if (type == 3) {
this.chakanyuanyin = row.btgyy
this.$refs.liebiaoDialog.open()
}
// getassetTaskid(row.id)
},
taskstatus(id) {
if (id) {
let obj = {
0: "已关闭",
1: "进行中",
2: "正常完成", 3: "超期完成", 4: "正常完成", 5: "审核驳回"
}
return obj[id]
} else {
return "-"
}
},
//
titleInfoObjtype(type = "0,1") {
console.log(type);
let list = type.split(",")
//
this.listTow = []
//tab
this.chanckListTow = []
this.chanckList.forEach(res => {
list.forEach(element => {
if (element == res.lable) {
this.listTow.push(res.conent)
this.chanckListTow.push(res)
}
});
})
//tab
this.activeName = this.chanckListTow[0].lable
if (localStorage.getItem("activeName")) {
this.activeName = localStorage.getItem("activeName")
localStorage.setItem("activeName", this.activeName)
}
//
let listname = this.chanckListTow.filter(item => item.lable == this.activeName)
if (listname) {
this.xtmcName = listname[0].xtmcName
}
this.handleQuery();
},
titleInfo() {
getassetTaskid(this.$route.query.id || this.$route.meta.id).then(res => {
if (res.code == 200) {
this.titleInfoObj = res.data
// this.$set(this.titleInfoObj,'type',"0,1")
this.titleInfoObjtype(this.titleInfoObj.type)
}
})
},
//
resetQuery() {
this.activeName = this.chanckListTow[0].lable
this.pagination = {
current: 1,
size: 10,
type: this.activeName,
}
if (this.index == 1) {
this.formInline = {
type: this.activeName,
}
localStorage.removeItem("ismypaginationTow")
this.getList();
} else if (this.index == 2) {
this.formInlineTwo = {
unitName: "",
}
this.getListTwo();
}
},
//
handleQuery() {
this.pagination = {
current: 1,
size: 10,
type: this.activeName,
}
if (this.index == 1) {
this.pagination = { ...this.pagination, ...this.formInline };
this.formInline.isfanhuiTow = false
console.log(77777, this.formInline);
console.log(88888, this.pagination);
localStorage.setItem("ismypaginationTow", JSON.stringify(this.formInline))
this.getList();
} else if (this.index == 2) {
this.getListTwo();
}
},
//
getPagination(pages) {
this.pagination.current = pages.page;
this.pagination.size = pages.limit;
if (this.index == 1) {
this.getList();
} else if (this.index == 2) {
this.getListTwo();
}
},
// tab
activeTab(id) {
this.index = id
if (id == 1) {
this.formInline = {
unit: "",
type: "",
status: "",
}
this.getList();
} else {
this.formInlineTwo = {
unitName: "",
}
this.getList();
{
lable: "2",
conent: "公众号资产",
xtmcName: "公众号名称",
},
{
lable: "3",
conent: "电子邮件资产",
xtmcName: "电子邮箱后缀",
},
{
lable: "4",
conent: "移动应用程序资产",
xtmcName: "移动应用程序名称",
},
];
const chanckListTow = ref([]);
const listTow = ref([]);
const sendBack = () => {
if (localStorage.getItem('ismypagination')) {
let formInline = JSON.parse(localStorage.getItem('ismypagination'));
formInline.isfanhui = true;
localStorage.setItem("ismypagination", JSON.stringify(formInline));
}
//
titleInfo();
getList();
router.go(-1);
};
const handleClick = (tab) => {
activeName.value = tab.props.name;
xtmcName.value = tab.props.xtmcName;
localStorage.setItem("activeName", activeName.value);
handleQuery();
};
const returnidimg = (iswenzi) => {
const listsna = [
{
name: "下发",
imgdata: require('@/assets/images/rwxf.png'),
}, {
name: "提交",
imgdata: require('@/assets/images/wctj.png'),
}, {
name: "不通过",
imgdata: require('@/assets/images/shbh.png'),
}, {
name: "审核通过",
imgdata: require('@/assets/images/shtg.png'),
}, {
name: "驳回",
imgdata: require('@/assets/images/shbh.png'),
}
];
const item = listsna.find(item => iswenzi.includes(item.name));
return item ? item.imgdata : require('@/assets/images/wctj.png');
};
const assetLcpageList = async () => {
const obj = {
taskId: route.query.id || route.meta.id
};
const res = await assetLcpage(obj);
timeLineData.value = res.data;
};
const importClose = () => {};
const goInfo = (type, row) => {
if (type === 1) {
router.push({
name: 'mytaskAuditInfo',
query: {
pageType: "look",
taskId: row.taskId,
assetId: row.id,
type: activeName.value,
}
},
getList() {
this.loading = true
this.pagination.taskId = this.$route.query.id || this.$route.meta.id
// this.pagination.dwmc = this.$route.query.dwmc || this.$route.meta.dwmc
this.pagination.type = this.activeName
if (this.$store.state.user.roles.includes("unit")) {
this.pagination.dwmc = this.$store.state.user.useer.nickName
});
}
if (type === 2) {
router.push({
name: 'mytaskAuditInfo',
query: {
pageType: "change",
taskId: row.taskId,
assetId: row.id,
type: activeName.value,
}
geassetTaskcHc(this.pagination).then(res => {
this.tableData = res.data.records
this.loading = false
this.total = res.data.total
})
},
getListTwo() { },
// table
tableRowClassName({ row, rowIndex }) {
if (rowIndex % 2 !== 0) {
return 'evenNumber-row';
});
}
if (type === 3) {
chakanyuanyin.value = row.btgyy;
liebiaoDialog.value.open();
}
};
const taskstatus = (id) => {
if (id) {
const obj = {
0: "已关闭",
1: "进行中",
2: "正常完成",
3: "超期完成",
4: "正常完成",
5: "审核驳回"
};
return obj[id];
}
return "-";
};
const titleInfoObjtype = (type = "0,1") => {
const list = type.split(",");
listTow.value = [];
chanckListTow.value = [];
chanckList.forEach(res => {
list.forEach(element => {
if (element === res.lable) {
listTow.value.push(res.conent);
chanckListTow.value.push(res);
}
return '';
},
//
cancalDebounce() {
const element = document.getElementById('L-size-main'); // ID
const header = document.getElementById('L-header'); // ID
const tab = document.getElementById('L-tab'); // ID
const pagination = document.getElementById('L-pagination'); // ID
const elementHeight = element.offsetHeight;
const headerHeight = header.offsetHeight;
const paginationtHeight = pagination.offsetHeight;
const tabHeight = tab.offsetHeight;
this.tabHeader = elementHeight - headerHeight - paginationtHeight - tabHeight - 160;
});
});
activeName.value = chanckListTow.value[0].lable;
if (localStorage.getItem("activeName")) {
activeName.value = localStorage.getItem("activeName");
localStorage.setItem("activeName", activeName.value);
}
const listname = chanckListTow.value.filter(item => item.lable === activeName.value);
if (listname.length) {
xtmcName.value = listname[0].xtmcName;
}
handleQuery();
};
const titleInfo = async () => {
const res = await getassetTaskid(route.query.id || route.meta.id);
if (res.code === 200) {
titleInfoObj.value = res.data;
titleInfoObjtype(titleInfoObj.value.type);
}
};
const resetQuery = () => {
activeName.value = chanckListTow.value[0].lable;
pagination.value = {
current: 1,
size: 10,
type: activeName.value,
};
if (index.value === 1) {
formInline.value = {
type: activeName.value,
};
localStorage.removeItem("ismypaginationTow");
getList();
} else if (index.value === 2) {
formInlineTwo.value = {
unitName: "",
};
getListTwo();
}
};
const handleQuery = () => {
pagination.value = {
current: 1,
size: 10,
type: activeName.value,
};
if (index.value === 1) {
pagination.value = { ...pagination.value, ...formInline.value };
formInline.value.isfanhuiTow = false;
localStorage.setItem("ismypaginationTow", JSON.stringify(formInline.value));
getList();
} else if (index.value === 2) {
getListTwo();
}
};
const getPagination = (pages) => {
pagination.value.current = pages.page;
pagination.value.size = pages.limit;
if (index.value === 1) {
getList();
} else if (index.value === 2) {
getListTwo();
}
};
const activeTab = (id) => {
index.value = id;
if (id === 1) {
formInline.value = {
unit: "",
type: "",
status: "",
};
getList();
} else {
formInlineTwo.value = {
unitName: "",
};
getList();
}
};
const getList = async () => {
loading.value = true;
pagination.value.taskId = route.query.id || route.meta.id;
pagination.value.type = activeName.value;
if (userStore.roles.includes("unit")) {
pagination.value.dwmc = store.state.user.useer.nickName;
}
const res = await geassetTaskcHc(pagination.value);
tableData.value = res.data.records;
loading.value = false;
total.value = res.data.total;
};
const getListTwo = () => {};
const tableRowClassName = ({ rowIndex }) => {
return rowIndex % 2 !== 0 ? 'evenNumber-row' : '';
};
const cancalDebounce = () => {
const element = document.getElementById('L-size-main');
const header = document.getElementById('L-header');
const tab = document.getElementById('L-tab');
const pagination = document.getElementById('L-pagination');
if (element && header && pagination && tab) {
const elementHeight = element.offsetHeight;
const headerHeight = header.offsetHeight;
const paginationtHeight = pagination.offsetHeight;
const tabHeight = tab.offsetHeight;
tabHeader.value = elementHeight - headerHeight - paginationtHeight - tabHeight - 160;
}
};
onMounted(() => {
cancalDebounce();
window.addEventListener('resize', cancalDebounce);
titleInfo();
assetLcpageList();
if (localStorage.getItem('ismypaginationTow')) {
const storedData = JSON.parse(localStorage.getItem('ismypaginationTow'));
if (storedData.isfanhuiTow) {
formInline.value = storedData;
titleInfo();
} else {
localStorage.removeItem("ismypaginationTow");
}
},
beforeRouteEnter(to, from, next) {
if (to.query.pageType == 'info') {
to.meta.title = '资产核查'
to.meta.pageType = to.query.pageType
to.meta.id = to.query.id
} else if (to.query.pageType == 'look') {
to.meta.title = '任务详情'
to.meta.pageType = to.query.pageType
to.meta.id = to.query.id
}
next();
},
}
}
});
onUnmounted(() => {
window.removeEventListener('resize', cancalDebounce);
});
</script>
<style lang="scss" scoped>
::v-deep .el-timeline {
padding-left: 0;
@ -600,4 +538,4 @@ export default {
right: 20px;
top: 10px;
}
</style>
</style>

File diff suppressed because it is too large Load Diff
Loading…
Cancel
Save