Browse Source

ifs库存初始化

master
han\hanst 5 months ago
parent
commit
88f1a5d251
  1. 12
      src/api/base/site.js
  2. 5
      src/api/factory/accessSite.js
  3. 65
      src/views/common/login.vue
  4. 174
      src/views/main-navbar.vue
  5. 1071
      src/views/modules/base/factoryInformation.vue
  6. 740
      src/views/modules/factory/tblbasedata.vue
  7. 100
      src/views/modules/sys/user-add-or-update.vue
  8. 25
      src/views/modules/warehouse/ifsInventoryInit.vue
  9. 2
      src/views/modules/warehouse/location.vue

12
src/api/base/site.js

@ -1,13 +1,19 @@
import { createAPI } from "@/utils/httpRequest.js"; import { createAPI } from "@/utils/httpRequest.js";
//------------工厂信息部分---------------- //------------工厂信息部分----------------
// 获取工厂信息数据 // 获取工厂信息数据
export const getSiteData = data => createAPI(`/base/getSiteData`,'post',data)
export const getSiteData = data => createAPI(`/site/getSiteData`,'post',data)
// 分页查询工厂信息列表
export const getSiteList = data => createAPI(`/site/getSiteList`, 'POST', data)
// 获取会计单位数据 // 获取会计单位数据
export const getCompanyData = data => createAPI(`/base/getCompanyData`,'post',data)
export const getCompanyData = data => createAPI(`/site/getCompanyData`,'post',data)
// 保存修改工厂信息数据 // 保存修改工厂信息数据
export const siteSave = data => createAPI(`/base/siteSave`,'post',data)
export const siteSave = data => createAPI(`/site/siteSave`,'post',data)
// 删除工厂信息
export const deleteSite = data => createAPI(`/site/deleteSite`, 'POST', data)
//------------物料分类部分---------------- //------------物料分类部分----------------
// 获取工厂信息数据 // 获取工厂信息数据

5
src/api/factory/accessSite.js

@ -5,3 +5,8 @@ export const getUserAccessSiteList = data => createAPI(`/accessSite/list`,'post'
// 保存用户工厂信息 // 保存用户工厂信息
export const saveUserAccessSiteList = data => createAPI(`/accessSite/saveUserAccessSiteList`,'post',data) export const saveUserAccessSiteList = data => createAPI(`/accessSite/saveUserAccessSiteList`,'post',data)
/**
* 根据用户名获取用户授权的工厂列表
* @param {Object} data - 包含用户名的参数对象
*/
export const getUserAuthorizedSites = data => createAPI(`accessSite/getUserAuthorizedSites`, 'post', data)

65
src/views/common/login.vue

@ -7,11 +7,21 @@
<el-form :model="dataForm" :rules="dataRule" ref="dataForm" @keyup.enter.native="dataFormSubmit()" status-icon> <el-form :model="dataForm" :rules="dataRule" ref="dataForm" @keyup.enter.native="dataFormSubmit()" status-icon>
<el-form-item prop="userName"> <el-form-item prop="userName">
<el-input v-model="dataForm.userName" placeholder="帐号"></el-input>
<el-input v-model="dataForm.userName" placeholder="帐号" @blur="handleUsernameBlur"></el-input>
</el-form-item> </el-form-item>
<el-form-item prop="password"> <el-form-item prop="password">
<el-input v-model="dataForm.password" type="password" placeholder="密码"></el-input> <el-input v-model="dataForm.password" type="password" placeholder="密码"></el-input>
</el-form-item> </el-form-item>
<el-form-item >
<el-select v-model="selectedSite" placeholder="请选择工厂" style="width: 100%;">
<el-option
v-for="item in siteList"
:key="item.siteCode"
:label="item.siteName"
:value="item.siteCode">
</el-option>
</el-select>
</el-form-item>
<el-form-item> <el-form-item>
<el-button class="login-btn-submit" type="primary" @click="dataFormSubmit()">登录</el-button> <el-button class="login-btn-submit" type="primary" @click="dataFormSubmit()">登录</el-button>
</el-form-item> </el-form-item>
@ -25,6 +35,7 @@
<script> <script>
import { getUUID } from '@/utils' import { getUUID } from '@/utils'
import {getConfigParams} from '@/api/sysConfig.js' import {getConfigParams} from '@/api/sysConfig.js'
import {getUserAuthorizedSites} from '@/api/factory/accessSite.js'
export default { export default {
data () { data () {
return { return {
@ -35,6 +46,8 @@
uuid: '', uuid: '',
captcha: '' captcha: ''
}, },
siteList: [],
selectedSite: '',
dataRule: { dataRule: {
userName: [ userName: [
{ required: true, message: '帐号不能为空', trigger: 'blur' } { required: true, message: '帐号不能为空', trigger: 'blur' }
@ -71,9 +84,55 @@
// //
userName(){ userName(){
this.dataForm.userName = localStorage.getItem('userName') this.dataForm.userName = localStorage.getItem('userName')
this.handleUsernameBlur()
this.dataForm.selectedSite = localStorage.getItem('site')
},
//
handleUsernameBlur() {
if (this.dataForm.userName && this.dataForm.userName.trim()) {
this.getUserSiteList(this.dataForm.userName);
} else {
this.siteList = [];
this.selectedSite = '';
}
},
//
getUserSiteList(userName) {
if (!userName || !userName.trim()) {
this.siteList = [];
this.selectedSite = '';
return;
}
getUserAuthorizedSites({ userName: userName.trim() }).then(({data}) => {
if (data && data.code === 0) {
this.siteList = data.data || data.list || [];
//
this.selectedSite = '';
//
if (this.siteList.length === 1) {
this.selectedSite = this.siteList[0].siteCode;
}
} else {
this.siteList = [];
this.selectedSite = '';
this.$message.error(data.msg || '获取工厂列表失败');
}
}).catch(error => {
this.siteList = [];
this.selectedSite = '';
console.error('获取工厂列表失败:', error);
this.$message.error('获取工厂列表失败');
})
}, },
// //
dataFormSubmit () { dataFormSubmit () {
//
if (this.siteList.length > 0 && !this.selectedSite) {
this.$message.error('请选择工厂');
return;
}
this.$refs['dataForm'].validate((valid) => { this.$refs['dataForm'].validate((valid) => {
if (valid) { if (valid) {
this.$http({ this.$http({
@ -82,7 +141,8 @@
data: this.$http.adornData({ data: this.$http.adornData({
'username': this.dataForm.userName, 'username': this.dataForm.userName,
'password': this.dataForm.password, 'password': this.dataForm.password,
'uuid': this.dataForm.uuid
'uuid': this.dataForm.uuid,
'site': this.selectedSite
}) })
}).then(({data}) => { }).then(({data}) => {
if (data && data.code === 0) { if (data && data.code === 0) {
@ -93,6 +153,7 @@
this.$i18n.locale = data.language; // this.$i18n.locale = data.language; //
localStorage.setItem('refresh', "0") localStorage.setItem('refresh', "0")
localStorage.setItem('userName', this.dataForm.userName) localStorage.setItem('userName', this.dataForm.userName)
localStorage.setItem('site', this.selectedSite) //
this.getConfigParams() this.getConfigParams()
} else { } else {
this.$message.error(data.msg) this.$message.error(data.msg)

174
src/views/main-navbar.vue

@ -21,6 +21,24 @@
<el-menu <el-menu
class="site-navbar__menu site-navbar__menu--right" class="site-navbar__menu site-navbar__menu--right"
mode="horizontal"> mode="horizontal">
<el-menu-item class="site-navbar__factory" index="0.5" v-if="siteList.length > 0">
<div class="factory-selector">
<i class="el-icon-office-building factory-icon"></i>
<el-select
v-model="selectedSite"
@change="handleSiteChange"
placeholder="选择工厂"
class="factory-select"
size="small">
<el-option
v-for="item in siteList"
:key="item.siteCode"
:label="item.siteName"
:value="item.siteCode">
</el-option>
</el-select>
</div>
</el-menu-item>
<el-menu-item class="site-navbar__avatar" index="1"> <el-menu-item class="site-navbar__avatar" index="1">
<span class="el-dropdown-link" @click="userSetting"> <span class="el-dropdown-link" @click="userSetting">
<icon-svg name="editTable" style="width: 25px;height: 25px;margin-top: 5px"></icon-svg> <icon-svg name="editTable" style="width: 25px;height: 25px;margin-top: 5px"></icon-svg>
@ -98,6 +116,7 @@ import {
saveButtonList, saveButtonList,
searchSysLanguage, searchSysLanguage,
} from "@/api/sysLanguage.js" } from "@/api/sysLanguage.js"
import {getUserAuthorizedSites} from '@/api/factory/accessSite.js'
export default { export default {
inject: ['refresh'], inject: ['refresh'],
@ -110,6 +129,8 @@ export default {
printListVisible: false, printListVisible: false,
message: this.$t('language.name'), message: this.$t('language.name'),
languageList: [], languageList: [],
siteList: [],
selectedSite: '',
pageLanguage: { pageLanguage: {
XjSysManage: '旭捷管理系统', XjSysManage: '旭捷管理系统',
abbreviation: '旭捷', abbreviation: '旭捷',
@ -356,11 +377,77 @@ export default {
}) })
}).catch(() => { }).catch(() => {
}) })
},
//
initSiteSelection() {
// localStorage
this.selectedSite = localStorage.getItem('site') || '';
//
const userName = localStorage.getItem('userName');
if (userName) {
this.getUserSiteList(userName);
}
},
//
getUserSiteList(userName) {
if (!userName || !userName.trim()) {
this.siteList = [];
return;
}
getUserAuthorizedSites({ userName: userName.trim() }).then(({data}) => {
if (data && data.code === 0) {
this.siteList = data.data || data.list || [];
//
if (this.selectedSite && !this.siteList.find(site => site.siteCode === this.selectedSite)) {
this.selectedSite = '';
localStorage.removeItem('site');
}
//
if (!this.selectedSite && this.siteList.length > 0) {
this.selectedSite = this.siteList[0].siteCode;
localStorage.setItem('site', this.selectedSite);
}
} else {
this.siteList = [];
console.error('获取工厂列表失败:', data.msg);
}
}).catch(error => {
this.siteList = [];
console.error('获取工厂列表失败:', error);
})
},
//
handleSiteChange(siteCode) {
const selectedSite = this.siteList.find(site => site.siteCode === siteCode);
const siteName = selectedSite ? selectedSite.siteName : siteCode;
localStorage.setItem('site', siteCode);
this.$message({
message: `已切换到工厂:${siteName}`,
type: 'success',
duration: 2000,
showClose: true
});
//
const factorySelect = document.querySelector('.factory-select');
if (factorySelect) {
factorySelect.style.transform = 'scale(1.05)';
setTimeout(() => {
factorySelect.style.transform = 'scale(1)';
}, 200);
}
} }
}, },
created() { created() {
this.getLanguageList() this.getLanguageList()
this.getFunctionButtonList() this.getFunctionButtonList()
this.initSiteSelection()
} }
} }
</script> </script>
@ -380,6 +467,93 @@ export default {
margin-left: -45px; margin-left: -45px;
} }
//
.site-navbar__factory {
padding: 0 15px !important;
.factory-selector {
display: flex;
align-items: center;
gap: 8px;
.factory-icon {
color: #409EFF;
font-size: 16px;
margin-right: 4px;
}
.factory-select {
width: 140px;
transition: transform 0.2s ease;
.el-input__inner {
background: rgba(64, 158, 255, 0.1);
border: 1px solid rgba(64, 158, 255, 0.3);
border-radius: 20px;
color: #409EFF;
font-size: 13px;
height: 32px;
line-height: 32px;
transition: all 0.3s ease;
&:hover {
background: rgba(64, 158, 255, 0.15);
border-color: #409EFF;
box-shadow: 0 2px 8px rgba(64, 158, 255, 0.2);
}
&:focus {
background: rgba(64, 158, 255, 0.1);
border-color: #409EFF;
box-shadow: 0 0 0 2px rgba(64, 158, 255, 0.2);
}
}
.el-input__suffix {
.el-input__suffix-inner {
.el-select__caret {
color: #409EFF;
transition: transform 0.3s ease;
}
}
}
&.is-focus {
.el-input__suffix-inner .el-select__caret {
transform: rotateZ(180deg);
}
}
}
}
&:hover {
background-color: rgba(64, 158, 255, 0.05) !important;
}
}
//
.el-select-dropdown {
.el-select-dropdown__item {
&:hover {
background-color: rgba(64, 158, 255, 0.1);
color: #409EFF;
}
&.selected {
background-color: #409EFF;
color: #fff;
font-weight: 500;
&::after {
content: '✓';
position: absolute;
right: 15px;
font-weight: bold;
}
}
}
}
.el-menu--horizontal > .el-menu-item { .el-menu--horizontal > .el-menu-item {
color: #3b4249; color: #3b4249;
} }

1071
src/views/modules/base/factoryInformation.vue
File diff suppressed because it is too large
View File

740
src/views/modules/factory/tblbasedata.vue

@ -1,30 +1,26 @@
<template> <template>
<div class="mod-config"> <div class="mod-config">
<div>
<span @click="favoriteFunction()">
<icon-svg :name="favorite?'xiangqufill':'xiangqu'" class="sl-svg"></icon-svg>
</span>
</div>
<el-button @click="searchList()" type="primary">{{ buttons.search }}</el-button>
<el-button @click="addOrUpdateHandle(0)" type="primary">{{ buttons.add }}</el-button>
<download-excel
:fields="fields()"
:data="exportData"
type="xls"
:name="exportName"
:header="exportHeader"
:footer="exportFooter"
:fetch="createExportData"
:before-generate="startDownload"
:before-finish="finishDownload"
worksheet="导出信息"
class="el-button el-button--primary el-button--medium">
{{ buttons.download }}
</download-excel>
<el-form v-show="searchShow" :inline="true" :model="queryData" @keyup.enter.native="getDataList()">
<el-form-item label="工厂编辑">
<el-input filterable v-model="queryData.key" clearable>
</el-input>
<el-form :inline="true" label-position="top">
<el-form-item label="工厂编码">
<el-input style="width: 120px;" v-model="queryHeaderData.siteId" placeholder="请输入工厂编码"></el-input>
</el-form-item>
<el-form-item label="工厂名称">
<el-input style="width: 120px;" v-model="queryHeaderData.siteName" placeholder="请输入工厂名称"></el-input>
</el-form-item>
<el-form-item label="会计单位">
<el-input style="width: 120px;" v-model="queryHeaderData.companyId" placeholder="请输入会计单位"></el-input>
</el-form-item>
<el-form-item label="在用状态">
<el-select v-model="queryHeaderData.active" placeholder="请选择" style="width: 120px;">
<el-option label="全部" value=""></el-option>
<el-option label="是" value="Y"></el-option>
<el-option label="否" value="N"></el-option>
</el-select>
</el-form-item>
<el-form-item style="margin-top: 20px;">
<el-button @click="getDataList()" type="primary">查询</el-button>
<el-button @click="resetQuery()" type="default">重置</el-button>
<el-button @click="addModal()" type="primary" :disabled="authAdd">新增</el-button>
</el-form-item> </el-form-item>
</el-form> </el-form>
@ -33,522 +29,328 @@
:data="dataList" :data="dataList"
border border
v-loading="dataListLoading" v-loading="dataListLoading"
@selection-change="selectionChangeHandle"
style="width: 100%;">
<el-table-column
v-for="(item,index) in columnList" :key="index"
:sortable="item.columnSortable"
:prop="item.columnProp"
:header-align="item.headerAlign"
:show-overflow-tooltip="item.showOverflowTooltip"
:align="item.align"
:fixed="item.fixed==''?false:item.fixed"
min-width="20%"
:label="item.columnLabel">
style="width: 100%; margin-bottom: 15px;">
<el-table-column prop="siteId" label="工厂编码" min-width="100" show-overflow-tooltip></el-table-column>
<el-table-column prop="siteName" label="工厂名称(中文)" min-width="150" show-overflow-tooltip></el-table-column>
<el-table-column prop="siteNameE" label="工厂名称(英文)" min-width="150" show-overflow-tooltip></el-table-column>
<el-table-column prop="companyId" label="会计单位" min-width="100" show-overflow-tooltip></el-table-column>
<el-table-column prop="address" label="地址" min-width="200" show-overflow-tooltip></el-table-column>
<el-table-column prop="contactName" label="联系人" min-width="100" show-overflow-tooltip></el-table-column>
<el-table-column prop="phoneNo" label="电话" min-width="120" show-overflow-tooltip></el-table-column>
<el-table-column prop="email" label="邮箱" min-width="150" show-overflow-tooltip></el-table-column>
<el-table-column prop="active" label="在用" min-width="80" align="center">
<template slot-scope="scope"> <template slot-scope="scope">
<span v-if="!item.columnHidden"> {{ scope.row[item.columnProp] }}</span>
<span v-if="item.columnImage"><img :src="scope.row[item.columnProp]"
style="width: 100px; height: 80px"/></span>
<span v-if="scope.row.active === 'Y'" style="color: #67C23A;"></span>
<span v-else-if="scope.row.active === 'N'" style="color: #F56C6C;"></span>
<span v-else>{{ scope.row.active }}</span>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column
fixed="right"
header-align="center"
align="center"
width="150"
label="操作">
<el-table-column label="操作" min-width="120" fixed="right">
<template slot-scope="scope"> <template slot-scope="scope">
<a type="text" size="small" @click="addOrUpdateHandle(scope.row.id)">{{buttons.edit || '修改' }}</a>
<a type="text" size="small" @click="deleteHandle(scope.row.id)">{{buttons.delete || '删除'}}</a>
<a
v-if="!authEdit"
@click="editSite(scope.row)"
type="text"
size="small">
编辑
</a>
<a
v-if="!authDelete"
@click="deleteSite(scope.row)"
type="text"
size="small"
style="color: #F56C6C;">
删除
</a>
</template> </template>
</el-table-column> </el-table-column>
</el-table> </el-table>
<el-pagination <el-pagination
@size-change="sizeChangeHandle" @size-change="sizeChangeHandle"
@current-change="currentChangeHandle" @current-change="currentChangeHandle"
:current-page="pageIndex" :current-page="pageIndex"
:page-sizes="[10, 20, 50, 100]"
:page-sizes="[20, 50, 100]"
:page-size="pageSize" :page-size="pageSize"
:total="totalPage" :total="totalPage"
layout="total, sizes, prev, pager, next, jumper"> layout="total, sizes, prev, pager, next, jumper">
</el-pagination> </el-pagination>
<!-- 设置查询条件 -->
<search v-if="searchVisible" v-on:childByValue="childByValue" ref="search" @refreshDataList="getDataList"></search>
<!-- 设置列 -->
<column v-if="visible" ref="column" @refreshData="getTableUserColumn"></column>
<!-- 弹窗, 新增 / 修改 -->
<add-or-update v-if="addOrUpdateVisible" ref="addOrUpdate" @refreshDataList="getDataList"></add-or-update>
<el-dialog :title="siteData.add === 0 ? '新增工厂信息' : '编辑工厂信息'" :close-on-click-modal="false" :visible.sync="siteFlag" width="500px">
<el-form :model="siteData" :rules="siteRules" ref="siteForm" label-position="top" style="margin-left: 7px;margin-top: -5px;">
<el-row :gutter="20">
<el-col :span="12">
<el-form-item label="工厂编码" prop="siteId">
<el-input v-model="siteData.siteId" :disabled="siteInputFlag" style="width: 100%" placeholder="请输入工厂编码"></el-input>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="工厂名称(中文)" prop="siteName">
<el-input v-model="siteData.siteName" style="width: 100%" placeholder="请输入工厂名称"></el-input>
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="20">
<el-col :span="12">
<el-form-item label="工厂名称(英文)">
<el-input v-model="siteData.siteNameE" style="width: 100%" placeholder="请输入英文名称"></el-input>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="会计单位" prop="companyId">
<el-input v-model="siteData.companyId" style="width: 100%" placeholder="请输入会计单位"></el-input>
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="20">
<el-col :span="12">
<el-form-item label="在用状态">
<el-select v-model="siteData.active" style="width: 100%">
<el-option label="是" value="Y"></el-option>
<el-option label="否" value="N"></el-option>
</el-select>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="邮政编码">
<el-input v-model="siteData.postCode" style="width: 100%" placeholder="请输入邮政编码"></el-input>
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="20">
<el-col :span="12">
<el-form-item label="联系人">
<el-input v-model="siteData.contactName" style="width: 100%" placeholder="请输入联系人"></el-input>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="电话">
<el-input v-model="siteData.phoneNo" style="width: 100%" placeholder="请输入电话"></el-input>
</el-form-item>
</el-col>
</el-row>
<el-form-item label="邮箱">
<el-input v-model="siteData.email" style="width: 100%" placeholder="请输入邮箱"></el-input>
</el-form-item>
<el-form-item label="地址(中文)">
<el-input v-model="siteData.address" type="textarea" :autosize="{ minRows: 1, maxRows: 6}" style="width: 100%" placeholder="请输入地址"></el-input>
</el-form-item>
<el-form-item label="地址(英文)">
<el-input v-model="siteData.addressE" type="textarea" :autosize="{ minRows: 1, maxRows: 6}" style="width: 100%" placeholder="请输入英文地址"></el-input>
</el-form-item>
</el-form>
<el-footer style="height:40px;margin-top: 20px;text-align:center">
<el-button type="primary" @click="siteSave()">保存</el-button>
<el-button type="primary" @click="siteFlag = false">关闭</el-button>
</el-footer>
</el-dialog>
</div> </div>
</template> </template>
<script> <script>
import column from "../common/column";
import search from "../common/search";
import { import {
searchSysLanguageParam,
searchFunctionButtonList,
saveButtonList,
} from "@/api/sysLanguage.js"
import {
saveTableDefaultList,
getTableDefaultListLanguage,
getTableUserListLanguage
} from "@/api/table.js"
import {userFavoriteList, saveUserFavorite, removeUserFavorite} from '@/api/userFavorite.js'
import AddOrUpdate from './tblbasedata-add-or-update'
getSiteList,
siteSave,
deleteSite
} from "@/api/base/site.js"
export default { export default {
name: "factoryInformation",
data() { data() {
return { return {
searchVisible: false,
searchShow: false,
queryData: {
key: ''
},
// table
height: 450,
//
favorite: false,
addLanguage: false,
functionId: this.$route.meta.menuId,
tableId: "9002Blbasedata",
languageCode: this.$i18n.locale,
visible: false,
showDefault: false,
//
sysLanguageParams: [],
// table
userColumnList: [],
columnList: [
{
userId: this.$store.state.user.name,
functionId: this.$route.meta.menuId,
serialNumber: '9002tBlbasedataId',
tableId: "9002Blbasedata",
tableName: "工厂信息",
columnProp: "id",
headerAlign: "center",
align: "left",
columnLabel: this.$t('factory.table.id'),
columnHidden: false,
columnImage: false,
columnSortable: false,
sortLv: 0,
status: true,
fixed: '',
columnWidth: 50
},
{
userId: this.$store.state.user.name,
functionId: this.$route.meta.menuId,
serialNumber: '9002tBlbasedataSite',
tableId: "9002Blbasedata",
tableName: "工厂信息",
columnProp: "site",
headerAlign: "center",
align: "left",
columnLabel: "site",
columnHidden: false,
columnImage: false,
columnSortable: false,
sortLv: 0,
status: true,
fixed: false
},
{
userId: this.$store.state.user.name,
functionId: this.$route.meta.menuId,
serialNumber: '9002tBlbasedataType',
tableId: "9002Blbasedata",
tableName: "工厂信息",
columnProp: "sortNo",
headerAlign: "type",
align: "left",
columnLabel: "type",
columnHidden: false,
columnImage: false,
columnSortable: false,
sortLv: 0,
status: true,
fixed: false
},
{
userId: this.$store.state.user.name,
functionId: this.$route.meta.menuId,
serialNumber: '9002tBlbasedataSecondType',
tableId: "9002Blbasedata",
tableName: "工厂信息",
columnProp: "secondType",
headerAlign: "center",
align: "left",
columnLabel: "secondType",
columnHidden: false,
columnImage: false,
columnSortable: false,
sortLv: 0,
status: true,
fixed: false
},
{
userId: this.$store.state.user.name,
functionId: this.$route.meta.menuId,
serialNumber: '9002tBlbasedataBaseData',
tableId: "9002Blbasedata",
tableName: "工厂信息",
columnProp: "baseData",
headerAlign: "center",
align: "left",
columnLabel: "工厂编号",
columnHidden: false,
columnImage: false,
columnSortable: false,
sortLv: 0,
status: true,
fixed: false
},
{
userId: this.$store.state.user.name,
functionId: this.$route.meta.menuId,
serialNumber: '9002tBlbasedataBaseDesc',
tableId: "9002Blbasedata",
tableName: "工厂信息",
columnProp: "baseDesc",
headerAlign: "center",
align: "left",
columnLabel: "工厂描述",
columnHidden: false,
columnImage: false,
columnSortable: false,
sortLv: 0,
status: true,
fixed: false
},
{
userId: this.$store.state.user.name,
functionId: this.$route.meta.menuId,
serialNumber: '9002tBlbasedataStatus',
tableId: "9002Blbasedata",
tableName: "工厂信息",
columnProp: "status",
headerAlign: "status",
align: "left",
columnLabel: "status",
columnHidden: false,
columnImage: false,
columnSortable: false,
sortLv: 0,
status: true,
fixed: false
},
{
userId: this.$store.state.user.name,
functionId: this.$route.meta.menuId,
serialNumber: '9002tBlbasedataSortNo',
tableId: "9002Blbasedata",
tableName: "工厂信息",
columnProp: "sortNo",
headerAlign: "center",
align: "left",
columnLabel: "sortNo",
columnHidden: false,
columnImage: false,
columnSortable: false,
sortLv: 0,
status: true,
fixed: false
},
{
userId: this.$store.state.user.name,
functionId: this.$route.meta.menuId,
serialNumber: '9002tBlbasedataRemark',
tableId: "9002Blbasedata",
tableName: "工厂信息",
columnProp: "remark",
headerAlign: "center",
align: "left",
columnLabel: "工厂备注",
columnHidden: false,
columnImage: false,
columnSortable: false,
sortLv: 0,
status: true,
fixed: false
},
],
//
dataList: [],
buttons: {
add: '添加',
edit: '编辑',
delete: '删除',
deleteList: '批量删除',
cz: '操作',
search: '搜索',
download: '导出',
settingTable: '设置列表',
defaultTable: '设置默认配置',
site:'工厂编号',
siteDesc:'工厂描述',
siteRemark:'工厂备注',
},
// start
exportData: [],
exportName: "工厂列表" + this.dayjs().format('YYYYMMDDHHmmss'),
exportHeader: ["工厂列表"],
exportFooter: [],
// end
//
authEdit: false,
authAdd: false,
authDelete: false,
menuId: this.$route.meta.menuId,
dataListLoading: false,
pageIndex: 1, pageIndex: 1,
pageSize: 20,
pageSize: 50,
totalPage: 0, totalPage: 0,
dataListLoading: false,
dataListSelections: [],
addOrUpdateVisible: false,
queryHeaderData: {
siteId: '',
siteName: '',
companyId: '',
active: ''
},
height: 500,
siteFlag: false,
siteInputFlag: true,
siteData: {
add: '',
siteId: '',
siteName: '',
siteNameE: '',
companyId: '',
postCode: '',
address: '',
addressE: '',
contactName: '',
phoneNo: '',
email: '',
active: 'Y'
},
siteRules: {
siteId: [
{ required: true, message: '请输入工厂编码', trigger: 'blur' }
],
siteName: [
{ required: true, message: '请输入工厂名称', trigger: 'blur' }
],
companyId: [
{ required: true, message: '请输入会计单位', trigger: 'blur' }
]
},
dataList: []
} }
}, },
components: {
AddOrUpdate,
column,
search
activated() {
this.getDataList()
this.getHeight()
}, },
mounted() { mounted() {
this.$nextTick(() => {
this.height = window.innerHeight - 240;
})
},
activated() {
this.getDataList() this.getDataList()
this.getHeight()
}, },
methods: { methods: {
childByValue(childValue) {
// childValue
console.log(childValue)
let json = "{"
childValue.forEach((item, index) => {
if (index == childValue.length - 1) {
json += "\"" + item.queryAttributes + "\"" + ":" + "\"" + item.queryValue + "\""
} else {
json += "\"" + item.queryAttributes + "\"" + ":" + "\"" + item.queryValue + "\"" + ","
}
})
json += "}"
let s = eval("(" + json + ")")
console.log(json)
},
//
searchList() {
this.searchVisible = true;
let queryTable = {
userId: this.userId,
functionId: this.functionId,
tableId: this.tableId,
languageCode: this.languageCode
}
this.$nextTick(() => {
this.$refs.search.init(queryTable);
});
},
//
favoriteIsOk() {
let userFavorite = {
userId: this.$store.state.user.id,
languageCode: this.$i18n.locale
}
userFavoriteList(userFavorite).then(({data}) => {
let size = data.list.filter(item => item.menuId == this.$route.meta.menuId).length;
if (size > 0) {
this.favorite = true
} else {
this.favorite = false
}
})
},
// OR
favoriteFunction() {
let userFavorite = {
userId: this.$store.state.user.id,
functionId: this.$route.meta.menuId,
}
if (this.favorite) {
//
this.$confirm(`确定取消收藏`, '提示', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning'
}).then(() => {
removeUserFavorite(userFavorite).then(({data}) => {
this.$message.success(data.msg)
this.favorite = false
})
})
} else {
//
saveUserFavorite(userFavorite).then(({data}) => {
this.$message.success(data.msg)
this.favorite = true
})
}
},
// button
getFunctionButtonList() {
let queryButton = {
functionId: this.functionId,
tableId: '*',
languageCode: this.languageCode,
objectType: 'button'
}
searchFunctionButtonList(queryButton).then(({data}) => {
if (data.code == 0 && data.data) {
this.buttons = data.data
}
})
},
//
getTableUserColumn() {
let queryTableUser = {
userId: this.userId,
functionId: this.functionId,
tableId: this.tableId,
languageCode: this.languageCode,
status: true,
}
getTableUserListLanguage(queryTableUser).then(({data}) => {
if (data.code == 0 && data.data) {
//this.columnList = []
this.columnList = data.rows
} else {
this.getColumnList()
}
})
},
// tableDefault
getColumnList() {
let queryTable = {
functionId: this.functionId,
tableId: this.tableId,
languageCode: this.languageCode
}
getTableDefaultListLanguage(queryTable).then(({data}) => {
if (data.code == 0 && data.data ) {
// this.showDefault = false
this.columnList = data.rows
} else {
// this.showDefault = true
}
})
},
// //
getDataList() { getDataList() {
this.dataListLoading = true this.dataListLoading = true
this.$http({
url: this.$http.adornUrl('/factory/tblbasedata/list'),
method: 'get',
params: this.$http.adornParams({
'page': this.pageIndex,
'limit': this.pageSize,
'key': this.queryData.key
})
}).then(({data}) => {
const params = {
page: this.pageIndex,
size: this.pageSize,
site: localStorage.getItem('site'),
...this.queryHeaderData
}
getSiteList(params).then(({data}) => {
if (data && data.code === 0) { if (data && data.code === 0) {
this.dataList = data.list
this.totalPage = data.totalCount
this.dataList = data.page.list || []
this.totalPage = data.page.totalCount || 0
} else { } else {
this.dataList = [] this.dataList = []
this.totalPage = 0 this.totalPage = 0
this.$message.error(data.msg || '查询失败')
} }
this.dataListLoading = false this.dataListLoading = false
}).catch(() => {
this.dataList = []
this.totalPage = 0
this.dataListLoading = false
}) })
}, },
//
sizeChangeHandle(val) {
this.pageSize = val
//
resetQuery() {
this.queryHeaderData = {
siteId: '',
siteName: '',
companyId: '',
active: ''
}
this.pageIndex = 1 this.pageIndex = 1
this.getDataList() this.getDataList()
}, },
//
currentChangeHandle(val) {
this.pageIndex = val
this.getDataList()
//
getHeight() {
this.$nextTick(() => {
this.height = window.innerHeight - 200
})
}, },
//
selectionChangeHandle(val) {
this.dataListSelections = val
//
addModal() {
this.siteData = {
add: 0,
siteId: '',
siteName: '',
siteNameE: '',
companyId: '',
postCode: '',
address: '',
addressE: '',
contactName: '',
phoneNo: '',
email: '',
active: 'Y'
}
this.siteInputFlag = false
this.siteFlag = true
this.$nextTick(() => {
this.$refs.siteForm.clearValidate()
})
}, },
// /
addOrUpdateHandle(id) {
this.addOrUpdateVisible = true
//
editSite(row) {
this.siteData = JSON.parse(JSON.stringify(row))
this.siteData.add = 1
this.siteInputFlag = true
this.siteFlag = true
this.$nextTick(() => { this.$nextTick(() => {
this.$refs.addOrUpdate.init(id)
this.$refs.siteForm.clearValidate()
}) })
}, },
//
deleteHandle(id) {
var ids = id ? [id] : this.dataListSelections.map(item => {
return item.id
//
siteSave() {
this.$refs.siteForm.validate((valid) => {
if (valid) {
siteSave(this.siteData).then(({data}) => {
if (data && data.code === 0) {
this.siteFlag = false
this.getDataList()
this.$message.success('操作成功')
} else {
this.$message.error(data.msg || '操作失败')
}
}).catch(() => {
this.$message.error('操作失败')
})
}
}) })
this.$confirm(`确定删除选择中的数据`, '提示', {
},
//
deleteSite(row) {
this.$confirm('确定要删除该工厂信息吗?', '提示', {
confirmButtonText: '确定', confirmButtonText: '确定',
cancelButtonText: '取消', cancelButtonText: '取消',
type: 'warning' type: 'warning'
}).then(() => { }).then(() => {
this.$http({
url: this.$http.adornUrl('/factory/tblbasedata/delete'),
method: 'post',
data: this.$http.adornData(ids, false)
}).then(({data}) => {
deleteSite({siteId: row.siteId}).then(({data}) => {
if (data && data.code === 0) { if (data && data.code === 0) {
this.$message.success('操作成功')
this.$message.success('删除成功')
this.getDataList() this.getDataList()
} else { } else {
this.$message.error(data.msg)
this.$message.error(data.msg || '删除失败')
} }
}).catch(() => {
this.$message.error('删除失败')
}) })
}) })
}, },
//
fields() {
let json = "{"
this.columnList.forEach((item, index) => {
if (index == this.columnList.length - 1) {
json += "\"" + item.columnLabel + "\"" + ":" + "\"" + item.columnProp + "\""
} else {
json += "\"" + item.columnLabel + "\"" + ":" + "\"" + item.columnProp + "\"" + ","
}
})
json += "}"
let s = eval("(" + json + ")")
return s
},
createExportData() {
// ,,
// TODO:
if (this.dataListSelections.length > 0) {
return this.dataListSelections;
}
return this.dataList;
},
startDownload() {
// this.exportData = this.dataList
//
sizeChangeHandle(val) {
this.pageSize = val
this.pageIndex = 1
this.getDataList()
}, },
finishDownload() {
//
currentChangeHandle(val) {
this.pageIndex = val
this.getDataList()
} }
},
created() {
this.getTableUserColumn()
this.getFunctionButtonList()
this.favoriteIsOk()
} }
} }
</script> </script>
<style scoped>
.sl-svg {
overflow: hidden;
float: right;
<style>
.el-textarea__inner {
padding: 5px 5px;
} }
</style> </style>

100
src/views/modules/sys/user-add-or-update.vue

@ -33,9 +33,13 @@
</el-form-item> </el-form-item>
</el-form> </el-form>
<el-form> <el-form>
<el-form-item >
<span slot="label" style="" @click="getBaseList(93)"><a herf="#">{{buttons.site||'工厂'}}</a></span>
<el-input v-model="dataForm.site" style="width: 150px;" placeholder="工厂"></el-input>
<el-form-item :label="buttons.site||'工厂'" size="mini" prop="siteList">
<el-checkbox-group v-model="dataForm.siteList">
<el-checkbox v-for="site in siteOptions" :key="site.key" :label="site.key">{{
site.label
}}
</el-checkbox>
</el-checkbox-group>
</el-form-item> </el-form-item>
<el-form-item :label="buttons.language||'语言'" prop="languageDefault"> <el-form-item :label="buttons.language||'语言'" prop="languageDefault">
<el-select filterable v-model="dataForm.languageDefault" clearable style="width: 150px;"> <el-select filterable v-model="dataForm.languageDefault" clearable style="width: 150px;">
@ -76,8 +80,8 @@
<script> <script>
import Chooselist from '@/views/modules/common/Chooselist' import Chooselist from '@/views/modules/common/Chooselist'
import {getFactory} from "@/api/factory";
import {searchSysLanguage} from "@/api/sysLanguage.js" import {searchSysLanguage} from "@/api/sysLanguage.js"
import {getUserAccessSiteList, saveUserAccessSiteList, getUserAuthorizedSites} from "@/api/factory/accessSite.js"
import { import {
searchFunctionButtonList, searchFunctionButtonList,
} from "@/api/sysLanguage.js" } from "@/api/sysLanguage.js"
@ -92,6 +96,7 @@ export default {
roleList: [], roleList: [],
factorys: [], factorys: [],
languageList: [], languageList: [],
siteOptions: [], //
dataForm: { dataForm: {
id: 0, id: 0,
userName: '', userName: '',
@ -103,7 +108,8 @@ export default {
mobile: '', mobile: '',
roleIdList: [], roleIdList: [],
status: 1, status: 1,
site: '',
site: '', //
siteList: [], //
userDisplay: '' userDisplay: ''
}, },
buttons: { buttons: {
@ -168,6 +174,7 @@ export default {
this.dataForm.id = id || 0 this.dataForm.id = id || 0
// this.factoryList(); // this.factoryList();
this.getLanguageList(); this.getLanguageList();
this.getSiteOptions(); //
this.$http({ this.$http({
url: this.$http.adornUrl('/sys/role/select'), url: this.$http.adornUrl('/sys/role/select'),
method: 'get', method: 'get',
@ -196,6 +203,8 @@ export default {
this.dataForm.languageDefault = data.user.languageDefault this.dataForm.languageDefault = data.user.languageDefault
this.dataForm.site = data.user.site.toString() this.dataForm.site = data.user.site.toString()
this.dataForm.userDisplay = data.user.userDisplay this.dataForm.userDisplay = data.user.userDisplay
//
this.getUserSiteAccess(data.user.username)
} }
}) })
} }
@ -205,34 +214,65 @@ export default {
dataFormSubmit() { dataFormSubmit() {
this.$refs['dataForm'].validate((valid) => { this.$refs['dataForm'].validate((valid) => {
if (valid) { if (valid) {
this.$http({
url: this.$http.adornUrl(`/sys/user/${!this.dataForm.id ? 'save' : 'update'}`),
method: 'post',
data: this.$http.adornData({
'userId': this.dataForm.id || undefined,
'username': this.dataForm.userName,
'password': this.dataForm.password,
'salt': this.dataForm.salt,
'email': this.dataForm.email,
'mobile': this.dataForm.mobile,
'status': this.dataForm.status,
'roleIdList': this.dataForm.roleIdList,
'languageDefault': this.dataForm.languageDefault,
'site': this.dataForm.site,
'userDisplay': this.dataForm.userDisplay,
//
this.$http({
url: this.$http.adornUrl(`/sys/user/${!this.dataForm.id ? 'save' : 'update'}`),
method: 'post',
data: this.$http.adornData({
'userId': this.dataForm.id || undefined,
'username': this.dataForm.userName,
'password': this.dataForm.password,
'salt': this.dataForm.salt,
'email': this.dataForm.email,
'mobile': this.dataForm.mobile,
'status': this.dataForm.status,
'roleIdList': this.dataForm.roleIdList,
'languageDefault': this.dataForm.languageDefault,
'site': this.dataForm.site,
'userDisplay': this.dataForm.userDisplay,
'siteList': this.dataForm.siteList || [] //
})
}).then(({data}) => {
if (data && data.code === 0) {
this.$message.success('操作成功')
this.visible = false
this.$emit('refreshDataList')
} else {
let msg = data.msg.split('<br>')[0]
this.$message.error( this.$t(`${msg}`))
}
}) })
}).then(({data}) => {
if (data && data.code === 0) {
this.$message.success( '操作成功')
this.visible = false
this.$emit('refreshDataList')
} else {
let msg = data.msg.split('<br>')[0]
this.$message.error( this.$t(`${msg}`))
}
})
} }
}) })
},
//
getSiteOptions() {
// 使site
this.$http({
url: this.$http.adornUrl('/site/list'),
method: 'post',
data: this.$http.adornData({
active: 'Y' //
})
}).then(({data}) => {
if (data && data.code === 0) {
this.siteOptions = data.dataList || []
}
}).catch(() => {
this.$message.error('获取工厂列表失败')
})
},
//
getUserSiteAccess(username) {
if (!username) return
getUserAuthorizedSites({ userName: username }).then(({data}) => {
if (data && data.code === 0) {
// : [{siteCode: 'F001', siteName: 'A'}, ...]
this.dataForm.siteList = data.data ? data.data.map(item => item.siteCode) : []
}
}).catch(() => {
this.$message.error('获取用户工厂权限失败')
})
} }
}, },
created() { created() {

25
src/views/modules/warehouse/ifsInventoryInit.vue

@ -59,6 +59,12 @@
align="center" align="center"
label="物料描述"> label="物料描述">
</el-table-column> </el-table-column>
<el-table-column
prop="umid"
header-align="center"
align="center"
label="单位">
</el-table-column>
<el-table-column <el-table-column
prop="batchNo" prop="batchNo"
header-align="center" header-align="center"
@ -78,7 +84,7 @@
label="库位"> label="库位">
</el-table-column> </el-table-column>
<el-table-column <el-table-column
prop="inQty"
prop="qtyOnHand"
header-align="center" header-align="center"
align="center" align="center"
label="现有库存"> label="现有库存">
@ -150,16 +156,21 @@
</el-col> </el-col>
</el-row> </el-row>
<el-row :gutter="20"> <el-row :gutter="20">
<el-col :span="12">
<el-form-item label="库存数量" prop="inQty" class="form-item-vertical">
<el-input v-model="createHuForm.inQty" readonly></el-input>
<el-col :span="8">
<el-form-item label="库存数量" prop="qtyOnHand" class="form-item-vertical">
<el-input v-model="createHuForm.qtyOnHand" readonly></el-input>
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="12">
<el-col :span="8">
<el-form-item label="未打印数量" prop="unPrintQty" class="form-item-vertical"> <el-form-item label="未打印数量" prop="unPrintQty" class="form-item-vertical">
<el-input v-model="createHuForm.unPrintQty" readonly></el-input> <el-input v-model="createHuForm.unPrintQty" readonly></el-input>
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="8">
<el-form-item label="单位" prop="umid" class="form-item-vertical">
<el-input v-model="createHuForm.umid" readonly></el-input>
</el-form-item>
</el-col>
</el-row> </el-row>
<el-row :gutter="20"> <el-row :gutter="20">
<el-col :span="24"> <el-col :span="24">
@ -229,6 +240,7 @@ export default {
batchNo: '', batchNo: '',
wdr: '', wdr: '',
locationId: '', locationId: '',
umid: '',
perPackageQty: 1, perPackageQty: 1,
packageCount: 1 packageCount: 1
}, },
@ -302,8 +314,9 @@ export default {
batchNo: row.batchNo, batchNo: row.batchNo,
wdr: row.wdr, wdr: row.wdr,
locationId: row.locationId, locationId: row.locationId,
inQty: row.inQty,
qtyOnHand: row.qtyOnHand,
unPrintQty: row.unPrintQty, unPrintQty: row.unPrintQty,
umid: row.umid,
perPackageQty: '', perPackageQty: '',
packageCount: 1 packageCount: 1
} }

2
src/views/modules/warehouse/location.vue

@ -889,7 +889,7 @@
this.setUp.saveButton = false this.setUp.saveButton = false
this.setUp.readonlyFlag = false this.setUp.readonlyFlag = false
this.saveHeaderData.id = 0 this.saveHeaderData.id = 0
this.saveHeaderData.site = this.site
this.saveHeaderData.site = localStorage.getItem('site')
this.saveHeaderData.locationId = '' this.saveHeaderData.locationId = ''
this.saveHeaderData.locationName = '' this.saveHeaderData.locationName = ''
this.saveHeaderData.warehouseId = '' this.saveHeaderData.warehouseId = ''

Loading…
Cancel
Save