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", "core-js": "^3.6.5",
"date-fns": "^2.14.0", "date-fns": "^2.14.0",
"enquire.js": "^2.1.6", "enquire.js": "^2.1.6",
"file-saver": "^2.0.5",
"hevue-img-preview": "^6.1.0", "hevue-img-preview": "^6.1.0",
"highlight.js": "^10.2.1", "highlight.js": "^10.2.1",
"js-cookie": "^2.2.1", "js-cookie": "^2.2.1",

View File

@ -1,16 +1,20 @@
<template> <template>
<div class="page-body"> <div class="page-body">
<vxe-form :data="options.formOptions.data" ref="xForm" :title-width="options.formOptions.titleWidth" <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> :title-align="options.formOptions.titleAlign" :rules="options.formOptions.rules" :items="options.formOptions.items"
</vxe-form> titleColon>
</vxe-form>
<div class="footerbar">
<a-button type="primary" @click="ok">确定</a-button>
<a-button @click="cancel">取消</a-button>
</div>
<div class="footerbar">
<a-button type="primary" @click="save">确定</a-button>
<a-button @click="cancel">取消</a-button>
</div> </div>
</div>
</template> </template>
<script> <script>
@ -19,7 +23,7 @@
export default { export default {
name: 'BasicPageEdit', name: 'BasicPageEdit',
components: { }, components: {},
props: { props: {
options: { options: {
type: Object type: Object
@ -33,7 +37,8 @@ export default {
data() { data() {
return { return {
isEdit:false isEdit: false,
defaultFormData: {}
}; };
}, },
@ -44,7 +49,7 @@ export default {
created() { created() {
this.defaultFormData = JSON.parse(JSON.stringify(this.options.formOptions.data || {}))
}, },
// //
@ -69,8 +74,10 @@ export default {
}, },
// //
ok() { save({ afterSave }) {
let _this = this;
let save = () => { let save = () => {
this.isEdit = this.options.isEdit; this.isEdit = this.options.isEdit;
@ -96,10 +103,34 @@ export default {
data: postdata, data: postdata,
useBigInt: true, useBigInt: true,
}).then(() => { // }).then(() => { //
this.$mk.success("保存成功"); if (afterSave) {
if (!this.isEdit) { // afterSave();
this.back(); } 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) => { // }).catch((a) => { //
this.$mk.error(a.data.msg); // this.$mk.error(a.data.msg); //
}); });

View File

@ -22,6 +22,12 @@
<vxe-toolbar ref="xToolbar" custom> <vxe-toolbar ref="xToolbar" custom>
<template #buttons> <template #buttons>
<a-button type="primary" icon="delete" @click="pageDelete()">批量删除</a-button> <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> </template>
</vxe-toolbar> </vxe-toolbar>
<!-- 表格区 --> <!-- 表格区 -->
@ -38,11 +44,26 @@
</div> </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> </div>
</template> </template>
<script> <script>
import FileSaver from 'file-saver'
import * as XLSX from 'xlsx'
import { read, utils } from "xlsx"; //
export default { export default {
@ -55,7 +76,7 @@ export default {
data() { data() {
return { return {
showSheetNameSelector: false, excelSheetName: '', excelSheetNames: [],
bindSearchData: null bindSearchData: null
}; };
@ -117,11 +138,120 @@ export default {
// //
methods: { 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) { // onDateChange(date) { //
if (date && date.length) { // if (date && date.length) { //
@ -149,6 +279,9 @@ export default {
if (mode == "like") { // if (mode == "like") { //
value = "%" + value + "%"; // % value = "%" + value + "%"; // %
} }
if(typeof(value) == "object" && value.id){
value = value.id;
}
rules.push({ // rules.push({ //
column: key, // column: key, //
mode: mode, // 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) { pageEdit(row) {
if (!row) { // if (!row) { //
this.$mk.msg("请选择行"); // this.$mk.msg("请选择行"); //
return; // 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

@ -88,7 +88,11 @@ VXETable.formats.mixin({
}, },
formatRef({ cellValue,column }) { // 格式化参照 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[column.params.textField];
} }
return cellValue && cellValue[1] ? cellValue[1] : '' return cellValue && cellValue[1] ? cellValue[1] : ''

View File

@ -3,44 +3,53 @@ export default {
// 格式化表单数据 // 格式化表单数据
formatFormData: function ({ data, rules }) { // 格式化表单数据 formatFormData: function ({ data, rules }) { // 格式化表单数据
rules.forEach(rule => { // 循环规则
if (!rule.dataRule){ let feachRules = (rules)=>{
return;
} rules.forEach(rule => { // 循环规则
if (rule.field in data) { // 如果字段在数据中 if(rule.children && rule.children.length){
let value = data[rule.field]; // 获取值 feachRules(rule.children);
if (rule.dataRule.fromField) {
value = value[rule.dataRule.fromField];
} }
let saveField = rule.field; if (!rule.dataRule){
if(rule.dataRule.saveField){ return;
saveField = rule.dataRule.saveField;
} }
if (rule.dataRule.type == "integer") { // 如果是整数 if (rule.field in data) { // 如果字段在数据中
data[saveField] = parseInt(value); // 转换为整数 let value = data[rule.field]; // 获取值
} if (rule.dataRule.fromField) {
else if (rule.dataRule.type == "number") { // 如果是整数 value = value[rule.dataRule.fromField];
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){ let saveField = rule.field;
data[saveField] = "false"; if(rule.dataRule.saveField){
saveField = rule.dataRule.saveField;
} }
else if(data[saveField]){ if (rule.dataRule.type == "integer") { // 如果是整数
data[saveField] = value + ""; 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 ;
} }
} }
else { });
data[saveField] =value ; };
} feachRules(rules);
}
});
}, },

View File

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

View File

@ -87,7 +87,6 @@ export default {
{ title: '操作', slots: { default: 'op' }, width: 120 }, { title: '操作', slots: { default: 'op' }, width: 120 },
{ field: 'code', sortable: true, title: '编码', width: 250 }, // { field: 'code', sortable: true, title: '编码', width: 250 }, //
// { field: 'title', sortable: true, title: '', width: 250 }, //
{ field: 'name', 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: 'create_time', formatter: 'formatDate', width: 160, sortable: true, title: '创建时间', showHeaderOverflow: true }, //
{ field: 'update_time', formatter: 'formatDate', width: 160, sortable: true, title: '更新时间', showHeaderOverflow: true }, // { field: 'update_time', formatter: 'formatDate', width: 160, sortable: true, title: '更新时间', showHeaderOverflow: true }, //

View File

@ -40,11 +40,11 @@ export default {
listFieldName: 'MesBom', listFieldName: 'MesBom',
addPageUrl: "/MesBom/MesBomAdd", addPageUrl: "/MesBom/MesBomAdd",
editPageUrl: "/MesBom/MesBomUpdate/", editPageUrl: "/MesBom/MesBomUpdate/",
// //
actions: { // Api actions: { // Api
MesBomList: `${BASE_URL.BASE_URL}/MesBom/v1/mes/bom/list`, MesBomList: `${BASE_URL.BASE_URL}/MesBom/v1/mes/bom/list`,
MesBomBatchDelete: `${BASE_URL.BASE_URL}/MesBom/v1/mes/bom/batchDelete` MesBomBatchDelete: `${BASE_URL.BASE_URL}/MesBom/v1/mes/bom/batchDelete`
}, },
start_time: 0, // start_time: 0, //
end_time: 0, // end_time: 0, //
@ -57,14 +57,29 @@ export default {
}, },
// //
searchRules: [ searchRules: [
{ key: "title", mode: "like" }, { key: "title", mode: "equal" },
{ key: "desc", mode: "like" } { key: "version", mode: "like" }
], ],
// //
searchFormItems: [ // 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: { // align: 'right', span: 4, itemRender: { //
name: '$buttons', children: [{ props: { type: 'submit', content: '搜索', status: 'primary' } }, // name: '$buttons', children: [{ props: { type: 'submit', content: '搜索', status: 'primary' } }, //
@ -80,31 +95,31 @@ export default {
stripe: true, // stripe: true, //
id: 'datagrid_1', // id: 'datagrid_1', //
// //
columns: [ columns: [
{ type: 'checkbox', width: 50 }, // { type: 'checkbox', width: 50 }, //
{ type: 'seq', width: 30 }, // { type: 'seq', width: 30 }, //
{ title: '操作', slots: { default: 'op' }, width: 120 }, { title: '操作', slots: { default: 'op' }, width: 120 },
// =============================== Start =============================== { field: 'mes_materials', formatter: 'formatRef', params: { dataType: "object", textField: "name" }, title: '父件', width: 250 },
{ field: 'version', sortable: true, title: 'BOM版本', width: 250 }, // BOM { field: 'version', sortable: true, title: 'BOM版本', width: 250 },
{ field: 'create_time', formatter: 'formatDate', width: 160, 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: 'update_time', formatter: 'formatDate', width: 160, sortable: true, title: '更新时间', showHeaderOverflow: true }, //
// =============================== Start =============================== // =============================== Start ===============================
] ]
} }
}; };
pageData.actions.getList = pageData.actions.MesBomList; pageData.actions.getList = pageData.actions.MesBomList;
pageData.actions.delete = pageData.actions.MesBomBatchDelete; pageData.actions.delete = pageData.actions.MesBomBatchDelete;
pageData.gridOptions = Object.assign({}, this.$mk.config.defaults.gridOptions, pageData.gridOptions); // pageData.gridOptions = Object.assign({}, this.$mk.config.defaults.gridOptions, pageData.gridOptions); //
this.pageOptions = pageData; this.pageOptions = pageData;

View File

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

View File

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

View File

@ -1,5 +1,6 @@
<template> <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> </template>
<script> <script>
@ -23,7 +24,11 @@ export default {
data() { data() {
return { return {
pageOptions: {}
pageKeys: ['/MesProcesses/MesProcessesUpdate/', '/MesProcesses/MesProcessesAdd'],
preventTabClose: true,
pageOptions: {},
lastFormDataJson: ""
}; };
}, },
@ -39,6 +44,10 @@ export default {
this.optionsInit(); this.optionsInit();
this.dataInit(); this.dataInit();
setTimeout(() => {
console.log(this)
}, 1000);
}, },
// //
methods: { methods: {
@ -53,6 +62,9 @@ export default {
// ID // ID
currentBeid: 0, currentBeid: 0,
//
action_afterSave: "confirm",
addPageUrl: "/MesProcesses/MesProcessesAdd", addPageUrl: "/MesProcesses/MesProcessesAdd",
editPageUrl: "/MesProcesses/MesProcessesUpdate/", editPageUrl: "/MesProcesses/MesProcessesUpdate/",
listPageUrl: "/MesProcesses/MesProcessesList", listPageUrl: "/MesProcesses/MesProcessesList",
@ -118,7 +130,7 @@ export default {
is_quality_inspection: 0, is_quality_inspection: 0,
quality_inspection_scheme_id: 0, quality_inspection_scheme_id: 0,
raw_material_type_id: 0, raw_material_type_id: 0,
status: 0, status: 1,
create_uid: 0, create_uid: 0,
update_uid: 0, update_uid: 0,
create_time: new Date(2100, 1, 1).getTime() / 10000, create_time: new Date(2100, 1, 1).getTime() / 10000,
@ -145,14 +157,14 @@ export default {
// //
items: [ items: [
{ field: 'name', title: '工序名称', span: 12, itemRender: { name: '$input' } }, { 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: 'code', title: '工序编码', span: 12, itemRender: { name: '$input' } },
{ field: 'desc', title: '工序描述', span: 12, itemRender: { name: '$input' } }, { field: 'desc', title: '工序描述', span: 12, itemRender: { name: '$input' } },
{ field: 'remark', 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: '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: '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: '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 } } }, { 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.pageOptions.formOptions.data = a.data[detailDataFieldName];
this.lastFormDataJson = JSON.stringify(this.pageOptions.formOptions.data);
this.$forceUpdate() this.$forceUpdate()
}).catch((a) => { }).catch((a) => {
this.$mk.error(a.data.msg); this.$mk.error(a.data.msg);
@ -213,6 +225,8 @@ export default {
this.pageOptions.formOptions.items.push(item); this.pageOptions.formOptions.items.push(item);
}) })
this.lastFormDataJson = JSON.stringify(this.pageOptions.formOptions.data);
} }
}, },
@ -226,7 +240,48 @@ export default {
dataId = 0; dataId = 0;
} }
return dataId; 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: { watch: {

View File

@ -1,5 +1,5 @@
<template> <template>
<basic-page-list :desc="desc" :options="pageOptions"></basic-page-list> <basic-page-list :desc="desc" @importData="pageImport" :options="pageOptions"></basic-page-list>
</template> </template>
<script> <script>
@ -33,6 +33,44 @@ export default {
// //
methods: { 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() { optionsInit() {
// //
var pageData = { // var pageData = { //
@ -40,49 +78,59 @@ export default {
keyName: 'id', // keyName: 'id', //
listFieldName: 'MesProcesses', 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", addPageUrl: "/MesProcesses/MesProcessesAdd",
editPageUrl: "/MesProcesses/MesProcessesUpdate/", editPageUrl: "/MesProcesses/MesProcessesUpdate/",
// //
actions: { // Api actions: { // Api
// =============================== Start =============================== // =============================== Start ===============================
MesProcessesList: `${BASE_URL.BASE_URL}/MesProcesses/v1/mes/processes/list`, // MesProcessesList: `${BASE_URL.BASE_URL}/MesProcesses/v1/mes/processes/list`, //
MesProcessesDetail: `${BASE_URL.BASE_URL}/MesProcesses/v1/mes/processes/detail`, // MesProcessesDetail: `${BASE_URL.BASE_URL}/MesProcesses/v1/mes/processes/detail`, //
MesProcessesCreate: `${BASE_URL.BASE_URL}/MesProcesses/v1/mes/processes/create`, // MesProcessesCreate: `${BASE_URL.BASE_URL}/MesProcesses/v1/mes/processes/create`, //
MesProcessesUpdate: `${BASE_URL.BASE_URL}/MesProcesses/v1/mes/processes/update`, // MesProcessesUpdate: `${BASE_URL.BASE_URL}/MesProcesses/v1/mes/processes/update`, //
MesProcessesDelete: `${BASE_URL.BASE_URL}/MesProcesses/v1/mes/processes/detele`, // MesProcessesDelete: `${BASE_URL.BASE_URL}/MesProcesses/v1/mes/processes/detele`, //
MesProcessesBatchDelete: `${BASE_URL.BASE_URL}/MesProcesses/v1/mes/processes/batchDelete`, // MesProcessesBatchDelete: `${BASE_URL.BASE_URL}/MesProcesses/v1/mes/processes/batchDelete`, //
MesProcessesBatchUpdate: `${BASE_URL.BASE_URL}/MesProcesses/v1/mes/processes/batchUpdate`, // MesProcessesBatchUpdate: `${BASE_URL.BASE_URL}/MesProcesses/v1/mes/processes/batchUpdate`, //
MesProcessesBatchCreate: `${BASE_URL.BASE_URL}/MesProcesses/v1/mes/processes/batchCreate`, // MesProcessesBatchCreate: `${BASE_URL.BASE_URL}/MesProcesses/v1/mes/processes/batchCreate`, //
MesProcessesExportExcel: `${BASE_URL.BASE_URL}/MesProcesses/v1/mes/processes/export/excel`, // EXCEL MesProcessesExportExcel: `${BASE_URL.BASE_URL}/MesProcesses/v1/mes/processes/export/excel`, // EXCEL
MesProcessesImportExcel: `${BASE_URL.BASE_URL}/MesProcesses/v1/mes/processes/import/excel`, // EXCEL MesProcessesImportExcel: `${BASE_URL.BASE_URL}/MesProcesses/v1/mes/processes/import/excel`, // EXCEL
MesProcessesOpen: `${BASE_URL.BASE_URL}/MesProcesses/v1/mes/processes/open`, // MesProcessesOpen: `${BASE_URL.BASE_URL}/MesProcesses/v1/mes/processes/open`, //
MesProcessesClose: `${BASE_URL.BASE_URL}/MesProcesses/v1/mes/processes/close`, // MesProcessesClose: `${BASE_URL.BASE_URL}/MesProcesses/v1/mes/processes/close`, //
ProcessProgrammeList: `${BASE_URL.BASE_URL}/MesProcesses/v1/process/programme/list`, // ProcessProgrammeList: `${BASE_URL.BASE_URL}/MesProcesses/v1/process/programme/list`, //
ProcessProgrammeDetail: `${BASE_URL.BASE_URL}/MesProcesses/v1/process/programme/detail`, // ProcessProgrammeDetail: `${BASE_URL.BASE_URL}/MesProcesses/v1/process/programme/detail`, //
ProcessProgrammeCreate: `${BASE_URL.BASE_URL}/MesProcesses/v1/process/programme/create`, // ProcessProgrammeCreate: `${BASE_URL.BASE_URL}/MesProcesses/v1/process/programme/create`, //
ProcessProgrammeUpdate: `${BASE_URL.BASE_URL}/MesProcesses/v1/process/programme/update`, // ProcessProgrammeUpdate: `${BASE_URL.BASE_URL}/MesProcesses/v1/process/programme/update`, //
ProcessProgrammeDelete: `${BASE_URL.BASE_URL}/MesProcesses/v1/process/programme/detele`, // ProcessProgrammeDelete: `${BASE_URL.BASE_URL}/MesProcesses/v1/process/programme/detele`, //
ProcessProgrammeBatchDelete: `${BASE_URL.BASE_URL}/MesProcesses/v1/process/programme/batchDelete`, // ProcessProgrammeBatchDelete: `${BASE_URL.BASE_URL}/MesProcesses/v1/process/programme/batchDelete`, //
ProcessProgrammeBatchUpdate: `${BASE_URL.BASE_URL}/MesProcesses/v1/process/programme/batchUpdate`, // ProcessProgrammeBatchUpdate: `${BASE_URL.BASE_URL}/MesProcesses/v1/process/programme/batchUpdate`, //
ProcessProgrammeBatchCreate: `${BASE_URL.BASE_URL}/MesProcesses/v1/process/programme/batchCreate`, // ProcessProgrammeBatchCreate: `${BASE_URL.BASE_URL}/MesProcesses/v1/process/programme/batchCreate`, //
ProcessProgrammeExportExcel: `${BASE_URL.BASE_URL}/MesProcesses/v1/process/programme/export/excel`, // EXCEL ProcessProgrammeExportExcel: `${BASE_URL.BASE_URL}/MesProcesses/v1/process/programme/export/excel`, // EXCEL
ProcessProgrammeImportExcel: `${BASE_URL.BASE_URL}/MesProcesses/v1/process/programme/import/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 ProgrammeItemList: `${BASE_URL.BASE_URL}/MesProcesses/v1/programme/item/list`, // ID
ProgrammeItemDetail: `${BASE_URL.BASE_URL}/MesProcesses/v1/programme/item/detail`, // ID ProgrammeItemDetail: `${BASE_URL.BASE_URL}/MesProcesses/v1/programme/item/detail`, // ID
ProgrammeItemCreate: `${BASE_URL.BASE_URL}/MesProcesses/v1/programme/item/create`, // ID ProgrammeItemCreate: `${BASE_URL.BASE_URL}/MesProcesses/v1/programme/item/create`, // ID
ProgrammeItemUpdate: `${BASE_URL.BASE_URL}/MesProcesses/v1/programme/item/update`, // ID ProgrammeItemUpdate: `${BASE_URL.BASE_URL}/MesProcesses/v1/programme/item/update`, // ID
ProgrammeItemDelete: `${BASE_URL.BASE_URL}/MesProcesses/v1/programme/item/detele`, // ID ProgrammeItemDelete: `${BASE_URL.BASE_URL}/MesProcesses/v1/programme/item/detele`, // ID
ProgrammeItemBatchDelete: `${BASE_URL.BASE_URL}/MesProcesses/v1/programme/item/batchDelete`, // ID ProgrammeItemBatchDelete: `${BASE_URL.BASE_URL}/MesProcesses/v1/programme/item/batchDelete`, // ID
ProgrammeItemBatchUpdate: `${BASE_URL.BASE_URL}/MesProcesses/v1/programme/item/batchUpdate`, // ID ProgrammeItemBatchUpdate: `${BASE_URL.BASE_URL}/MesProcesses/v1/programme/item/batchUpdate`, // ID
ProgrammeItemBatchCreate: `${BASE_URL.BASE_URL}/MesProcesses/v1/programme/item/batchCreate`, // ID ProgrammeItemBatchCreate: `${BASE_URL.BASE_URL}/MesProcesses/v1/programme/item/batchCreate`, // ID
ProgrammeItemExportExcel: `${BASE_URL.BASE_URL}/MesProcesses/v1/programme/item/export/excel`, // IDEXCEL ProgrammeItemExportExcel: `${BASE_URL.BASE_URL}/MesProcesses/v1/programme/item/export/excel`, // IDEXCEL
ProgrammeItemImportExcel: `${BASE_URL.BASE_URL}/MesProcesses/v1/programme/item/import/excel`, // EXCELID ProgrammeItemImportExcel: `${BASE_URL.BASE_URL}/MesProcesses/v1/programme/item/import/excel`, // EXCELID
// =============================== End =============================== // =============================== End ===============================
}, },
start_time: 0, // start_time: 0, //
end_time: 0, // end_time: 0, //
@ -93,13 +141,13 @@ export default {
}, },
// //
searchRules: [ searchRules: [
{ key: "title", mode: "like" }, { key: "name", mode: "like" },
{ key: "desc", mode: "like" } { key: "code", mode: "like" }
], ],
// //
searchFormItems: [ // searchFormItems: [ //
{ field: 'title', title: '标题', span: 5, itemRender: { name: '$input', props: { placeholder: '请输入标题' } } }, { field: 'name', title: '工序名称', span: 5, itemRender: { name: '$input', props: { placeholder: '请输入工序名称' } } },
{ field: 'desc', title: '描述', span: 5, itemRender: { name: '$input', props: { placeholder: '请输入描述' } } }, { field: 'code', title: '编码', span: 5, itemRender: { name: '$input', props: { placeholder: '请输入编码' } } },
{ span: 8, slots: { default: 'date' } }, // { span: 8, slots: { default: 'date' } }, //
{ {
align: 'right', span: 4, itemRender: { // align: 'right', span: 4, itemRender: { //
@ -116,43 +164,43 @@ export default {
stripe: true, // stripe: true, //
id: 'datagrid_1', // id: 'datagrid_1', //
// //
columns: [ columns: [
{ type: 'checkbox', width: 50 }, // { type: 'checkbox', width: 50 }, //
{ type: 'seq', width: 30 }, // { type: 'seq', width: 30 }, //
{ title: '操作', slots: { default: 'op' }, width: 120 }, { title: '操作', slots: { default: 'op' }, width: 120 },
// =============================== Start =============================== // =============================== Start ===============================
//{ field: 'process_segment_id', sortable: true, title: 'id', width: 250 }, // id //{ field: 'process_segment_id', sortable: true, title: 'id', width: 250 }, // id
//{ field: 'title', sortable: true, title: '', width: 250 }, // //{ field: 'title', sortable: true, title: '', width: 250 }, //
{ field: 'code', sortable: true, title: '工序编码', width: 250 }, // { field: 'code', sortable: true, title: '工序编码', width: 250 }, //
{ field: 'name', sortable: true, title: '工序名称', width: 250 }, // { field: 'name', sortable: true, title: '工序名称', width: 250 }, //
{ field: 'desc', sortable: true, title: '工序描述', width: 250 }, // { field: 'desc', sortable: true, title: '工序描述', width: 250 }, //
{ field: 'remark', sortable: true, title: '工序备注', width: 250 }, // { field: 'remark', sortable: true, title: '工序备注', width: 250 }, //
{ field: 'work_type',params:settings.options_work_type, formatter: 'formatEnum', sortable: true, title: '计工方式', width: 250 }, { field: 'work_type', params: settings.options_work_type, formatter: 'formatEnum', sortable: true, title: '计工方式', width: 250 },
{ field: 'car_limit', sortable: true, title: '领车限制数', width: 250 }, // { field: 'car_limit', sortable: true, title: '领车限制数', width: 250 }, //
{ field: 'is_quality_inspection', 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: 'quality_inspection_scheme_id', sortable: true, title: 'id', width: 250 }, // id
//{ field: 'raw_material_type_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: 'status', slots: { default: 'status' }, width: 80, sortable: true, title: '状态', showHeaderOverflow: true }, //
{ field: 'create_time', formatter: 'formatDate', width: 160, 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: 'update_time', formatter: 'formatDate', width: 160, sortable: true, title: '更新时间', showHeaderOverflow: true }, //
// =============================== Start =============================== // =============================== Start ===============================
] ]
} }
}; };
pageData.actions.getList = pageData.actions.MesProcessesList; pageData.actions.getList = pageData.actions.MesProcessesList;
pageData.actions.delete = pageData.actions.MesProcessesBatchDelete; pageData.actions.delete = pageData.actions.MesProcessesBatchDelete;
pageData.gridOptions = Object.assign({}, this.$mk.config.defaults.gridOptions, pageData.gridOptions); // pageData.gridOptions = Object.assign({}, this.$mk.config.defaults.gridOptions, pageData.gridOptions); //
this.pageOptions = pageData; this.pageOptions = pageData;

View File

@ -45,6 +45,13 @@ export default {
optionsInit() { 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 = { var pageData = {
// //
@ -130,11 +137,11 @@ export default {
department_id: 0, department_id: 0,
process_id: 0, process_id: 0,
process_scheme_id: 0, process_scheme_id: 0,
entry_date: new Date(2100, 1, 1).getTime() / 10000, entry_date: dateString,
departure_date: new Date(2100, 1, 1).getTime() / 10000, departure_date: "",
is_piecework: 0, is_piecework: 0,
remark: "", remark: "",
status: 0, status: 1,
create_uid: 0, create_uid: 0,
update_uid: 0, update_uid: 0,
create_time: new Date(2100, 1, 1).getTime() / 10000, create_time: new Date(2100, 1, 1).getTime() / 10000,
@ -167,6 +174,26 @@ export default {
children: [ children: [
{ field: 'name', title: '员工姓名', span: 12, itemRender: { name: '$input' } }, { field: 'name', title: '员工姓名', span: 12, itemRender: { name: '$input' } },
{ field: 'code', 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: 'phone', title: '员工电话', span: 12, itemRender: { name: '$input' } },
{ field: 'email', title: '员工邮箱', span: 12, itemRender: { name: '$input' } }, { field: 'email', title: '员工邮箱', span: 12, itemRender: { name: '$input' } },
//{ field: 'password', 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; 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); 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); 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); 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); a.data[detailDataFieldName].update_time = new Date(a.data[detailDataFieldName].update_time * 1000);
} }

View File

@ -109,6 +109,8 @@ export default {
searchFormItems: [ // searchFormItems: [ //
{ field: 'title', title: '标题', span: 5, itemRender: { name: '$input', props: { placeholder: '请输入标题' } } }, { field: 'title', title: '标题', span: 5, itemRender: { name: '$input', props: { placeholder: '请输入标题' } } },
{ field: 'desc', title: '描述', span: 5, itemRender: { name: '$input', props: { placeholder: '请输入描述' } } }, { field: 'desc', title: '描述', span: 5, itemRender: { name: '$input', props: { placeholder: '请输入描述' } } },
{ span: 8, slots: { default: 'date' } }, // { span: 8, slots: { default: 'date' } }, //
{ {
align: 'right', span: 4, itemRender: { // align: 'right', span: 4, itemRender: { //
@ -136,6 +138,7 @@ export default {
{ field: 'name', sortable: true, title: '员工姓名', width: 250 }, // { field: 'name', sortable: true, title: '员工姓名', width: 250 }, //
{ field: 'code', 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: 'phone', sortable: true, title: '员工电话', width: 250 }, //
{ field: 'email', sortable: true, title: '员工邮箱', width: 250 }, // { field: 'email', sortable: true, title: '员工邮箱', width: 250 }, //
//{ field: 'password', sortable: true, title: '', width: 250 }, // //{ field: 'password', sortable: true, title: '', width: 250 }, //

View File

@ -4883,6 +4883,11 @@
"loader-utils" "^1.0.2" "loader-utils" "^1.0.2"
"schema-utils" "^1.0.0" "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": "file-uri-to-path@2":
"integrity" "sha512-hjPFI8oE/2iQPVe4gbrJ73Pp+Xfub2+WI2LlXDbsaJBwT5wuMh35WNWVYYTpnz895shtwfyutMFLFywpQAFdLg==" "integrity" "sha512-hjPFI8oE/2iQPVe4gbrJ73Pp+Xfub2+WI2LlXDbsaJBwT5wuMh35WNWVYYTpnz895shtwfyutMFLFywpQAFdLg=="
"resolved" "https://registry.npmmirror.com/file-uri-to-path/-/file-uri-to-path-2.0.0.tgz" "resolved" "https://registry.npmmirror.com/file-uri-to-path/-/file-uri-to-path-2.0.0.tgz"