From 9c91c96c4c1dca21670abfa7a0c879a734a888de Mon Sep 17 00:00:00 2001
From: lxp <1928192722@qq.com>
Date: 星期五, 14 三月 2025 20:09:37 +0800
Subject: [PATCH] 工时管理
---
src/components/Table/lims-table.vue | 238 ++++++++++++++++++++++++-----------------------------------
1 files changed, 98 insertions(+), 140 deletions(-)
diff --git a/src/components/Table/lims-table.vue b/src/components/Table/lims-table.vue
index 0251a1f..999ce8b 100644
--- a/src/components/Table/lims-table.vue
+++ b/src/components/Table/lims-table.vue
@@ -4,8 +4,6 @@
<el-table
ref="multipleTable"
v-loading="tableLoading"
- element-loading-text="鍔犺浇涓�..."
- element-loading-spinner="el-icon-loading"
:border="border"
:data="tableData"
:header-cell-style="{ background: '#f8f8f9', color: '#515a6e' }"
@@ -45,6 +43,7 @@
:filter-multiple="item.filterMultiple"
:filtered-value="item.filteredValue"
:filters="item.filters"
+ :fixed="item.fixed"
:label="item.label"
:min-width="item.minWidth"
:prop="item.prop"
@@ -53,10 +52,8 @@
"
:sortable="item.sortable ? true : false"
:type="item.type"
- :width="
- item.dataType === 'action' ? getWidth(item.operation) : item.width
- "
align="center"
+ :width="item.dataType == 'action' ? btnWidth : item.width"
>
<!-- <div class="123" v-if="item.type == ''"> -->
<template
@@ -133,6 +130,89 @@
>{{ scope.row[item.prop] | formatters(item.formatData) }}</el-tag
>
</div>
+
+ <!-- 鎸夐挳 -->
+ <div
+ v-else-if="item.dataType == 'action'"
+ :style="`width:${getWidth(item.operation, scope.row)}`"
+ >
+ <template v-for="(o, key) in item.operation">
+ <el-button
+ v-show="o.type != 'upload'"
+ size="mini"
+ v-if="o.showHide ? o.showHide(scope.row) : true"
+ :disabled="o.disabled ? o.disabled(scope.row) : false"
+ :icon="iconFn(o)"
+ :plain="o.plain"
+ :style="{ color: o.name === '鍒犻櫎' ? '#f56c6c' : o.color }"
+ :type="o.type | typeFn(scope.row)"
+ @click="o.clickFun(scope.row)"
+ :key="key"
+ >
+ {{ o.name }}
+ </el-button>
+ <el-upload
+ :action="javaApi + o.url"
+ size="mini"
+ ref="upload"
+ :multiple="o.multiple ? o.multiple : false"
+ :disabled="o.disabled ? o.disabled(scope.row) : false"
+ :accept="
+ o.accept
+ ? o.accept
+ : '.jpg,.jpeg,.png,.gif,.doc,.docx,.xls,.xlsx,.ppt,.pptx,.pdf,.zip,.rar'
+ "
+ v-if="o.type == 'upload' && o.url"
+ style="display: inline-block; width: 50px"
+ :data="o.data ? o.data(scope.row) : {}"
+ :before-upload="
+ o.beforeUpload ? o.beforeUpload(scope.row) : () => true
+ "
+ v-show="o.showHide ? o.showHide(scope.row) : true"
+ :headers="uploadHeader"
+ :on-error="onError"
+ :on-exceed="onExceed"
+ :on-success="handleSuccessUp"
+ :show-file-list="false"
+ :key="key"
+ >
+ <el-button
+ :size="o.size ? o.size : 'small'"
+ type="text"
+ :disabled="o.disabled ? o.disabled(scope.row) : false"
+ >{{ o.name }}</el-button
+ >
+ </el-upload>
+ <el-upload
+ action="#"
+ :on-change="
+ (file, fileList) => o.clickFun(scope.row, file, fileList)
+ "
+ :multiple="o.multiple ? o.multiple : false"
+ :limit="o.limit ? o.limit : 1"
+ :disabled="o.disabled ? o.disabled(scope.row) : false"
+ :accept="
+ o.accept
+ ? o.accept
+ : '.jpg,.jpeg,.png,.gif,.doc,.docx,.xls,.xlsx,.ppt,.pptx,.pdf,.zip,.rar'
+ "
+ v-if="o.type == 'upload' && !o.url"
+ style="display: inline-block; width: 50px"
+ v-show="o.showHide ? o.showHide(scope.row) : true"
+ :auto-upload="false"
+ :on-exceed="onExceed"
+ :show-file-list="false"
+ :key="key"
+ >
+ <el-button
+ :size="o.size ? o.size : 'small'"
+ type="text"
+ :disabled="o.disabled ? o.disabled(scope.row) : false"
+ >{{ o.name }}</el-button
+ >
+ </el-upload>
+ </template>
+ </div>
<!-- 鍙偣鍑荤殑鏂囧瓧 -->
<div
v-else-if="item.dataType == 'link'"
@@ -151,109 +231,6 @@
scope.row[item.prop] | formatters(item.formatData)
}}</span>
</div>
- </template>
- </el-table-column>
- <!-- 鎿嶄綔鍒� -->
- <el-table-column
- v-if="table.operator"
- :label="(table.operatorConfig && table.operatorConfig.label) || '鎿嶄綔'"
- :width="
- table.operatorConfig &&
- (table.operatorConfig.width
- ? table.operatorConfig.width
- : calcOperationWidth())
- "
- :min-width="
- (table.operatorConfig && table.operatorConfig.width) ||
- table.operatorConfig.minWidth ||
- 100
- "
- align="center"
- :fixed="table.operatorConfig ? table.operatorConfig.fixed : 'right'"
- :show-overflow-tooltip="true"
- >
- <template slot-scope="scope">
- <template v-for="(o, index) in table.operator">
- <el-button
- :key="index"
- v-if="o.type != 'upload'"
- @click.stop="o.clickFun(scope.row)"
- :type="o.type || 'text'"
- :icon="o.icon"
- :size="o.size || 'small'"
- :disabled="o.disabled ? o.disabled(scope.row) : false"
- v-show="o.showFun ? o.showFun(scope.row) : true"
- :class="[
- 'commonButton',
- {
- del: o.name === '鍒犻櫎' || o.name === '浣滃簾',
- },
- ]"
- >{{ o.name }}
- </el-button>
- <el-upload
- :action="
- javaApi +
- o.url +
- '?id=' +
- (o.uploadIdFun ? o.uploadIdFun(scope.row) : scope.row.id)
- "
- size="mini"
- ref="upload"
- :multiple="o.multiple ? o.multiple : false"
- :limit="1"
- :disabled="o.disabled ? o.disabled(scope.row) : false"
- :accept="
- o.accept
- ? o.accept
- : '.jpg,.jpeg,.png,.gif,.doc,.docx,.xls,.xlsx,.ppt,.pptx,.pdf,.zip,.rar'
- "
- v-if="o.type == 'upload' && o.url"
- style="display: inline-block; width: 50px"
- v-show="o.showHide ? o.showHide(scope.row) : true"
- :headers="uploadHeader"
- :on-error="onError"
- :on-exceed="onExceed"
- :on-success="handleSuccessUp"
- :show-file-list="false"
- :key="index"
- >
- <el-button
- :size="o.size ? o.size : 'small'"
- type="text"
- :disabled="o.disabled ? o.disabled(scope.row) : false"
- >{{ o.name }}</el-button
- >
- </el-upload>
- <el-upload
- action="#"
- :on-change="
- (file, fileList) => o.clickFun(scope.row, file, fileList)
- "
- :multiple="o.multiple ? o.multiple : false"
- :limit="o.limit ? o.limit : 1"
- :disabled="o.disabled ? o.disabled(scope.row) : false"
- :accept="
- o.accept
- ? o.accept
- : '.jpg,.jpeg,.png,.gif,.doc,.docx,.xls,.xlsx,.ppt,.pptx,.pdf,.zip,.rar'
- "
- v-if="o.type == 'upload' && !o.url"
- style="display: inline-block; width: 50px"
- v-show="o.showHide ? o.showHide(scope.row) : true"
- :auto-upload="false"
- :on-exceed="onExceed"
- :show-file-list="false"
- :key="index"
- >
- <el-button
- :size="o.size ? o.size : 'small'"
- type="text"
- :disabled="o.disabled ? o.disabled(scope.row) : false"
- >{{ o.name }}</el-button
- >
- </el-upload>
- </template>
</template>
</el-table-column>
</el-table>
@@ -342,7 +319,7 @@
props: {
isSelection: {
type: Boolean,
- default: false,
+ default: undefined,
},
height: {
type: String,
@@ -388,18 +365,11 @@
return {};
},
},
- // column: {
- // type: Array,
- // default() {
- // return [];
- // },
- // },
- table: {
- type: Object,
+ column: {
+ type: Array,
default() {
- return {};
+ return [];
},
- required: true,
},
rowClassName: {
type: Function,
@@ -417,7 +387,7 @@
},
rowKey: {
type: String,
- default: undefined,
+ default: "id",
},
page: {
type: Object,
@@ -434,41 +404,28 @@
data() {
return {
spanList: [],
- column: [],
+ btnWidth: "120px",
};
},
watch: {
- table(val) {
- this.doLayout();
- },
+ // column(val) {
+ // this.doLayout();
+ // },
},
mounted() {
this.calculateSpanInfo();
- this.column = this.table.column;
},
methods: {
- //璁$畻鎿嶄綔鍒楃殑瀹藉害
- calcOperationWidth() {
- let width = 0;
- this.table.operator.forEach((item) => {
- width += item.name.length * 15 + 15;
- });
- return width;
- },
- doLayout() {
- this.$nextTick(() => {
- this.$refs.multipleTable && this.$refs.multipleTable.doLayout();
- });
- },
- getWidth(row) {
+ getWidth(row, row0) {
let count = 0;
row.forEach((a) => {
- if (a.showHide !== undefined && a.showHide()) {
+ if (a.showHide !== undefined && a.showHide(row0)) {
count += a.name.length;
} else if (!a.showHide) {
count += a.name.length;
}
});
+ this.btnWidth = count * 15 + 70 + "px";
return count * 15 + 70 + "px";
},
iconFn(row) {
@@ -508,6 +465,7 @@
this.$message.success("涓婁紶鎴愬姛");
}
}
+ this.$refs.upload.clearFiles();
},
onError(err, file, fileList) {
this.$message.error("涓婁紶澶辫触");
--
Gitblit v1.9.3