|
|
|
@ -1,71 +1,96 @@ |
|
|
|
<template> |
|
|
|
<div class="custom-table-wrapper"> |
|
|
|
<div class="custom-table-header"> |
|
|
|
<div class="custom-table-row"> |
|
|
|
<div v-for="(col, index) in columns" :key="index" class="custom-table-cell header-cell" |
|
|
|
:style="{ width: col.width ? col.width + 'px' : 'auto' }"> |
|
|
|
<div class="header-cell-content"> |
|
|
|
<div>{{ col.label }}</div> |
|
|
|
<template v-if="col.headerSelectKey && col.headerOptions&&showHeaderSelect"> |
|
|
|
<HandleFormItem type="select" class="header-select" :item="getHeaderItem(col)" |
|
|
|
v-model="headerSelectFields[col.headerSelectKey]" @change="onHeaderSelectChange(col, $event)" /> |
|
|
|
</template> |
|
|
|
<span v-else-if ="headerSelectFields[col.headerSelectKey]" class="fill-type-icon">({{ headerSelectFields[col.headerSelectKey] }})</span> |
|
|
|
<div> |
|
|
|
<div class="custom-table-wrapper"> |
|
|
|
<div class="custom-table-header"> |
|
|
|
<div class="custom-table-row"> |
|
|
|
<div v-for="(col, index) in columns" :key="index" class="custom-table-cell header-cell" |
|
|
|
:style="{ width: col.width ? col.width + 'px' : 'auto' }"> |
|
|
|
<div class="header-cell-content"> |
|
|
|
<div>{{ col.label }}</div> |
|
|
|
<template |
|
|
|
v-if="col.headerSelectKey && col.headerOptions && (showHeaderSelect || $store.state.template.templateStatus === 'preFill')"> |
|
|
|
<HandleFormItem type="select" class="header-select" :item="getHeaderItem(col)" |
|
|
|
v-model="headerSelectFields[col.headerSelectKey]" @change="onHeaderSelectChange(col, $event)" |
|
|
|
:error="hasError(-1, index, col.headerSelectKey)" |
|
|
|
@update:error="onErrorUpdate(-1, index, col.headerSelectKey, $event)" /> |
|
|
|
</template> |
|
|
|
<span v-else-if="headerSelectFields[col.headerSelectKey]" class="fill-type-icon">({{ |
|
|
|
headerSelectFields[col.headerSelectKey] }})</span> |
|
|
|
|
|
|
|
</div> |
|
|
|
</div> |
|
|
|
|
|
|
|
</div> |
|
|
|
<!-- 默认操作栏 --> |
|
|
|
<div class="custom-table-cell header-cell" :style="{ width: '180px' }" v-if="showOperation"> |
|
|
|
<div class="header-cell-content"> |
|
|
|
<div>操作</div> |
|
|
|
</div> |
|
|
|
<!-- 默认操作栏 --> |
|
|
|
<div class="custom-table-cell header-cell" :style="{ width: '180px' }" v-if="showOperation"> |
|
|
|
<div class="header-cell-content"> |
|
|
|
<div>操作</div> |
|
|
|
</div> |
|
|
|
</div> |
|
|
|
</div> |
|
|
|
</div> |
|
|
|
</div> |
|
|
|
|
|
|
|
<div class="custom-table-body"> |
|
|
|
<div v-for="(row, rowIndex) in localDataSource" :key="rowIndex" class="custometable-row"> |
|
|
|
<div v-for="(col, colIndex) in columns" :key="colIndex" class="custom-table-cell body-cell" |
|
|
|
:style="{ width: col.width ? col.width + 'px' : 'auto' }"> |
|
|
|
<div class="inner-table-cell"> |
|
|
|
<div> |
|
|
|
<template v-if="col.bodyType === 'input'"> |
|
|
|
<HandleFormItem type="input" @blur = "onBlur(rowIndex, col.prop, $event)" @copy = "onCopy(rowIndex, col)" class="body-input" :item="getBodyItem(col,rowIndex)" v-model="row[col.prop]" @change="onBodyValueChange(rowIndex, colIndex, $event)" :error="hasError(rowIndex, colIndex, col.prop)" @update:error="onErrorUpdate(rowIndex, colIndex, col.prop, $event)" /> |
|
|
|
</template> |
|
|
|
<template v-else-if="col.bodyType === 'inputNumber'"> |
|
|
|
<HandleFormItem type="inputNumber" @copy = "onCopy(rowIndex, col)" class="body-input-number" :item="getBodyItem(col,rowIndex)" |
|
|
|
v-model="row[col.prop]" @blur = "onBlur(rowIndex, col.prop, $event)" @change="onBodyValueChange(rowIndex, colIndex, $event)" :error="hasError(rowIndex, colIndex, col.prop)" @update:error="onErrorUpdate(rowIndex, colIndex, col.prop, $event)" /> |
|
|
|
</template> |
|
|
|
<template v-else-if="col.bodyType === 'select'"> |
|
|
|
<HandleFormItem type="select" class="body-select" @blur = "onBlur(rowIndex, col.prop, $event)" :item="getBodyItem(col,rowIndex)" v-model="row[col.prop]" @change="onBodyValueChange(rowIndex, colIndex, $event)" :error="hasError(rowIndex, colIndex, col.prop)" @update:error="onErrorUpdate(rowIndex, colIndex, col.prop, $event)" /> |
|
|
|
</template> |
|
|
|
<template v-else> |
|
|
|
{{ row[col.prop] }} |
|
|
|
</template> |
|
|
|
</div> |
|
|
|
<div class="m-l-5" v-if="col.showBodySub"> |
|
|
|
<template v-if="col.bodySubType === 'inputNumber'"> |
|
|
|
<HandleFormItem type="inputNumber" @blur = "onSubBlur(rowIndex, col.bodySubKey, $event)" @copy = "onCopy(rowIndex, col)" :item="getBodySubItem(col)" |
|
|
|
v-model="row[col.bodySubKey]" @change="onBodySubValueChange(rowIndex, colIndex, $event)" :error="hasError(rowIndex, colIndex, col.bodySubKey)" @update:error="onErrorUpdate(rowIndex, colIndex, col.bodySubKey, $event)" /> |
|
|
|
</template> |
|
|
|
<template v-else> |
|
|
|
{{ row[col.bodySubKey] }} |
|
|
|
</template> |
|
|
|
<div class="custom-table-body"> |
|
|
|
<div v-for="(row, rowIndex) in localDataSource" :key="rowIndex" class="custometable-row"> |
|
|
|
<div v-for="(col, colIndex) in columns" :key="colIndex" class="custom-table-cell body-cell" |
|
|
|
:style="{ width: col.width ? col.width + 'px' : 'auto' }"> |
|
|
|
<div class="inner-table-cell"> |
|
|
|
<div> |
|
|
|
<template v-if="col.bodyType === 'input'"> |
|
|
|
<HandleFormItem type="input" @blur="onBlur(rowIndex, col.prop, $event)" @copy="onCopy(rowIndex, col)" |
|
|
|
class="body-input" :item="getBodyItem(col, rowIndex)" v-model="row[col.prop]" |
|
|
|
@change="onBodyValueChange(rowIndex, colIndex, $event)" |
|
|
|
:error="hasError(rowIndex, colIndex, col.prop)" |
|
|
|
@update:error="onErrorUpdate(rowIndex, colIndex, col.prop, $event)" /> |
|
|
|
</template> |
|
|
|
<template v-else-if="col.bodyType === 'inputNumber'"> |
|
|
|
<HandleFormItem type="inputNumber" @copy="onCopy(rowIndex, col)" class="body-input-number" |
|
|
|
:item="getBodyItem(col, rowIndex)" v-model="row[col.prop]" @blur="onBlur(rowIndex, col.prop, $event)" |
|
|
|
@change="onBodyValueChange(rowIndex, colIndex, $event)" |
|
|
|
:error="hasError(rowIndex, colIndex, col.prop)" |
|
|
|
@update:error="onErrorUpdate(rowIndex, colIndex, col.prop, $event)" /> |
|
|
|
</template> |
|
|
|
<template v-else-if="col.bodyType === 'select'"> |
|
|
|
<HandleFormItem type="select" class="body-select" @blur="onBlur(rowIndex, col.prop, $event)" |
|
|
|
:item="getBodyItem(col, rowIndex)" v-model="row[col.prop]" |
|
|
|
@change="onBodyValueChange(rowIndex, colIndex, $event)" |
|
|
|
:error="hasError(rowIndex, colIndex, col.prop)" |
|
|
|
@update:error="onErrorUpdate(rowIndex, colIndex, col.prop, $event)" /> |
|
|
|
</template> |
|
|
|
<template v-else> |
|
|
|
{{ row[col.prop] }} |
|
|
|
</template> |
|
|
|
</div> |
|
|
|
<div class="m-l-5" v-if="col.showBodySub"> |
|
|
|
<template v-if="col.bodySubType === 'inputNumber'"> |
|
|
|
<HandleFormItem type="inputNumber" @blur="onSubBlur(rowIndex, col.bodySubKey, $event)" |
|
|
|
@copy="onCopy(rowIndex, col)" :item="getBodySubItem(col)" v-model="row[col.bodySubKey]" |
|
|
|
@change="onBodySubValueChange(rowIndex, colIndex, $event)" |
|
|
|
:error="hasError(rowIndex, colIndex, col.bodySubKey)" |
|
|
|
@update:error="onErrorUpdate(rowIndex, colIndex, col.bodySubKey, $event)" /> |
|
|
|
</template> |
|
|
|
<template v-else> |
|
|
|
{{ row[col.bodySubKey] }} |
|
|
|
</template> |
|
|
|
</div> |
|
|
|
</div> |
|
|
|
</div> |
|
|
|
</div> |
|
|
|
|
|
|
|
<!-- 默认操作栏 --> |
|
|
|
<div class="custom-table-cell body-cell" :style="{ width: '180px' }" v-if="showOperation"> |
|
|
|
<div class="inner-table-cell"> |
|
|
|
<slot name="operation" :row="row" :rowIndex="rowIndex" ></slot> |
|
|
|
|
|
|
|
<!-- 默认操作栏 --> |
|
|
|
<div class="custom-table-cell body-cell" :style="{ width: '180px' }" v-if="showOperation"> |
|
|
|
<div class="inner-table-cell"> |
|
|
|
<slot name="operation" :row="row" :rowIndex="rowIndex"></slot> |
|
|
|
</div> |
|
|
|
</div> |
|
|
|
</div> |
|
|
|
</div> |
|
|
|
<div v-if="localDataSource.length == 0"> |
|
|
|
<div class="no-data">暂无数据</div> |
|
|
|
</div> |
|
|
|
|
|
|
|
|
|
|
|
</div> |
|
|
|
<div v-if = "localDataSource.length==0"> |
|
|
|
<div class="no-data">暂无数据</div> |
|
|
|
<div class="add-row" v-if="isShowAddRos()"> |
|
|
|
<el-button type="primary" plain @click="addRow">添加行</el-button> |
|
|
|
</div> |
|
|
|
</div> |
|
|
|
</template> |
|
|
|
@ -81,6 +106,10 @@ export default { |
|
|
|
// 是否显示表头选择器 |
|
|
|
showHeaderSelect: { |
|
|
|
type: Boolean, |
|
|
|
default: false, |
|
|
|
}, |
|
|
|
showAddRow: { |
|
|
|
type: Boolean, |
|
|
|
default: true, |
|
|
|
}, |
|
|
|
// 是否显示操作栏 |
|
|
|
@ -99,7 +128,7 @@ export default { |
|
|
|
}, |
|
|
|
formData: { |
|
|
|
type: Object, |
|
|
|
default:()=>{ |
|
|
|
default: () => { |
|
|
|
return { |
|
|
|
stepTableFormData: [], |
|
|
|
headerSelectFields: {} |
|
|
|
@ -115,27 +144,34 @@ export default { |
|
|
|
} |
|
|
|
}, |
|
|
|
watch: { |
|
|
|
formData:{ |
|
|
|
formData: { |
|
|
|
immediate: true, |
|
|
|
handler(newData) { |
|
|
|
console.log(newData,"newData") |
|
|
|
const {stepTableFormData = [], headerSelectFields = {}} = newData; |
|
|
|
console.log(newData, "newData") |
|
|
|
const { stepTableFormData = [], headerSelectFields = {} } = newData; |
|
|
|
this.updateDataSource(stepTableFormData); |
|
|
|
this.headerSelectFields = JSON.parse(JSON.stringify(headerSelectFields)) |
|
|
|
} |
|
|
|
}, |
|
|
|
}, |
|
|
|
mounted() { |
|
|
|
this.initHeaderSelectValues(); |
|
|
|
// this.initHeaderSelectValues(); |
|
|
|
console.log(this.$store.state.template.templateStatus, "this.$store.state.template.templateStatus") |
|
|
|
}, |
|
|
|
methods: { |
|
|
|
isShowAddRos() { |
|
|
|
if(!this.showAddRow) { |
|
|
|
return false; |
|
|
|
} |
|
|
|
return this.$store.state.template.templateStatus === 'preFill'; |
|
|
|
}, |
|
|
|
// 复制值 |
|
|
|
onCopy(rowIndex, col){ |
|
|
|
|
|
|
|
if(col.copyFrom){ |
|
|
|
if(!this.localDataSource[rowIndex][col.copyFrom]){//没有值就不用复制了 |
|
|
|
return |
|
|
|
} |
|
|
|
onCopy(rowIndex, col) { |
|
|
|
|
|
|
|
if (col.copyFrom) { |
|
|
|
if (!this.localDataSource[rowIndex][col.copyFrom]) {//没有值就不用复制了 |
|
|
|
return |
|
|
|
} |
|
|
|
this.$set(this.localDataSource[rowIndex], col.prop, this.localDataSource[rowIndex][col.copyFrom]) |
|
|
|
} |
|
|
|
}, |
|
|
|
@ -143,7 +179,7 @@ export default { |
|
|
|
initHeaderSelectValues() { |
|
|
|
const headerSelectObj = {}; |
|
|
|
this.columns.map(col => { |
|
|
|
if(col.headerSelectKey){ |
|
|
|
if (col.headerSelectKey) { |
|
|
|
headerSelectObj[col.headerSelectKey] = col.defaultValue || col.headerOptions[0].value || "" |
|
|
|
} |
|
|
|
}); |
|
|
|
@ -152,18 +188,18 @@ export default { |
|
|
|
// 获取最新数据 |
|
|
|
getFormData() { |
|
|
|
// 合并表头选择器值到 columns |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// 数据校验 |
|
|
|
const validateResult = this.validateFormData(); |
|
|
|
return new Promise((resolve,reject)=>{ |
|
|
|
if(validateResult.valid){ |
|
|
|
return new Promise((resolve, reject) => { |
|
|
|
if (validateResult.valid) { |
|
|
|
resolve({ |
|
|
|
stepTableFormData: [...this.localDataSource], |
|
|
|
headerSelectFields: this.headerSelectFields, |
|
|
|
}) |
|
|
|
}else{ |
|
|
|
this.$message.error("表单内容未填完,请填写后再提交"); |
|
|
|
} else { |
|
|
|
// this.$message.error("表单内容未填完,请填写后再提交"); |
|
|
|
reject(validateResult.errors[0].error) |
|
|
|
} |
|
|
|
}) |
|
|
|
@ -173,10 +209,28 @@ export default { |
|
|
|
validateFormData() { |
|
|
|
const templateStatus = this.$store.state.template.templateStatus; |
|
|
|
const errors = []; |
|
|
|
|
|
|
|
|
|
|
|
// 清空之前的错误状态 |
|
|
|
this.formErrors = []; |
|
|
|
|
|
|
|
|
|
|
|
// 校验表头的 HandleFormItem |
|
|
|
this.columns.forEach((col, colIndex) => { |
|
|
|
if (col.headerSelectKey && col.headerOptions && col.fillType === templateStatus) { |
|
|
|
const headerValue = this.headerSelectFields[col.headerSelectKey]; |
|
|
|
if (this.isValueEmpty(headerValue)) { |
|
|
|
const errorItem = { |
|
|
|
rowIndex: -1, // 表头特殊标记 |
|
|
|
colIndex, |
|
|
|
field: col.headerSelectKey, |
|
|
|
label: col.label, |
|
|
|
error: `请选择${col.label}` |
|
|
|
}; |
|
|
|
errors.push(errorItem); |
|
|
|
this.formErrors.push(errorItem); |
|
|
|
} |
|
|
|
} |
|
|
|
}); |
|
|
|
|
|
|
|
// 遍历数据行 |
|
|
|
this.localDataSource.forEach((row, rowIndex) => { |
|
|
|
// 遍历列 |
|
|
|
@ -196,11 +250,11 @@ export default { |
|
|
|
errors.push(errorItem); |
|
|
|
this.formErrors.push(errorItem); |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
// 检查子字段(如果有) |
|
|
|
if (col.bodySubKey&& !col.bodySubDisabled) { |
|
|
|
if (col.bodySubKey && !col.bodySubDisabled) { |
|
|
|
const subValue = row[col.bodySubKey]; |
|
|
|
console.log(col,subValue,"subValue") |
|
|
|
console.log(col, subValue, "subValue") |
|
|
|
if (this.isValueEmpty(subValue)) { |
|
|
|
const errorItem = { |
|
|
|
rowIndex, |
|
|
|
@ -216,7 +270,7 @@ export default { |
|
|
|
} |
|
|
|
}); |
|
|
|
}); |
|
|
|
|
|
|
|
|
|
|
|
return { |
|
|
|
valid: errors.length === 0, |
|
|
|
errors: errors |
|
|
|
@ -238,15 +292,20 @@ export default { |
|
|
|
// 表头选择器变化 |
|
|
|
onHeaderSelectChange(col, value) { |
|
|
|
this.headerSelectFields[col.headerSelectKey] = value; |
|
|
|
// 输入时清除对应表单项的错误状态 |
|
|
|
this.formErrors = this.formErrors.filter(error => |
|
|
|
!(error.rowIndex === -1 && |
|
|
|
error.field === col.headerSelectKey) |
|
|
|
); |
|
|
|
}, |
|
|
|
// 表体值变化 |
|
|
|
onBodyValueChange(rowIndex, colIndex, value) { |
|
|
|
const col = this.columns[colIndex]; |
|
|
|
this.localDataSource[rowIndex][col.prop] = value; |
|
|
|
// 输入时清除对应表单项的错误状态 |
|
|
|
this.formErrors = this.formErrors.filter(error => |
|
|
|
!(error.rowIndex === rowIndex && |
|
|
|
error.colIndex === colIndex && |
|
|
|
this.formErrors = this.formErrors.filter(error => |
|
|
|
!(error.rowIndex === rowIndex && |
|
|
|
error.colIndex === colIndex && |
|
|
|
error.field === col.prop) |
|
|
|
); |
|
|
|
this.$emit('body-value-change', rowIndex, colIndex, value); |
|
|
|
@ -256,9 +315,9 @@ export default { |
|
|
|
const col = this.columns[colIndex]; |
|
|
|
this.localDataSource[rowIndex][col.bodySubKey] = value; |
|
|
|
// 输入时清除对应表单项的错误状态 |
|
|
|
this.formErrors = this.formErrors.filter(error => |
|
|
|
!(error.rowIndex === rowIndex && |
|
|
|
error.colIndex === colIndex && |
|
|
|
this.formErrors = this.formErrors.filter(error => |
|
|
|
!(error.rowIndex === rowIndex && |
|
|
|
error.colIndex === colIndex && |
|
|
|
error.field === col.bodySubKey) |
|
|
|
); |
|
|
|
this.$emit('body-sub-value-change', rowIndex, colIndex, value); |
|
|
|
@ -270,9 +329,9 @@ export default { |
|
|
|
label: "" |
|
|
|
} |
|
|
|
}, |
|
|
|
getBodyItem(col,rowIndex) { |
|
|
|
getBodyItem(col, rowIndex) { |
|
|
|
const currentItem = this.localDataSource[rowIndex]; |
|
|
|
const item = { |
|
|
|
const item = { |
|
|
|
fillType: col.bodyFillType, |
|
|
|
options: col.bodyOptions, |
|
|
|
maxlength: col.bodyMaxlength, |
|
|
|
@ -280,21 +339,21 @@ export default { |
|
|
|
precision: currentItem[col.bodyPrecisionKey] || col.precision || 0, |
|
|
|
copyFrom: col.copyFrom || "", |
|
|
|
}; |
|
|
|
if(col.bodyDisabled){ |
|
|
|
if (col.bodyDisabled) { |
|
|
|
item.disabled = col.bodyDisabled; |
|
|
|
} |
|
|
|
return item |
|
|
|
}, |
|
|
|
getBodySubItem(col) { |
|
|
|
const item = { |
|
|
|
const item = { |
|
|
|
fillType: col.bodySubFillType, |
|
|
|
options: col.bodySubOptions, |
|
|
|
maxlength: col.bodySubMaxlength || 10, |
|
|
|
label: "", |
|
|
|
placeholder:col.bodySubPlaceholder||"请输入", |
|
|
|
placeholder: col.bodySubPlaceholder || "请输入", |
|
|
|
precision: col.subPrecision || 0, |
|
|
|
} |
|
|
|
if(col.bodySubDisabled){ |
|
|
|
if (col.bodySubDisabled) { |
|
|
|
item.disabled = col.bodySubDisabled; |
|
|
|
} |
|
|
|
return item |
|
|
|
@ -310,42 +369,42 @@ export default { |
|
|
|
this.localDataSource = JSON.parse(JSON.stringify(dataSource || [])); |
|
|
|
}, |
|
|
|
// 添加行 |
|
|
|
addRow(row) { |
|
|
|
addRow(row = {}) { |
|
|
|
this.localDataSource.push(row); |
|
|
|
}, |
|
|
|
getDataSource(){ |
|
|
|
getDataSource() { |
|
|
|
return this.localDataSource; |
|
|
|
}, |
|
|
|
// 根据行索引更新数据 |
|
|
|
updateDataSourceByRowIndex(rowIndex,data){ |
|
|
|
this.localDataSource[rowIndex] = {...this.localDataSource[rowIndex],...data}; |
|
|
|
console.log(this.localDataSource,"this.localDataSource") |
|
|
|
updateDataSourceByRowIndex(rowIndex, data) { |
|
|
|
this.localDataSource[rowIndex] = { ...this.localDataSource[rowIndex], ...data }; |
|
|
|
console.log(this.localDataSource, "this.localDataSource") |
|
|
|
this.localDataSource = [...this.localDataSource]; |
|
|
|
}, |
|
|
|
// 判断表单项是否有错误 |
|
|
|
hasError(rowIndex, colIndex, field) { |
|
|
|
return this.formErrors.some(error => |
|
|
|
error.rowIndex === rowIndex && |
|
|
|
error.colIndex === colIndex && |
|
|
|
return this.formErrors.some(error => |
|
|
|
error.rowIndex === rowIndex && |
|
|
|
error.colIndex === colIndex && |
|
|
|
error.field === field |
|
|
|
); |
|
|
|
}, |
|
|
|
// 处理错误状态更新 |
|
|
|
onErrorUpdate(rowIndex, colIndex, field, isError) { |
|
|
|
if (!isError) { |
|
|
|
this.formErrors = this.formErrors.filter(error => |
|
|
|
!(error.rowIndex === rowIndex && |
|
|
|
error.colIndex === colIndex && |
|
|
|
this.formErrors = this.formErrors.filter(error => |
|
|
|
!(error.rowIndex === rowIndex && |
|
|
|
error.colIndex === colIndex && |
|
|
|
error.field === field) |
|
|
|
); |
|
|
|
} |
|
|
|
}, |
|
|
|
onSubBlur(rowIndex, colKey, value) { |
|
|
|
this.$emit("blur", {rowIndex, colKey, value,item:this.localDataSource[rowIndex]}); |
|
|
|
this.$emit("blur", { rowIndex, colKey, value, item: this.localDataSource[rowIndex] }); |
|
|
|
}, |
|
|
|
onBlur(rowIndex, colKey) { |
|
|
|
const value = this.localDataSource[rowIndex][colKey]; |
|
|
|
this.$emit("blur", {rowIndex, colKey, value,item:this.localDataSource[rowIndex]}); |
|
|
|
this.$emit("blur", { rowIndex, colKey, value, item: this.localDataSource[rowIndex] }); |
|
|
|
} |
|
|
|
} |
|
|
|
}; |
|
|
|
@ -361,17 +420,20 @@ export default { |
|
|
|
margin-top: 20px; |
|
|
|
} |
|
|
|
|
|
|
|
.inner-table-cell{ |
|
|
|
.inner-table-cell { |
|
|
|
display: flex; |
|
|
|
align-items: center; |
|
|
|
align-items: center; |
|
|
|
justify-content: center; |
|
|
|
} |
|
|
|
.m-l-5{ |
|
|
|
|
|
|
|
.m-l-5 { |
|
|
|
margin-left: 5px; |
|
|
|
} |
|
|
|
.sub-input-number{ |
|
|
|
|
|
|
|
.sub-input-number { |
|
|
|
width: 145px; |
|
|
|
.el-input-number--mini{ |
|
|
|
|
|
|
|
.el-input-number--mini { |
|
|
|
width: 145px; |
|
|
|
} |
|
|
|
} |
|
|
|
@ -406,6 +468,7 @@ export default { |
|
|
|
display: table; |
|
|
|
width: 100%; |
|
|
|
table-layout: fixed; |
|
|
|
|
|
|
|
&:not(:last-child) { |
|
|
|
border-bottom: 1px solid #ebeef5; |
|
|
|
} |
|
|
|
@ -473,9 +536,17 @@ export default { |
|
|
|
width: 100px; |
|
|
|
margin-left: 5px; |
|
|
|
} |
|
|
|
.no-data{ |
|
|
|
|
|
|
|
.no-data { |
|
|
|
text-align: center; |
|
|
|
padding: 20px 0; |
|
|
|
color: rgb(144, 147, 153) |
|
|
|
} |
|
|
|
|
|
|
|
.add-row { |
|
|
|
display: flex; |
|
|
|
justify-content: center; |
|
|
|
padding: 20px 0; |
|
|
|
margin-top: 20px; |
|
|
|
} |
|
|
|
</style> |