| | |
| | | :default-expand-all="tableList.isDefaultExpandAll" |
| | | :tree-props="{ children: 'child', hasChildren: 'hasChildren' }" |
| | | :span-method="objectSpanMethod" |
| | | :summary-method="getSummaries" |
| | | :show-summary="showSummary" |
| | | > |
| | | <el-table-column v-if="tableList.selectBox" type="selection" width="40"> </el-table-column> |
| | | <el-table-column v-if="tableList.selectBox" type="selection" width="40" :selectable="selectable"> </el-table-column> |
| | | <el-table-column v-if="tableList.selectIndex" type="index" label="序号" width="50"> </el-table-column> |
| | | <el-table-column |
| | | v-for="(item, i) in tableList.tableColumn" |
| | |
| | | :min-width="item.min" |
| | | show-overflow-tooltip |
| | | :sortable="item.sortable" |
| | | :align="item.textAlign" |
| | | v-if="item.isShowColumn" |
| | | > |
| | | <template slot-scope="scope"> |
| | | <span v-if="item.price">{{ "¥" + number_format(scope.row[item.prop], 2, ".", ",") }}</span> |
| | | <!-- 带点的功能 --> |
| | | <!-- 状态显示 --> |
| | | <div v-else-if="item.status"> |
| | | <!-- <span v-if="scope.row.status == '完成'" class="Badge greenSlot"></span> |
| | | <span v-else-if="scope.row.status == '草稿'" class="Badge redSlot"></span> |
| | | <span v-else-if="scope.row.status == '就绪'" class="Badge redSlot"></span> |
| | | <span v-else-if="scope.row.status == '已取消'" class="Badge yellowSlot"></span> --> |
| | | <span |
| | | class="Badge" |
| | | :class="{ |
| | | greenSlot: scope.row.status == '完成', |
| | | redSlot: scope.row.status == '已取消', |
| | | blueSlot: scope.row.status == '就绪', |
| | | graySlot: scope.row.status == '草稿' |
| | | greenSlot: scope.row.status == '4' || scope.row.status == '完成', |
| | | redSlot: scope.row.status == '5', |
| | | blueSlot: scope.row.status == '3' || scope.row.status == '就绪', |
| | | graySlot: scope.row.status == '1' |
| | | }" |
| | | >{{ scope.row[item.prop] }}</span |
| | | >{{ |
| | | item.isCallMethod ? item.getCallMethod(scope.row[item.prop], scope.row) : scope.row[item.prop] |
| | | }}</span |
| | | > |
| | | </div> |
| | | <!-- 调用方法显示文字 --> |
| | |
| | | <!-- 小于当前时间显示不同颜色 --> |
| | | <span |
| | | v-else-if="item.date" |
| | | :style="{ color: new Date().getTime() > new Date(scope.row[item.prop]).getTime() ? '#D23F3A' : '#606266' }" |
| | | >{{ timeAgo(scope.row[item.prop]) }}</span |
| | | :style="{ |
| | | color: new Date().getTime() > new Date(scope.row[item.prop]).getTime() ? '#D23F3A' : '#606266' |
| | | }" |
| | | >{{ scope.row[item.prop] }}</span |
| | | > |
| | | <div v-else-if="item.conversion"> |
| | | <p class="exceed_width">{{ item.getStatus(scope.row[item.prop]) }}</p> |
| | | </div> |
| | | <span |
| | | v-else-if="item.isClick && scope.row[item.prop]" |
| | | :class="item.className ? item.className : 'sel-name'" |
| | | @click="selCommonClick(scope.row)" |
| | | >{{ scope.row[item.prop] }}</span |
| | | > |
| | | <span v-else-if="item.propType == 'mulitple'"> |
| | | {{ scope.row[item.prop][item.propTwo] ? scope.row[item.prop][item.propTwo] : "--" }} |
| | | </span> |
| | | <span :class="item.className ? item.className : ''" v-else>{{ |
| | | scope.row[item.prop] ? scope.row[item.prop] : scope.row[item.prop] === 0 ? scope.row[item.prop] : "--" |
| | | }}</span> |
| | |
| | | </div> |
| | | </el-table> |
| | | <div class="overSpread1" v-show="iscolopen" @click="onMaskClick"></div> |
| | | <div class="styleBtn"> |
| | | <div v-if="showCheckcol" class="styleBtn"> |
| | | <i @click="checkcol()" class="label">...</i> |
| | | <el-checkbox-group v-model="showcolList" v-show="iscolopen" class="checkbox-group" @change="selCeckBoxList"> |
| | | <el-checkbox v-for="item in tableList.allcol" :label="item" :key="item">{{ item }} </el-checkbox> |
| | |
| | | export default { |
| | | name: "TableCommonView", |
| | | props: { |
| | | warehouseId:{ |
| | | type:Number, |
| | | default:0 |
| | | }, |
| | | tableList: { |
| | | type: Object, |
| | | default: () => { |
| | |
| | | showStyle: true, |
| | | tableInfomation: [], // 接口返回数据 |
| | | showcol: [], |
| | | countcol: [], |
| | | allcol: [], |
| | | highlight: false, |
| | | tableColumn: [ |
| | | // table表单 |
| | | { label: "", prop: "", min: 200, tooltip: true } |
| | | { label: "", prop: "", min: 200, tooltip: true, textAlign: "center" } |
| | | ] |
| | | } |
| | | }, |
| | |
| | | default: () => { |
| | | return {} |
| | | } |
| | | }, |
| | | showCheckcol: { |
| | | type: Boolean, |
| | | default: true |
| | | }, |
| | | showSummary: { |
| | | type: Boolean, |
| | | default: false |
| | | }, |
| | | // 列表不可选的数据 |
| | | selectBoxList: { |
| | | type: Array, |
| | | default: () => [] |
| | | }, |
| | | name:{ |
| | | type:String, |
| | | default:'' |
| | | } |
| | | }, |
| | | data() { |
| | |
| | | }, |
| | | // 单选行相关 |
| | | tableRowClassName({ row }) { |
| | | if (Object.keys(this.selectClassRow).length > 0) { |
| | | if (row.id == this.selectClassRow.id) { |
| | | return "onSelect" |
| | | if(this.$route.query.workType!=1){ |
| | | if(Object.keys(this.selectClassRow).length>0&&this.selectClassRow.location){ |
| | | if(this.selectClassRow.id==row.id&&this.selectClassRow.location.warehouseId==row.location.warehouseId&&row.location.name==this.selectClassRow.location.name){ |
| | | return "onSelect"; |
| | | } |
| | | } |
| | | } else{ |
| | | if (Object.keys(this.selectClassRow).length > 0) { |
| | | if (row.id == this.selectClassRow.id) { |
| | | return "onSelect" |
| | | } |
| | | } |
| | | } |
| | | } |
| | | this.$emit("tableRowClassName", row) |
| | | this.$emit("tableRowClassName", row); |
| | | }, |
| | | timeAgo(val) { |
| | | return timeago(val) |
| | | }, |
| | | //求和 |
| | | getSummaries(param) { |
| | | if (this.tableList.countcol && this.tableList.countcol.length > 0) { |
| | | const { columns, data } = param |
| | | const sums = [] |
| | | columns.forEach((column, index) => { |
| | | if (index === 0) { |
| | | sums[index] = " " |
| | | return |
| | | } |
| | | this.tableList.countcol.forEach((countcols) => { |
| | | if (column.label === countcols) { |
| | | const values = (data||[]).map((item) => Number(item[column.property])) |
| | | if (!values.every((value) => isNaN(value))) { |
| | | sums[index] = values.reduce((prev, curr) => { |
| | | const value = Number(curr) |
| | | if (!isNaN(value)) { |
| | | return prev + curr |
| | | } else { |
| | | return prev |
| | | } |
| | | }, 0) |
| | | let unitIndex = this.tableList.tableColumn.findIndex((obj) => obj.label === column.label) |
| | | sums[index] = this.tableList.tableColumn[unitIndex].unit + sums[index] |
| | | } else { |
| | | sums[index] = "" |
| | | } |
| | | } else { |
| | | return |
| | | } |
| | | }) |
| | | }) |
| | | return sums |
| | | } |
| | | }, |
| | | selectable(row) { |
| | | let prop='id' |
| | | if(this.name=='product'){ |
| | | prop='productId' |
| | | } |
| | | if(this.$route.query.workType!=1){ |
| | | const flag= this.selectBoxList.some(item=>{ |
| | | if(item.location){ |
| | | return item[prop]==row.id&&item.location.warehouseId==row.location.warehouseId&&item.location.name==row.location.name; |
| | | } |
| | | return false; |
| | | }) |
| | | return !flag; |
| | | }else{ |
| | | let list = (this.selectBoxList||[]).map((item) => item[prop]) |
| | | if (list.findIndex((v) => v == row.id) == -1) { |
| | | return true |
| | | } else { |
| | | return false |
| | | } |
| | | } |
| | | } |
| | | } |
| | | } |
| | |
| | | |
| | | <!-- Add "scoped" attribute to limit CSS to this component only --> |
| | | <style lang="scss" scoped> |
| | | .table_height { |
| | | height: 100%; |
| | | } |
| | | .el-table__body-wrapper { |
| | | height: 100%; |
| | | } |
| | | .table-view { |
| | | position: relative; |
| | | height: 100%; |
| | |
| | | .styleBtn { |
| | | position: absolute; |
| | | width: 30px; |
| | | height: 48px; |
| | | height: 35px; |
| | | // line-height: 26px; |
| | | background: #f1f3f8; |
| | | background: transparent; |
| | | border-top-right-radius: 8px; |
| | | top: 0px; |
| | | right: 2px; |
| | | // z-index: 9999; |
| | | display: flex; |
| | | align-items: center; |
| | | z-index: 9999; |
| | | .label { |
| | | position: absolute; |
| | | top: 12px; |
| | | top: 6px; |
| | | font-size: 20px; |
| | | cursor: pointer; |
| | | color: #000; |
| | |
| | | border-top-left-radius: 12px; |
| | | border-top-right-radius: 12px; |
| | | overflow: auto; |
| | | .exceed_width { |
| | | width: 100%; |
| | | white-space: nowrap; |
| | | overflow: hidden; |
| | | text-overflow: ellipsis; |
| | | } |
| | | } |
| | | } |
| | | |
| | | ::v-deep .el-table .cell { |
| | | font-size: 12px; |
| | | line-height: 17px; |
| | | font-family: PingFangSC; |
| | | color: rgba(0, 0, 0, 0.9); |
| | | .el-button--text { |
| | | width: auto; |
| | | height: auto; |
| | | font-family: PingFangSC-Medium, sans-serif; |
| | | } |
| | | } |
| | | ::v-deep .el-table .el-table__cell { |
| | | padding: 6px 0 !important; |
| | | height: 35px; |
| | | text-align: center; |
| | | } |
| | | |
| | | ::v-deep { |
| | | .el-table .cell .el-button--text.el-button--small { |
| | | padding: 4px 0; |
| | | } |
| | | .el-table .el-table__cell { |
| | | padding: 6px 0 !important; |
| | | height: 35px; |
| | | text-align: center; |
| | | } |
| | | .el-table__body-wrapper { |
| | | height: unset !important; |
| | | } |
| | | .el-table__cell.is-left { |
| | | text-align: left !important; |
| | | } |
| | | .el-table__cell.is-right { |
| | | text-align: right !important; |
| | | } |
| | | .el-table::before{ width: 0px; } |
| | | } |
| | | .overSpread1 { |
| | | width: 100%; |
| | | height: 100%; |
| | | position: fixed; |
| | | top: 0; |
| | | left: 0; |
| | | background: rgba(0, 0, 0, 0); |
| | | z-index: 10; |
| | | } |
| | | .el-table__cell { |
| | | text-align: unset !important; |
| | | } |
| | | </style> |