You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

224 lines
5.8 KiB

3 years ago
<template>
<lay-container fluid="true" class="content-box">
<lay-table height="160px" class="row-select" v-if="dataColumn.length>0" :columns="dataColumn"
:data-source="dataList" :row-style="rowStyle">
<template v-slot:toolbar v-if="dataInfoObj.FCanEdit!=2">
<lay-button size="sm" @click="saveBatch" type="primary" :disabled="editColumn.length===0">保存
</lay-button>
</template>
<template v-for="item in editColumn" v-slot:[item.key]="{ data }">
<lay-input v-if="!item.dataType" size="sm" v-model="data[item.key]" required></lay-input>
</template>
</lay-table>
<OperateLog v-if="dataInfoObj.FTeamID" ref="OperateLog" :dataInfoObj="dataInfoObj"></OperateLog>
</lay-container>
</template>
<style scoped>
.content-box {
min-height: 580px;
margin: 30px 10px;
display: block;
position: relative;
clear: both;
float: none;
}
.row-select td {
overflow: inherit;
}
</style>
<script>
import {
ref
} from 'vue';
import {
getListByTeamId,
updateBatchById
} from "/src/api/api/view";
import {
getBasicRoleList
} from "/src/api/api/user";
import {
reviewMaterialGroup
} from "/src/api/api/task";
import OperateLog from "./OperateLog.vue";
import {
getDataCode,
commonSave
} from "/src/api/api/common";
export default {
components: {
OperateLog
},
setup() {
const dataColumn = ref([]);
const dataList = ref([]);
const cacheDataList = ref([]);
const dataColor = ref([]);
const editColumn = ref([]);
const selectDataMap = ref({});
let colors = ["1E9FFF", "009688", "393D49", "5FB878"];
const rowStyle = function(row, rowIndex) {
let color = "";
for (let idx = 0; idx < dataColor.value.length; idx++) {
if (rowIndex > dataColor.value[idx]) color = "color:#" + colors[idx];
}
return color;
}
return {
dataColumn,
dataList,
cacheDataList,
dataColor,
editColumn,
selectDataMap,
rowStyle
}
},
props: {
dataInfoObj: {
type: Object,
default: () => {},
},
viewDataList: {
type: Object,
default: () => [],
}
},
mounted() {
console.log(this.dataInfoObj)
this.initPage();
},
methods: {
async initPage() {
let dataColumn = [];
let dataColor = [];
let _data = await getListByTeamId({
teamId: this.dataInfoObj.FTeamID,
viewType: 1,
FAllView: "1"
});
let _power = [];
if (this.dataInfoObj.FCanEdit != 2) {
_power = (await getBasicRoleList({
FRoleType: 36
}) || []).map(it => parseInt(it.F2));
}
dataColumn = _data.columns;
this.editColumn = dataColumn.filter(it => {
if (this.dataInfoObj.FCanEdit == 2) return true;
let b = _power.indexOf(it.id) >= 0;
if (b) it.customSlot = it.key;
return b;
});
//修改项移到前面
if (this.dataInfoObj.FCanEdit != 2) {
let tempColumn1 = dataColumn.filter(s => s.customSlot) || [];
let tempColumn2 = dataColumn.filter(s => s.customSlot == undefined) || [];
dataColumn = [...tempColumn1, ...tempColumn2];
}
let col7 = dataColumn.filter(s => s.fieldType == 7) || [];
_data.rows.forEach((item) => {
let info = _data.infos.find(s => s.FDataID == item.FMaterialID) || null;
if (info != null) {
col7.forEach((col) => {
item[col.key] = info[col.key] || item[col.key] || "";
});
}
if (item.FTypeID1 == 0 || item.FTypeID1 == -1) {
item.FTypeID1 = "";
} else {
let first = _data.types.find(s => s.FID == item.FTypeID1) || null;
if (first != null) {
item.FTypeID1 = first.FName;
first = _data.types.find(s => s.FID == item.FTypeID2) || null;
item.FTypeID2 = first != null ? first.FName : "";
} else {
item.FTypeID1 = item.FTypeID2 = "";
}
}
});
this.cacheDataList = JSON.parse(JSON.stringify(_data.rows));
this.dataList = _data.rows;
this.dataColumn = dataColumn;
this.dataColor = dataColor
},
cancelClick(isRefresh) {
isRefresh = isRefresh == undefined ? false : isRefresh;
this.$emit('cancelClick', isRefresh);
},
async submitUpdate(_list, _logs) {
let idx = layer.load(2);
let _result = await reviewMaterialGroup({
FTaskID: this.dataInfoObj.FID,
FTeamID: this.dataInfoObj.FTeamID,
FList: JSON.stringify(_list)
});
if (_result > 0) {
await commonSave({
teamId: this.dataInfoObj['FTeamID'],
type: this.dataInfoObj['FType'],
desc: _logs.length > 0 ? _logs.join("") : "未修改"
}, "OperateLog");
let $this = this;
setTimeout(function() {
layer.close(idx);
layer.msg('复核成功');
$this.cancelClick(true)
}, 500);
} else {
layer.close(idx);
layer.msg('复核失败');
}
this.$refs.OperateLog._getPageList();
},
saveBatch() {
let _list = [];
let _logs = [];
this.dataList.forEach((row, index) => {
let cache = this.cacheDataList[index];
let _row = {};
let _log = [];
for (let col of this.editColumn) {
if (row[col.key] !== cache[col.key]) {
_row[col.key] = row[col.key];
_log.push(col.title + "" + row[col.key]);
}
}
if (Object.keys(_row).length > 0) {
_row['FID'] = row['FID'];
_list.push(_row);
_logs.push(_log.join("、"));
}
});
let max = this.dataList.length;
let min = _list.length;
let message = min <= 0 ? "您没做修改," : (min != max ? ("您有" + (max - min) + "项没修改,") : "");
message += "确认提交吗?";
let $this = this;
layer.confirm(message, {
title: "提示",
btn: [{
text: '确定',
callback: function(id) {
layer.close(id);
$this.submitUpdate(_list, _logs);
}
},
{
text: '取消',
callback: function(id) {
layer.close(id);
}
}
]
});
}
}
}
</script>