MES优化

This commit is contained in:
xielue 2023-06-02 10:15:56 +08:00
parent 73b66c04f7
commit fa69689738
15 changed files with 748 additions and 257 deletions

View File

@ -22,6 +22,7 @@
"core-js": "^3.6.5",
"date-fns": "^2.14.0",
"enquire.js": "^2.1.6",
"file-saver": "^2.0.5",
"hevue-img-preview": "^6.1.0",
"highlight.js": "^10.2.1",
"js-cookie": "^2.2.1",

View File

@ -1,16 +1,20 @@
<template>
<div class="page-body">
<template>
<div class="page-body">
<vxe-form :data="options.formOptions.data" ref="xForm" :title-width="options.formOptions.titleWidth"
:title-align="options.formOptions.titleAlign" :rules="options.formOptions.rules" :items="options.formOptions.items" titleColon>
</vxe-form>
<div class="footerbar">
<a-button type="primary" @click="ok">确定</a-button>
<a-button @click="cancel">取消</a-button>
</div>
<vxe-form :data="options.formOptions.data" ref="xForm" :title-width="options.formOptions.titleWidth"
:title-align="options.formOptions.titleAlign" :rules="options.formOptions.rules" :items="options.formOptions.items"
titleColon>
</vxe-form>
</div>
<div class="footerbar">
<a-button type="primary" @click="save">确定</a-button>
<a-button @click="cancel">取消</a-button>
</div>
</div>
</template>
<script>
@ -18,12 +22,12 @@
export default {
name: 'BasicPageEdit',
components: { },
name: 'BasicPageEdit',
components: {},
props: {
options: {
type: Object
},
},
dataId: {
}
@ -33,23 +37,24 @@ export default {
data() {
return {
isEdit:false
isEdit: false,
defaultFormData: {}
};
},
computed: {
computed: {
},
created() {
this.defaultFormData = JSON.parse(JSON.stringify(this.options.formOptions.data || {}))
},
//
methods: {
//
back() {
@ -59,7 +64,7 @@ export default {
this.$closePage({
closeRoute: this.options.addPageUrl
});
} else {
} else {
this.$closePage({
closeRoute: this.options.editPageUrl
});
@ -69,8 +74,10 @@ export default {
},
//
ok() {
save({ afterSave }) {
let _this = this;
let save = () => {
this.isEdit = this.options.isEdit;
@ -78,9 +85,9 @@ export default {
//
let action = !this.isEdit ? this.options.actions.create : this.options.actions.update;
// id id
let postdata = Object.assign({}, this.options.formOptions.data);
let postdata = Object.assign({}, this.options.formOptions.data);
//
if (this.isEdit) {
// postdata = { MesUnit: postdata }
@ -96,10 +103,34 @@ export default {
data: postdata,
useBigInt: true,
}).then(() => { //
this.$mk.success("保存成功");
if (!this.isEdit) { //
this.back();
if (afterSave) {
afterSave();
} else {
this.$mk.success("保存成功");
this.$emit("afterSave", { data: postdata });
if (!this.isEdit) { //
if (this.options.action_afterSave == "confirm") {
this.$confirm({
title: '提示',
content: '新增成功,是否继续',
okText: '确认',
cancelText: '返回',
onOk() {
_this.options.formOptions.data = _this.defaultFormData;
},
onCancel() {
_this.back();
},
});
} else {
this.back();
}
}
}
}).catch((a) => { //
this.$mk.error(a.data.msg); //
});

View File

@ -22,6 +22,12 @@
<vxe-toolbar ref="xToolbar" custom>
<template #buttons>
<a-button type="primary" icon="delete" @click="pageDelete()">批量删除</a-button>
<a-button type="primary" style="margin-left: 5px;" icon="export" v-if="options.enabledExport"
@click="pageExport()">导出</a-button>
<a-button type="primary" style="margin-left: 5px;" icon="import" v-if="options.enabledImport"
@click="pageImport()">导入</a-button>
<a-button type="default" style="margin-left: 5px;" v-if="options.enabledImportTemplate"
@click="pageImportTemplate()">下载导入模板</a-button>
</template>
</vxe-toolbar>
<!-- 表格区 -->
@ -38,11 +44,26 @@
</div>
<vxe-modal v-model="showSheetNameSelector" width="500" height="400" title="选择表名">
<template #default>
<div>
<vxe-select v-model="excelSheetName" placeholder="选择表名" style="width:100%">
<vxe-option v-for="n in excelSheetNames" :key="n" :value="n" :label="n"></vxe-option>
</vxe-select>
</div>
<div style="margin-top:10px;">
<vxe-button status="primary" content="确定" @click="importOk"></vxe-button>
</div>
</template>
</vxe-modal>
</div>
</template>
<script>
import FileSaver from 'file-saver'
import * as XLSX from 'xlsx'
import { read, utils } from "xlsx"; //
export default {
@ -55,7 +76,7 @@ export default {
data() {
return {
showSheetNameSelector: false, excelSheetName: '', excelSheetNames: [],
bindSearchData: null
};
@ -117,11 +138,120 @@ export default {
//
methods: {
pageExport() {
let jsonRows = [];
let headerCells = [];
// =============================== status Start ===============================
for (let i = 0; i < this.options.exportColumns.length; i++) {
let item = this.options.exportColumns[i];
headerCells.push(item.title);
}
// =============================== status End ===============================
let details = JSON.parse(JSON.stringify(this.$refs.xGrid.getTableData().fullData));
details.forEach(row => {
let jsonRow = {
};
for (let i = 0; i < this.options.exportColumns.length; i++) {
let item = this.options.exportColumns[i];
jsonRow[item.title] = row[item.field] || '';
}
jsonRows.push(jsonRow);
});
var worksheet = XLSX.utils.json_to_sheet(jsonRows, { header: headerCells, skipHeader: false });
const workbook = XLSX.utils.book_new();
XLSX.utils.book_append_sheet(workbook, worksheet, "Sheet1");
/* get binary string as output */
var wbout = XLSX.write(workbook, { bookType: 'xlsx', bookSST: true, type: 'array' })
try {
FileSaver.saveAs(new Blob([wbout], { type: 'application/octet-stream' }), (this.options.exportFileTitle || '导出数据' )+ '.xlsx')
} catch (e) {
if (typeof console !== 'undefined') {
console.log(e, wbout)
}
}
},
pageImportTemplate() {
let jsonRows = [];
let headerCells = [];
for (let i = 0; i < this.options.exportColumns.length; i++) {
let item = this.options.exportColumns[i];
headerCells.push(item.title);
}
var worksheet = XLSX.utils.json_to_sheet(jsonRows, { header: headerCells, skipHeader: false });
const workbook = XLSX.utils.book_new();
XLSX.utils.book_append_sheet(workbook, worksheet, "Sheet1");
/* get binary string as output */
var wbout = XLSX.write(workbook, { bookType: 'xlsx', bookSST: true, type: 'array' })
try {
FileSaver.saveAs(new Blob([wbout], { type: 'application/octet-stream' }), '导入模板.xlsx')
} catch (e) {
if (typeof console !== 'undefined') {
console.log(e, wbout)
}
}
},
pageImport() {
let fileForm = document.createElement('form');
let fileInput = document.createElement('input');
fileForm.className = 'vxe-table--file-form';
fileInput.name = 'file';
fileInput.type = 'file';
fileForm.appendChild(fileInput);
document.body.appendChild(fileForm);
fileInput.multiple = false;
fileInput.accept = '';
fileInput.onchange = (evnt) => {
var files = evnt.target.files;
var file = files[0];
this.readExcel(file)
};
fileForm.reset();
fileInput.click();
},
readExcel(file) {
const fileReader = new FileReader();
this.$mk.loading("读取中...");
fileReader.onload = ev => {
try {
const data = ev.target.result;
const workbook = read(data, { type: "binary" });
this.workbook = workbook;
this.excelSheetNames = workbook.SheetNames;
this.showSheetNameSelector = true;
this.$mk.hideLoading();
} catch (e) {
console.log("error:" + e);
return false;
}
}
fileReader.readAsBinaryString(file);
},
importOk() {
this.showSheetNameSelector = false;
const { workbook, excelSheetName } = this;
if (!excelSheetName) {
return;
}
let tableData = utils.sheet_to_json(workbook.Sheets[excelSheetName]);
this.$emit("importData", { data: tableData });
},
//
onDateChange(date) { //
if (date && date.length) { //
@ -149,6 +279,9 @@ export default {
if (mode == "like") { //
value = "%" + value + "%"; // %
}
if(typeof(value) == "object" && value.id){
value = value.id;
}
rules.push({ //
column: key, //
mode: mode, //
@ -204,13 +337,103 @@ export default {
}
},
getPageList() {
let target = [];
let find = (component) => {
if (component && component.pageList) {
target = component.pageList;
}
if (component.$parent) {
find(component.$parent)
}
}
find(this.$parent);
return target;
},
isEditPageOpen() {
let pageList = this.getPageList();
if (pageList.filter(a => a.keyPath && a.keyPath.indexOf(this.options.editPageUrl) == 0).length) {
return true;
}
return false;
},
getTabsViewPageComponent() {
let target = null;
let find = (component) => {
if (component && component.pageList) {
target = component;
}
if (component.$parent) {
find(component.$parent)
}
}
find(this.$parent);
return target;
},
//beforeTabClose
findEditPageComponent(key) {
if (!key) {
return null;
}
let target = null;
let find = (children) => {
children.forEach(item => {
if (item.beforeTabClose && item.pageKeys && item.pageKeys.filter(a => key.indexOf(a) == 0).length) {
target = item;
return;
}
if (item.$children && item.$children.length) {
find(item.$children)
}
})
}
let tabsview = this.getTabsViewPageComponent();
if (tabsview == null) {
return null;
}
find(tabsview.$children);
return target;
},
//
pageEdit(row) {
if (!row) { //
this.$mk.msg("请选择行"); //
return; //
}
this.$openPage(this.options.editPageUrl + row[this.options.keyName]); //
if (this.isEditPageOpen()) {
let editPage = this.findEditPageComponent(this.options.editPageUrl);
if (editPage != null) {
editPage.beforeTabClose().then(() => {
this.$closePage(this.options.editPageUrl);
this.$openPage(this.options.editPageUrl + row[this.options.keyName]); //
});
} else {
this.$openPage(this.options.editPageUrl + row[this.options.keyName]); //
}
} else {
this.$openPage(this.options.editPageUrl + row[this.options.keyName]); //
}
},
//

View File

@ -87,8 +87,12 @@ VXETable.formats.mixin({
return cellValue ? '是' : '否'
},
formatRef({ cellValue,column }) { // 格式化参照
if(column && column.params && column.params.dataType == "object" && column.params.textField && typeof(cellValue) == "object"){
if(column && column.params
&& column.params.dataType == "object"
&& column.params.textField && typeof(cellValue) == "object"
){
return cellValue[column.params.textField];
}
return cellValue && cellValue[1] ? cellValue[1] : ''

View File

@ -3,44 +3,53 @@ export default {
// 格式化表单数据
formatFormData: function ({ data, rules }) { // 格式化表单数据
rules.forEach(rule => { // 循环规则
if (!rule.dataRule){
return;
}
if (rule.field in data) { // 如果字段在数据中
let value = data[rule.field]; // 获取值
if (rule.dataRule.fromField) {
value = value[rule.dataRule.fromField];
let feachRules = (rules)=>{
rules.forEach(rule => { // 循环规则
if(rule.children && rule.children.length){
feachRules(rule.children);
}
if (!rule.dataRule){
return;
}
if (rule.field in data) { // 如果字段在数据中
let value = data[rule.field]; // 获取值
if (rule.dataRule.fromField) {
value = value[rule.dataRule.fromField];
}
let saveField = rule.field;
if(rule.dataRule.saveField){
saveField = rule.dataRule.saveField;
}
if (rule.dataRule.type == "integer") { // 如果是整数
data[saveField] = parseInt(value); // 转换为整数
}
else if (rule.dataRule.type == "number") { // 如果是整数
data[saveField] = parseFloat(value); // 转换为整数
}
else if (rule.dataRule.type == "timestamp") { // 如果是时间戳
data[saveField] = parseInt(new Date(value).getTime() / 1000); // 转换为时间戳
}
else if (rule.dataRule.type == "string") { // 如果是字符串
if(data[saveField] === true){
data[saveField] = "true";
}
else if(data[saveField] === false){
data[saveField] = "false";
}
else if(data[saveField]){
data[saveField] = value + "";
}
}
else {
data[saveField] =value ;
}
}
let saveField = rule.field;
if(rule.dataRule.saveField){
saveField = rule.dataRule.saveField;
}
if (rule.dataRule.type == "integer") { // 如果是整数
data[saveField] = parseInt(value); // 转换为整数
}
else if (rule.dataRule.type == "number") { // 如果是整数
data[saveField] = parseFloat(value); // 转换为整数
}
else if (rule.dataRule.type == "timestamp") { // 如果是时间戳
data[saveField] = parseInt(new Date(value).getTime() / 1000); // 转换为时间戳
}
else if (rule.dataRule.type == "string") { // 如果是字符串
if(data[saveField] === true){
data[saveField] = "true";
}
else if(data[saveField] === false){
data[saveField] = "false";
}
else if(data[saveField]){
data[saveField] = value + "";
}
}
else {
data[saveField] =value ;
}
}
});
});
};
feachRules(rules);
},

View File

@ -1,15 +1,8 @@
<template>
<admin-layout>
<contextmenu :itemList="menuItemList" :visible.sync="menuVisible" @select="onMenuSelect" />
<tabs-head
v-if="multiPage"
:active="activePage"
:page-list="pageList"
@change="changePage"
@close="remove"
@refresh="refresh"
@contextmenu="onContextmenu"
/>
<tabs-head v-if="multiPage" :active="activePage" :page-list="pageList" @change="changePage" @close="remove"
@refresh="refresh" @contextmenu="onContextmenu" />
<div :class="['tabs-view-content', layout, pageWidth]" :style="`margin-top: ${multiPage ? -24 : 0}px`">
<page-toggle-transition :disabled="animate.disabled" :animate="animate.name" :direction="animate.direction">
<a-keep-alive :exclude-keys="excludeKeys" v-if="multiPage && cachePage" v-model="clearCaches">
@ -25,17 +18,17 @@
import AdminLayout from '@/layouts/AdminLayout' //
import Contextmenu from '@/components/menu/Contextmenu' //
import PageToggleTransition from '@/components/transition/PageToggleTransition' //
import {mapState, mapMutations} from 'vuex' // vuex mapStatemapMutations
import {getI18nKey} from '@/utils/routerUtil' // getI18nKey key
import { mapState, mapMutations } from 'vuex' // vuex mapStatemapMutations
import { getI18nKey } from '@/utils/routerUtil' // getI18nKey key
import AKeepAlive from '@/components/cache/AKeepAlive' // AKeepAlive
import TabsHead from '@/layouts/tabs/TabsHead' // TabsHead
export default {
name: 'TabsView', //
i18n: require('./i18n'), //
components: {TabsHead, PageToggleTransition, Contextmenu, AdminLayout , AKeepAlive },
components: { TabsHead, PageToggleTransition, Contextmenu, AdminLayout, AKeepAlive },
// AKeepAlive
data () {
data() {
return {
clearCaches: [], //
pageList: [], //
@ -46,7 +39,7 @@ export default {
}
},
computed: {
...mapState('setting', ['multiPage', 'cachePage', 'animate', 'layout', 'pageWidth']),
...mapState('setting', ['multiPage', 'cachePage', 'animate', 'layout', 'pageWidth']),
// vuex
menuItemList() { //
return [
@ -60,7 +53,7 @@ export default {
return this.multiPage ? 24 : 0 // 24 0
}
},
created () { //
created() { //
this.loadCacheConfig(this.$router?.options?.routes) //
this.loadCachedTabs() //
const route = this.$route //
@ -71,11 +64,11 @@ export default {
if (this.multiPage) { //
this.$nextTick(() => { //
this.setCachedKey(route) //
})
})
this.addListener() //
}
},
mounted () { //
mounted() { //
this.correctPageMinHeight(-this.tabsOffset) //
},
beforeDestroy() { //
@ -116,27 +109,72 @@ export default {
}
},
methods: {
changePage (key) { //
changePage(key) { //
this.activePage = key // key
const page = this.pageList.find(item => item.path === key) //
this.$router.push(page.fullPath) // fullPath
},
remove (key, next) { //
//beforeTabClose
findPageComponent(component , key ) {
if(!key){
return null;
}
let target = null;
let find = (children) => {
children.forEach(item => {
if (item.beforeTabClose && item.pageKeys && item.pageKeys.filter(a=> key.indexOf(a) == 0).length) {
target = item;
return;
}
if (item.$children && item.$children.length) {
find(item.$children)
}
})
}
find(component.$children);
return target;
},
remove(key, next,noCheck) { //
if (this.pageList.length === 1) { // 1
return this.$message.warning(this.$t('warn')) //
}
//
let index = this.pageList.findIndex(item => item.path === key) //
this.clearCaches = this.pageList.splice(index, 1).map(page => page.cachedKey) // cachedKey
if (next) { // nexttrue
this.$router.push(next) // next
} else if (key === this.activePage) { // key
index = index >= this.pageList.length ? this.pageList.length - 1 : index // -1
this.activePage = this.pageList[index].path // path
this.$router.push(this.activePage) //
let doRemove = () => {
//
let index = this.pageList.findIndex(item => item.path === key) //
this.clearCaches = this.pageList.splice(index, 1).map(page => page.cachedKey) // cachedKey
if (next) { // nexttrue
this.$router.push(next) // next
} else if (key === this.activePage) { // key
index = index >= this.pageList.length ? this.pageList.length - 1 : index // -1
this.activePage = this.pageList[index].path // path
this.$router.push(this.activePage) //
}
};
if(noCheck){
doRemove();
return;
}
let pageComponent = this.findPageComponent(this,key);
if (pageComponent) {
pageComponent.beforeTabClose().then(()=>{
doRemove(); //
});
return;
}
doRemove();
},
refresh (key, page) { //
refresh(key, page) { //
page = page || this.pageList.find(item => item.path === key) //
page.loading = true // loadingtrue
this.clearCache(page) //
@ -154,7 +192,7 @@ export default {
this.menuVisible = true // true
}
},
onMenuSelect (key, target, pageKey) { //
onMenuSelect(key, target, pageKey) { //
switch (key) { // switch key
case '1': this.closeLeft(pageKey); break //
case '2': this.closeRight(pageKey); break //
@ -163,9 +201,9 @@ export default {
default: break //
}
},
closeOthers (pageKey) { // pageKeykey
closeOthers(pageKey) { // pageKeykey
//
const clearPages = this.pageList.filter(item => item.path !== pageKey && !item.unclose)
const clearPages = this.pageList.filter(item => item.path !== pageKey && !item.unclose)
// keyunclosefalse
this.clearCaches = clearPages.map(item => item.cachedKey) // cachedKey
this.pageList = this.pageList.filter(item => !clearPages.includes(item)) //
@ -175,11 +213,11 @@ export default {
this.$router.push(this.activePage) //
}
},
closeLeft (pageKey) { // pageKeykey
closeLeft(pageKey) { // pageKeykey
const index = this.pageList.findIndex(item => item.path === pageKey) //
//
const clearPages = this.pageList.filter((item, i) => i < index && !item.unclose) // unclosefalse
// unclosefalse
// unclosefalse
this.clearCaches = clearPages.map(item => item.cachedKey) // cachedKey
this.pageList = this.pageList.filter(item => !clearPages.includes(item)) //
//
@ -188,10 +226,10 @@ export default {
this.$router.push(this.activePage) //
}
},
closeRight (pageKey) { // pageKeykey
closeRight(pageKey) { // pageKeykey
//
const index = this.pageList.findIndex(item => item.path === pageKey) // key
const clearPages = this.pageList.filter((item, i) => i > index && !item.unclose)
const clearPages = this.pageList.filter((item, i) => i > index && !item.unclose)
// unclosefalse
this.clearCaches = clearPages.map(item => item.cachedKey) // cachedKey
this.pageList = this.pageList.filter(item => !clearPages.includes(item)) //
@ -224,7 +262,7 @@ export default {
* 添加监听器
*/
addListener() { //
window.addEventListener('page:closeOthers', this.closeOthersListener)
window.addEventListener('page:closeOthers', this.closeOthersListener)
window.addEventListener('page:close', this.closePageListener) //
window.addEventListener('page:refresh', this.refreshPageListener) //
window.addEventListener('unload', this.unloadListener) //
@ -233,33 +271,37 @@ export default {
* 移出监听器
*/
removeListener() { //
window.removeEventListener('page:closeOthers', this.closeOthersListener)
window.removeEventListener('page:closeOthers', this.closeOthersListener)
window.removeEventListener('page:close', this.closePageListener) //
window.removeEventListener('page:refresh', this.refreshPageListener) //
window.removeEventListener('unload', this.unloadListener) //
},
closeOthersListener(event) {
this.closeOthers( event.detail) //
closeOthersListener(event) {
this.closeOthers(event.detail) //
},
/**
* 页签关闭事件监听
* @param event 页签关闭事件
*/
closePageListener(event) { // event
const {closeRoute, nextRoute} = event.detail // detailcloseRoutedetailnextRoute
const closePath = typeof closeRoute === 'string' ? closeRoute : closeRoute.path
const { closeRoute, nextRoute } = event.detail // detailcloseRoutedetailnextRoute
const closePath = typeof closeRoute === 'string' ? closeRoute : (closeRoute.path || closeRoute.closeRoute)
// path
const path = closePath && closePath.split('?')[0] //
this.remove(path, nextRoute) //
this.remove(path, nextRoute, true) //
},
/**
* 页面刷新事件监听
* @param event 页签关闭事件
*/
refreshPageListener(event) { // event
const {pageKey} = event.detail // keydetailpageKey
const { pageKey } = event.detail // keydetailpageKey
const path = pageKey && pageKey.split('?')[0] // key
this.refresh(path) //
},
@ -267,7 +309,7 @@ export default {
* 页面 unload 事件监听器添加页签到 session 缓存用于刷新时保留页签
*/
unloadListener() { // unload
const tabs = this.pageList.map(item => ({...item, _init_: false}))
const tabs = this.pageList.map(item => ({ ...item, _init_: false }))
// mapmapfalse
sessionStorage.setItem(process.env.VUE_APP_TBAS_KEY, JSON.stringify(tabs)) // session
},
@ -285,7 +327,7 @@ export default {
* @param route 页面对应的路由
*/
setCachedKey(route) { // key route
const page = this.pageList.find(item => item.path === route.path)
const page = this.pageList.find(item => item.path === route.path)
// findfind
page.unclose = route.meta && route.meta.page && (route.meta.page.closable === false) // false
if (!page._init_) { // false
@ -329,17 +371,20 @@ export default {
</script>
<style scoped lang="less">
.tabs-view{
margin: -16px auto 8px;
&.head.fixed{
max-width: 1400px;
}
.tabs-view {
margin: -16px auto 8px;
&.head.fixed {
max-width: 1400px;
}
.tabs-view-content{
position: relative;
&.head.fixed{
width: 1400px;
margin: 0 auto;
}
}
.tabs-view-content {
position: relative;
&.head.fixed {
width: 1400px;
margin: 0 auto;
}
}
</style>

View File

@ -86,8 +86,7 @@ export default {
{ type: 'checkbox', width: 50 }, //
{ title: '操作', slots: { default: 'op' }, width: 120 },
{ field: 'code', sortable: true, title: '编码', width: 250 }, //
// { field: 'title', sortable: true, title: '', width: 250 }, //
{ field: 'code', sortable: true, title: '编码', width: 250 }, //
{ field: 'name', sortable: true, title: '部门名称', width: 250 }, //
{ field: 'create_time', formatter: 'formatDate', width: 160, sortable: true, title: '创建时间', showHeaderOverflow: true }, //
{ field: 'update_time', formatter: 'formatDate', width: 160, sortable: true, title: '更新时间', showHeaderOverflow: true }, //

View File

@ -6,8 +6,8 @@
import BASE_URL from '@/services/mes/api.js';
export default {
i18n: require("./i18n"),
export default {
i18n: require("./i18n"),
props: {
},
@ -37,14 +37,14 @@ export default {
var pageData = { //
keyName: 'id', //
listFieldName: 'MesBom',
listFieldName: 'MesBom',
addPageUrl: "/MesBom/MesBomAdd",
editPageUrl: "/MesBom/MesBomUpdate/",
//
actions: { // Api
MesBomList: `${BASE_URL.BASE_URL}/MesBom/v1/mes/bom/list`,
MesBomBatchDelete: `${BASE_URL.BASE_URL}/MesBom/v1/mes/bom/batchDelete`
},
editPageUrl: "/MesBom/MesBomUpdate/",
//
actions: { // Api
MesBomList: `${BASE_URL.BASE_URL}/MesBom/v1/mes/bom/list`,
MesBomBatchDelete: `${BASE_URL.BASE_URL}/MesBom/v1/mes/bom/batchDelete`
},
start_time: 0, //
end_time: 0, //
@ -57,14 +57,29 @@ export default {
},
//
searchRules: [
{ key: "title", mode: "like" },
{ key: "desc", mode: "like" }
{ key: "title", mode: "equal" },
{ key: "version", mode: "like" }
],
//
searchFormItems: [ //
{ field: 'title', title: '标题', span: 5, itemRender: { name: '$input', props: { placeholder: '请输入标题' } } },
{ field: 'desc', title: '描述', span: 5, itemRender: { name: '$input', props: { placeholder: '请输入描述' } } },
{ span: 8, slots: { default: 'date' } }, //
{
title: '父件', span: 6,
field: 'material_id',
itemRender: {
name: 'MkFormDataSelector', props: {
params: {
dataType: "object",
valueField: "id",
textField: "name",
listdataFieldName: 'MesMaterials',
dataUrl: `${BASE_URL.BASE_URL}/MesMaterials/v1/mes/materials/list`
}
}
}
},
{ field: 'version', title: '版本号', span: 6, itemRender: { name: '$input', props: { placeholder: '请输入版本号' } } },
{
align: 'right', span: 4, itemRender: { //
name: '$buttons', children: [{ props: { type: 'submit', content: '搜索', status: 'primary' } }, //
@ -80,31 +95,31 @@ export default {
stripe: true, //
id: 'datagrid_1', //
//
columns: [
{ type: 'checkbox', width: 50 }, //
{ type: 'seq', width: 30 }, //
//
columns: [
{ type: 'checkbox', width: 50 }, //
{ type: 'seq', width: 30 }, //
{ title: '操作', slots: { default: 'op' }, width: 120 },
{ title: '操作', slots: { default: 'op' }, width: 120 },
// =============================== Start ===============================
{ field: 'version', sortable: true, title: 'BOM版本', width: 250 }, // BOM
{ field: 'create_time', formatter: 'formatDate', width: 160, sortable: true, title: '创建时间', showHeaderOverflow: true }, //
{ field: 'update_time', formatter: 'formatDate', width: 160, sortable: true, title: '更新时间', showHeaderOverflow: true }, //
{ field: 'mes_materials', formatter: 'formatRef', params: { dataType: "object", textField: "name" }, title: '父件', width: 250 },
// =============================== Start ===============================
{ field: 'version', sortable: true, title: 'BOM版本', width: 250 },
{ field: 'create_time', formatter: 'formatDate', width: 160, sortable: true, title: '创建时间', showHeaderOverflow: true }, //
{ field: 'update_time', formatter: 'formatDate', width: 160, sortable: true, title: '更新时间', showHeaderOverflow: true }, //
// =============================== Start ===============================
]
}
]
}
};
pageData.actions.getList = pageData.actions.MesBomList;
pageData.actions.delete = pageData.actions.MesBomBatchDelete;
pageData.gridOptions = Object.assign({}, this.$mk.config.defaults.gridOptions, pageData.gridOptions); //
pageData.actions.getList = pageData.actions.MesBomList;
pageData.actions.delete = pageData.actions.MesBomBatchDelete;
pageData.gridOptions = Object.assign({}, this.$mk.config.defaults.gridOptions, pageData.gridOptions); //
this.pageOptions = pageData;

View File

@ -349,10 +349,16 @@ export default {
let save = () => {
if (!this.selectedKey || this.selectedKey == "root") {
this.$mk.error("请先选择枚举分类");
return;
}
this.$refs.xTable.clearEdit();
let node = this.findTreeNode(this.selectedKey);
let ds = JSON.parse(JSON.stringify(this.detailsData));

View File

@ -2,9 +2,8 @@
<div class="page-body">
<a-row type="flex">
<a-col flex="200px">
<div class="wrapper">
<div class="left">
<div class="treepanel" :style="'height:' + tableHeight + 'px'">
<div class="treepanel-header">
<a @click.stop="treeAdd(row)" title="新增">
@ -24,15 +23,22 @@
</a-tree>
</div>
</div>
</a-col>
<a-col flex="auto">
</div>
<div class="right">
<basic-page-list ref="listPage" :options="pageOptions"></basic-page-list>
</div>
</div>
</a-col>
</a-row>
@ -505,9 +511,23 @@ export default {
padding: 8px;
}
/* 左侧固定宽度 200px右侧自适应 */
.wrapper {
display: flex;
}
.left {
width: 200px;
height: 100%;
}
.right {
flex-grow: 1;
height: 100%;
}
.treepanel {
width: calc(100% - 10px);
background: white;
margin-right: 10px;
border: 1px solid #ccc;
}

View File

@ -1,5 +1,6 @@
<template>
<basic-page-edit :desc="desc" :dataId="getDataId()" :options="pageOptions"></basic-page-edit>
<basic-page-edit :desc="desc" :dataId="getDataId()" ref="editpage" @afterSave="afterSave"
:options="pageOptions"></basic-page-edit>
</template>
<script>
@ -23,7 +24,11 @@ export default {
data() {
return {
pageOptions: {}
pageKeys: ['/MesProcesses/MesProcessesUpdate/', '/MesProcesses/MesProcessesAdd'],
preventTabClose: true,
pageOptions: {},
lastFormDataJson: ""
};
},
@ -39,6 +44,10 @@ export default {
this.optionsInit();
this.dataInit();
setTimeout(() => {
console.log(this)
}, 1000);
},
//
methods: {
@ -53,6 +62,9 @@ export default {
// ID
currentBeid: 0,
//
action_afterSave: "confirm",
addPageUrl: "/MesProcesses/MesProcessesAdd",
editPageUrl: "/MesProcesses/MesProcessesUpdate/",
listPageUrl: "/MesProcesses/MesProcessesList",
@ -118,7 +130,7 @@ export default {
is_quality_inspection: 0,
quality_inspection_scheme_id: 0,
raw_material_type_id: 0,
status: 0,
status: 1,
create_uid: 0,
update_uid: 0,
create_time: new Date(2100, 1, 1).getTime() / 10000,
@ -145,14 +157,14 @@ export default {
//
items: [
{ field: 'name', title: '工序名称', span: 12, itemRender: { name: '$input' } },
// { field: 'title', title: '', span: 12, itemRender: { name: '$input' } },
// { field: 'title', title: '', span: 12, itemRender: { name: '$input' } },
{ field: 'code', title: '工序编码', span: 12, itemRender: { name: '$input' } },
{ field: 'desc', title: '工序描述', span: 12, itemRender: { name: '$input' } },
{ field: 'remark', title: '工序备注', span: 12, itemRender: { name: '$input' } },
{ field: 'work_type', title: '计工方式', span: 12, itemRender: { name: '$select',props:{options:settings.options_work_type} } },
{ field: 'car_limit', title: '领车限制数', span: 12, itemRender: { name: '$input',props:{type:'number'} } },
{ field: 'is_quality_inspection', title: '是否质检工序', span: 12, itemRender: { name: '$select',props:{options:settings.options_yesorno} } },
{ field: 'remark', title: '工序备注', span: 12, itemRender: { name: '$input' } },
{ field: 'work_type', title: '计工方式', span: 12, itemRender: { name: '$select', props: { options: settings.options_work_type } } },
{ field: 'car_limit', title: '领车限制数', span: 12, itemRender: { name: '$input', props: { type: 'number' } } },
{ field: 'is_quality_inspection', title: '是否质检工序', span: 12, itemRender: { name: '$select', props: { options: settings.options_yesorno } } },
{ field: 'status', title: '状态', span: 12, itemRender: { name: '$select', props: { options: settings.options_status_process } } },
]
},
@ -198,7 +210,7 @@ export default {
}
this.pageOptions.formOptions.data = a.data[detailDataFieldName];
this.lastFormDataJson = JSON.stringify(this.pageOptions.formOptions.data);
this.$forceUpdate()
}).catch((a) => {
this.$mk.error(a.data.msg);
@ -213,6 +225,8 @@ export default {
this.pageOptions.formOptions.items.push(item);
})
this.lastFormDataJson = JSON.stringify(this.pageOptions.formOptions.data);
}
},
@ -226,7 +240,48 @@ export default {
dataId = 0;
}
return dataId;
}
},
afterSave({ data }) {
this.lastFormDataJson = JSON.stringify(data);
},
isDataChanged() {
return this.lastFormDataJson != JSON.stringify(this.pageOptions.formOptions.data);
},
beforeTabClose() {
let _this = this;
return new Promise((resolve) => {
if (_this.isDataChanged()) {
_this.$confirm({
title: '提示',
content: '当前内容未保存,是否保存',
okText: '保存',
cancelText: '取消',
onOk() {
_this.$refs.editpage.save({
afterSave: () => {
resolve();
}
})
},
onCancel() {
resolve();
},
});
} else {
resolve();
}
});
},
},
//
watch: {

View File

@ -1,5 +1,5 @@
<template>
<basic-page-list :desc="desc" :options="pageOptions"></basic-page-list>
<basic-page-list :desc="desc" @importData="pageImport" :options="pageOptions"></basic-page-list>
</template>
<script>
@ -7,8 +7,8 @@ import BASE_URL from '@/services/mes/api.js';
const settings = require('../../basic/settings.js');
export default {
i18n: require("./i18n"),
export default {
i18n: require("./i18n"),
props: {
},
@ -33,6 +33,44 @@ export default {
//
methods: {
pageImport({ data }) {
let rows = [];
data.forEach(item => {
let row = {};
this.pageOptions.exportColumns.forEach(col => {
if (col.title in item) {
let v = item[col.title];
if(col.options){
col.options.forEach(op=>{
if(op.label == v){
row[col.field] = op.value;
}
})
}else{
row[col.field] = v;
}
}
})
rows.push(row);
});
this.$mk.post({
url: `${BASE_URL.BASE_URL}/MesProcesses/v1/mes/processes/batchCreate`,
loading: "导入中...",
data: {
"list": rows
},
useBigInt: true
}).then((a) => { //
this.$mk.success(a.data.msg || "导入成功"); //
this.$refs.xGrid.commitProxy('query') //
}).catch((a) => { //
this.$mk.error(a.data.msg); //
});
},
optionsInit() {
//
var pageData = { //
@ -40,49 +78,59 @@ export default {
keyName: 'id', //
listFieldName: 'MesProcesses',
exportFileTitle :"工序",
enabledExport: true,
enabledImport: true,
enabledImportTemplate: true,
exportColumns: [
{ title: '编码',field:"code" },
{ title: '工序名称',field:"name" },
{ title: '工序描述',field:"desc" },
{ title: '计工方式',field:"work_type",options:settings.options_work_type }
],
addPageUrl: "/MesProcesses/MesProcessesAdd",
editPageUrl: "/MesProcesses/MesProcessesUpdate/",
//
actions: { // Api
// =============================== Start ===============================
MesProcessesList: `${BASE_URL.BASE_URL}/MesProcesses/v1/mes/processes/list`, //
MesProcessesDetail: `${BASE_URL.BASE_URL}/MesProcesses/v1/mes/processes/detail`, //
MesProcessesCreate: `${BASE_URL.BASE_URL}/MesProcesses/v1/mes/processes/create`, //
MesProcessesUpdate: `${BASE_URL.BASE_URL}/MesProcesses/v1/mes/processes/update`, //
MesProcessesDelete: `${BASE_URL.BASE_URL}/MesProcesses/v1/mes/processes/detele`, //
MesProcessesBatchDelete: `${BASE_URL.BASE_URL}/MesProcesses/v1/mes/processes/batchDelete`, //
MesProcessesBatchUpdate: `${BASE_URL.BASE_URL}/MesProcesses/v1/mes/processes/batchUpdate`, //
MesProcessesBatchCreate: `${BASE_URL.BASE_URL}/MesProcesses/v1/mes/processes/batchCreate`, //
MesProcessesExportExcel: `${BASE_URL.BASE_URL}/MesProcesses/v1/mes/processes/export/excel`, // EXCEL
MesProcessesImportExcel: `${BASE_URL.BASE_URL}/MesProcesses/v1/mes/processes/import/excel`, // EXCEL
MesProcessesOpen: `${BASE_URL.BASE_URL}/MesProcesses/v1/mes/processes/open`, //
MesProcessesClose: `${BASE_URL.BASE_URL}/MesProcesses/v1/mes/processes/close`, //
ProcessProgrammeList: `${BASE_URL.BASE_URL}/MesProcesses/v1/process/programme/list`, //
ProcessProgrammeDetail: `${BASE_URL.BASE_URL}/MesProcesses/v1/process/programme/detail`, //
ProcessProgrammeCreate: `${BASE_URL.BASE_URL}/MesProcesses/v1/process/programme/create`, //
ProcessProgrammeUpdate: `${BASE_URL.BASE_URL}/MesProcesses/v1/process/programme/update`, //
ProcessProgrammeDelete: `${BASE_URL.BASE_URL}/MesProcesses/v1/process/programme/detele`, //
ProcessProgrammeBatchDelete: `${BASE_URL.BASE_URL}/MesProcesses/v1/process/programme/batchDelete`, //
ProcessProgrammeBatchUpdate: `${BASE_URL.BASE_URL}/MesProcesses/v1/process/programme/batchUpdate`, //
ProcessProgrammeBatchCreate: `${BASE_URL.BASE_URL}/MesProcesses/v1/process/programme/batchCreate`, //
ProcessProgrammeExportExcel: `${BASE_URL.BASE_URL}/MesProcesses/v1/process/programme/export/excel`, // EXCEL
ProcessProgrammeImportExcel: `${BASE_URL.BASE_URL}/MesProcesses/v1/process/programme/import/excel`, // EXCEL
ProgrammeItemList: `${BASE_URL.BASE_URL}/MesProcesses/v1/programme/item/list`, // ID
ProgrammeItemDetail: `${BASE_URL.BASE_URL}/MesProcesses/v1/programme/item/detail`, // ID
ProgrammeItemCreate: `${BASE_URL.BASE_URL}/MesProcesses/v1/programme/item/create`, // ID
ProgrammeItemUpdate: `${BASE_URL.BASE_URL}/MesProcesses/v1/programme/item/update`, // ID
ProgrammeItemDelete: `${BASE_URL.BASE_URL}/MesProcesses/v1/programme/item/detele`, // ID
ProgrammeItemBatchDelete: `${BASE_URL.BASE_URL}/MesProcesses/v1/programme/item/batchDelete`, // ID
ProgrammeItemBatchUpdate: `${BASE_URL.BASE_URL}/MesProcesses/v1/programme/item/batchUpdate`, // ID
ProgrammeItemBatchCreate: `${BASE_URL.BASE_URL}/MesProcesses/v1/programme/item/batchCreate`, // ID
ProgrammeItemExportExcel: `${BASE_URL.BASE_URL}/MesProcesses/v1/programme/item/export/excel`, // IDEXCEL
ProgrammeItemImportExcel: `${BASE_URL.BASE_URL}/MesProcesses/v1/programme/item/import/excel`, // EXCELID
//
actions: { // Api
// =============================== Start ===============================
MesProcessesList: `${BASE_URL.BASE_URL}/MesProcesses/v1/mes/processes/list`, //
MesProcessesDetail: `${BASE_URL.BASE_URL}/MesProcesses/v1/mes/processes/detail`, //
MesProcessesCreate: `${BASE_URL.BASE_URL}/MesProcesses/v1/mes/processes/create`, //
MesProcessesUpdate: `${BASE_URL.BASE_URL}/MesProcesses/v1/mes/processes/update`, //
MesProcessesDelete: `${BASE_URL.BASE_URL}/MesProcesses/v1/mes/processes/detele`, //
MesProcessesBatchDelete: `${BASE_URL.BASE_URL}/MesProcesses/v1/mes/processes/batchDelete`, //
MesProcessesBatchUpdate: `${BASE_URL.BASE_URL}/MesProcesses/v1/mes/processes/batchUpdate`, //
MesProcessesBatchCreate: `${BASE_URL.BASE_URL}/MesProcesses/v1/mes/processes/batchCreate`, //
MesProcessesExportExcel: `${BASE_URL.BASE_URL}/MesProcesses/v1/mes/processes/export/excel`, // EXCEL
MesProcessesImportExcel: `${BASE_URL.BASE_URL}/MesProcesses/v1/mes/processes/import/excel`, // EXCEL
MesProcessesOpen: `${BASE_URL.BASE_URL}/MesProcesses/v1/mes/processes/open`, //
MesProcessesClose: `${BASE_URL.BASE_URL}/MesProcesses/v1/mes/processes/close`, //
ProcessProgrammeList: `${BASE_URL.BASE_URL}/MesProcesses/v1/process/programme/list`, //
ProcessProgrammeDetail: `${BASE_URL.BASE_URL}/MesProcesses/v1/process/programme/detail`, //
ProcessProgrammeCreate: `${BASE_URL.BASE_URL}/MesProcesses/v1/process/programme/create`, //
ProcessProgrammeUpdate: `${BASE_URL.BASE_URL}/MesProcesses/v1/process/programme/update`, //
ProcessProgrammeDelete: `${BASE_URL.BASE_URL}/MesProcesses/v1/process/programme/detele`, //
ProcessProgrammeBatchDelete: `${BASE_URL.BASE_URL}/MesProcesses/v1/process/programme/batchDelete`, //
ProcessProgrammeBatchUpdate: `${BASE_URL.BASE_URL}/MesProcesses/v1/process/programme/batchUpdate`, //
ProcessProgrammeBatchCreate: `${BASE_URL.BASE_URL}/MesProcesses/v1/process/programme/batchCreate`, //
ProcessProgrammeExportExcel: `${BASE_URL.BASE_URL}/MesProcesses/v1/process/programme/export/excel`, // EXCEL
ProcessProgrammeImportExcel: `${BASE_URL.BASE_URL}/MesProcesses/v1/process/programme/import/excel`, // EXCEL
ProgrammeItemList: `${BASE_URL.BASE_URL}/MesProcesses/v1/programme/item/list`, // ID
ProgrammeItemDetail: `${BASE_URL.BASE_URL}/MesProcesses/v1/programme/item/detail`, // ID
ProgrammeItemCreate: `${BASE_URL.BASE_URL}/MesProcesses/v1/programme/item/create`, // ID
ProgrammeItemUpdate: `${BASE_URL.BASE_URL}/MesProcesses/v1/programme/item/update`, // ID
ProgrammeItemDelete: `${BASE_URL.BASE_URL}/MesProcesses/v1/programme/item/detele`, // ID
ProgrammeItemBatchDelete: `${BASE_URL.BASE_URL}/MesProcesses/v1/programme/item/batchDelete`, // ID
ProgrammeItemBatchUpdate: `${BASE_URL.BASE_URL}/MesProcesses/v1/programme/item/batchUpdate`, // ID
ProgrammeItemBatchCreate: `${BASE_URL.BASE_URL}/MesProcesses/v1/programme/item/batchCreate`, // ID
ProgrammeItemExportExcel: `${BASE_URL.BASE_URL}/MesProcesses/v1/programme/item/export/excel`, // IDEXCEL
ProgrammeItemImportExcel: `${BASE_URL.BASE_URL}/MesProcesses/v1/programme/item/import/excel`, // EXCELID
// =============================== End ===============================
},
// =============================== End ===============================
},
start_time: 0, //
start_time: 0, //
end_time: 0, //
@ -93,13 +141,13 @@ export default {
},
//
searchRules: [
{ key: "title", mode: "like" },
{ key: "desc", mode: "like" }
{ key: "name", mode: "like" },
{ key: "code", mode: "like" }
],
//
searchFormItems: [ //
{ field: 'title', title: '标题', span: 5, itemRender: { name: '$input', props: { placeholder: '请输入标题' } } },
{ field: 'desc', title: '描述', span: 5, itemRender: { name: '$input', props: { placeholder: '请输入描述' } } },
{ field: 'name', title: '工序名称', span: 5, itemRender: { name: '$input', props: { placeholder: '请输入工序名称' } } },
{ field: 'code', title: '编码', span: 5, itemRender: { name: '$input', props: { placeholder: '请输入编码' } } },
{ span: 8, slots: { default: 'date' } }, //
{
align: 'right', span: 4, itemRender: { //
@ -116,43 +164,43 @@ export default {
stripe: true, //
id: 'datagrid_1', //
//
columns: [
{ type: 'checkbox', width: 50 }, //
{ type: 'seq', width: 30 }, //
//
columns: [
{ type: 'checkbox', width: 50 }, //
{ type: 'seq', width: 30 }, //
{ title: '操作', slots: { default: 'op' }, width: 120 },
{ title: '操作', slots: { default: 'op' }, width: 120 },
// =============================== Start ===============================
//{ field: 'process_segment_id', sortable: true, title: 'id', width: 250 }, // id
//{ field: 'title', sortable: true, title: '', width: 250 }, //
{ field: 'code', sortable: true, title: '工序编码', width: 250 }, //
{ field: 'name', sortable: true, title: '工序名称', width: 250 }, //
{ field: 'desc', sortable: true, title: '工序描述', width: 250 }, //
{ field: 'remark', sortable: true, title: '工序备注', width: 250 }, //
// =============================== Start ===============================
{ field: 'work_type',params:settings.options_work_type, formatter: 'formatEnum', sortable: true, title: '计工方式', width: 250 },
//{ field: 'process_segment_id', sortable: true, title: 'id', width: 250 }, // id
//{ field: 'title', sortable: true, title: '', width: 250 }, //
{ field: 'code', sortable: true, title: '工序编码', width: 250 }, //
{ field: 'name', sortable: true, title: '工序名称', width: 250 }, //
{ field: 'desc', sortable: true, title: '工序描述', width: 250 }, //
{ field: 'remark', sortable: true, title: '工序备注', width: 250 }, //
{ field: 'car_limit', sortable: true, title: '领车限制数', width: 250 }, //
{ field: 'is_quality_inspection', sortable: true, title: '是否质检工序', width: 250 }, //
//{ field: 'quality_inspection_scheme_id', sortable: true, title: 'id', width: 250 }, // id
//{ field: 'raw_material_type_id', sortable: true, title: 'ID', width: 250 }, // ID
{ field: 'status', slots: { default: 'status' }, width: 80, sortable: true, title: '状态', showHeaderOverflow: true }, //
{ field: 'create_time', formatter: 'formatDate', width: 160, sortable: true, title: '创建时间', showHeaderOverflow: true }, //
{ field: 'update_time', formatter: 'formatDate', width: 160, sortable: true, title: '更新时间', showHeaderOverflow: true }, //
{ field: 'work_type', params: settings.options_work_type, formatter: 'formatEnum', sortable: true, title: '计工方式', width: 250 },
// =============================== Start ===============================
{ field: 'car_limit', sortable: true, title: '领车限制数', width: 250 }, //
{ field: 'is_quality_inspection', sortable: true, title: '是否质检工序', width: 250 }, //
//{ field: 'quality_inspection_scheme_id', sortable: true, title: 'id', width: 250 }, // id
//{ field: 'raw_material_type_id', sortable: true, title: 'ID', width: 250 }, // ID
{ field: 'status', slots: { default: 'status' }, width: 80, sortable: true, title: '状态', showHeaderOverflow: true }, //
{ field: 'create_time', formatter: 'formatDate', width: 160, sortable: true, title: '创建时间', showHeaderOverflow: true }, //
{ field: 'update_time', formatter: 'formatDate', width: 160, sortable: true, title: '更新时间', showHeaderOverflow: true }, //
// =============================== Start ===============================
]
]
}
};
pageData.actions.getList = pageData.actions.MesProcessesList;
pageData.actions.delete = pageData.actions.MesProcessesBatchDelete;
pageData.gridOptions = Object.assign({}, this.$mk.config.defaults.gridOptions, pageData.gridOptions); //
pageData.actions.getList = pageData.actions.MesProcessesList;
pageData.actions.delete = pageData.actions.MesProcessesBatchDelete;
pageData.gridOptions = Object.assign({}, this.$mk.config.defaults.gridOptions, pageData.gridOptions); //
this.pageOptions = pageData;

View File

@ -45,6 +45,13 @@ export default {
optionsInit() {
let date = new Date();
let year = date.getFullYear();
let month = (date.getMonth() + 1).toString().padStart(2, '0');
let day = date.getDate().toString().padStart(2, '0');
let dateString = `${year}-${month}-${day}`;
//
var pageData = {
//
@ -130,11 +137,11 @@ export default {
department_id: 0,
process_id: 0,
process_scheme_id: 0,
entry_date: new Date(2100, 1, 1).getTime() / 10000,
departure_date: new Date(2100, 1, 1).getTime() / 10000,
entry_date: dateString,
departure_date: "",
is_piecework: 0,
remark: "",
status: 0,
status: 1,
create_uid: 0,
update_uid: 0,
create_time: new Date(2100, 1, 1).getTime() / 10000,
@ -167,6 +174,26 @@ export default {
children: [
{ field: 'name', title: '员工姓名', span: 12, itemRender: { name: '$input' } },
{ field: 'code', title: '员工工号', span: 12, itemRender: { name: '$input' } },
{
title: '部门', span: 12,
field: 'base_department',
dataRule: {
fromField: "id",
saveField: "department_id" // fromFieldsaveField
},
itemRender: {
name: 'MkFormDataSelector', props: {
params: {
dataType: "object",
valueField: "id",
textField: "name",
listdataFieldName: 'BaseDepartment',
dataUrl: `${BASE_URL.BASE_URL}/BaseDepartment/v1/base/department/list`
}
}
}
},
{ field: 'phone', title: '员工电话', span: 12, itemRender: { name: '$input' } },
{ field: 'email', title: '员工邮箱', span: 12, itemRender: { name: '$input' } },
//{ field: 'password', title: '', span: 12, itemRender: { name: '$input' } },
@ -233,16 +260,16 @@ export default {
let detailDataFieldName = this.pageOptions.detailDataFieldName;
if (a.data[detailDataFieldName].entry_date) {
if (a.data[detailDataFieldName].entry_date > 0) {
a.data[detailDataFieldName].entry_date = new Date(a.data[detailDataFieldName].entry_date * 1000);
}
if (a.data[detailDataFieldName].departure_date) {
if (a.data[detailDataFieldName].departure_date > 0) {
a.data[detailDataFieldName].departure_date = new Date(a.data[detailDataFieldName].departure_date * 1000);
}
if (a.data[detailDataFieldName].create_time) {
if (a.data[detailDataFieldName].create_time > 0) {
a.data[detailDataFieldName].create_time = new Date(a.data[detailDataFieldName].create_time * 1000);
}
if (a.data[detailDataFieldName].update_time) {
if (a.data[detailDataFieldName].update_time > 0) {
a.data[detailDataFieldName].update_time = new Date(a.data[detailDataFieldName].update_time * 1000);
}

View File

@ -109,6 +109,8 @@ export default {
searchFormItems: [ //
{ field: 'title', title: '标题', span: 5, itemRender: { name: '$input', props: { placeholder: '请输入标题' } } },
{ field: 'desc', title: '描述', span: 5, itemRender: { name: '$input', props: { placeholder: '请输入描述' } } },
{ span: 8, slots: { default: 'date' } }, //
{
align: 'right', span: 4, itemRender: { //
@ -136,6 +138,7 @@ export default {
{ field: 'name', sortable: true, title: '员工姓名', width: 250 }, //
{ field: 'code', sortable: true, title: '员工工号', width: 250 }, //
{ field: 'base_department', formatter: 'formatRef', params: { dataType: "object", textField: "name" }, title: '部门', width: 250 },
{ field: 'phone', sortable: true, title: '员工电话', width: 250 }, //
{ field: 'email', sortable: true, title: '员工邮箱', width: 250 }, //
//{ field: 'password', sortable: true, title: '', width: 250 }, //

View File

@ -4883,6 +4883,11 @@
"loader-utils" "^1.0.2"
"schema-utils" "^1.0.0"
"file-saver@^2.0.5":
"integrity" "sha512-P9bmyZ3h/PRG+Nzga+rbdI4OEpNDzAVyy74uVO9ATgzLK6VtAsYybF/+TOCvrc0MO793d6+42lLyZTw7/ArVzA=="
"resolved" "https://registry.npmmirror.com/file-saver/-/file-saver-2.0.5.tgz"
"version" "2.0.5"
"file-uri-to-path@2":
"integrity" "sha512-hjPFI8oE/2iQPVe4gbrJ73Pp+Xfub2+WI2LlXDbsaJBwT5wuMh35WNWVYYTpnz895shtwfyutMFLFywpQAFdLg=="
"resolved" "https://registry.npmmirror.com/file-uri-to-path/-/file-uri-to-path-2.0.0.tgz"