You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
tanghe-report/report-ui/src/components/AnjiPlus/anji-crud/anji-crud.vue

1180 lines
37 KiB
Vue

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

<template>
<div :class="[hasTreeFieldInQueryForm ? 'page-container' : 'app-container']">
<div v-if="hasTreeFieldInQueryForm" class="left-container">
<AnjiTree
ref="queryFormTree"
v-model.trim="queryParams[queryFormTreeField.field]"
:is-open="queryFormTreeField.anjiTreeOption.isOpen"
:enable-filter="queryFormTreeField.anjiTreeOption.enableFilter"
:label-name="queryFormTreeField.label"
:url="queryFormTreeField.anjiTreeOption.url"
@node-click="handleTreeNodeCheck"
/>
</div>
<div class="right-container">
<div class="top_part">
<!-- 查询表单开始 -->
<el-form
v-if="queryFormTreeHide == false"
ref="formSearch"
:model="queryParams"
label-width="100px"
style="border-bottom: 1px solid #dbdde3; margin-bottom: 10px"
>
<div class="screenFlex">
<div class="searchFormFlex">
<el-row>
<template v-for="(item, index) in queryFormFieldExcludeTree">
<el-col
v-if="index < 3 || queryParams.showMoreSearch"
:key="item.field"
:span="8"
>
<el-form-item
:label="item.label"
:rules="item.rules"
:prop="item.field"
>
<!-- 输入框 -->
<el-input
v-if="
item.inputType == 'input' ||
item.inputType == 'input-number'
"
v-model.trim="queryParams[item.field]"
:placeholder="item.placeholder || '请输入'"
:clearable="item.clearable !== false"
:disabled="item.disabled"
@change="value => queryFormChange(item.field, value)"
/>
<!-- 开关 -->
<el-switch
v-else-if="item.inputType == 'switch'"
v-model.trim="queryParams[item.field]"
:disabled="item.disabled"
:active-value="item.switchOption.disableValue"
:inactive-value="item.switchOption.enableValue"
active-color="#5887fb"
inactive-color="#ccc"
@change="value => queryFormChange(item.field, value)"
/>
<!-- 下拉框 -->
<anji-select
v-else-if="item.inputType == 'anji-select'"
v-model.trim="queryParams[item.field]"
:multiple="item.anjiSelectOption.multiple"
:dict-code="item.anjiSelectOption.dictCode"
:url="item.anjiSelectOption.url"
:method="item.anjiSelectOption.method"
:query-param="item.anjiSelectOption.queryParam"
:option="item.anjiSelectOption.option"
:label="item.anjiSelectOption.label"
:disabled-options="
item.anjiSelectOption.disabledOptions
"
:disabled="item.disabled"
:merge-label="item.anjiSelectOption.mergeLabel"
:local-options="item.anjiSelectOption.localOptions"
@change="value => queryFormChange(item.field, value)"
/>
<!-- 日期时间框 -->
<el-date-picker
v-else-if="item.inputType.indexOf('date') >= 0"
v-model="queryParams[item.field]"
style="width: 100%"
:placeholder="item.placeholder || '请选择'"
:type="item.inputType"
:format="item.format"
:value-format="item.valueFormat"
:clearable="item.clearable !== false"
@change="value => queryFormChange(item.field, value)"
/>
<anji-cascader
v-else-if="item.inputType == 'anji-cascader'"
v-model.trim="queryParams[item.field]"
:disabled="item.disabled"
:single-display="item.anjiCascader.singleDisplay"
:url="item.anjiCascader.url"
@change="
value => queryFormChange(item.field, value, null)
"
/>
<!-- 待扩展的表单类型,请自行扩展 -->
<el-input
v-else
placeholder="组件不支持此类型表单请至组件内部自行扩展"
disabled
/>
</el-form-item>
</el-col>
</template>
</el-row>
</div>
<div class="screenButtons">
<el-button
v-if="queryFormFieldExcludeTree.length > 3"
class="button"
size="mini"
plain
@click="handleToggleMoreSearch"
>
<i
:class="
queryParams.showMoreSearch
? 'el-icon-arrow-up'
: 'el-icon-arrow-down'
"
/>
{{ queryParams.showMoreSearch == true ? "展开" : "收起" }}
</el-button>
<el-button
class="button"
size="mini"
plain
@click="handleResetForm()"
>重置</el-button
>
<el-button
class="button"
size="mini"
type="primary"
@click="handleQueryForm('query')"
>查询</el-button
>
</div>
</div>
</el-form>
<!-- 查询表单结束 -->
<!-- 批量操作 -->
<template v-if="!option.tableButtons">
<div style="padding-bottom: 8px">
<slot name="buttonLeftOnTable" :selection="checkRecords" />
<el-button
v-if="
option.buttons.add.isShow == undefined
? true
: option.buttons.add.isShow
"
v-permission="option.buttons.add.permission"
class="button"
plain
icon="el-icon-plus"
@click="handleOpenEditView('add')"
>新增</el-button
>
<el-button
v-if="
option.buttons.delete.isShow == undefined
? true
: option.buttons.delete.isShow
"
v-permission="option.buttons.delete.permission"
class="button"
plain
:disabled="disableBatchDelete"
type="danger"
icon="el-icon-delete"
@click="handleDeleteBatch()"
>删除</el-button
>
<slot name="buttonRightOnTable" :selection="checkRecords" />
</div>
</template>
<template v-else>
<div style="padding-bottom: 8px">
<slot name="tableButtons" :selection="checkRecords" />
<el-button
v-for="(item, index) in option.tableButtons"
:key="index"
v-permission="item.permission"
class="tableButton"
:plain="item.plain"
:icon="item.icon"
:type="item.type"
:disabled="isDisabledButton(item, checkRecords)"
@click="item.click(checkRecords)"
>{{ handlegetLable(checkRecords, item.label) }}</el-button
>
</div>
</template>
</div>
<!-- 表格开始 -->
<div class="main_part">
<div class="page_main">
<el-table
ref="tables"
class="elTable"
align="center"
:data="records"
:row-class-name="tableRowClassName"
border
@selection-change="handleSelectionChange"
@sort-change="handleSortChange"
@row-dblclick="handleSelectionDblclick"
@row-contextmenu="rowContextMenu"
>
<!--多选-->
<el-table-column fixed type="selection" width="50" align="center" />
<!--隐藏列-->
<el-table-column v-if="tableExpandColumns.length > 0" type="expand">
<template slot-scope="scope">
<p
v-for="item in tableExpandColumns"
:key="item.field"
class="table-expand-item"
>
<span class="titel"> {{ item.label }}: </span>
<span>{{ scope.row[item.field] }}</span>
</p>
</template>
</el-table-column>
<!--序号-->
<el-table-column label="序号" min-width="50" align="center">
<template slot-scope="scope">
{{
queryParams.pageSize * (queryParams.pageNumber - 1) +
scope.$index +
1
}}
</template>
</el-table-column>
<template v-for="(item, index) in option.columns">
<el-table-column
v-if="item.tableHide != true && item.columnType != 'expand'"
:key="index"
:prop="item.field"
:label="fieldLabel(item)"
:min-width="item.minWidth || 110"
:sortable="item.sortable"
:show-overflow-tooltip="true"
align="center"
>
<template slot-scope="scope">
<div v-if="item.columnType == 'imgPreview'">
<!-- 图片缩略图-->
<el-image
style="width: 25%; height: 50%"
fit="contain"
:src="scope.row[item.field]"
:preview-src-list="[scope.row[item.field]]"
/>
</div>
<div v-else>
<span v-if="item.inputType == 'switch' && !item.colorStyle">
<el-switch
v-model.trim="scope.row[item.field]"
:active-value="1"
:inactive-value="0"
active-color="#5887fb"
inactive-color="#ccc"
@change="switchChange(scope.row, item.switchOption)"
/>
</span>
<!-- 带单位 -->
<span v-else-if="item.inputType == 'anji-input'">{{
fieldValueByAnjiInput(scope.row[item.field], item)
}}</span>
<!--表格 a 合并 b上-->
<span v-else-if="item.mergeColumn"
>{{ scope.row[item.field] }}({{
scope.row[item.mergeColumn]
}})</span
>
<!-- 没有单位 -->
<span
v-else-if="item.colorStyle"
:class="item.colorStyle[scope.row[item.editField]]"
>{{ fieldValueByRowRenderer(scope.row, item) }}</span
>
<span v-else>{{
fieldValueByRowRenderer(scope.row, item)
}}</span>
</div>
</template>
</el-table-column>
</template>
<!--操作栏-->
<el-table-column
align="center"
fixed="right"
label="操作"
:width="option.buttons.rowButtonsWidth || 100"
>
<!-- 插槽 -->
<template slot-scope="scope">
<template v-if="!option.rowButtons">
<slot name="rowButton" :msg="scope.row" />
<el-button
v-if="
option.buttons.edit.isShow == undefined
? true
: option.buttons.edit.isShow
"
type="text"
size="small"
@click="handleOpenEditView('edit', scope.row)"
>编辑</el-button
>
<el-button
v-if="
hasCustomButtonInRowMore == false &&
option.buttons.delete.isShow == undefined
? true
: option.buttons.edit.isShow
"
type="text"
size="small"
@click="handleDeleteBatch(scope.row)"
>删除</el-button
>
<el-dropdown v-if="hasCustomButtonInRowMore" trigger="click">
<span class="el-dropdown-link"
>更多<i class="el-icon-caret-bottom el-icon--right" />
</span>
<el-dropdown-menu slot="dropdown">
<el-dropdown-item class="clearfix">
<slot name="rowButtonInMore" :msg="scope.row" />
<el-button
v-if="
option.buttons.delete.isShow == undefined
? true
: option.buttons.edit.isShow
"
type="text"
size="small"
@click="handleDeleteBatch(scope.row)"
>删除</el-button
>
</el-dropdown-item>
</el-dropdown-menu>
</el-dropdown>
</template>
<template v-else>
<div v-if="option.rowButtons.length <= 2">
<el-button
v-for="(item, index) in option.rowButtons"
:key="index"
v-permission="item.permission"
:disabled="isDisabledButton(item, scope.row)"
:type="item.type || 'text'"
size="small"
@click="item.click(scope.row)"
>{{ handlegetLable(scope.row, item.label) }}</el-button
>
</div>
<div v-else>
<el-button
v-permission="option.rowButtons[0].permission"
:type="option.rowButtons[0].type || 'text'"
:disabled="
isDisabledButton(option.rowButtons[0], scope.row)
"
@click="option.rowButtons[0].click(scope.row)"
>{{
handlegetLable(scope.row, option.rowButtons[0].label)
}}</el-button
>
<el-dropdown trigger="click">
<span class="el-dropdown-link">
更多
<i class="el-icon-caret-bottom el-icon--right" />
</span>
<el-dropdown-menu slot="dropdown">
<el-dropdown-item class="clearfix">
<el-button
v-for="(item, index) in option.rowButtons.filter(
(el, index) => index > 0
)"
:key="index"
v-permission="item.permission"
:type="item.type || 'text'"
:disabled="isDisabledButton(item, scope.row)"
size="small"
@click="item.click(scope.row)"
>{{
handlegetLable(scope.row, item.label)
}}</el-button
>
</el-dropdown-item>
</el-dropdown-menu>
</el-dropdown>
</div>
</template>
</template>
</el-table-column>
</el-table>
<div class="page_bottom">
<div class="pagination">
<div>
<slot name="tableSelectionBtn" :selection="checkRecords" />
</div>
<el-pagination
v-show="total > 0"
background
:current-page.sync="queryParams.pageNumber"
:page-sizes="$pageSizeAll"
:page-size="queryParams.pageSize"
layout="total, prev, pager, next, jumper, sizes"
:total="total"
@size-change="handleSizeChange"
@current-change="handleCurrentChange"
/>
</div>
</div>
</div>
</div>
<!-- 表格结束 -->
<EditDialog
ref="edit"
:submit-detail-data="option.submitDetailData"
:handle-detail-data="option.handleDetailData"
:option="option"
:model-type="editDialogModelType"
:visible="editDialogOpen"
:row-data="editDialogRowData"
@closeEvent="editDialogClosedEvent"
>
<template v-slot:customCard>
<slot name="cardInEditPage" />
</template>
<template slot="editBtn" slot-scope="scope">
<slot name="editBtnPage" :rowData="scope" />
</template>
</EditDialog>
</div>
<slot name="pageSection" />
<!-- 右键菜单 -->
<anji-contextMenu
:visible.sync="isShowRowContextMenu"
:style-obj="contextMenuConfigStyle"
>
<div
v-for="(item, index) in option.contextMenu"
:key="index"
class="contextMenu"
>
<el-button
type="text"
:disabled="item.disabled"
class="contextMenuItem"
@click="handleContextMenuItem(item)"
>{{ item.label }}</el-button
>
</div>
</anji-contextMenu>
</div>
</template>
<script>
import AnjiTree from "@/components/AnjiPlus/anji-tree.vue";
import EditDialog from "./edit";
import request from "@/utils/request";
import anjiContextMenu from "@/components/AnjiPlus/anji-contextMenu";
export default {
components: {
EditDialog,
AnjiTree,
anjiContextMenu
},
props: {
option: {
require: true,
type: Object,
default: () => {
return {
formHeight: this.$refs.formSearch.$el.offsetHeight,
// 详情页中输入框左边文字宽度
labelWidth: "120px",
// 查询区隐藏
queryFormHide: false,
// 查询表单条件
queryFormFields: [],
// 按钮
buttons: {
query: {},
edit: {},
delete: {},
add: {}
},
// 表格列
columns: [],
queryFormChange: (fileName, val) => {}
};
}
}
},
data() {
return {
// 查询表单提交的值
queryParams: {
showMoreSearch: false, // 是否展开更多搜索条件
pageNumber: 1,
pageSize: 10,
order: "",
sort: ""
},
checkRecords: [], // 表格中当前选中的记录
records: [], // 接口返回的记录列表
total: 0, // 接口返回的总条数
// 编辑详情弹框
editDialogOpen: false, // 新建时主动打开编辑弹框
editDialogRowData: {}, // 编辑时的主键
editDialogModelType: "view", // 编辑 查看
hasCustomButtonInRowMore: false, // 除了编辑删除外,还有自定义的行按钮
isShowRowContextMenu: false,
contextMenuConfigStyle: {},
contextMenuRow: {}
};
},
computed: {
// 查询区隐藏
queryFormTreeHide() {
const flag =
this.option.queryFormHide != null && this.option.queryFormHide == true;
return flag;
},
// 左侧树形查询条件
queryFormTreeField() {
const treeField = this.option.queryFormFields.find(
item => item["inputType"] == "anji-tree"
);
return treeField;
},
// 查询条件里是否有树形控件
hasTreeFieldInQueryForm() {
return this.isNotBlank(this.queryFormTreeField);
},
// 不包含树形控件的查询条件
queryFormFieldExcludeTree() {
let treeFields = this.option.queryFormFields.filter(
item => item["inputType"] != "anji-tree"
);
return treeFields;
},
// 主键的列名
primaryKeyFieldName() {
let primaryKey = this.option.columns.find(
item => item["primaryKey"] == true
);
if (primaryKey != null) {
return primaryKey["field"];
} else {
return null;
}
},
// 表格中可展开的列
tableExpandColumns() {
let expandColumns = this.option.columns.filter(
item => item["columnType"] == "expand"
);
return expandColumns;
},
// 是否可以批量删除
disableBatchDelete() {
return this.checkRecords.length <= 0;
}
},
created() {
// 为查询框中所有input加上默认值
this.option.queryFormFields.forEach(item => {
// 动态添加属性
this.$set(this.queryParams, item.field, item.defaultValue || null);
});
// 查询列表
if (this.option.skipQuery || this.option.skipQuery == undefined) {
this.handleQueryForm("query");
}
this.queryFormChange();
},
mounted() {
if (this.$scopedSlots["rowButtonInMore"] != null) {
this.hasCustomButtonInRowMore = true;
} else {
this.hasCustomButtonInRowMore = false;
}
console.log(`是否有自定义行按钮: ${this.hasCustomButtonInRowMore}`);
},
methods: {
queryFormFieldSpan(item) {
if (item.span != null) {
return item.span;
} else {
return 6;
}
},
// 切换更多搜索条件
handleToggleMoreSearch() {
this.queryParams.showMoreSearch = !this.queryParams.showMoreSearch;
},
// 列上排序切换
handleSortChange(column) {
// {column: {…}, prop: "orgCode", order: "ascending"}
if (column == null || column.prop == null) {
console.warn("排序字段名prop为空无法排序");
return;
}
let sort = column.prop; // 列表查询默认排序列
let order = column.order == "ascending" ? "ASC" : "DESC";
this.queryParams["sort"] = sort;
this.queryParams["order"] = order;
this.handleQueryForm("query");
},
// 查询按钮
handleQueryForm(from) {
// 如果是点查询按钮,把树的查询属性去掉
if (from == "query") {
if (this.hasTreeFieldInQueryForm) {
delete this.queryParams[this.queryFormTreeField.field];
}
}
// 如果是点树查询,把查询区里的属性去掉
if (from == "tree") {
if (this.hasTreeFieldInQueryForm) {
let treeVal = this.queryParams[this.queryFormTreeField.field];
this.queryParams = {
showMoreSearch: false,
pageNumber: 1,
pageSize: 10
};
this.queryParams[this.queryFormTreeField.field] = treeVal;
}
}
// 默认的排序
if (
this.isBlank(this.queryParams["order"]) &&
this.isNotBlank(this.option.buttons.query.order)
) {
this.queryParams["sort"] = this.option.buttons.query.sort;
this.queryParams["order"] = this.option.buttons.query.order;
}
this.queryParams.pageNumber = 1;
// 添加一些其他的查询参数
if (this.option.buttons.query.params) {
const params = this.option.buttons.query.params;
for (const key in params) {
this.queryParams[key] = params[key];
}
}
this.handleQueryPageList();
},
// 外部追加参数进来
handleAddQueryParams(k, v) {
this.queryParams[k] = v;
},
// 列表查询
async handleQueryPageList() {
// 将特殊参数值urlcode处理
let params = this.urlEncodeObject(this.queryParams, "order,sort");
const { data, code } = await this.option.buttons.query.api(params);
if (code != "200") return;
this.records = data.records;
this.total = data.total;
},
// 重置
handleResetForm() {
const showMoreSearch = this.queryParams.showMoreSearch;
this.queryParams = {
order: "",
sort: "",
pageNumber: 1,
pageSize: 10,
showMoreSearch
};
// 查询条件表单只读模式下不重置默认值
const queryFormFieldsOption = this.option.queryFormFields;
queryFormFieldsOption.forEach(el => {
if (el.disabled) {
this.queryParams[el.field] = el.defaultValue;
}
});
},
// 树形查询条件点击回调
handleTreeNodeCheck() {
this.handleQueryForm("tree");
// 为新建页面的对应属性值,绑定上对应的默认值
let treeFieldName = this.queryFormTreeField["field"];
for (let i = 0; i < this.option.columns.length; i++) {
let item = this.option.columns[i];
if (
item["editField"] == treeFieldName ||
item["field"] == treeFieldName
) {
this.$set(
this.option.columns[i],
"defaultValue",
this.queryParams[treeFieldName]
);
break;
}
}
},
// 编辑和查看操作
handleOpenEditView(modelType, row) {
if (modelType == "view" || modelType == "edit") {
this.editDialogRowData = row;
}
this.editDialogModelType = modelType;
if (modelType == "add") {
// 新增模式,不需要查询数据详情,直接打开
this.editDialogOpen = true;
}
const obj = {
type: modelType,
value: row
};
this.$emit("handleCustomValue", obj);
},
handlegetLable(item, label) {
if (typeof label == "function") {
return label(item);
} else {
return label;
}
},
// 是否disabled
isDisabledButton(item, row) {
if (typeof item.isDisable === "function") {
return item.isDisable(row);
} else {
return !!item.disabled;
}
},
// 弹框被关闭时的回调事件
editDialogClosedEvent(value) {
// 把列表页中弹框打开标记改成已关闭
this.editDialogOpen = false;
// 关闭弹出框时,如果有树,刷新下
if (
this.hasTreeFieldInQueryForm &&
this.$refs.queryFormTree != null &&
!value
) {
this.$refs.queryFormTree.queryData();
}
this.$emit("handleCustomClose");
this.handleQueryPageList();
// 关闭时 清空表单的验证规则
this.$refs.edit.$refs.mainForm.$refs.editForm.resetFields();
},
// 批量删除
handleDeleteBatch(row) {
let ids = [];
if (row != null) {
ids.push(row[this.primaryKeyFieldName]); // 删除指定的行
} else {
// 批量删除选中的行
ids = this.checkRecords.map(item => item[this.primaryKeyFieldName]);
}
this.$confirm("删除确认", "确认要删除吗?", {
type: "warning",
confirmButtonClass: "delete_sure",
cancelButtonClass: "el-button--danger is-plain"
})
.then(() => {
this.option.buttons.delete.api(ids).then(res => {
// {code: "200", message: "操作成功", data: true}
this.checkRecords = [];
// 关闭弹出框时,如果有树,刷新下
if (
this.hasTreeFieldInQueryForm &&
this.$refs.queryFormTree != null
) {
this.$refs.queryFormTree.queryData();
}
this.handleQueryPageList();
});
})
.catch(e => {
e;
});
},
// 选择项改变时
handleSelectionChange(val) {
if (val.length > 0) {
val.forEach(el => {
this.records.forEach(ev => {
if (el.id == ev.id) {
ev.dblClickFlag = true;
ev.bgColor = true;
}
});
});
} else {
this.records.forEach(ev => {
ev.dblClickFlag = false;
ev.bgColor = false;
});
}
this.isShowRowContextMenu = false;
this.checkRecords = val;
},
// 双击
handleSelectionDblclick(row) {
row.dblClickFlag = !row.dblClickFlag;
row.bgColor = row.dblClickFlag;
this.$refs.tables.toggleRowSelection(row, row.dblClickFlag);
},
// 右键
rowContextMenu(row, column, event) {
event.preventDefault();
this.option.contextMenu.forEach(el => {
if (el.flag == "all") {
el.disabled = !(this.checkRecords.length > 1);
} else {
el.disabled = this.checkRecords.length > 1;
}
});
// 设置右键位置
this.contextMenuConfigStyle = {
left: event.clientX + "px",
top: event.clientY + "px",
display: "block"
};
// 获取当前右键行数据
this.contextMenuRow = row;
// 获取我们自定义的右键菜单
this.isShowRowContextMenu = true;
},
handleContextMenuItem(item) {
if (item.flag == "all") {
item.click({ selection: this.checkRecords });
} else {
item.click({ msg: this.contextMenuRow });
}
},
// 页码改变
handleCurrentChange(pageNumber) {
this.queryParams.pageNumber = pageNumber;
this.handleQueryPageList();
},
// 每页size改变时
handleSizeChange(val) {
this.queryParams.pageNumber = 1;
this.queryParams.pageSize = val;
this.handleQueryPageList();
},
// 带单位的列,需要转换
fieldLabel(columnConfig) {
let objUnitText = "";
const localStorageUnit = this.getSettingByName("unit_conversion");
const objUnit = {};
for (const key in localStorageUnit) {
columnConfig.anjiInput &&
key
.toLowerCase()
.indexOf(columnConfig.anjiInput.unit.toLowerCase()) != -1 &&
(objUnit[key] = localStorageUnit[key]);
}
for (const key in objUnit) {
key.toLowerCase().indexOf("text") != -1 && (objUnitText = objUnit[key]);
}
if (columnConfig == null) {
return "";
}
if (
columnConfig.inputType == "anji-input" &&
columnConfig.anjiInput != null
) {
return columnConfig.anjiInput["defaultUnit"] == undefined
? `${columnConfig.label}(${objUnitText})`
: `${columnConfig.label}(${columnConfig.anjiInput["defaultUnit"]})`;
} else {
return columnConfig.label;
}
},
// 带单位的输入框
fieldValueByAnjiInput(value, columnConfig) {
const localStorageUnit = this.getSettingByName("unit_conversion");
let objUnitConversion = "";
let objUnitKeepPoint = "";
let objUnitConversionRadioGroup = [];
const objUnit = {};
for (const key in localStorageUnit) {
columnConfig.anjiInput &&
key
.toLowerCase()
.indexOf(columnConfig.anjiInput.unit.toLowerCase()) != -1 &&
(objUnit[key] = localStorageUnit[key]);
}
for (const key in objUnit) {
key.toLowerCase().indexOf("conversion") != -1 &&
key.toLowerCase().indexOf("conversiontext") == -1 &&
key.toLowerCase().indexOf("conversionradiogroup") == -1 &&
(objUnitConversion = objUnit[key]);
key.toLowerCase().indexOf("keeppoint") != -1 &&
(objUnitKeepPoint = objUnit[key]);
Array.isArray(objUnit[key]) &&
(objUnitConversionRadioGroup = objUnit[key]);
}
if (columnConfig == null) {
return value;
}
if (
columnConfig.inputType == "anji-input" &&
columnConfig.anjiInput != null
) {
if (columnConfig.anjiInput["defaultUnit"] == undefined) {
// 不存在
return (value / objUnitConversion).toFixed(objUnitKeepPoint || 2);
} else {
const coversion = objUnitConversionRadioGroup.find(
item => item.label == columnConfig.anjiInput["defaultUnit"]
)["value"];
return (value / coversion).toFixed(objUnitKeepPoint || 2);
}
} else {
return value;
}
},
// 带表格列格式化的值
fieldValueByRowRenderer(row, columnConfig) {
if (
columnConfig == null ||
typeof columnConfig.fieldTableRowRenderer != "function"
) {
return row[columnConfig.field];
} else {
return columnConfig.fieldTableRowRenderer(row);
}
},
// 暴露给外部crud页面回传saveForm的值
getMainEntity() {
return this.$refs.edit.getSaveForm();
},
setMainEntity(object) {
this.$refs.edit.setSaveForm(object);
},
async switchChange(val, api) {
request({
url: api.url,
method: "put",
headers: { noPrompt: false },
data: [val.id]
}).then(response => {
this.handleQueryPageList();
});
},
queryFormChange(fileName, fieldVal) {
if (typeof this.option.queryFormChange == "function") {
this.option.queryFormChange(this.queryParams, fileName, fieldVal);
}
},
// 给表格某行改变颜色
tableRowClassName({ row, rowIndex }) {
if ((row.urgentFlag || row.tableRow) && !row.bgColor) {
return "warning-row";
} else if ((row.urgentFlag || row.tableRow) && row.bgColor) {
return "warning-row bgColor";
} else if ((!row.urgentFlag || !row.tableRow) && row.bgColor) {
return "bgColor";
}
if ((rowIndex + 1) % 2 === 0) {
return "success-row";
}
}
}
};
</script>
<style scoped lang="scss">
.right-container {
display: flex;
flex: 1;
flex-direction: column;
.main_part {
display: flex;
flex-direction: column;
flex: 1;
background: #fff;
border-radius: 4px;
padding: 12px 20px 12px;
margin-top: 4px;
height: 100%;
position: relative;
}
}
/deep/.button {
box-shadow: 0 0 6px 0 rgba(0, 0, 0, 0.08);
border-radius: 6px;
}
/deep/.el-table th > .cell {
text-align: center;
}
/deep/.el-table .cell {
text-align: center;
}
/deep/.elTable {
margin: 10px 0 50px;
}
.el-table {
// 看这里!!!
// 深度选择器去除默认的padding
/deep/ th {
padding: 0;
height: 36px;
}
/deep/ td {
padding: 0;
height: 36px;
}
}
/deep/.el-table--striped .el-table__body tr.el-table__row--striped td {
background: #f9fbfd;
}
.screenFlex {
display: flex;
}
.searchFormFlex {
flex: 1;
}
.screenButtons {
padding-left: 20px;
}
.style-btn {
pointer-events: none;
}
.page-container {
height: 100%;
position: relative;
.left-container {
width: 20%;
position: absolute;
top: 0;
left: 0;
background: #fff;
border-radius: 4px 0px 0px 4px;
padding: 20px 20px 0;
overflow: hidden;
overflow-y: auto;
height: 100%;
}
.right-container {
width: calc(80% - 5px);
position: absolute;
top: 0;
right: 0;
background: #fff;
border-radius: 0px 4px 4px 0px;
padding: 20px 20px 0;
height: 100%;
}
}
.el-table .cell,
.el-table td div {
overflow: hidden;
text-overflow: ellipsis;
}
.el-dropdown {
font-size: 12px;
display: inline;
color: #5887fb;
cursor: pointer;
}
.el-dropdown-menu--mini .el-dropdown-menu__item {
min-width: 80px;
max-width: 110px;
float: right;
.el-button--text {
float: right;
}
&:hover {
background: none !important;
}
/deep/.el-button--text:hover,
.el-button--text:focus {
color: #799ffc !important;
background-color: #ecf5ff !important;
border-color: transparent;
}
.el-button--mini {
float: right;
}
.el-button--text:hover,
.el-button--text:focus {
color: #799ffc;
border-color: transparent;
}
.el-button + .el-button {
margin-left: 0 !important;
float: right;
}
}
/deep/.el-pagination.is-background .btn-prev,
.el-pagination.is-background .btn-next,
.el-pagination.is-background .el-pager li {
margin: 0 5px;
border-radius: 2px;
background-color: #f4f4f5;
color: #606266;
min-width: 30px;
border-radius: 2px;
}
/deep/.el-pagination.is-background .el-pager li:not(.disabled).active {
background-color: #5887fb;
color: #ffffff;
border-radius: 4px;
}
.page_bottom {
width: 100%;
position: absolute;
bottom: 0;
}
.pagination {
display: flex;
flex-direction: row;
justify-content: space-between;
margin-bottom: 14px;
margin-right: 20px;
}
.el-table /deep/ .warning-row {
color: red !important;
}
.el-table /deep/ .bgColor {
background: #d9ecff;
}
/deep/.edit_button {
width: 22px;
height: 22px;
padding: 0;
margin: 0;
margin-right: 5px;
/deep/ i {
font-size: 30px;
}
}
.el-form-item--mini.el-form-item {
margin-bottom: 12px;
}
.el-table /deep/ .success-row {
background: #f9fbfd !important;
}
.contextMenu {
width: 100px;
.contextMenuItem {
width: 100%;
font-size: 12px;
line-height: 20px;
padding: 5px;
}
&:hover {
background: #f9fbfd;
}
}
</style>