| | |
| | | |
| | | ]); |
| | | |
| | | var wrkMastLogFieldOrder = [ |
| | | 'wrkNo', |
| | | 'wmsWrkNo', |
| | | 'wrkSts', |
| | | 'ioType', |
| | | 'ioTime', |
| | | 'appeTime', |
| | | 'ioPri', |
| | | 'sourceStaNo', |
| | | 'staNo', |
| | | 'sourceLocNo', |
| | | 'locNo', |
| | | 'crnNo', |
| | | 'dualCrnNo', |
| | | 'batch', |
| | | 'batchSeq', |
| | | 'barcode', |
| | | 'modiUser', |
| | | 'modiTime', |
| | | 'appeUser', |
| | | 'systemMsg', |
| | | 'errorTime', |
| | | 'errorMemo', |
| | | 'memo', |
| | | 'id' |
| | | ]; |
| | | |
| | | var wrkMastLogFieldSettings = { |
| | | wrkNo: { |
| | | label: '工作号', |
| | | searchable: true, |
| | | quickSearch: true, |
| | | sortable: true, |
| | | minWidth: 110 |
| | | }, |
| | | wmsWrkNo: { |
| | | label: 'WMS工作号', |
| | | searchable: true, |
| | | quickSearch: true, |
| | | minWidth: 140 |
| | | }, |
| | | wrkSts: { |
| | | label: '工作状态', |
| | | kind: 'foreign', |
| | | tableProp: 'wrkSts$', |
| | | exportField: 'wrkSts$', |
| | | foreignQuery: 'basWrkStatus', |
| | | searchable: true, |
| | | quickSearch: true, |
| | | minWidth: 160 |
| | | }, |
| | | ioType: { |
| | | label: '入出库类型', |
| | | kind: 'foreign', |
| | | tableProp: 'ioType$', |
| | | exportField: 'ioType$', |
| | | foreignQuery: 'basWrkIotype', |
| | | searchable: true, |
| | | quickSearch: true, |
| | | minWidth: 160 |
| | | }, |
| | | ioTime: { |
| | | label: '工作时间', |
| | | tableProp: 'ioTime$', |
| | | exportField: 'ioTime$', |
| | | kind: 'date', |
| | | searchable: true, |
| | | quickSearch: true, |
| | | defaultVisible: false, |
| | | minWidth: 300 |
| | | }, |
| | | appeTime: { |
| | | label: '工作时间', |
| | | tableProp: 'appeTime$', |
| | | exportField: 'appeTime$', |
| | | sortable: true, |
| | | minWidth: 168 |
| | | }, |
| | | ioPri: { |
| | | label: '优先级', |
| | | minWidth: 90 |
| | | }, |
| | | sourceStaNo: { |
| | | label: '源站' |
| | | }, |
| | | staNo: { |
| | | label: '目标站' |
| | | }, |
| | | sourceLocNo: { |
| | | label: '源库位', |
| | | minWidth: 120 |
| | | }, |
| | | locNo: { |
| | | label: '目标库位', |
| | | minWidth: 120 |
| | | }, |
| | | crnNo: { |
| | | label: '堆垛机', |
| | | minWidth: 100 |
| | | }, |
| | | dualCrnNo: { |
| | | label: '双工位堆垛机', |
| | | minWidth: 140 |
| | | }, |
| | | batch: { |
| | | label: '批次', |
| | | minWidth: 100 |
| | | }, |
| | | batchSeq: { |
| | | label: '批次序列', |
| | | minWidth: 110 |
| | | }, |
| | | barcode: { |
| | | label: '条码', |
| | | minWidth: 140 |
| | | }, |
| | | modiUser: { |
| | | label: '修改人员', |
| | | tableProp: 'modiUser$', |
| | | exportField: 'modiUser$', |
| | | defaultVisible: false |
| | | }, |
| | | modiTime: { |
| | | label: '修改时间', |
| | | tableProp: 'modiTime$', |
| | | exportField: 'modiTime$', |
| | | defaultVisible: false, |
| | | minWidth: 168 |
| | | }, |
| | | appeUser: { |
| | | label: '创建者', |
| | | tableProp: 'appeUser$', |
| | | exportField: 'appeUser$', |
| | | defaultVisible: false |
| | | }, |
| | | systemMsg: { |
| | | label: '系统消息', |
| | | textarea: true, |
| | | defaultVisible: false, |
| | | minWidth: 220 |
| | | }, |
| | | errorTime: { |
| | | label: '异常时间', |
| | | tableProp: 'errorTime$', |
| | | exportField: 'errorTime$', |
| | | defaultVisible: false, |
| | | minWidth: 168 |
| | | }, |
| | | errorMemo: { |
| | | label: '异常说明', |
| | | textarea: true, |
| | | defaultVisible: false, |
| | | minWidth: 220 |
| | | }, |
| | | memo: { |
| | | label: '备注', |
| | | textarea: true, |
| | | defaultVisible: false, |
| | | minWidth: 220 |
| | | }, |
| | | id: { |
| | | label: '编号', |
| | | defaultVisible: false, |
| | | minWidth: 90 |
| | | } |
| | | }; |
| | | |
| | | fieldMeta = filterFieldMetaByOrder(fieldMeta, wrkMastLogFieldOrder, wrkMastLogFieldSettings); |
| | | |
| | | function filterFieldMetaByOrder(list, order, settings) { |
| | | var metaMap = {}; |
| | | (list || []).forEach(function (field) { |
| | | if (!field || !field.field) { |
| | | return; |
| | | } |
| | | metaMap[field.field] = Object.assign({}, field); |
| | | }); |
| | | return (order || []).map(function (fieldName) { |
| | | if (!metaMap[fieldName]) { |
| | | return null; |
| | | } |
| | | var merged = Object.assign({}, metaMap[fieldName], settings && settings[fieldName] ? settings[fieldName] : {}); |
| | | if (merged.searchable === undefined) { |
| | | merged.searchable = false; |
| | | } |
| | | if (merged.quickSearch === undefined) { |
| | | merged.quickSearch = false; |
| | | } |
| | | if (merged.editable === undefined) { |
| | | merged.editable = false; |
| | | } |
| | | if (merged.defaultVisible === undefined) { |
| | | merged.defaultVisible = true; |
| | | } |
| | | return merged; |
| | | }).filter(Boolean); |
| | | } |
| | | |
| | | function formatFieldLabel(field) { |
| | | var raw = field && field.label ? String(field.label).trim() : ''; |
| | | if (raw) { |
| | |
| | | } |
| | | |
| | | function isSearchableField(field) { |
| | | return !!field && field.kind !== 'image' && !field.textarea; |
| | | return !!field && field.searchable === true && field.kind !== 'image' && !field.textarea; |
| | | } |
| | | |
| | | function isSortableField(field) { |
| | | if (!field) { |
| | | return false; |
| | | } |
| | | if (field.primaryKey) { |
| | | return true; |
| | | if (typeof field.sortable === 'boolean') { |
| | | return field.sortable; |
| | | } |
| | | return field.kind !== 'image' && !field.textarea && field.kind !== 'foreign'; |
| | | } |
| | |
| | | } |
| | | |
| | | function createDefaultVisibleColumnKeys() { |
| | | return fieldMeta.map(function (field) { |
| | | return fieldMeta.filter(function (field) { |
| | | return field.defaultVisible !== false; |
| | | }).map(function (field) { |
| | | return field.field; |
| | | }); |
| | | } |
| | |
| | | }); |
| | | }, |
| | | quickSearchableFields: function () { |
| | | var result = []; |
| | | this.searchableFields.forEach(function (field) { |
| | | if (result.length >= 3 || field.kind === 'date') { |
| | | return; |
| | | } |
| | | result.push(field); |
| | | return this.searchableFields.filter(function (field) { |
| | | return field.quickSearch === true; |
| | | }); |
| | | return result; |
| | | }, |
| | | advancedSearchableFields: function () { |
| | | var quickKeys = this.quickSearchableFields.map(function (field) { |
| | | return field.field; |
| | | }); |
| | | return this.searchableFields.filter(function (field) { |
| | | return quickKeys.indexOf(field.field) === -1; |
| | | return field.quickSearch !== true; |
| | | }); |
| | | }, |
| | | hasAdvancedFilters: function () { |
| | |
| | | }, |
| | | editableFields: function () { |
| | | return this.fieldMeta.filter(function (field) { |
| | | return !field.primaryKey; |
| | | return !field.primaryKey && field.editable === true; |
| | | }); |
| | | }, |
| | | exportColumns: function () { |
| | |
| | | <html lang="zh-CN"> |
| | | <head> |
| | | <meta charset="utf-8"> |
| | | <title>WrkMastLog 管理</title> |
| | | <title>工作历史档查询</title> |
| | | <meta name="renderer" content="webkit"> |
| | | <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1"> |
| | | <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1"> |
| | |
| | | .toolbar-search-item.keyword { |
| | | flex: 0 0 220px; |
| | | min-width: 220px; |
| | | } |
| | | |
| | | .toolbar-search-item.wide { |
| | | flex: 0 0 300px; |
| | | min-width: 300px; |
| | | } |
| | | |
| | | .toolbar-query-actions, |
| | |
| | | <div |
| | | v-for="field in quickSearchableFields" |
| | | :key="'quick-' + field.field" |
| | | class="toolbar-search-item"> |
| | | :class="['toolbar-search-item', field.kind === 'date' ? 'wide' : '']"> |
| | | <el-date-picker |
| | | v-if="field.kind === 'date'" |
| | | v-model="searchForm[field.field]" |
| | | size="small" |
| | | type="datetimerange" |
| | | unlink-panels |
| | | range-separator="至" |
| | | :start-placeholder="field.label + '开始'" |
| | | :end-placeholder="field.label + '结束'" |
| | | value-format="yyyy-MM-dd HH:mm:ss" |
| | | style="width: 100%;"> |
| | | </el-date-picker> |
| | | <el-select |
| | | v-if="field.kind === 'enum'" |
| | | v-else-if="field.kind === 'enum'" |
| | | v-model="searchForm[field.field]" |
| | | size="small" |
| | | clearable |
| | |
| | | </div> |
| | | </div> |
| | | <div class="toolbar-ops"> |
| | | <el-button size="small" type="primary" plain icon="el-icon-plus" @click="openCreateDialog">新增</el-button> |
| | | <el-button size="small" type="danger" plain icon="el-icon-delete" :disabled="selection.length === 0" @click="removeSelection">删除</el-button> |
| | | <el-popover |
| | | placement="bottom" |
| | | width="320" |
| | |
| | | <el-button slot="reference" size="small" plain icon="el-icon-setting">列设置</el-button> |
| | | </el-popover> |
| | | <el-button size="small" plain icon="el-icon-download" :loading="exporting" @click="exportRows">导出</el-button> |
| | | <el-button size="small" plain icon="el-icon-refresh-left" @click="loadTable">刷新</el-button> |
| | | </div> |
| | | </div> |
| | | </div> |
| | |
| | | border |
| | | stripe |
| | | :height="tableHeight" |
| | | @selection-change="handleSelectionChange" |
| | | @sort-change="handleSortChange"> |
| | | <el-table-column type="selection" width="52" align="center"></el-table-column> |
| | | <el-table-column |
| | | v-for="field in visibleColumns" |
| | | :key="field.field" |
| | |
| | | <span v-else>{{ valueOrDash(getTableValue(scope.row, field)) }}</span> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column label="操作" width="160" fixed="right" align="center"> |
| | | <template slot-scope="scope"> |
| | | <el-button type="text" @click="openEditDialog(scope.row)">修改</el-button> |
| | | <el-button type="text" style="color:#f56c6c;" @click="removeRows([scope.row[primaryKeyField]])">删除</el-button> |
| | | </template> |
| | | </el-table-column> |
| | | </el-table> |
| | | </div> |
| | | </div> |
| | |
| | | </div> |
| | | </div> |
| | | </section> |
| | | |
| | | <el-dialog |
| | | class="dialog-panel" |
| | | :title="dialog.mode === 'create' ? '新增 WrkMastLog' : '修改 WrkMastLog'" |
| | | :visible.sync="dialog.visible" |
| | | width="760px" |
| | | :close-on-click-modal="false"> |
| | | <el-form |
| | | ref="dialogForm" |
| | | :model="dialogForm" |
| | | :rules="dialogRules" |
| | | label-width="110px" |
| | | size="small"> |
| | | <el-row :gutter="16"> |
| | | <el-col |
| | | v-for="field in editableFields" |
| | | :key="'dialog-' + field.field" |
| | | :span="field.textarea || field.kind === 'image' ? 24 : 12"> |
| | | <el-form-item :label="field.label" :prop="field.field"> |
| | | <el-date-picker |
| | | v-if="field.kind === 'date'" |
| | | v-model="dialogForm[field.field]" |
| | | type="datetime" |
| | | value-format="yyyy-MM-dd HH:mm:ss" |
| | | :placeholder="'请选择' + field.label" |
| | | style="width: 100%;"> |
| | | </el-date-picker> |
| | | <el-select |
| | | v-else-if="field.kind === 'enum'" |
| | | v-model="dialogForm[field.field]" |
| | | clearable |
| | | :placeholder="'请选择' + field.label" |
| | | style="width: 100%;"> |
| | | <el-option |
| | | v-for="option in field.enumOptions" |
| | | :key="'dialog-' + field.field + '-' + option.rawValue" |
| | | :label="option.label" |
| | | :value="normalizeOptionValue(field, option.rawValue)"> |
| | | </el-option> |
| | | </el-select> |
| | | <el-autocomplete |
| | | v-else-if="field.kind === 'foreign'" |
| | | v-model="dialogDisplay[field.field]" |
| | | :fetch-suggestions="getSuggestionFetcher(field)" |
| | | :placeholder="'请输入' + field.label" |
| | | style="width: 100%;" |
| | | @select="handleForeignSelect(field, $event)" |
| | | @input="handleForeignInput(field)"> |
| | | <template slot-scope="{ item }"> |
| | | <div class="mono">{{ item.value }}</div> |
| | | <div style="font-size:12px;color:#8a98ac;">ID: {{ item.id }}</div> |
| | | </template> |
| | | </el-autocomplete> |
| | | <el-switch |
| | | v-else-if="field.kind === 'checkbox'" |
| | | v-model="dialogForm[field.field]" |
| | | :active-value="normalizeOptionValue(field, field.checkboxActiveRaw)" |
| | | :inactive-value="normalizeOptionValue(field, field.checkboxInactiveRaw)" |
| | | active-color="#13ce66" |
| | | inactive-color="#c0c4cc"> |
| | | </el-switch> |
| | | <el-input |
| | | v-else-if="field.textarea" |
| | | v-model.trim="dialogForm[field.field]" |
| | | type="textarea" |
| | | :rows="3" |
| | | :placeholder="'请输入' + field.label"> |
| | | </el-input> |
| | | <el-input |
| | | v-else |
| | | v-model.trim="dialogForm[field.field]" |
| | | :placeholder="'请输入' + field.label"> |
| | | </el-input> |
| | | </el-form-item> |
| | | </el-col> |
| | | </el-row> |
| | | </el-form> |
| | | <div slot="footer" class="dialog-footer"> |
| | | <el-button @click="dialog.visible = false">取消</el-button> |
| | | <el-button type="primary" :loading="dialog.submitting" @click="submitDialog">保存</el-button> |
| | | </div> |
| | | </el-dialog> |
| | | </div> |
| | | |
| | | <script type="text/javascript" src="../../static/js/jquery/jquery-3.3.1.min.js"></script> |