| | |
| | | <template> |
| | | <!-- 2021.11.18ç§»é¤voltableæ¹æ³@cell-mouse-leave="rowEndEdit" --> |
| | | <div class="vol-table" :class="[ |
| | | textInline ? 'text-inline' : '', |
| | | fxRight ? 'fx-right' : '', |
| | | isChrome ? 'chrome' : '', |
| | | smallCell ? 'small-table' : '' |
| | | ]"> |
| | | <div |
| | | class="vol-table" |
| | | :class="[ |
| | | textInline ? 'text-inline' : '', |
| | | fxRight ? 'fx-right' : '', |
| | | isChrome ? 'chrome' : '', |
| | | smallCell ? 'small-table' : '' |
| | | ]" |
| | | > |
| | | <div class="mask" v-show="loading"></div> |
| | | <div class="message" v-show="loading">å è½½ä¸.....</div> |
| | | <el-table :show-summary="summary" :summary-method="getSummaryData" :row-key="rowKey" :key="randomTableKey" |
| | | :lazy="lazy" :defaultExpandAll="defaultExpandAll" :expand-row-keys="rowKey ? expandRowKeys : undefined" stripe |
| | | :load="loadTreeChildren" @select="userSelect" @select-all="userSelect" @selection-change="selectionChange" |
| | | @row-dblclick="rowDbClick" @row-click="rowClick" @header-click="headerClick" |
| | | :highlight-current-row="highlightCurrentRow" ref="table" class="v-table" @sort-change="sortChange" |
| | | tooltip-effect="dark" :height="realHeight" :max-height="realMaxHeight" :data="url ? rowData : tableData" border |
| | | :row-class-name="initIndex" :cell-style="getCellStyle" style="width: 100%" :scrollbar-always-on="true" |
| | | :span-method="cellSpanMethod" @expand-change="expandChange"> |
| | | <el-table |
| | | :show-summary="summary" |
| | | :summary-method="getSummaryData" |
| | | :row-key="rowKey" |
| | | :key="randomTableKey" |
| | | :lazy="lazy" |
| | | :defaultExpandAll="defaultExpandAll" |
| | | :expand-row-keys="rowKey ? expandRowKeys : undefined" |
| | | stripe |
| | | :load="loadTreeChildren" |
| | | @select="userSelect" |
| | | @select-all="userSelect" |
| | | @selection-change="selectionChange" |
| | | @row-dblclick="rowDbClick" |
| | | @row-click="rowClick" |
| | | @header-click="headerClick" |
| | | :highlight-current-row="highlightCurrentRow" |
| | | ref="table" |
| | | class="v-table" |
| | | @sort-change="sortChange" |
| | | tooltip-effect="dark" |
| | | :height="realHeight" |
| | | :max-height="realMaxHeight" |
| | | :data="url ? rowData : tableData" |
| | | border |
| | | :row-class-name="initIndex" |
| | | :cell-style="getCellStyle" |
| | | style="width: 100%" |
| | | :scrollbar-always-on="true" |
| | | :span-method="cellSpanMethod" |
| | | @expand-change="expandChange" |
| | | > |
| | | <el-table-column v-if="columnIndex" type="index" :fixed="fixed" width="55"></el-table-column> |
| | | <el-table-column v-if="ck" type="selection" :fixed="fixed" :selectable="selectable" width="55"></el-table-column> |
| | | <el-table-column |
| | | v-if="ck" |
| | | type="selection" |
| | | :fixed="fixed" |
| | | :selectable="selectable" |
| | | width="55" |
| | | ></el-table-column> |
| | | |
| | | <!-- 2020.10.10ç§»é¤table第ä¸è¡å¼ºå¶æåº --> |
| | | <el-table-column v-for="(column, cindex) in filterColumns" :prop="column.field" :label="column.title" |
| | | :min-width="column.width" :formatter="formatter" :fixed="column.fixed" :key="column.field + cindex" |
| | | :align="column.align" :sortable="column.sort ? 'custom' : false" :show-overflow-tooltip=true> |
| | | <el-table-column |
| | | v-for="(column, cindex) in filterColumns" |
| | | :prop="column.field" |
| | | :label="column.title" |
| | | :min-width="column.width" |
| | | :formatter="formatter" |
| | | :fixed="column.fixed" |
| | | :key="column.field + cindex" |
| | | :align="column.align" |
| | | :sortable="column.sort ? 'custom' : false" |
| | | :show-overflow-tooltip="true" |
| | | > |
| | | <template #header> |
| | | <span v-if="(column.require || column.required) && column.edit" class="column-required">*</span>{{ |
| | | column.title }} |
| | | <span v-if="(column.require || column.required) && column.edit" class="column-required" |
| | | >*</span |
| | | >{{ column.title }} |
| | | </template> |
| | | |
| | | <template #default="scope"> |
| | | <!-- 2022.01.08å¢å å¤è¡¨å¤´ï¼ç°å¨åªæ¯æå¸¸ç¨åè½æ¸²æï¼ä¸æ¯æç¼è¾åè½(æ¶åå°ç»ä»¶éå) --> |
| | | <el-table-column style="border: none" v-for="columnChildren in filterChildrenColumn(column.children)" |
| | | :key="columnChildren.field" :min-width="columnChildren.width" :class-name="columnChildren.class" |
| | | :prop="columnChildren.field" :align="columnChildren.align" :label="columnChildren.title"> |
| | | <el-table-column |
| | | style="border: none" |
| | | v-for="columnChildren in filterChildrenColumn(column.children)" |
| | | :key="columnChildren.field" |
| | | :min-width="columnChildren.width" |
| | | :class-name="columnChildren.class" |
| | | :prop="columnChildren.field" |
| | | :align="columnChildren.align" |
| | | :label="columnChildren.title" |
| | | > |
| | | <template #default="scopeChildren"> |
| | | <a href="javascript:void(0);" style="text-decoration: none" |
| | | @click="link(scopeChildren.row, columnChildren, $event)" v-if="columnChildren.link" |
| | | v-text="scopeChildren.row[columnChildren.field]"></a> |
| | | <table-render v-else-if="columnChildren.render && typeof columnChildren.render == 'function'" |
| | | :row="scopeChildren.row" key="rd-01" :index="scope.$index" :column="columnChildren" |
| | | :render="columnChildren.render"></table-render> |
| | | <div v-else-if="columnChildren.formatter" @click=" |
| | | columnChildren.click && |
| | | columnChildren.click( |
| | | scopeChildren.row, |
| | | columnChildren, |
| | | scopeChildren.$index |
| | | ) |
| | | " v-html="columnChildren.formatter( |
| | | scopeChildren.row, |
| | | columnChildren, |
| | | scopeChildren.$index |
| | | ) |
| | | "></div> |
| | | <a |
| | | href="javascript:void(0);" |
| | | style="text-decoration: none" |
| | | @click="link(scopeChildren.row, columnChildren, $event)" |
| | | v-if="columnChildren.link" |
| | | v-text="scopeChildren.row[columnChildren.field]" |
| | | ></a> |
| | | <table-render |
| | | v-else-if="columnChildren.render && typeof columnChildren.render == 'function'" |
| | | :row="scopeChildren.row" |
| | | key="rd-01" |
| | | :index="scope.$index" |
| | | :column="columnChildren" |
| | | :render="columnChildren.render" |
| | | ></table-render> |
| | | <div |
| | | v-else-if="columnChildren.formatter" |
| | | @click=" |
| | | columnChildren.click && |
| | | columnChildren.click(scopeChildren.row, columnChildren, scopeChildren.$index) |
| | | " |
| | | v-html=" |
| | | columnChildren.formatter(scopeChildren.row, columnChildren, scopeChildren.$index) |
| | | " |
| | | ></div> |
| | | <div v-else-if="columnChildren.bind"> |
| | | {{ formatter(scopeChildren.row, columnChildren, true) }} |
| | | </div> |
| | |
| | | </template> |
| | | </el-table-column> |
| | | <!-- 2020.06.18å¢å render渲æèªå®ä¹å
容 --> |
| | | <table-render v-if="column.render && typeof column.render == 'function'" :row="scope.row" key="rd-01" |
| | | :index="scope.$index" :column="column" :render="column.render"></table-render> |
| | | <table-render |
| | | v-if="column.render && typeof column.render == 'function'" |
| | | :row="scope.row" |
| | | key="rd-01" |
| | | :index="scope.$index" |
| | | :column="column" |
| | | :render="column.render" |
| | | ></table-render> |
| | | <!-- å¯ç¨åå»ç¼è¾åè½ï¼å¸¦ç¼è¾åè½çä¸ä¼æ¸²æä¸ææ¡ææ¬èæ¯é¢è² --> |
| | | <!-- @click="rowBeginEdit(scope.$index,cindex)" --> |
| | | <!-- 2021.09.21å¢å ç¼è¾æ¶å¯¹readonly屿§å¤æ --> |
| | | <template |
| | | v-else-if="column.edit && !column.readonly && ['file', 'img', 'excel'].indexOf(column.edit.type) != -1"> |
| | | <div style="display:flex;align-items: center;" @click.stop> |
| | | <i v-if="!column.showUpload || column.showUpload(scope.row, column)" |
| | | style="padding: 3px;margin-right: 10px;color:#8f9293;cursor: pointer;" |
| | | @click="showUpload(scope.row, column)" class="el-icon-upload"></i> |
| | | v-else-if=" |
| | | column.edit && |
| | | !column.readonly && |
| | | ['file', 'img', 'excel'].indexOf(column.edit.type) != -1 |
| | | " |
| | | > |
| | | <div style="display: flex; align-items: center" @click.stop> |
| | | <i |
| | | v-if="!column.showUpload || column.showUpload(scope.row, column)" |
| | | style="padding: 3px; margin-right: 10px; color: #8f9293; cursor: pointer" |
| | | @click="showUpload(scope.row, column)" |
| | | class="el-icon-upload" |
| | | ></i> |
| | | <template v-if="column.edit.type == 'img'"> |
| | | <img v-for="(file, imgIndex) in getFilePath( |
| | | scope.row[column.field], |
| | | column |
| | | )" :key="imgIndex" @error="handleImageError" |
| | | @click="viewImg(scope.row, column, file.path, $event, imgIndex)" class="table-img" :src="file.path" /> |
| | | <img |
| | | v-for="(file, imgIndex) in getFilePath(scope.row[column.field], column)" |
| | | :key="imgIndex" |
| | | @error="handleImageError" |
| | | @click="viewImg(scope.row, column, file.path, $event, imgIndex)" |
| | | class="table-img" |
| | | :src="file.path" |
| | | /> |
| | | </template> |
| | | <a style="margin-right: 8px" v-else class="t-file" v-for="(file, fIndex) in getFilePath( |
| | | scope.row[column.field], |
| | | column |
| | | )" :key="fIndex" @click="dowloadFile(file)">{{ file.name }}</a> |
| | | <a |
| | | style="margin-right: 8px" |
| | | v-else |
| | | class="t-file" |
| | | v-for="(file, fIndex) in getFilePath(scope.row[column.field], column)" |
| | | :key="fIndex" |
| | | @click="dowloadFile(file)" |
| | | >{{ file.name }}</a |
| | | > |
| | | </div> |
| | | </template> |
| | | <div v-else-if=" |
| | | column.edit && |
| | | !column.readonly && |
| | | (column.edit.keep || edit.rowIndex == scope.$index) |
| | | " class="edit-el"> |
| | | <div |
| | | v-else-if=" |
| | | column.edit && !column.readonly && (column.edit.keep || edit.rowIndex == scope.$index) |
| | | " |
| | | class="edit-el" |
| | | > |
| | | <div @click.stop class="e-item"> |
| | | <div> |
| | | <!-- 2020.07.24å¢å æ¥æonChangeäºä»¶ --> |
| | | <el-date-picker clearable size="default" style="width: 100%" |
| | | v-if="['date', 'datetime'].indexOf(column.edit.type) != -1" v-model="scope.row[column.field]" @change="(val) => { |
| | | column.onChange && |
| | | column.onChange(scope.row, column, val); |
| | | } |
| | | " :type="column.edit.type" :placeholder="column.placeholder || column.title" |
| | | :disabledDate="(val) => getDateOptions(val, column)" :value-format="getDateFormat(column)" |
| | | :disabled="initColumnDisabled(scope.row, column)"> |
| | | <el-date-picker |
| | | clearable |
| | | size="default" |
| | | style="width: 100%" |
| | | v-if="['date', 'datetime'].indexOf(column.edit.type) != -1" |
| | | v-model="scope.row[column.field]" |
| | | @change=" |
| | | (val) => { |
| | | column.onChange && column.onChange(scope.row, column, val) |
| | | } |
| | | " |
| | | :type="column.edit.type" |
| | | :placeholder="column.placeholder || column.title" |
| | | :disabledDate="(val) => getDateOptions(val, column)" |
| | | :value-format="getDateFormat(column)" |
| | | :disabled="initColumnDisabled(scope.row, column)" |
| | | > |
| | | </el-date-picker> |
| | | <el-time-picker clearable size="default" style="width: 100%" v-else-if="column.edit.type == 'time'" |
| | | v-model="scope.row[column.field]" @change="(val) => { |
| | | column.onChange && |
| | | column.onChange(scope.row, column, val); |
| | | } |
| | | " :placeholder="column.placeholder || column.title" :value-format="column.format || 'HH:mm:ss'" |
| | | :disabled="initColumnDisabled(scope.row, column)"> |
| | | <el-time-picker |
| | | clearable |
| | | size="default" |
| | | style="width: 100%" |
| | | v-else-if="column.edit.type == 'time'" |
| | | v-model="scope.row[column.field]" |
| | | @change=" |
| | | (val) => { |
| | | column.onChange && column.onChange(scope.row, column, val) |
| | | } |
| | | " |
| | | :placeholder="column.placeholder || column.title" |
| | | :value-format="column.format || 'HH:mm:ss'" |
| | | :disabled="initColumnDisabled(scope.row, column)" |
| | | > |
| | | </el-time-picker> |
| | | <el-switch v-else-if="column.edit.type == 'switch'" v-model="scope.row[column.field]" |
| | | active-color="#0f84ff" inactive-color="rgb(194 194 194)" active-text="æ¯" inactive-text="å¦" |
| | | inline-prompt @change="(val) => { |
| | | switchChange(val, scope.row, column); |
| | | } |
| | | " :active-value="typeof scope.row[column.field] == 'boolean' |
| | | <el-switch |
| | | v-else-if="column.edit.type == 'switch'" |
| | | v-model="scope.row[column.field]" |
| | | active-color="#0f84ff" |
| | | inactive-color="rgb(194 194 194)" |
| | | active-text="æ¯" |
| | | inactive-text="å¦" |
| | | inline-prompt |
| | | @change=" |
| | | (val) => { |
| | | switchChange(val, scope.row, column) |
| | | } |
| | | " |
| | | :active-value=" |
| | | typeof scope.row[column.field] == 'boolean' |
| | | ? true |
| | | : typeof scope.row[column.field] == 'string' |
| | | ? '1' |
| | | : 1 |
| | | " :inactive-value="typeof scope.row[column.field] == 'boolean' |
| | | ? false |
| | | : typeof scope.row[column.field] == 'string' |
| | | ? '0' |
| | | : 0 |
| | | " :disabled="initColumnDisabled(scope.row, column)"> |
| | | ? '1' |
| | | : 1 |
| | | " |
| | | :inactive-value=" |
| | | typeof scope.row[column.field] == 'boolean' |
| | | ? false |
| | | : typeof scope.row[column.field] == 'string' |
| | | ? '0' |
| | | : 0 |
| | | " |
| | | :disabled="initColumnDisabled(scope.row, column)" |
| | | > |
| | | </el-switch> |
| | | <template v-else-if=" |
| | | ['select', 'selectList'].indexOf(column.edit.type) != -1 |
| | | "> |
| | | <el-select-v2 style="width: 100%" :size="size" v-if="column.bind.data.length >= select2Count" |
| | | v-model="scope.row[column.field]" filterable :multiple="column.edit.type == 'select' ? false : true" |
| | | :placeholder="column.placeholder || column.title" :autocomplete="column.autocomplete" |
| | | :options="column.bind.data" @change=" |
| | | column.onChange && column.onChange(scope.row, column) |
| | | " clearable :disabled="initColumnDisabled(scope.row, column)"> |
| | | <template v-else-if="['select', 'selectList'].indexOf(column.edit.type) != -1"> |
| | | <el-select-v2 |
| | | style="width: 100%" |
| | | :size="size" |
| | | v-if="column.bind.data.length >= select2Count" |
| | | v-model="scope.row[column.field]" |
| | | filterable |
| | | :multiple="column.edit.type == 'select' ? false : true" |
| | | :placeholder="column.placeholder || column.title" |
| | | :autocomplete="column.autocomplete" |
| | | :options="column.bind.data" |
| | | @change="column.onChange && column.onChange(scope.row, column)" |
| | | clearable |
| | | :disabled="initColumnDisabled(scope.row, column)" |
| | | > |
| | | <template #default="{ item }"> |
| | | {{ item.label }} |
| | | </template> |
| | | </el-select-v2> |
| | | |
| | | <el-select size="default" style="width: 100%" v-else v-model="scope.row[column.field]" :filterable="column.filter || column.bind.data.length > 10 |
| | | ? true |
| | | : false |
| | | " :multiple="column.edit.type == 'select' ? false : true" |
| | | :placeholder="column.placeholder || column.title" :allow-create="column.autocomplete" @change=" |
| | | column.onChange && column.onChange(scope.row, column) |
| | | " clearable :disabled="initColumnDisabled(scope.row, column)"> |
| | | <el-option v-for="item in column.bind.data" :key="item.key" v-show="!item.hidden" |
| | | :disabled="item.disabled" :label="item.value" :value="item.key">{{ item.value }} |
| | | <el-select |
| | | size="default" |
| | | style="width: 100%" |
| | | v-else |
| | | v-model="scope.row[column.field]" |
| | | :filterable="column.filter || column.bind.data.length > 10 ? true : false" |
| | | :multiple="column.edit.type == 'select' ? false : true" |
| | | :placeholder="column.placeholder || column.title" |
| | | :allow-create="column.autocomplete" |
| | | @change="column.onChange && column.onChange(scope.row, column)" |
| | | clearable |
| | | :disabled="initColumnDisabled(scope.row, column)" |
| | | > |
| | | <el-option |
| | | v-for="item in column.bind.data" |
| | | :key="item.key" |
| | | v-show="!item.hidden" |
| | | :disabled="item.disabled" |
| | | :label="item.value" |
| | | :value="item.key" |
| | | >{{ item.value }} |
| | | </el-option> |
| | | </el-select> |
| | | </template> |
| | | <el-tree-select style="width: 100%" |
| | | <el-tree-select |
| | | style="width: 100%" |
| | | v-else-if="column.edit.type == 'treeSelect' || column.edit.type == 'cascader'" |
| | | v-model="scope.row[column.field]" :data="column.bind.data" |
| | | :multiple="column.multiple === undefined ? true : column.multiple" :render-after-expand="false" |
| | | v-model="scope.row[column.field]" |
| | | :data="column.bind.data" |
| | | :multiple="column.multiple === undefined ? true : column.multiple" |
| | | :render-after-expand="false" |
| | | :show-checkbox="true" |
| | | :check-strictly="column.checkStrictly === undefined ? true : column.checkStrictly" check-on-click-node |
| | | node-key="key" @change="column.onChange && column.onChange(scope.row, column)" |
| | | :props="{ label: 'label' }"> |
| | | <template #default="{ data, node }"> |
| | | {{ data.label }}</template> |
| | | :check-strictly="column.checkStrictly === undefined ? true : column.checkStrictly" |
| | | check-on-click-node |
| | | node-key="key" |
| | | @change="column.onChange && column.onChange(scope.row, column)" |
| | | :props="{ label: 'label' }" |
| | | > |
| | | <template #default="{ data, node }"> {{ data.label }}</template> |
| | | </el-tree-select> |
| | | <!-- <div v-else-if="column.edit.type == 'cascader'">4444444</div> --> |
| | | <!-- <el-cascader |
| | |
| | | @change="column.onChange && column.onChange(scope.row, column)" |
| | | > |
| | | </el-cascader> --> |
| | | <el-input v-else-if="column.edit.type == 'textarea'" type="textarea" |
| | | :placeholder="column.placeholder || column.title" v-model="scope.row[column.field]" |
| | | :disabled="initColumnDisabled(scope.row, column)"> |
| | | <el-input |
| | | v-else-if="column.edit.type == 'textarea'" |
| | | type="textarea" |
| | | :placeholder="column.placeholder || column.title" |
| | | v-model="scope.row[column.field]" |
| | | :disabled="initColumnDisabled(scope.row, column)" |
| | | > |
| | | </el-input> |
| | | <input class="table-input" v-else-if="!column.summary && !column.onKeyPress" |
| | | v-model.lazy="scope.row[column.field]" :placeholder="column.placeholder || column.title" |
| | | :disabled="initColumnDisabled(scope.row, column)" /> |
| | | <el-input v-else @change="inputKeyPress(scope.row, column, $event)" |
| | | <input |
| | | class="table-input" |
| | | v-else-if="!column.summary && !column.onKeyPress" |
| | | v-model.lazy="scope.row[column.field]" |
| | | :placeholder="column.placeholder || column.title" |
| | | :disabled="initColumnDisabled(scope.row, column)" |
| | | /> |
| | | <el-input |
| | | v-else |
| | | @change="inputKeyPress(scope.row, column, $event)" |
| | | @input="inputKeyPress(scope.row, column, $event)" |
| | | @keyup.enter="inputKeyPress(scope.row, column, $event)" size="default" |
| | | v-model="scope.row[column.field]" :placeholder="column.placeholder || column.title" |
| | | :disabled="initColumnDisabled(scope.row, column)"></el-input> |
| | | @keyup.enter="inputKeyPress(scope.row, column, $event)" |
| | | size="default" |
| | | v-model="scope.row[column.field]" |
| | | :placeholder="column.placeholder || column.title" |
| | | :disabled="initColumnDisabled(scope.row, column)" |
| | | ></el-input> |
| | | </div> |
| | | <div class="extra" v-if="column.extra && edit.rowIndex == scope.$index"> |
| | | <a :style="column.extra.style" style="text-decoration: none" @click="extraClick(scope.row, column)"> |
| | | <a |
| | | :style="column.extra.style" |
| | | style="text-decoration: none" |
| | | @click="extraClick(scope.row, column)" |
| | | > |
| | | <i v-if="column.extra.icon" :class="[column.extra.icon]" /> |
| | | {{ column.extra.text }} |
| | | </a> |
| | |
| | | </div> |
| | | <!--没æç¼è¾åè½çç´æ¥æ¸²ææ ç¾--> |
| | | <template v-else> |
| | | <a href="javascript:void(0)" style="text-decoration: none;line-height: 1.3;" |
| | | @click="link(scope.row, column, $event)" v-if="column.link" v-text="scope.row[column.field]"></a> |
| | | <img v-else-if="column.type == 'img'" v-for="(file, imgIndex) in getFilePath( |
| | | scope.row[column.field], |
| | | column |
| | | )" :key="imgIndex" @error="handleImageError" |
| | | @click="viewImg(scope.row, column, file.path, $event, imgIndex)" class="table-img" :src="file.path" /> |
| | | <a style="margin-right: 8px" v-else-if="column.type == 'file' || column.type == 'excel'" class="t-file" |
| | | v-for="(file, fIndex) in getFilePath( |
| | | scope.row[column.field], |
| | | column |
| | | )" :key="fIndex" @click="dowloadFile(file)">{{ file.name }}</a> |
| | | <span v-else-if="column.type == 'date'">{{ |
| | | formatterDate(scope.row, column) |
| | | }}</span> |
| | | <div v-else-if="column.formatter" @click="formatterClick(scope.row, column, $event)" |
| | | v-html="column.formatter(scope.row, column)"></div> |
| | | <!-- 2021.11.18ä¿®å¤tableæ°æ®æºè®¾ç½®ä¸ºnormalåç¹å»è¡$event缺失çé®é¢ --> |
| | | <div v-else-if="column.bind && (column.normal || column.edit)" |
| | | <a |
| | | href="javascript:void(0)" |
| | | style="text-decoration: none; line-height: 1.3" |
| | | @click="link(scope.row, column, $event)" |
| | | v-if="column.link" |
| | | v-text="scope.row[column.field]" |
| | | ></a> |
| | | <img |
| | | v-else-if="column.type == 'img'" |
| | | v-for="(file, imgIndex) in getFilePath(scope.row[column.field], column)" |
| | | :key="imgIndex" |
| | | @error="handleImageError" |
| | | @click="viewImg(scope.row, column, file.path, $event, imgIndex)" |
| | | class="table-img" |
| | | :src="file.path" |
| | | /> |
| | | <a |
| | | style="margin-right: 8px" |
| | | v-else-if="column.type == 'file' || column.type == 'excel'" |
| | | class="t-file" |
| | | v-for="(file, fIndex) in getFilePath(scope.row[column.field], column)" |
| | | :key="fIndex" |
| | | @click="dowloadFile(file)" |
| | | >{{ file.name }}</a |
| | | > |
| | | <span v-else-if="column.type == 'date'">{{ formatterDate(scope.row, column) }}</span> |
| | | <div |
| | | v-else-if="column.formatter" |
| | | @click="formatterClick(scope.row, column, $event)" |
| | | :style="column.getStyle && column.getStyle(scope.row, column)"> |
| | | v-html="column.formatter(scope.row, column)" |
| | | ></div> |
| | | <!-- 2021.11.18ä¿®å¤tableæ°æ®æºè®¾ç½®ä¸ºnormalåç¹å»è¡$event缺失çé®é¢ --> |
| | | <div |
| | | v-else-if="column.bind && (column.normal || column.edit)" |
| | | @click="formatterClick(scope.row, column, $event)" |
| | | :style="column.getStyle && column.getStyle(scope.row, column)" |
| | | > |
| | | {{ formatter(scope.row, column, true) }} |
| | | </div> |
| | | <div v-else-if="column.click && !column.bind" @click="formatterClick(scope.row, column)"> |
| | | <div |
| | | v-else-if="column.click && !column.bind" |
| | | @click="formatterClick(scope.row, column)" |
| | | > |
| | | {{ scope.row[column.field] }} |
| | | </div> |
| | | <div @click="() => { |
| | | column.click && formatterClick(scope.row, column); |
| | | } |
| | | " v-else-if="column.bind"> |
| | | <el-tag v-if="useTag" class="cell-tag" :class="[isEmptyTag(scope.row, column)]" |
| | | :type="getColor(scope.row, column)" :effect="column.effect">{{ formatter(scope.row, column, true) |
| | | }}</el-tag> |
| | | <template v-else>{{ |
| | | formatter(scope.row, column, true) |
| | | }}</template> |
| | | <div |
| | | @click=" |
| | | () => { |
| | | column.click && formatterClick(scope.row, column) |
| | | } |
| | | " |
| | | v-else-if="column.bind" |
| | | > |
| | | <el-tag |
| | | v-if="useTag" |
| | | class="cell-tag" |
| | | :class="[isEmptyTag(scope.row, column)]" |
| | | :type="getColor(scope.row, column)" |
| | | :effect="column.effect" |
| | | >{{ formatter(scope.row, column, true) }}</el-tag |
| | | > |
| | | <template v-else>{{ formatter(scope.row, column, true) }}</template> |
| | | </div> |
| | | |
| | | <span v-else>{{ formatter(scope.row, column, true) }}</span> |
| | |
| | | <template v-if="!paginationHide"> |
| | | <div class="block pagination" key="pagination-01" style="display: flex"> |
| | | <div style="flex: 1"></div> |
| | | <el-pagination key="pagination-02" @size-change="handleSizeChange" @current-change="handleCurrentChange" |
| | | :current-page="paginations.page" :page-sizes="paginations.sizes" :page-size="paginations.size" |
| | | layout="total, sizes, prev, pager, next, jumper" :total="paginations.total"></el-pagination> |
| | | <el-pagination |
| | | key="pagination-02" |
| | | @size-change="handleSizeChange" |
| | | @current-change="handleCurrentChange" |
| | | :current-page="paginations.page" |
| | | :page-sizes="paginations.sizes" |
| | | :page-size="paginations.size" |
| | | layout="total, sizes, prev, pager, next, jumper" |
| | | :total="paginations.total" |
| | | ></el-pagination> |
| | | </div> |
| | | </template> |
| | | </div> |
| | | |
| | | <VolBox v-model="uploadModel" title="ä¸ä¼ " :height="228" :width="500" :padding="15" lazy> |
| | | <!-- ä¸ä¼ å¾çãexcelæå
¶ä»æä»¶ãæä»¶æ°éã大å°éå¶é½å¯ä»¥ï¼åç
§voluploadç»ä»¶api --> |
| | | <div style="height: 200px;display: flex;align-items: center;"> |
| | | <VolUpload style="text-align: center; " :autoUpload="currentColumn.edit.autoUpload" |
| | | :multiple="currentColumn.edit.multiple" :url="uploadUrl" :max-file="currentColumn.edit.maxFile" |
| | | :img="currentColumn.edit.type == 'img'" :excel="currentColumn.edit.type == 'excel'" |
| | | :fileTypes="currentColumn.edit.fileTypes ? currentColumn.edit.fileTypes : []" :fileInfo="fileInfo" |
| | | :upload-after="uploadAfter" :upload-before="uploadBefore" :append="currentColumn.edit.accept"> |
| | | <div style="height: 200px; display: flex; align-items: center"> |
| | | <VolUpload |
| | | style="text-align: center" |
| | | :autoUpload="currentColumn.edit.autoUpload" |
| | | :multiple="currentColumn.edit.multiple" |
| | | :url="uploadUrl" |
| | | :max-file="currentColumn.edit.maxFile" |
| | | :img="currentColumn.edit.type == 'img'" |
| | | :excel="currentColumn.edit.type == 'excel'" |
| | | :fileTypes="currentColumn.edit.fileTypes ? currentColumn.edit.fileTypes : []" |
| | | :fileInfo="fileInfo" |
| | | :upload-after="uploadAfter" |
| | | :upload-before="uploadBefore" |
| | | :append="currentColumn.edit.accept" |
| | | > |
| | | <div>{{ currentColumn.message }}</div> |
| | | </VolUpload> |
| | | </div> |
| | | <template #footer> |
| | | <div style="text-align: center; "> |
| | | <div style="text-align: center"> |
| | | <el-button type="default" size="small" @click="uploadModel = false">å
³é</el-button> |
| | | <el-button type="primary" size="small" @click="saveUpload">ä¿å</el-button> |
| | | </div> |
| | |
| | | <vol-image-viewer ref="viewer"></vol-image-viewer> |
| | | </template> |
| | | <script> |
| | | import VolTableRender from './VolTable/VolTableRender'; |
| | | let _errMsg; |
| | | import { defineComponent, defineAsyncComponent } from 'vue'; |
| | | import VolTableRender from './VolTable/VolTableRender' |
| | | let _errMsg |
| | | import { defineComponent, defineAsyncComponent } from 'vue' |
| | | export default defineComponent({ |
| | | emits: ['loadBefore', 'loadAfter', 'rowChange', 'rowClick', 'rowDbClick', 'selectionChange'], |
| | | //https://github.com/element-plus/element-plus/issues/1483 |
| | |
| | | watch: { |
| | | 'tableData.length': { |
| | | handler(newLen, oldLen) { |
| | | this.watchRowSelectChange(newLen, oldLen); |
| | | this.watchRowSelectChange(newLen, oldLen) |
| | | } |
| | | }, |
| | | 'rowData.length': { |
| | | handler(newLen, oldLen) { |
| | | this.watchRowSelectChange(newLen, oldLen); |
| | | this.watchRowSelectChange(newLen, oldLen) |
| | | } |
| | | } |
| | | }, |
| | | components: { |
| | | 'vol-image-viewer': defineAsyncComponent(() => import("./VolImageViewer.vue")), |
| | | 'vol-image-viewer': defineAsyncComponent(() => import('./VolImageViewer.vue')), |
| | | 'table-render': VolTableRender, |
| | | VolUpload: defineAsyncComponent(() => import("./VolUpload.vue")), |
| | | VolBox: defineAsyncComponent(() => import("./VolBox.vue")), |
| | | VolUpload: defineAsyncComponent(() => import('./VolUpload.vue')), |
| | | VolBox: defineAsyncComponent(() => import('./VolBox.vue')) |
| | | }, |
| | | props: { |
| | | rowKey: { |
| | |
| | | type: Function, |
| | | default: (tree, treeNode, resolve) => { |
| | | if (resolve) { |
| | | return resolve([]); |
| | | return resolve([]) |
| | | } |
| | | } |
| | | }, |
| | |
| | | // è¡¨æ°æ®æº,é
ç½®äºurlå°±ä¸ç¨ä¼ è¿ä¸ªåæ°äº |
| | | type: Array, |
| | | default: () => { |
| | | return []; |
| | | return [] |
| | | } |
| | | }, |
| | | columns: { |
| | |
| | | linkView: { |
| | | type: Function, |
| | | default: function () { |
| | | return 1; |
| | | return 1 |
| | | } |
| | | }, |
| | | pagination: { |
| | | type: Object, |
| | | default: function () { |
| | | return { total: 0, size: 30, sortName: '' }; |
| | | return { total: 0, size: 30, sortName: '' } |
| | | } |
| | | }, |
| | | url: { |
| | |
| | | // ç¼è¾å¼å§ |
| | | type: Function, |
| | | default: function (row, column, index) { |
| | | return true; |
| | | return true |
| | | } |
| | | }, |
| | | endEditBefore: { |
| | | // ç»æç¼è¾å |
| | | type: Function, |
| | | default: function (row, column, index) { |
| | | return true; |
| | | return true |
| | | } |
| | | }, |
| | | endEditAfter: { |
| | | // ç»æç¼è¾å |
| | | type: Function, |
| | | default: function (row, column, index) { |
| | | return true; |
| | | return true |
| | | } |
| | | }, |
| | | ck: { |
| | |
| | | selectable: { |
| | | type: Function, |
| | | default: (row, index) => { |
| | | return true; |
| | | return true |
| | | } |
| | | }, |
| | | spanMethod: { |
| | | type: Function, |
| | | default: ({ row, column, rowIndex, columnIndex }) => { |
| | | } |
| | | default: ({ row, column, rowIndex, columnIndex }) => {} |
| | | }, |
| | | lazy: { //æ å½¢è¡¨æ ¼æ¯å¦é»è®¤å»¶è¿å è½½ |
| | | lazy: { |
| | | //æ å½¢è¡¨æ ¼æ¯å¦é»è®¤å»¶è¿å è½½ |
| | | type: Boolean, |
| | | default: true, |
| | | default: true |
| | | }, |
| | | defaultExpandAll: { //æ å½¢è¡¨æ ¼æ¯å¦å±å¼ææ |
| | | defaultExpandAll: { |
| | | //æ å½¢è¡¨æ ¼æ¯å¦å±å¼ææ |
| | | type: Boolean, |
| | | default: false |
| | | }, |
| | | expandRowKeys: { //é»è®¤å±å¼è¡ |
| | | expandRowKeys: { |
| | | //é»è®¤å±å¼è¡ |
| | | type: Array, |
| | | default: () => { |
| | | return [] |
| | | } |
| | | }, |
| | | rowParentField: { //æ å½¢è¡¨æ ¼ç¶çº§id |
| | | rowParentField: { |
| | | //æ å½¢è¡¨æ ¼ç¶çº§id |
| | | type: String, |
| | | default: "" |
| | | default: '' |
| | | } |
| | | }, |
| | | data() { |
| | |
| | | formatConfig: {}, |
| | | // defaultColor: "", |
| | | // 2020.09.06è°æ´tableåæ°æ®æºçèæ¯é¢è² |
| | | colors: ["primary", "success", "info", "warning", "danger"],// ["warning", "success", "danger", "info"], |
| | | colors: ['primary', 'success', 'info', 'warning', 'danger'], // ["warning", "success", "danger", "info"], |
| | | rule: { |
| | | phone: /^[1][3,4,5,6,7,8,9][0-9]{9}$/, |
| | | decimal: /(^[\-0-9][0-9]*(.[0-9]+)?)$/, |
| | |
| | | currentRow: {}, |
| | | currentColumn: [], |
| | | fileInfo: [], |
| | | uploadUrl: "", |
| | | uploadUrl: '', |
| | | uploadModel: false, |
| | | smallCell: true |
| | | }; |
| | | } |
| | | }, |
| | | created() { |
| | | try { |
| | | this.useTag = this.$global.table && this.$global.table.useTag; |
| | | this.smallCell = this.$global.table && this.$global.table.smallCell; |
| | | this.useTag = this.$global.table && this.$global.table.useTag |
| | | this.smallCell = this.$global.table && this.$global.table.smallCell |
| | | } catch (error) { |
| | | console.log(error.message); |
| | | console.log(error.message) |
| | | } |
| | | |
| | | this.realHeight = this.getHeight(); |
| | | this.realMaxHeight = this.getMaxHeight(); |
| | | this.realHeight = this.getHeight() |
| | | this.realMaxHeight = this.getMaxHeight() |
| | | this.fxRight = this.columns.some((x) => { |
| | | return x.fixed == 'right'; |
| | | }); |
| | | return x.fixed == 'right' |
| | | }) |
| | | //2021.09.21ç§»é¤å¼ºå¶åºå®è¡å·ä¸checkboxå |
| | | if ( |
| | | this.columns.some((x) => { |
| | | return x.fixed && x.fixed != 'right'; |
| | | return x.fixed && x.fixed != 'right' |
| | | }) |
| | | ) { |
| | | this.fixed = true; |
| | | this.fixed = true |
| | | } |
| | | //2022.04.06ä¼åtableå计åºå®åæ¾ç¤º |
| | | // if ( |
| | |
| | | // } |
| | | |
| | | // ä»åå°å 䏿æ¡ç[æ¯å¦å¯ç¨ç]æ°æ®æº |
| | | let keys = []; |
| | | let columnBind = []; |
| | | this.summaryData.push('å计'); |
| | | let keys = [] |
| | | let columnBind = [] |
| | | this.summaryData.push('å计') |
| | | if (this.columnIndex) { |
| | | this.summaryData.push(' '); |
| | | this.summaryData.push(' ') |
| | | } |
| | | this.initCellStyleColumns(); |
| | | this.initCellStyleColumns() |
| | | this.columns.forEach((x, _index) => { |
| | | |
| | | if (!x.hidden) { |
| | | // this.summaryIndex[x.field] = _index; |
| | | // 2020.10.11ä¿®å¤æ±ååéä½çé®é¢ |
| | | this.summaryData.push(''); |
| | | this.summaryIndex[x.field] = this.summaryData.length - 1; |
| | | this.summaryData.push('') |
| | | this.summaryIndex[x.field] = this.summaryData.length - 1 |
| | | } |
| | | // æ±å |
| | | if (x.summary && !this.summary) { |
| | | this.summary = true; |
| | | this.summary = true |
| | | } |
| | | if (x.children && Array.isArray(x.children)) { |
| | | x.children.forEach(cl => { |
| | | x.children.forEach((cl) => { |
| | | if (cl.bind && cl.bind.key && (!cl.bind.data || cl.bind.data.length == 0)) { |
| | | keys.push(cl.bind.key); |
| | | cl.bind.valueType = cl.type; |
| | | columnBind.push(cl.bind); |
| | | keys.push(cl.bind.key) |
| | | cl.bind.valueType = cl.type |
| | | columnBind.push(cl.bind) |
| | | } |
| | | }) |
| | | } else if (x.bind && x.bind.key && (!x.bind.data || x.bind.data.length == 0)) { |
| | | // åå
¥è¿ç¨ |
| | | if (!x.bind.data) x.bind.data = []; |
| | | if (!x.bind.data) x.bind.data = [] |
| | | if (x.bind.remote) { |
| | | this.remoteColumns.push(x); |
| | | this.remoteColumns.push(x) |
| | | } else if (this.loadKey) { |
| | | keys.push(x.bind.key); |
| | | x.bind.valueType = x.type; |
| | | keys.push(x.bind.key) |
| | | x.bind.valueType = x.type |
| | | if (x.edit && x.edit.type) { |
| | | x.bind.editType = x.edit.type |
| | | } |
| | | columnBind.push(x.bind); |
| | | columnBind.push(x.bind) |
| | | } |
| | | } |
| | | }); |
| | | }) |
| | | if (keys.length > 0) { |
| | | this.http |
| | | .post('/api/Sys_Dictionary/GetVueDictionary', keys) |
| | | .then((dic) => { |
| | | dic.forEach((x) => { |
| | | if (x.data.length > this.select2Count) { |
| | | x.data.forEach((item) => { |
| | | item.label = item.value; |
| | | item.value = item.key; |
| | | }); |
| | | this.http.post('/api/Sys_Dictionary/GetVueDictionary', keys).then((dic) => { |
| | | dic.forEach((x) => { |
| | | if (x.data.length > this.select2Count) { |
| | | x.data.forEach((item) => { |
| | | item.label = item.value |
| | | item.value = item.key |
| | | }) |
| | | } |
| | | const arrType = ['cascader', 'treeSelect'] |
| | | columnBind.forEach((c) => { |
| | | if (arrType.indexOf(c.valueType) != -1 || arrType.indexOf(c.editType) != -1) { |
| | | this.columns.forEach((col) => { |
| | | if (col.bind && col.bind.key == c.key) { |
| | | col.bind.orginData = JSON.parse(JSON.stringify(x.data)) |
| | | } |
| | | }) |
| | | x.data = this.base.convertTree(x.data, (node, data, isRoot) => { |
| | | if (!node.inited) { |
| | | node.inited = true |
| | | node.label = node.value |
| | | node.value = node.key + '' |
| | | } |
| | | }) |
| | | } |
| | | const arrType = ['cascader', 'treeSelect']; |
| | | columnBind.forEach((c) => { |
| | | if ((arrType.indexOf(c.valueType) != -1 || arrType.indexOf(c.editType) != -1)) { |
| | | this.columns.forEach(col => { |
| | | if (col.bind && col.bind.key == c.key) { |
| | | col.bind.orginData = JSON.parse(JSON.stringify(x.data)); |
| | | } |
| | | }) |
| | | x.data = this.base.convertTree(x.data, (node, data, isRoot) => { |
| | | if (!node.inited) { |
| | | node.inited = true; |
| | | node.label = node.value; |
| | | node.value = node.key + ''; |
| | | } |
| | | }); |
| | | } |
| | | // è½¬æ¢æ°æ®æºçç±»åä¸åçç±»åä¸è´(2020.04.04) |
| | | else if (c.key == x.dicNo && (c.valueType == "int" || c.valueType == "sbyte")) { |
| | | x.data.forEach((d) => { |
| | | // 2020.09.01å¢å 对æ°åç±»åçäºæ¬¡å¤æ |
| | | if (!isNaN(d.key)) { |
| | | d.key = ~~d.key; |
| | | } |
| | | }); |
| | | } |
| | | if (c.key == x.dicNo) c.data.push(...x.data); |
| | | }); |
| | | }); |
| | | }); |
| | | // è½¬æ¢æ°æ®æºçç±»åä¸åçç±»åä¸è´(2020.04.04) |
| | | else if (c.key == x.dicNo && (c.valueType == 'int' || c.valueType == 'sbyte')) { |
| | | x.data.forEach((d) => { |
| | | // 2020.09.01å¢å 对æ°åç±»åçäºæ¬¡å¤æ |
| | | if (!isNaN(d.key)) { |
| | | d.key = ~~d.key |
| | | } |
| | | }) |
| | | } |
| | | if (c.key == x.dicNo) c.data.push(...x.data) |
| | | }) |
| | | }) |
| | | }) |
| | | } |
| | | |
| | | this.paginations.sort = this.pagination.sortName; |
| | | this.paginations.sort = this.pagination.sortName |
| | | // 2020.08.29å¢å èªå®ä¹å页æ¡å¤§å° |
| | | Object.assign(this.paginations, this.pagination); |
| | | Object.assign(this.paginations, this.pagination) |
| | | if (this.pagination.size) { |
| | | this.paginations.rows = this.pagination.size; |
| | | this.paginations.rows = this.pagination.size |
| | | } |
| | | this.enableEdit = this.columns.some((x) => { |
| | | return x.hasOwnProperty('edit'); |
| | | }); |
| | | return x.hasOwnProperty('edit') |
| | | }) |
| | | let keyColumn = this.columns.find((x) => { |
| | | return x.isKey; |
| | | }); |
| | | return x.isKey |
| | | }) |
| | | if (keyColumn) { |
| | | this.key = keyColumn.field; |
| | | this.key = keyColumn.field |
| | | } |
| | | this.defaultLoadPage && this.load(); |
| | | this.defaultLoadPage && this.load() |
| | | }, |
| | | computed: { |
| | | filterColumns() { |
| | | return this.columns.filter((x, index) => { |
| | | if (!x.field) { |
| | | x.field = x.title + index; |
| | | x.field = x.title + index |
| | | } |
| | | return !x.hidden; |
| | | }); |
| | | return !x.hidden |
| | | }) |
| | | } |
| | | }, |
| | | methods: { |
| | | initCellStyleColumns() { |
| | | this.columns.forEach(x => { |
| | | this.columns.forEach((x) => { |
| | | if (x.cellStyle) { |
| | | this.cellStyleColumns[x.field] = x.cellStyle; |
| | | this.cellStyleColumns[x.field] = x.cellStyle |
| | | } |
| | | }) |
| | | }, |
| | | watchRowSelectChange(newLen, oldLen) { |
| | | if (newLen < oldLen && this.selectRows.length) { |
| | | this.selectRows = []; |
| | | this.$refs.table.clearSelection(); |
| | | this.selectRows = [] |
| | | this.$refs.table.clearSelection() |
| | | } |
| | | }, |
| | | switchChange(val, row, column) { |
| | | //è¿éå¨åå§åçæ¶åä¹ä¼è§¦åchangeäºä»¶ |
| | | if (Object.keys(row).length <= 1) { |
| | | return; |
| | | return |
| | | } |
| | | if (column.onChange) { |
| | | column.onChange(val, row, column); |
| | | column.onChange(val, row, column) |
| | | } |
| | | }, |
| | | inputKeyPress(row, column, $event, $e) { |
| | | column.onKeyPress && column.onKeyPress(row, column, $event); |
| | | this.getInputSummaries(null, null, $event, column); |
| | | column.onKeyPress && column.onKeyPress(row, column, $event) |
| | | this.getInputSummaries(null, null, $event, column) |
| | | }, |
| | | extraClick(row, column) { |
| | | column.extra.click && |
| | | column.extra.click( |
| | | row, |
| | | column, |
| | | this.url ? this.rowData : this.tableData |
| | | ); |
| | | column.extra.click(row, column, this.url ? this.rowData : this.tableData) |
| | | }, |
| | | headerClick(column, event) { |
| | | if (this.clickEdit && this.edit.rowIndex != -1) { |
| | | if ( |
| | | this.rowEndEdit( |
| | | this.url |
| | | ? this.rowData[this.edit.rowIndex] |
| | | : this.tableData[this.edit.rowIndex], |
| | | this.url ? this.rowData[this.edit.rowIndex] : this.tableData[this.edit.rowIndex], |
| | | column |
| | | ) |
| | | ) { |
| | | this.edit.rowIndex = -1; |
| | | this.edit.rowIndex = -1 |
| | | } |
| | | } |
| | | // this.edit.rowIndex = -1; |
| | | }, |
| | | rowDbClick(row, column, event) { |
| | | //2021.05.23å¢å åå»è¡äºä»¶ |
| | | this.$emit('rowDbClick', { row, column, event }); |
| | | this.$emit('rowDbClick', { row, column, event }) |
| | | }, |
| | | rowClick(row, column, event) { |
| | | //2022.02.20å¢å ç¹å»æ¶è¡¨æ ¼åæ°å¤æ |
| | | if (!column) { |
| | | return; |
| | | return |
| | | } |
| | | //æ£å¨ç¼è¾æ¶ï¼ç¦æ¢åºårowClickäºä»¶ |
| | | if (this.edit.rowIndex == -1) { |
| | | this.$emit('rowClick', { row, column, event }); |
| | | this.$emit('rowClick', { row, column, event }) |
| | | } |
| | | // ç¹å»è¡äºä»¶(2020.11.07) |
| | | |
| | | if (!this.doubleEdit) { |
| | | return; |
| | | return |
| | | } |
| | | // ç¹å»å
¶ä»è¡æ¶ï¼å¦æç¹å»çè¡ä¸æ£å¨ç¼è¾çè¡ç¸åï¼ä¿æç¼è¾ç¶æ |
| | | if (this.clickEdit && this.edit.rowIndex != -1) { |
| | |
| | | // ç¹å»çåå
æ ¼å¦æä¸å¯ä»¥ç¼è¾ï¼ç´æ¥ç»æç¼è¾ |
| | | // 2020.10.12ä¿®å¤ç»æç¼è¾æ¶ï¼element tableé«çæ¬å±æ§è·åä¸å°çé®é¢ |
| | | let _col = this.columns.find((x) => { |
| | | return x.field == ((event && event.property) || column.property); |
| | | }); |
| | | return x.field == ((event && event.property) || column.property) |
| | | }) |
| | | if (_col && (!_col.edit || _col.readonly)) { |
| | | if (this.rowEndEdit(row, event)) { |
| | | this.edit.rowIndex = -1; |
| | | this.edit.rowIndex = -1 |
| | | } |
| | | } |
| | | return; |
| | | return |
| | | } |
| | | if (this.rowEndEdit(row, event && event.property ? event : column)) { |
| | | this.edit.rowIndex = -1; |
| | | this.edit.rowIndex = -1 |
| | | } |
| | | //彿£å¨ç¼è¾ï¼ä¸ç¹å»å°å
¶ä»è¡æ¶ï¼å¨åç¼è¾çè¡ç»æç¼è¾åï¼è§¦åæ°è¡çrowClickäºä»¶ |
| | | //æ£å¨ç¼è¾æ¶ï¼ç¦æ¢åºårowClickäºä»¶ |
| | | if (this.edit.rowIndex == -1) { |
| | | this.$emit('rowClick', { row, column, event }); |
| | | this.$emit('rowClick', { row, column, event }) |
| | | } |
| | | } |
| | | this.rowBeginEdit(row, column); |
| | | this.rowBeginEdit(row, column) |
| | | }, |
| | | dowloadFile(file) { |
| | | this.base.dowloadFile( |
| | |
| | | Authorization: this.$store.getters.getToken() |
| | | }, |
| | | this.http.ipAddress |
| | | ); |
| | | ) |
| | | }, |
| | | getFilePath(pathSring, column) { |
| | | // è·å表çå¾ç䏿件æ¾ç¤º |
| | | if (!pathSring) return []; |
| | | if (!pathSring) return [] |
| | | // å¢å å¾çèªå®ä¹æä½ |
| | | // è¿åæ ¼å¼å¿
é¡»æ¯[{name:"æä»¶å",path:"å¾çå
¨è·¯å¾æbase64æ ¼å¼"}] |
| | | if (column.formatter) { |
| | | return column.formatter(pathSring); |
| | | return column.formatter(pathSring) |
| | | } |
| | | let filePath; |
| | | let filePath |
| | | if (column.base64 && pathSring.indexOf('data') != -1) { |
| | | filePath = (',' + pathSring) |
| | | .split(',data') |
| | | .filter((x) => { |
| | | return x; |
| | | return x |
| | | }) |
| | | .map((m) => { |
| | | return 'data' + m; |
| | | }); |
| | | return 'data' + m |
| | | }) |
| | | } else { |
| | | filePath = pathSring.replace(/\\/g, '/').split(','); |
| | | filePath = pathSring.replace(/\\/g, '/').split(',') |
| | | } |
| | | |
| | | let fileInfo = []; |
| | | let fileInfo = [] |
| | | for (let index = 0; index < filePath.length; index++) { |
| | | let file = filePath[index]; |
| | | let file = filePath[index] |
| | | // 2020.12.19å¢å base64å¾çæ¾ç¤º |
| | | if (column.base64) { |
| | | fileInfo.push({ |
| | | name: '', |
| | | path: |
| | | (file.indexOf('data') == -1 ? 'data:image/png;base64,' : '') + |
| | | file |
| | | }); |
| | | path: (file.indexOf('data') == -1 ? 'data:image/png;base64,' : '') + file |
| | | }) |
| | | } else if (file.indexOf('.') != -1) { |
| | | let splitFile = file.split('/'); |
| | | let splitFile = file.split('/') |
| | | if (splitFile.length > 0) { |
| | | fileInfo.push({ |
| | | name: splitFile[splitFile.length - 1], |
| | | path: this.base.isUrl(file) ? file : this.http.ipAddress + file |
| | | }); |
| | | }) |
| | | } |
| | | } |
| | | } |
| | | return fileInfo; |
| | | return fileInfo |
| | | }, |
| | | // éç½®table |
| | | reset() { |
| | | if (this.tableData && this.tableData.length > 0) { |
| | | this.tableData.splice(0); |
| | | this.tableData.splice(0) |
| | | } |
| | | if (this.rowData && this.rowData.length > 0) { |
| | | this.rowData.splice(0); |
| | | this.rowData.splice(0) |
| | | } |
| | | if (!this.paginationHide) { |
| | | this.paginations.page = 1; |
| | | this.paginations.page = 1 |
| | | // this.paginations.rows = 30; |
| | | if (this.paginations.wheres && this.paginations.wheres.length > 0) { |
| | | this.paginations.wheres.splice(0); |
| | | this.paginations.wheres.splice(0) |
| | | } |
| | | } |
| | | this.errorFiled = ''; |
| | | this.edit.columnIndex = -1; |
| | | this.edit.rowIndex = -1; |
| | | this.errorFiled = '' |
| | | this.edit.columnIndex = -1 |
| | | this.edit.rowIndex = -1 |
| | | }, |
| | | getHeight() { |
| | | // 没æå®ä¹é«åº¦ä¸æå¤§é«åº¦ï¼ä½¿ç¨tableé»è®¤å¼ |
| | | if (!this.height && !this.maxHeight) { |
| | | return null; |
| | | return null |
| | | } |
| | | // å®ä¹äºæå¤§é«åº¦åä¸ä½¿ç¨é«åº¦ |
| | | if (this.maxHeight) { |
| | | return null; |
| | | return null |
| | | } |
| | | // 使ç¨å½åå®ä¹çé«åº¦ |
| | | return this.height; |
| | | return this.height |
| | | }, |
| | | getMaxHeight() { |
| | | // 没æå®ä¹é«åº¦ä¸æå¤§é«åº¦ï¼ä½¿ç¨tableé»è®¤å¼ |
| | | if (!this.height && !this.maxHeight) { |
| | | return null; |
| | | return null |
| | | } |
| | | // å®ä¹äºæå¤§é«åº¦ä½¿ç¨æå¤§é«åº¦ |
| | | if (this.maxHeight) { |
| | | return this.maxHeight; |
| | | return this.maxHeight |
| | | } |
| | | // ä¸ä½¿ç¨æå¤§é«åº¦ |
| | | return null; |
| | | return null |
| | | }, |
| | | getSelectedOptions(column) { |
| | | if (column.bind && column.bind.data && column.bind.data.length > 0) { |
| | | return column.bind.data; |
| | | return column.bind.data |
| | | } |
| | | return []; |
| | | return [] |
| | | }, |
| | | formatterClick(row, column, event) { |
| | | if (column.click) { |
| | | column.click(row, column, event); |
| | | event.stopPropagation && event.stopPropagation(); |
| | | column.click(row, column, event) |
| | | event.stopPropagation && event.stopPropagation() |
| | | } else { |
| | | this.rowClick(row, column, event); |
| | | this.rowClick(row, column, event) |
| | | } |
| | | }, |
| | | initIndex({ row, rowIndex }) { |
| | | if (this.index) { |
| | | row.elementIndex = rowIndex; |
| | | row.elementIndex = rowIndex |
| | | } |
| | | // if (rowIndex%2!==0) { |
| | | // return "even-row"; |
| | | // } |
| | | return; |
| | | return |
| | | }, |
| | | toggleEdit(event) { }, |
| | | toggleEdit(event) {}, |
| | | setEditStatus(status) { |
| | | // this.columns.forEach((x) => { |
| | | // if (x.hasOwnProperty("edit")) { |
| | |
| | | // éè¿buttonæé®å¯ç¨ç¼è¾ |
| | | beginWithButtonEdit(scope) { |
| | | // url?rowData:tableData |
| | | this.rowBeginEdit(scope.row, this.columns[scope.$index]); |
| | | this.rowBeginEdit(scope.row, this.columns[scope.$index]) |
| | | }, |
| | | rowBeginEdit(row, column) { |
| | | if (this.edit.rowIndex != -1) { |
| | | return; |
| | | return |
| | | } |
| | | let _row = this.columns.find((x) => x.field == column.property); |
| | | let _row = this.columns.find((x) => x.field == column.property) |
| | | if (_row) { |
| | | if (_row.readonly) { |
| | | return; |
| | | return |
| | | } |
| | | if ( |
| | | //ä¸è½ç¼è¾çåæ®µãswitchï¼ç¹å»ä¸å¼å¯å¯ç¼è¾åè½ |
| | | !_row.edit || |
| | | (_row.edit.keep && _row.edit.type == 'switch') |
| | | ) { |
| | | return; |
| | | return |
| | | } |
| | | } |
| | | if (!this.enableEdit) return; |
| | | _errMsg = ''; |
| | | if (!this.enableEdit) return |
| | | _errMsg = '' |
| | | // ç¼è¾å |
| | | this.columns |
| | | .filter((x) => { |
| | | return x.bind && x.bind.data && x.bind.data.length; |
| | | return x.bind && x.bind.data && x.bind.data.length |
| | | }) |
| | | .forEach((column) => { |
| | | let val = row[column.field]; |
| | | let val = row[column.field] |
| | | if (typeof column.bind.data[0].key == 'string') { |
| | | if (typeof val == 'number') { |
| | | row[column.field] = row[column.field] + ''; |
| | | row[column.field] = row[column.field] + '' |
| | | } |
| | | } else { |
| | | //å¤éæè
级èç¼è¾åå,2023.01.06 |
| | | if (Array.isArray(val)) { |
| | | val = val.map(v => { |
| | | val = val.map((v) => { |
| | | return v * 1 |
| | | }); |
| | | row[column.field] = val; |
| | | } |
| | | else if (typeof val == 'string' && val) { |
| | | let _val = val * 1; |
| | | }) |
| | | row[column.field] = val |
| | | } else if (typeof val == 'string' && val) { |
| | | let _val = val * 1 |
| | | if (_val + '' === val) { |
| | | row[column.field] = _val; |
| | | row[column.field] = _val |
| | | } |
| | | } |
| | | } |
| | | }); |
| | | if (!this.beginEdit(row, column, row.elementIndex)) return; |
| | | }) |
| | | if (!this.beginEdit(row, column, row.elementIndex)) return |
| | | if (row.hasOwnProperty('elementIndex')) { |
| | | if (this.edit.rowIndex == row.elementIndex) { |
| | | return; |
| | | return |
| | | } |
| | | this.edit.rowIndex = row.elementIndex; |
| | | this.edit.rowIndex = row.elementIndex |
| | | } |
| | | }, |
| | | rowEndEdit(row, column, event) { |
| | | if (this.clickEdit && event) { |
| | | return true; |
| | | return true |
| | | } |
| | | if (!this.enableEdit) { |
| | | if (!this.errorFiled) { |
| | | if ( |
| | | this.edit.rowIndex != -1 && |
| | | !this.endEditAfter(row, column, this.edit.rowIndex) |
| | | ) { |
| | | return false; |
| | | if (this.edit.rowIndex != -1 && !this.endEditAfter(row, column, this.edit.rowIndex)) { |
| | | return false |
| | | } |
| | | this.edit.rowIndex = -1; |
| | | this.edit.rowIndex = -1 |
| | | } |
| | | return true; |
| | | return true |
| | | } |
| | | if (!this.doubleEdit && event) { |
| | | return true; |
| | | return true |
| | | } |
| | | let _row = this.url |
| | | ? this.rowData[this.edit.rowIndex] |
| | | : this.tableData[this.edit.rowIndex]; |
| | | let _row = this.url ? this.rowData[this.edit.rowIndex] : this.tableData[this.edit.rowIndex] |
| | | // ç»æç¼è¾å |
| | | if (!this.endEditBefore(_row, column, this.edit.rowIndex)) return false; |
| | | if (!this.endEditBefore(_row, column, this.edit.rowIndex)) return false |
| | | if (this.edit.rowIndex != -1) { |
| | | //2022.06.26ä¿®å¤è¡¨æ ¼å
容忢åè¡æ°ä¸ä¸è´æ¶ä¸è½ç¼è¾çé®é¢ |
| | | if (this.edit.rowIndex - 1 > (this.rowData || this.tableData).length) { |
| | | this.edit.rowIndex = -1; |
| | | return; |
| | | this.edit.rowIndex = -1 |
| | | return |
| | | } |
| | | let row = (this.url ? this.rowData : this.tableData)[ |
| | | this.edit.rowIndex |
| | | ]; |
| | | let row = (this.url ? this.rowData : this.tableData)[this.edit.rowIndex] |
| | | for (let index = 0; index < this.columns.length; index++) { |
| | | const _column = this.columns[index]; |
| | | const _column = this.columns[index] |
| | | if (_column.edit) { |
| | | if (!this.validateRow(row, _column)) { |
| | | return; |
| | | return |
| | | } |
| | | } |
| | | } |
| | | } |
| | | if (!this.endEditAfter(_row, column, this.edit.rowIndex)) return false; |
| | | this.edit.rowIndex = -1; |
| | | return true; |
| | | if (!this.endEditAfter(_row, column, this.edit.rowIndex)) return false |
| | | this.edit.rowIndex = -1 |
| | | return true |
| | | }, |
| | | validateRow(row, option1) { |
| | | if (!this.validateColum(option1, row)) { |
| | | this.errorFiled = option1.field; |
| | | this.errorFiled = option1.field |
| | | // 2022.05.06 ä¿®æ¹é误信æ¯éå¤çé®é¢ |
| | | this.$message.error(option1.title + _errMsg); |
| | | return false; |
| | | this.$message.error(option1.title + _errMsg) |
| | | return false |
| | | } |
| | | this.errorFiled = ''; |
| | | return true; |
| | | this.errorFiled = '' |
| | | return true |
| | | }, |
| | | validateColum(option, data) { |
| | | if (option.hidden || option.bind || !data) return true; |
| | | let val = data[option.field]; |
| | | if (option.hidden || option.bind || !data) return true |
| | | let val = data[option.field] |
| | | if (option.require || option.required) { |
| | | if (val != '0' && (val === '' || val === undefined)) { |
| | | if (!this.errorFiled) { |
| | | _errMsg = 'ä¸è½ä¸ºç©º'; |
| | | _errMsg = 'ä¸è½ä¸ºç©º' |
| | | } |
| | | return false; |
| | | return false |
| | | } |
| | | } |
| | | if (!option.edit) { |
| | | return true; |
| | | return true |
| | | } |
| | | let editType = option.edit.type; |
| | | let editType = option.edit.type |
| | | // éªè¯æ°å |
| | | if (editType == 'int' || editType == 'decimal' || editType == 'number') { |
| | | if (val == '' || val == undefined) return true; |
| | | if (val == '' || val == undefined) return true |
| | | if (editType == 'decimal') { |
| | | if (!this.rule.decimal.test(val)) { |
| | | _errMsg = 'åªè½æ¯æ°å'; |
| | | return false; |
| | | _errMsg = 'åªè½æ¯æ°å' |
| | | return false |
| | | } |
| | | } else if (!this.rule.decimal.test(val)) { |
| | | _errMsg = 'åªè½æ¯æ°å'; |
| | | return false; |
| | | _errMsg = 'åªè½æ¯æ°å' |
| | | return false |
| | | } |
| | | if ( |
| | | option.edit.min != undefined && |
| | | typeof option.edit.min === 'number' && |
| | | val < option.edit.min |
| | | ) { |
| | | _errMsg = 'ä¸è½å°äº' + option.edit.min; |
| | | return false; |
| | | _errMsg = 'ä¸è½å°äº' + option.edit.min |
| | | return false |
| | | } |
| | | if ( |
| | | option.edit.max != undefined && |
| | | typeof option.edit.max === 'number' && |
| | | val > option.edit.max |
| | | ) { |
| | | _errMsg = 'ä¸è½å¤§äº' + option.edit.max; |
| | | return false; |
| | | _errMsg = 'ä¸è½å¤§äº' + option.edit.max |
| | | return false |
| | | } |
| | | return true; |
| | | return true |
| | | } |
| | | |
| | | // éªè¯å符串 |
| | |
| | | typeof option.edit.min === 'number' && |
| | | val.length < option.edit.min |
| | | ) { |
| | | _errMsg = 'è³å°' + option.edit.min + '个å符'; |
| | | return false; |
| | | _errMsg = 'è³å°' + option.edit.min + '个å符' |
| | | return false |
| | | } |
| | | if ( |
| | | option.edit.max != undefined && |
| | | typeof option.edit.max === 'number' && |
| | | val.length > option.edit.max |
| | | ) { |
| | | _errMsg = 'æå¤' + option.edit.max + '个å符'; |
| | | return false; |
| | | _errMsg = 'æå¤' + option.edit.max + '个å符' |
| | | return false |
| | | } |
| | | } |
| | | return true; |
| | | return true |
| | | }, |
| | | delRow() { |
| | | let rows = this.getSelected(); |
| | | if (rows.length == 0) return this.$Message.error('è¯·éæ©è¦å é¤çè¡!'); |
| | | let rows = this.getSelected() |
| | | if (rows.length == 0) return this.$Message.error('è¯·éæ©è¦å é¤çè¡!') |
| | | |
| | | let data = this.url ? this.rowData : this.tableData; |
| | | let indexArr = this.getSelectedIndex(); |
| | | let data = this.url ? this.rowData : this.tableData |
| | | let indexArr = this.getSelectedIndex() |
| | | if (indexArr.length == 0) { |
| | | return this.$Message.error( |
| | | "å 餿ä½å¿
须设置VolTableç屿§index='true'" |
| | | ); |
| | | return this.$Message.error("å 餿ä½å¿
须设置VolTableç屿§index='true'") |
| | | } |
| | | // if (indexArr.length == 0 || !this.key) { |
| | | // return this.$message.error( |
| | |
| | | } else { |
| | | for (let i = data.length - 1; i >= 0; i--) { |
| | | if (indexArr.indexOf(i) != -1) { |
| | | data.splice(i, 1); |
| | | data.splice(i, 1) |
| | | } |
| | | } |
| | | } |
| | | this.edit.rowIndex = -1; |
| | | return rows; |
| | | this.edit.rowIndex = -1 |
| | | return rows |
| | | }, |
| | | addRow(row) { |
| | | if (!row) { |
| | | row = {}; |
| | | row = {} |
| | | } |
| | | this.columns.forEach((x) => { |
| | | // 2022.05.06 æ·»å è¡æ¶ï¼å¦æåæç¼è¾å±æ§ï¼è®¾ç½®å¼å¯ç¼è¾(é¿å
å
³éç¼è¾åï¼æ æ³å次å¯ç¨ç¼è¾)?? |
| | | //x.readonly = false; |
| | | if (!row.hasOwnProperty(x.field)) { |
| | | if (x.edit && x.edit.type == 'switch') { |
| | | row[x.field] = x.type == 'bool' ? false : 0; |
| | | row[x.field] = x.type == 'bool' ? false : 0 |
| | | } else if (!row.hidden) { |
| | | // 2020.09.06æ·»å è¡æ¶ï¼è®¾ç½®é»è®¤å段 |
| | | row[x.field] = undefined; |
| | | row[x.field] = undefined |
| | | } |
| | | } |
| | | }); |
| | | }) |
| | | if (!this.url) { |
| | | this.tableData.push(row); |
| | | return; |
| | | this.tableData.push(row) |
| | | return |
| | | } |
| | | this.rowData.push(row); |
| | | this.rowData.push(row) |
| | | }, |
| | | viewImg(row, column, url, $event, index) { |
| | | $event.stopPropagation(); |
| | | const imgs = this.getFilePath(row[column.field], column).map(x => { return x.path }); |
| | | this.$refs.viewer.show(imgs, index); |
| | | $event.stopPropagation() |
| | | const imgs = this.getFilePath(row[column.field], column).map((x) => { |
| | | return x.path |
| | | }) |
| | | this.$refs.viewer.show(imgs, index) |
| | | //this.base.previewImg(url); |
| | | // window.open(row[column.field]); |
| | | }, |
| | | link(row, column, $e) { |
| | | $e.stopPropagation(); |
| | | this.$props.linkView(row, column); |
| | | $e.stopPropagation() |
| | | this.$props.linkView(row, column) |
| | | }, |
| | | getSelected() { |
| | | return this.selectRows; |
| | | return this.selectRows |
| | | }, |
| | | getSelectedIndex() { |
| | | if (!this.index) { |
| | | // åªæè®¾ç½®äºå±æ§indexææç´¢å¼è¡ |
| | | return []; |
| | | return [] |
| | | } |
| | | let indexArr = this.selectRows.map((x) => { |
| | | return x.elementIndex; |
| | | }); |
| | | return indexArr || []; |
| | | return x.elementIndex |
| | | }) |
| | | return indexArr || [] |
| | | }, |
| | | GetTableDictionary(rows) { |
| | | // å页æå·æ°æéæ°ç»å®æ°æ®æº |
| | | if (this.remoteColumns.length == 0 || !rows || rows.length == 0) return; |
| | | let remoteInfo = {}; |
| | | if (this.remoteColumns.length == 0 || !rows || rows.length == 0) return |
| | | let remoteInfo = {} |
| | | for (let index = 0; index < this.remoteColumns.length; index++) { |
| | | const column = this.remoteColumns[index]; |
| | | const column = this.remoteColumns[index] |
| | | // column.bind.data.splice(0); |
| | | let key = column.bind.key; |
| | | let data = []; |
| | | let key = column.bind.key |
| | | let data = [] |
| | | rows.forEach((row) => { |
| | | if (row[column.field] || row[column.field] == '0') { |
| | | if (data.indexOf(row[column.field]) == -1) { |
| | | data.push(row[column.field]); |
| | | data.push(row[column.field]) |
| | | } |
| | | } |
| | | }); |
| | | }) |
| | | if (data.length > 0) { |
| | | remoteInfo[key] = data; |
| | | remoteInfo[key] = data |
| | | } |
| | | } |
| | | if (remoteInfo.length == 0) return; |
| | | if (remoteInfo.length == 0) return |
| | | // ha= Object.assign([], ha, hb) |
| | | this.http |
| | | .post('/api/Sys_Dictionary/GetTableDictionary', remoteInfo) |
| | | .then((dic) => { |
| | | dic.forEach((x) => { |
| | | this.remoteColumns.forEach((column) => { |
| | | if (column.bind.key == x.key) { |
| | | column.bind.data = Object.assign([], column.bind.data, x.data); |
| | | // column.bind.data.push(...x.data); |
| | | } |
| | | }); |
| | | }); |
| | | this.$emit('dicInited', dic); |
| | | }); |
| | | this.http.post('/api/Sys_Dictionary/GetTableDictionary', remoteInfo).then((dic) => { |
| | | dic.forEach((x) => { |
| | | this.remoteColumns.forEach((column) => { |
| | | if (column.bind.key == x.key) { |
| | | column.bind.data = Object.assign([], column.bind.data, x.data) |
| | | // column.bind.data.push(...x.data); |
| | | } |
| | | }) |
| | | }) |
| | | this.$emit('dicInited', dic) |
| | | }) |
| | | }, |
| | | load(query, isResetPage) { |
| | | // isResetPageéç½®åé¡µæ°æ® |
| | | if (!this.url) return; |
| | | if (!this.url) return |
| | | if (isResetPage) { |
| | | this.resetPage(); |
| | | this.resetPage() |
| | | } |
| | | let param = { |
| | | page: this.paginations.page, |
| | |
| | | sort: this.paginations.sort, |
| | | order: this.paginations.order, |
| | | wheres: [] // æ¥è¯¢æ¡ä»¶ï¼æ ¼å¼ä¸º[{ name: "åæ®µ", value: "xx" }] |
| | | }; |
| | | let status = true; |
| | | } |
| | | let status = true |
| | | // åå¹¶æ¥è¯¢ä¿¡æ¯(å
æ¥è¯¢å页ãæåºãæ¥è¯¢æ¡ä»¶ç) |
| | | if (query) { |
| | | param = Object.assign(param, query); |
| | | param = Object.assign(param, query) |
| | | } |
| | | /* æ¥è¯¢åå¤ç(妿éè¦æ¥è¯¢æ¡ä»¶ï¼å®ç°ç»ä»¶æ¹æ³loadBeforeæ¹æ³å³å¯: |
| | | loadBefore=(param, callBack)=>{ |
| | |
| | | }) |
| | | */ |
| | | this.$emit('loadBefore', param, (result) => { |
| | | status = result; |
| | | }); |
| | | if (!status) return; |
| | | status = result |
| | | }) |
| | | if (!status) return |
| | | |
| | | if (param.wheres && param.wheres instanceof Array) { |
| | | param.wheres = JSON.stringify(param.wheres); |
| | | param.wheres = JSON.stringify(param.wheres) |
| | | } |
| | | this.loading = true; |
| | | let url = param.url || this.url; |
| | | param.url = undefined; |
| | | this.loading = true |
| | | let url = param.url || this.url |
| | | param.url = undefined |
| | | this.http.post(url, param).then( |
| | | (data) => { |
| | | //2021.06.04ä¿®å¤treeä¸å·æ°çé®é¢ |
| | | if (this.rowKey) { |
| | | this.randomTableKey++; |
| | | this.rowData.splice(0); |
| | | this.randomTableKey++ |
| | | this.rowData.splice(0) |
| | | } |
| | | this.loading = false; |
| | | let rows = data.rows || []; |
| | | this.loading = false |
| | | let rows = data.rows || [] |
| | | // æ¥è¯¢è¿åç»æåå¤ç |
| | | // 2020.10.30å¢å æ¥è¯¢åè¿åææçæ¥è¯¢ä¿¡æ¯ |
| | | this.$emit( |
| | | 'loadAfter', |
| | | rows, |
| | | (result) => { |
| | | status = result; |
| | | status = result |
| | | }, |
| | | data |
| | | ); |
| | | if (!status) return; |
| | | this.GetTableDictionary(data.rows); |
| | | ) |
| | | if (!status) return |
| | | this.GetTableDictionary(data.rows) |
| | | |
| | | if (this.rowParentField) { |
| | | rows = this.base.convertTree(rows, null, this.rowKey, this.rowParentField); |
| | | rows = this.base.convertTree(rows, null, this.rowKey, this.rowParentField) |
| | | } |
| | | this.rowData = rows; |
| | | this.paginations.total = data.total; |
| | | this.rowData = rows |
| | | this.paginations.total = data.total |
| | | // å计 |
| | | this.getSummaries(data); |
| | | this.getSummaries(data) |
| | | // this.$nextTick(() => { |
| | | // this.$refs.table.doLayout(); |
| | | // }); |
| | | }, |
| | | (error) => { |
| | | this.loading = false; |
| | | this.loading = false |
| | | // this.$Message.error(error || "ç½ç»å¼å¸¸"); |
| | | } |
| | | ); |
| | | ) |
| | | }, // è·åç»è®¡ |
| | | getSummaries(data) { |
| | | if (!this.summary || !data.summary) return; |
| | | this.summaryData.splice(0); |
| | | if (!this.summary || !data.summary) return |
| | | this.summaryData.splice(0) |
| | | // å¼å¯äºè¡å·çï¼+1 |
| | | if (this.columnIndex) { |
| | | this.summaryData.push(''); |
| | | this.summaryData.push('') |
| | | } |
| | | // 妿æcheckboxï¼åºè¯¥ç®ä½æ¯ç¬¬ä¸è¡ |
| | | if (this.ck) { |
| | | this.summaryData.push(''); |
| | | this.summaryData.push('') |
| | | } |
| | | |
| | | this.columns.forEach((col) => { |
| | | if (col.children && col.children.length) { |
| | | col.children.forEach((item) => { |
| | | this.getColumnSummaries(item, data); |
| | | }); |
| | | this.getColumnSummaries(item, data) |
| | | }) |
| | | } else { |
| | | this.getColumnSummaries(col, data); |
| | | this.getColumnSummaries(col, data) |
| | | } |
| | | }); |
| | | }) |
| | | if (this.summaryData.length > 0 && this.summaryData[0] == '') { |
| | | this.summaryData[0] = 'å计'; |
| | | this.summaryData[0] = 'å计' |
| | | } |
| | | }, |
| | | getColumnSummaries(col, data) { |
| | | if (!col.hidden) { |
| | | if (data.summary.hasOwnProperty(col.field)) { |
| | | let sum = data.summary[col.field]; |
| | | let sum = data.summary[col.field] |
| | | //2024.01.07å¢å èªå®ä¹åè®¡æ ¼å¼å |
| | | if (col.summaryFormatter) { |
| | | sum = col.summaryFormatter(sum, col, data, this.summaryData) |
| | | } else if (sum) { |
| | | sum = |
| | | (sum * 1.0).toFixed(col.numberLength || 2).replace('.00', '') * |
| | | 1.0; |
| | | sum = (sum * 1.0).toFixed(col.numberLength || 2).replace('.00', '') * 1.0 |
| | | } |
| | | this.summaryData.push(sum); |
| | | this.summaryData.push(sum) |
| | | } else { |
| | | this.summaryData.push(''); |
| | | this.summaryData.push('') |
| | | } |
| | | } |
| | | }, |
| | | getInputChangeSummaries() { }, |
| | | getInputChangeSummaries() {}, |
| | | handleSizeChange(val) { |
| | | this.paginations.size = val; |
| | | this.paginations.rows = val; |
| | | this.load(); |
| | | this.paginations.size = val |
| | | this.paginations.rows = val |
| | | this.load() |
| | | }, |
| | | handleCurrentChange(val) { |
| | | this.paginations.page = val; |
| | | this.load(); |
| | | this.paginations.page = val |
| | | this.load() |
| | | }, |
| | | sortChange(sort) { |
| | | this.paginations.sort = sort.prop; |
| | | this.paginations.order = sort.order == 'ascending' ? 'asc' : 'desc'; |
| | | this.load(); |
| | | this.paginations.sort = sort.prop |
| | | this.paginations.order = sort.order == 'ascending' ? 'asc' : 'desc' |
| | | this.load() |
| | | }, |
| | | resetPage() { |
| | | // éç½®æ¥è¯¢å页 |
| | | // this.paginations.rows = 30; |
| | | this.paginations.page = 1; |
| | | this.paginations.page = 1 |
| | | }, |
| | | selectionChange(selection) { |
| | | // console.log(selection); |
| | | // éæ©è¡äºä»¶,åªæåéæè§¦å |
| | | this.selectRows = selection; |
| | | this.selectRows = selection |
| | | if (this.single) { |
| | | if (selection.length == 1) { |
| | | this.$emit('rowChange', selection[0]); |
| | | this.$emit('rowChange', selection[0]) |
| | | } |
| | | if (selection.length > 1) { |
| | | let _row = selection[selection.length - 1]; |
| | | this.$refs.table.toggleRowSelection(selection[0]); |
| | | this.selectRows = [_row]; |
| | | let _row = selection[selection.length - 1] |
| | | this.$refs.table.toggleRowSelection(selection[0]) |
| | | this.selectRows = [_row] |
| | | } |
| | | } |
| | | // å°selectionchangeæ´é²åºå» |
| | | this.$emit('selectionChange', selection); |
| | | this.$emit('selectionChange', selection) |
| | | }, |
| | | getColor(row, column) { |
| | | let val = row[column.field]; |
| | | let val = row[column.field] |
| | | if (column.getColor && typeof column.getColor === 'function') { |
| | | let _color = column.getColor(row, column); |
| | | let _color = column.getColor(row, column) |
| | | if (_color) { |
| | | return _color; |
| | | return _color |
| | | } |
| | | } |
| | | if (!val && val != '0') { |
| | | return undefined; |
| | | return undefined |
| | | } |
| | | if (!this.formatConfig[column.field]) { |
| | | this.formatConfig[column.field] = [val]; |
| | | return this.colors[0]; |
| | | this.formatConfig[column.field] = [val] |
| | | return this.colors[0] |
| | | } |
| | | let index = this.formatConfig[column.field].indexOf(val); |
| | | let index = this.formatConfig[column.field].indexOf(val) |
| | | if (index != -1) { |
| | | return this.colors[index]; |
| | | return this.colors[index] |
| | | } |
| | | if (this.formatConfig[column.field].length > 5) { |
| | | return ''; |
| | | return '' |
| | | } |
| | | |
| | | if (index == -1) { |
| | | this.formatConfig[column.field].push(val); |
| | | index = this.formatConfig[column.field].length - 1; |
| | | this.formatConfig[column.field].push(val) |
| | | index = this.formatConfig[column.field].length - 1 |
| | | } |
| | | return this.colors[index] || 'info'; |
| | | return this.colors[index] || 'info' |
| | | }, |
| | | formatterDate(row, column) { |
| | | return (row[column.field] || '').substr(0, 10); |
| | | return (row[column.field] || '').substr(0, 10) |
| | | }, |
| | | formatter(row, column, template) { |
| | | if (!template) return row[column.property]; |
| | | let val = row[column.field]; |
| | | if (!val && val != 0) return val; |
| | | if (!template) return row[column.property] |
| | | let val = row[column.field] |
| | | if (!val && val != 0) return val |
| | | // æ¯å¦å¼ |
| | | if (column.edit && column.edit.type == 'switch') { |
| | | return val ? 'æ¯' : 'å¦'; |
| | | return val ? 'æ¯' : 'å¦' |
| | | } |
| | | if (!column.bind || !column.bind.data) { |
| | | return row[column.field]; |
| | | return row[column.field] |
| | | } |
| | | |
| | | if (column.edit && (column.edit.type == 'selectList' |
| | | || column.edit.type == 'treeSelect' |
| | | || column.bind.type == "cascader" |
| | | || column.bind.type == "treeSelect")) { |
| | | if ( |
| | | column.edit && |
| | | (column.edit.type == 'selectList' || |
| | | column.edit.type == 'treeSelect' || |
| | | column.bind.type == 'cascader' || |
| | | column.bind.type == 'treeSelect') |
| | | ) { |
| | | if (!Array.isArray(val)) { |
| | | row[column.field] = (val + '').split(','); |
| | | row[column.field] = (val + '').split(',') |
| | | } else { |
| | | val = val.join(','); |
| | | val = val.join(',') |
| | | } |
| | | return this.getSelectFormatter(column, val); |
| | | return this.getSelectFormatter(column, val) |
| | | } |
| | | // ç¼è¾å¤étableæ¾ç¤º |
| | | // if ( |
| | |
| | | // column.bind.type == "treeSelect" |
| | | // ) { |
| | | if (typeof val === 'string' && val.indexOf(',') != -1) { |
| | | return this.getSelectFormatter(column, val); |
| | | return this.getSelectFormatter(column, val) |
| | | } |
| | | //} |
| | | let source = column.bind.data.filter((x) => { |
| | | // return x.key != "" && x.key == val; |
| | | // 2020.06.06ä¿®å¤åç¬ä½¿ç¨tableç»ä»¶æ¶,key为æ°å0æ¶è½¬æ¢æææ¬å¤±è´¥çé®é¢ |
| | | return x.key !== '' && x.key !== undefined && x.key + '' === val + ''; |
| | | }); |
| | | if (source && source.length > 0) val = source[0].label || source[0].value; |
| | | return val; |
| | | return x.key !== '' && x.key !== undefined && x.key + '' === val + '' |
| | | }) |
| | | if (source && source.length > 0) val = source[0].label || source[0].value |
| | | return val |
| | | }, |
| | | getSelectFormatter(column, val) { |
| | | // ç¼è¾å¤étableæ¾ç¤º |
| | | let valArr = (val + "").split(","); |
| | | let valArr = (val + '').split(',') |
| | | for (let index = 0; index < valArr.length; index++) { |
| | | (column.bind.orginData && column.bind.orginData.length |
| | | ;(column.bind.orginData && column.bind.orginData.length |
| | | ? column.bind.orginData |
| | | : column.bind.data) |
| | | .forEach((x) => { |
| | | // 2020.06.06ä¿®å¤æ°æ®æºä¸ºselectListæ¶,key为æ°å0æ¶ä¸è½è½¬æ¢ææ¬çé®é¢ |
| | | if (x.key !== "" && x.key !== undefined && x.key + "" == valArr[index] + "") { |
| | | valArr[index] = x.label || x.value; |
| | | } |
| | | }); |
| | | : column.bind.data |
| | | ).forEach((x) => { |
| | | // 2020.06.06ä¿®å¤æ°æ®æºä¸ºselectListæ¶,key为æ°å0æ¶ä¸è½è½¬æ¢ææ¬çé®é¢ |
| | | if (x.key !== '' && x.key !== undefined && x.key + '' == valArr[index] + '') { |
| | | valArr[index] = x.label || x.value |
| | | } |
| | | }) |
| | | } |
| | | return valArr.join(","); |
| | | return valArr.join(',') |
| | | }, |
| | | onChange(scope, val, event, column) { |
| | | // 2020.09.03ä¿®å¤onChangeä¸è§¦åçé®é¢ |
| | | let row = scope.row; |
| | | let row = scope.row |
| | | if (column.onChange && !column.onChange(row, val, event)) { |
| | | return; |
| | | return |
| | | } |
| | | // è¾å
¥æ¡æ±å宿¶è®¡ç® |
| | | this.getInputSummaries(scope, val, event, column); |
| | | this.getInputSummaries(scope, val, event, column) |
| | | }, |
| | | // inputè¾å
¥å®æ¶æ±å |
| | | getInputSummaries(scope, val, event, column) { |
| | | // columnå设置äºsummary屿§çæè®¡ç®å¼ |
| | | if (!column.summary) return; |
| | | let sum = 0; |
| | | if (!column.summary) return |
| | | let sum = 0 |
| | | // let _index = 0; |
| | | (this.url ? this.rowData : this.tableData).forEach((x, index) => { |
| | | ;(this.url ? this.rowData : this.tableData).forEach((x, index) => { |
| | | if (x.hasOwnProperty(column.field) && !isNaN(x[column.field])) { |
| | | // _index = index; |
| | | sum += x[column.field] * 1; |
| | | sum += x[column.field] * 1 |
| | | } |
| | | }); |
| | | }) |
| | | if (sum) { |
| | | if (column.summary == 'avg') { |
| | | sum = sum / (this.rowData.length || this.tableData.length || 1); |
| | | sum = sum / (this.rowData.length || this.tableData.length || 1) |
| | | } |
| | | sum = |
| | | (sum * 1.0).toFixed(column.numberLength || 2).replace('.00', '') * |
| | | 1.0; |
| | | sum = (sum * 1.0).toFixed(column.numberLength || 2).replace('.00', '') * 1.0 |
| | | } |
| | | this.summaryData[this.summaryIndex[column.field]] = sum; |
| | | this.summaryData[this.summaryIndex[column.field]] = sum |
| | | }, |
| | | getSummaryData({ columns, data }) { |
| | | return this.summaryData; |
| | | return this.summaryData |
| | | }, |
| | | getCellStyle(row) { |
| | | // 2020.12.13å¢å 设置åå
æ ¼é¢è² |
| | | if (row.column.property) { |
| | | return ( |
| | | this.cellStyleColumns[row.column.property] && |
| | | this.cellStyleColumns[row.column.property]( |
| | | row.row, |
| | | row.rowIndex, |
| | | row.columnIndex |
| | | ) |
| | | ); |
| | | this.cellStyleColumns[row.column.property](row.row, row.rowIndex, row.columnIndex) |
| | | ) |
| | | } |
| | | }, |
| | | compareDate(date1, date2) { |
| | | if (!date2) { |
| | | return true; |
| | | return true |
| | | } |
| | | return ( |
| | | date1.valueOf() < |
| | | (typeof date2 == 'number' ? date2 : new Date(date2).valueOf()) |
| | | ); |
| | | return date1.valueOf() < (typeof date2 == 'number' ? date2 : new Date(date2).valueOf()) |
| | | }, |
| | | getDateOptions(date, item) { |
| | | //2021.07.17设置æ¶é´å¯éèå´ |
| | | if ((!item.min && !item.max) || !date) { |
| | | return false; |
| | | return false |
| | | } |
| | | if (item.min && item.min.indexOf(' ') == -1) { |
| | | //ä¸è®¾ç½®æ¶åç§ï¼åé¢ä¼èªå¨å ä¸ 08:00 |
| | | item.min = item.min + ' 00:00:000'; |
| | | item.min = item.min + ' 00:00:000' |
| | | } |
| | | return ( |
| | | this.compareDate(date, item.min) || !this.compareDate(date, item.max) |
| | | ); |
| | | return this.compareDate(date, item.min) || !this.compareDate(date, item.max) |
| | | }, |
| | | getDateFormat(column) { |
| | | if (column.format) { |
| | | return column.format; |
| | | return column.format |
| | | } |
| | | if (column.edit.type == "month") { |
| | | return "YYYY-MM"; |
| | | if (column.edit.type == 'month') { |
| | | return 'YYYY-MM' |
| | | } |
| | | //è§https://day.js.org/docs/zh-CN/display/format |
| | | return column.edit.type == 'date' ? 'YYYY-MM-DD' : 'YYYY-MM-DD HH:mm:ss'; |
| | | return column.edit.type == 'date' ? 'YYYY-MM-DD' : 'YYYY-MM-DD HH:mm:ss' |
| | | }, |
| | | userSelect(selection, row) { |
| | | this.selectRows = selection; |
| | | this.selectRows = selection |
| | | if (!this.single) { |
| | | this.$emit('rowChange', { row, selection }); |
| | | this.$emit('rowChange', { row, selection }) |
| | | } |
| | | }, |
| | | isEmptyTag(row, column) { |
| | | if (!row[column.field] && row[column.field] != '0') { |
| | | return 'empty-tag'; |
| | | return 'empty-tag' |
| | | } |
| | | return ''; |
| | | return '' |
| | | }, |
| | | filterChildrenColumn(children) { |
| | | if (!children) { |
| | | return []; |
| | | return [] |
| | | } |
| | | return children.filter((x) => { |
| | | return !x.hidden; |
| | | }); |
| | | return !x.hidden |
| | | }) |
| | | }, |
| | | initColumnDisabled(row, column) { |
| | | return column.getDisabled && column.getDisabled(row, column); |
| | | return column.getDisabled && column.getDisabled(row, column) |
| | | }, |
| | | showUpload(row, column) { |
| | | this.fileInfo = (row[column.field] || '').split(",") |
| | | .filter(x => { return x }) |
| | | .map(item => { |
| | | return { path: item, name: "" }; |
| | | this.fileInfo = (row[column.field] || '') |
| | | .split(',') |
| | | .filter((x) => { |
| | | return x |
| | | }) |
| | | this.currentRow = row; |
| | | this.currentColumn = column; |
| | | .map((item) => { |
| | | return { path: item, name: '' } |
| | | }) |
| | | this.currentRow = row |
| | | this.currentColumn = column |
| | | if (this.currentColumn.edit.autoUpload === undefined) { |
| | | this.currentColumn.edit.autoUpload = true; |
| | | this.currentColumn.edit.autoUpload = true |
| | | } |
| | | if (this.currentColumn.edit.multiple === undefined) { |
| | | this.currentColumn.edit.multiple = false; |
| | | this.currentColumn.edit.multiple = false |
| | | } |
| | | |
| | | if (this.currentColumn.edit.url === undefined) { |
| | | this.uploadUrl = 'api/' + (this.url || '').replace('/api', 'api').split('/')[1] + '/upload' |
| | | } else { |
| | | this.uploadUrl = this.currentColumn.edit.url; |
| | | this.uploadUrl = this.currentColumn.edit.url |
| | | } |
| | | this.uploadModel = true; |
| | | this.uploadModel = true |
| | | }, |
| | | uploadAfter(result, files) { |
| | | this.currentColumn.uploadAfter && this.currentColumn.uploadAfter(result, files); |
| | | return true; |
| | | this.currentColumn.uploadAfter && this.currentColumn.uploadAfter(result, files) |
| | | return true |
| | | }, |
| | | uploadBefore(files, params) { |
| | | this.currentColumn.uploadBefore && this.currentColumn.uploadBefore(files, this.currentRow, params); |
| | | return true; |
| | | this.currentColumn.uploadBefore && |
| | | this.currentColumn.uploadBefore(files, this.currentRow, params) |
| | | return true |
| | | }, |
| | | saveUpload() { |
| | | //çæä¿ååè¿åçè·¯å¾ |
| | | let arr = this.fileInfo.map((x) => { |
| | | if (x.path) { |
| | | return x.path; |
| | | return x.path |
| | | } |
| | | return result.data + x.name; |
| | | }); |
| | | return result.data + x.name |
| | | }) |
| | | |
| | | this.currentRow[this.currentColumn.field] = arr.join(","); |
| | | this.uploadModel = false; |
| | | return true; |
| | | this.currentRow[this.currentColumn.field] = arr.join(',') |
| | | this.uploadModel = false |
| | | return true |
| | | }, |
| | | expandChange(row, expandedRows) { // å½ç¨æ·å¯¹æä¸è¡å±å¼æè
å
³éçæ¶ |
| | | expandChange(row, expandedRows) { |
| | | // å½ç¨æ·å¯¹æä¸è¡å±å¼æè
å
³éçæ¶ |
| | | if (!this.defaultExpandAll && !this.lazy) { |
| | | if (expandedRows) { |
| | | if (this.expandRowKeys.indexOf(row[this.rowKey]) == -1) { |
| | | this.expandRowKeys.push(row[this.rowKey]) |
| | | } |
| | | } else { |
| | | let _index = this.expandRowKeys.findIndex(x => { return x == row[this.rowKey] }); |
| | | let _index = this.expandRowKeys.findIndex((x) => { |
| | | return x == row[this.rowKey] |
| | | }) |
| | | if (_index != -1) { |
| | | this.expandRowKeys.splice(_index, 1); |
| | | this.expandRowKeys.splice(_index, 1) |
| | | } |
| | | } |
| | | } |
| | | }, |
| | | handleImageError($e) { |
| | | $e.target.src = this.defaultImg; |
| | | $e.target.src = this.defaultImg |
| | | }, |
| | | cellSpanMethod({ row, column, rowIndex, columnIndex }) { |
| | | return this.spanMethod({ row, column, rowIndex, columnIndex }, this.url ? this.rowData : this.tableData) |
| | | return this.spanMethod( |
| | | { row, column, rowIndex, columnIndex }, |
| | | this.url ? this.rowData : this.tableData |
| | | ) |
| | | } |
| | | } |
| | | }); |
| | | }) |
| | | </script> |
| | | <style lang="less" scoped> |
| | | .vol-table { |
| | |
| | | .e-item { |
| | | display: flex; |
| | | |
| | | >div:first-child { |
| | | > div:first-child { |
| | | flex: 1; |
| | | } |
| | | } |
| | |
| | | .small-table ::v-deep(.el-table__cell) { |
| | | padding: 6px 0; |
| | | font-size: 13px; |
| | | |
| | | } |
| | | |
| | | .small-table ::v-deep(.cell-tag) { |