From d01242fe06480896c2bdd9511cbaf19323786d46 Mon Sep 17 00:00:00 2001
From: chenlu <1320612696@qq.com>
Date: 星期二, 02 九月 2025 15:53:01 +0800
Subject: [PATCH] Merge branch 'master' of http://10.153.19.25:10105/r/ERP_override
---
north-glass-erp/northglass-erp/src/router/index.js | 26 +
north-glass-erp/src/main/resources/mapper/pp/GlassOptimize.xml | 56 ++-
north-glass-erp/northglass-erp/src/views/mm/finishedGlassShelf/FinishedGlassShelfInformation.vue | 530 +++++++++++++++++++++++++++++++
north-glass-erp/northglass-erp/src/views/pp/glassOptimize/OptimizeControl.vue | 42 +
north-glass-erp/northglass-erp/src/views/pp/glassOptimize/page/Compute.vue | 2
north-glass-erp/northglass-erp/src/views/sd/basicData/CreateBasicData.vue | 55 ++
north-glass-erp/northglass-erp/src/views/mm/finishedGlassShelf/CreateFinishedGlassShelf.vue | 181 ++++++++++
north-glass-erp/northglass-erp/src/views/mm/finishedGlassShelf/FinishedGlassShelf.vue | 73 ++++
north-glass-erp/northglass-erp/src/views/pp/glassOptimize/OptimizeParms.vue | 30 +
9 files changed, 954 insertions(+), 41 deletions(-)
diff --git a/north-glass-erp/northglass-erp/src/router/index.js b/north-glass-erp/northglass-erp/src/router/index.js
index b219f22..25fbd06 100644
--- a/north-glass-erp/northglass-erp/src/router/index.js
+++ b/north-glass-erp/northglass-erp/src/router/index.js
@@ -1285,6 +1285,32 @@
}
]
},
+
+ {
+ path: 'finishedGlassShelf',
+ name: 'finishedGlassShelf',
+ component: () => import('../views/mm/finishedGlassShelf/FinishedGlassShelf.vue'),
+ children:[
+ {
+ // 鏂欐灦搴撳瓨
+ path: 'finishedGlassShelfInformation',
+ name: 'finishedGlassShelfInformation',
+ component: () => import('../views/mm/finishedGlassShelf/FinishedGlassShelfInformation.vue'),
+ },
+ {
+ // 鏂欐灦搴撳瓨
+ path: 'createFinishedGlassShelf',
+ name: 'createFinishedGlassShelf',
+ component: () => import('../views/mm/finishedGlassShelf/CreateFinishedGlassShelf.vue'),
+ },
+
+
+ {
+ path: '',
+ redirect:'/main/finishedGlassShelf/finishedGlassShelfInformation'
+ }
+ ]
+ },
/*{
//绗笁鏂圭幓鐠冧紭鍖�
path: 'glassOptimizeThirdParty',
diff --git a/north-glass-erp/northglass-erp/src/views/mm/finishedGlassShelf/CreateFinishedGlassShelf.vue b/north-glass-erp/northglass-erp/src/views/mm/finishedGlassShelf/CreateFinishedGlassShelf.vue
new file mode 100644
index 0000000..dbb7b5c
--- /dev/null
+++ b/north-glass-erp/northglass-erp/src/views/mm/finishedGlassShelf/CreateFinishedGlassShelf.vue
@@ -0,0 +1,181 @@
+<script lang="ts" setup>
+import request from "@/utils/request"
+import deepClone from "@/utils/deepClone"
+import {ElMessage} from "element-plus"
+import {computed, onMounted, ref} from "vue"
+import {useRoute, useRouter} from "vue-router"
+import useUserInfo from "@/stores/userInfo"
+import GlassType from "@/components/sd/product/GlassType.vue"
+import useProductGlassTypeStore from "@/stores/sd/product/productGlassType"
+import {useI18n} from "vue-i18n";
+import useUserInfoStore from "@/stores/userInfo";
+
+const { t } = useI18n()
+const router = useRouter()
+const route = useRoute()
+const value = ref('')
+const userStore = useUserInfoStore()
+
+let BasicData = ref([])
+
+let ruleForm = ref({
+ id:0,
+ glassShelfNumber: null,
+ glassShelfName: null,
+ availableQuantity: null,
+ totalQuantity: null,
+ price: null,
+ money: null,
+ unit: null,
+ maxWeight: null,
+ maxWidth: null,
+ maxHeight: null,
+ remarks: null,
+})
+
+
+const resetForm = () => {
+ ruleForm.value.glassShelfNumber=null
+ ruleForm.value.glassShelfName=null
+ ruleForm.value.availableQuantity=null
+ ruleForm.value.totalQuantity=null
+ ruleForm.value.price=null
+ ruleForm.value.money=null
+ ruleForm.value.unit=null
+ ruleForm.value.maxWeight=null
+ ruleForm.value.maxWidth=null
+ ruleForm.value.maxHeight=null
+ ruleForm.value.remarks=null
+}
+
+const submitForm = () => {
+ let filterData=ref({
+ data:ruleForm.value,
+ userName:userStore.user.userName,
+ userId:userStore.user.userId
+ })
+ console.log(filterData.value)
+ /*request.post("/materialStore/saveMaterialStore", filterData.value).then((res) => {
+ if(res.code==200 && res.data==="true"){
+ resetForm()
+ ElMessage.success(t('basicData.msg.saveSuccess'))
+ }else if(res.data==="false1"){
+ ElMessage.warning("璇ユ枡鏋跺凡瀛樺湪")
+ }else{
+ ElMessage.warning(t('basicData.msg.saveFail'))
+ }
+ }).catch((err)=>{
+ ElMessage.error(t('basicData.msg.ServerConnectionError'))
+ router.push("/login")
+ })*/
+
+}
+
+
+ //鑾峰彇浼犺繃鏉ョ殑鏁版嵁杩涜鍒ゆ柇
+ const str = route.query.id
+ if (typeof str != 'undefined' && str != null && str !== '' && str !== '\n' && str !== '\r'){
+ ruleForm.value.id = Number(str)
+
+ request.post(`/materialStore/getSelectMaterialStore`,ruleForm.value).then((res) => {
+ if(res.code==200){
+ ruleForm.value=deepClone(res.data.data)
+ }else{
+ ElMessage.warning(res.msg)
+ router.push("/login")
+ }
+ })
+ }
+
+
+
+</script>
+<template>
+
+ <div class="center-box">
+ <el-card class="form-card">
+ <el-form size="medium" >
+ <el-divider ></el-divider> <!-- 娣诲姞鍒嗛殧绾� -->
+
+ <el-row gutter="20" >
+ <el-col :span="10" >
+ 鏂欐灦缂栧彿锛�<el-input v-model="ruleForm.glassShelfNumber" :placeholder="$t('ingredients.pleaseEnterData')" style="width: 150px; height: 30px;" />
+ </el-col>
+ <el-col :span="10" >
+ 鏂欐灦鍚嶇О锛�<el-input v-model="ruleForm.glassShelfName" :placeholder="$t('ingredients.pleaseEnterData')" style="width: 150px; height: 30px;" />
+ </el-col>
+ <el-divider ></el-divider> <!-- 娣诲姞鍒嗛殧绾� -->
+ </el-row>
+
+ <el-row gutter="20" >
+ <el-col :span="10" >
+ 鐜版湁鏁伴噺锛�<el-input v-model="ruleForm.availableQuantity" :placeholder="$t('ingredients.pleaseEnterData')" style="width: 150px; height: 30px;" />
+ </el-col>
+ <el-col :span="10" >
+ 鎬绘暟閲忥細<el-input v-model="ruleForm.totalQuantity" :placeholder="$t('ingredients.pleaseEnterData')" style="width: 150px; height: 30px;" />
+ </el-col>
+ <el-divider ></el-divider> <!-- 娣诲姞鍒嗛殧绾� -->
+ </el-row>
+
+ <el-row gutter="20" >
+ <el-col :span="10" >
+ 鍗曚环锛�<el-input v-model="ruleForm.price" :placeholder="$t('ingredients.pleaseEnterData')" style="width: 150px; height: 30px;" />
+ </el-col>
+ <el-col :span="10" >
+ 鍗曚綅锛�<el-input v-model="ruleForm.unit" :placeholder="$t('ingredients.pleaseEnterData')" style="width: 150px; height: 30px;" />
+ </el-col>
+ <el-divider ></el-divider> <!-- 娣诲姞鍒嗛殧绾� -->
+ </el-row>
+
+ <el-row gutter="20" >
+ <el-col :span="10" >
+ 鏈�澶у锛�<el-input v-model="ruleForm.maxWidth" :placeholder="$t('ingredients.pleaseEnterData')" style="width: 150px; height: 30px;" />
+ </el-col>
+ <el-col :span="10" >
+ 鏈�澶ч珮锛�<el-input v-model="ruleForm.maxHeight" :placeholder="$t('ingredients.pleaseEnterData')" style="width: 150px; height: 30px;" />
+ </el-col>
+ <el-divider ></el-divider> <!-- 娣诲姞鍒嗛殧绾� -->
+ </el-row>
+
+ <el-row gutter="20" >
+ <el-col :span="10" >
+ 鏈�澶ф壙閲嶏細<el-input v-model="ruleForm.maxWeight" :placeholder="$t('ingredients.pleaseEnterData')" style="width: 150px; height: 30px;" />
+ </el-col>
+ <el-col :span="10" >
+ 澶囨敞锛�<el-input v-model="ruleForm.remarks" :placeholder="$t('ingredients.pleaseEnterData')" style="width: 150px; height: 30px;" />
+ </el-col>
+ <el-divider ></el-divider> <!-- 娣诲姞鍒嗛殧绾� -->
+ </el-row>
+
+
+ <el-row gutter="20" justify="center" >
+ <el-col span="10">
+ <el-button id="searchButton" type="primary" @click="resetForm" >{{$t('basicData.empty')}}</el-button>
+ </el-col>
+ <el-col span="10">
+ <el-button id="searchButton" type="primary" @click="submitForm" >{{$t('basicData.save')}}</el-button>
+ </el-col>
+ </el-row>
+ </el-form>
+ </el-card>
+ </div>
+
+</template>
+<style>
+.centered-box {
+ display: flex;
+ justify-content: center;
+ align-items: center;
+ height: 100vh;
+}
+
+.form-card {
+ width: 1000px;
+ padding: 30px 30px;
+}
+.button-row {
+ display: flex;
+ justify-content: center;
+ margin-top: 20px;
+}
+</style>
\ No newline at end of file
diff --git a/north-glass-erp/northglass-erp/src/views/mm/finishedGlassShelf/FinishedGlassShelf.vue b/north-glass-erp/northglass-erp/src/views/mm/finishedGlassShelf/FinishedGlassShelf.vue
new file mode 100644
index 0000000..eb7f6ba
--- /dev/null
+++ b/north-glass-erp/northglass-erp/src/views/mm/finishedGlassShelf/FinishedGlassShelf.vue
@@ -0,0 +1,73 @@
+<!-- 鐗╂枡搴撳瓨 -->
+
+
+<script setup>
+import {ref} from "vue";
+import {ArrowLeftBold, ArrowRight, Search} from "@element-plus/icons-vue";
+import request from "@/utils/request";
+import deepClone from "@/utils/deepClone";
+import {ElMessage} from "element-plus";
+import {useRouter,useRoute,onBeforeRouteUpdate} from "vue-router";
+import { useI18n } from 'vue-i18n'
+
+//璇█鑾峰彇
+const { t } = useI18n()
+
+
+const router = useRouter()
+const route = useRoute()
+let indexFlag=$ref(1)
+function changeRouter(index){
+ indexFlag=index
+}
+</script>
+
+<template>
+ <div id="main">
+ <div id="div-title">
+ <el-breadcrumb :separator-icon="ArrowRight">
+ <el-breadcrumb-item @click="changeRouter(1)" :class="indexFlag===1?'indexTag':''" :to="{ path: '/main/finishedGlassShelf/finishedGlassShelfInformation' }">{{$t('鏂欐灦搴撳瓨')}}</el-breadcrumb-item>
+ <el-breadcrumb-item @click="changeRouter(2)" :class="indexFlag===2?'indexTag':''" :to="{ path: '/main/finishedGlassShelf/materialOutbound' }">{{$t('鏂欐灦鍑哄簱')}}</el-breadcrumb-item>
+ <el-breadcrumb-item @click="changeRouter(3)" :class="indexFlag===3?'indexTag':''" :to="{ path: '/main/finishedGlassShelf/returnToStorage' }">{{$t('鏂欐灦鍏ュ簱')}}</el-breadcrumb-item>
+ <el-breadcrumb-item @click="changeRouter(4)" :class="indexFlag===4?'indexTag':''" :to="{ path: '/main/finishedGlassShelf/createFinishedGlassShelf' }">{{$t('鏂欐灦鏂板')}}</el-breadcrumb-item>
+ <el-breadcrumb-item @click="changeRouter(6)" :class="indexFlag===6?'indexTag':''" :to="{ path: '/main/finishedGlassShelf/selectSurplusMaterials' }">{{$t('鏂欐灦鎶ヨ〃')}}</el-breadcrumb-item>
+ <el-breadcrumb-item v-show="false" :to="{ path: '/main/order/orderReport' }">{{$t('ingredientsStock.returnToStorage')}}</el-breadcrumb-item>
+ </el-breadcrumb>
+
+ </div>
+
+ <div id="main-body">
+ <router-view :key="route.fullPath" />
+ </div>
+ </div>
+</template>
+
+<style scoped>
+#main{
+ width: 100%;
+ height: 100%;
+}
+#div-title{
+ height: 5%;
+ width: 100%;
+}
+#searchButton{
+ margin-top: -5px;
+ margin-left: 1rem;
+}
+#searchButton1{
+//margin-left: 10rem;
+}
+/*main-body鏍峰紡*/
+#main-body{
+ width: 99%;
+ height: 92%;
+ margin-top: 1%;
+}
+#select{
+ margin-left:0.5rem;
+}
+:deep(.indexTag .el-breadcrumb__inner){
+ color: #5CADFE !important;
+}
+</style>
\ No newline at end of file
diff --git a/north-glass-erp/northglass-erp/src/views/mm/finishedGlassShelf/FinishedGlassShelfInformation.vue b/north-glass-erp/northglass-erp/src/views/mm/finishedGlassShelf/FinishedGlassShelfInformation.vue
new file mode 100644
index 0000000..9713032
--- /dev/null
+++ b/north-glass-erp/northglass-erp/src/views/mm/finishedGlassShelf/FinishedGlassShelfInformation.vue
@@ -0,0 +1,530 @@
+<script setup>
+
+import {onMounted, reactive, ref} from "vue";
+import {useRouter} from 'vue-router'
+import request from "@/utils/request";
+import deepClone from "@/utils/deepClone";
+import useUserInfoStore from "@/stores/userInfo";
+import {ElMessage, ElMessageBox} from "element-plus";
+import {Search} from "@element-plus/icons-vue";
+import { useI18n } from 'vue-i18n'
+import {addListener, toolbarButtonClickEvent} from "@/hook/mouseMove";
+import {changeFilterEvent,filterChanged,filterChangeds} from "@/hook"
+import {divideAuto, multiply} from "@/utils/decimal";
+import companyInfo from "@/stores/sd/companyInfo";
+import footSum from "@/hook/footSum";
+import {copyTableCellValue} from "@/hook/copyTableCellValue";
+
+//璇█鑾峰彇
+const { t } = useI18n()
+const userStore = useUserInfoStore()
+const company = companyInfo()
+const router = useRouter()
+let produceList = ref([])
+let sheetIndex = ref(-1)
+let rowIndexData = ref(null)
+
+let dialogTableVisible = ref(false)
+let refMaterialAddition=ref()
+const getTableRow = (row,type) =>{
+ switch (type) {
+ case 'edit' :{
+ //alert('鎴戞帴鏀跺埌瀛愮粍浠朵紶閫佺殑缂栬緫淇℃伅')
+ router.push({path: '/main/trader/CreateTrader', query: { id: row.id }})
+ break
+ }
+ case 'delete':{
+ alert('鎴戞帴鏀跺埌瀛愮粍浠朵紶閫佺殑鍒犻櫎淇℃伅')
+ break
+ }
+ }
+}
+
+const hasDecimal=(value)=>{
+ const regex=/\./ // 瀹氫箟姝e垯琛ㄨ揪寮忥紝鏌ユ壘灏忔暟鐐�
+ return regex.test(value) //杩斿洖true/false
+}
+
+const hasDecimalhtml=(item,row)=>{
+ let aa=item.split('.').length
+ if (aa===2){
+ return row[item.split('.')[0]][item.split('.')[1]]
+ }else if(aa===3){
+ return row[item.split('.')[0]][item.split('.')[1]][item.split('.')[2]]
+ }
+
+
+}
+
+let pageNum=ref(1)
+let total = reactive({
+ pageTotal : 0,
+ dataTotal : 0,
+ pageSize : 100
+})
+
+let filterData = ref({
+
+})
+
+const values = ref('')
+
+
+let selectDate = ref(["",""])
+let BasicData = ref([])
+let materialStore= ref([])
+
+
+
+
+
+onMounted(() => {
+ addListener(xGrid.value,gridOptions)
+
+ //绗竴娆¤皟鐢�
+ // request.get(`/BasicWarehouse/BasicWarehouseType/`+t('ingredients.originalFilm')+'|'+t('ingredients.accessories')).then((res) => {
+ // if(res.code==200){
+ // gridOptions.columns.splice(0,gridOptions.columns.length)
+ // BasicData.value = res.data
+ // //娣诲姞鍒�
+ // gridOptions.columns=arr.slice()
+ //
+ // for (let i=0;i<BasicData.value.length;i++){
+ // let aa=null
+ // if(BasicData.value[i].OperateType==="name"){
+ // aa={field: "json."+BasicData.value[i].OperateType, width: '150',title: BasicData.value[i].OperateTypeName, sortable: true,showOverflow:'ellipsis' ,filters:[{ data: '' }],slots: { filter: 'num1_filter' },filterMethod:filterChangeds}
+ // }else{
+ // aa={field: "json."+BasicData.value[i].OperateType, width: '150',title: BasicData.value[i].OperateTypeName, sortable: true,showOverflow:'ellipsis' ,filters:[{ data: '' }],slots: { filter: 'num1_filter' },filterMethod:filterChanged}
+ // }
+ // gridOptions.columns.push(aa)
+ //
+ // }
+ // values.value=t('ingredientsStock.inventory')
+ // getInventoryWorks()
+ //
+ // }else{
+ // ElMessage.warning(res.msg)
+ // }
+ // })
+})
+
+
+
+
+
+
+
+
+
+
+
+const getInventoryEngineeringWork = () => {
+
+ request.post(`/materialInventory/getSelectMaterialInventoryEngineeringDate/${pageNum.value}/${total.pageSize}/${selectDate.value}`,filterData.value).then((res) => {
+
+ if(res.code==200){
+ materialStore.value=[]
+ for (let i=0;i<res.data.data.length;i++){
+ materialStore.value[i]=(res.data.data[i])
+ materialStore.value[i].json=(JSON.parse(res.data.data[i].json))
+
+ }
+
+ total.dataTotal = res.data.total.total*1
+ total.pageTotal= res.data.total.pageTotal
+ pageNum.value=1
+ selectDate.value = res.data.selectDate
+ gridOptions.toolbarConfig.buttons[2].disabled = true
+ produceList = deepClone(materialStore.value)
+ xGrid.value.loadData(produceList)
+ gridOptions.loading=false
+ }else{
+ ElMessage.warning(res.msg)
+ router.push("/login")
+ }
+ })
+
+
+}
+
+
+
+const selectOrderList = ()=>{
+ request.get(`/BasicWarehouse/BasicWarehouseType/`+t('ingredients.originalFilm')+'|'+t('ingredients.accessories')).then((res) => {
+ if(res.code==200){
+ gridOptions.columns.splice(0,gridOptions.columns.length)
+ BasicData.value = res.data
+ //娣诲姞鍒�
+ gridOptions.columns=arr.slice()
+
+ for (let i=0;i<BasicData.value.length;i++){
+ let aa=null
+ if(BasicData.value[i].OperateType==="model"){
+ aa={field: "json."+BasicData.value[i].OperateType, width: '150',title: BasicData.value[i].OperateTypeName, sortable: true,showOverflow:'ellipsis' ,filters:[{ data: '' }],slots: { filter: 'num1_filter' },filterMethod:filterChanged}
+ }else{
+ aa={field: "json."+BasicData.value[i].OperateType, width: '150',title: BasicData.value[i].OperateTypeName, sortable: true,showOverflow:'ellipsis' ,filters:[{ data: '' }],slots: { filter: 'num1_filter' },filterMethod:filterChanged}
+ }
+
+ gridOptions.columns.push(aa)
+
+ }
+ if(values.value===t('ingredientsStock.inventory')){
+ getInventoryWorkPaging()
+ }else{
+ getInventoryEngineeringWork()
+ }
+
+ }else{
+ ElMessage.warning(res.msg)
+ }
+ })
+}
+
+const changeDate = ()=>{
+ selectOrderList()
+}
+
+//椤佃剼璺宠浆
+const handlePageChange = ({ currentPage, pageSize }) => {
+ selectOrderList()
+ total.pageTotal = pageSize
+ pageNum.value=currentPage
+}
+
+
+
+//瀛愮粍浠舵帴鏀跺弬鏁�
+const xGrid = ref()
+const gridOptions = reactive({
+ border: "full",//琛ㄦ牸鍔犺竟妗�
+ keepSource: true,//淇濇寔婧愭暟鎹�
+ align: 'center',//鏂囧瓧灞呬腑
+ stripe:true,//鏂戦┈绾�
+ rowConfig: {isCurrent: true, isHover: true,height: 30},//榧犳爣绉诲姩鎴栭�夋嫨楂樹寒
+ id: 'SelectIngredientsStock',
+ showFooter: true,//鏄剧ず鑴�
+ printConfig: {},
+ importConfig: {},
+ exportConfig: {},
+ scrollX:{enabled: true},
+ scrollY:{ enabled: true ,gt:0},//寮�鍚櫄鎷熸粴鍔�
+ showOverflow:true,
+ columnConfig: {
+ resizable: true,
+ useKey: true
+ },
+ filterConfig: { //绛涢�夐厤缃」
+ //remote: true
+ },
+ customConfig: {
+ storage: true
+ },
+ editConfig: {
+ trigger: 'click',
+ mode: 'row',
+ showStatus: true
+ },//琛ㄥご鍙傛暟
+ columns:[
+ { type: 'checkbox',fixed:"left", title: t('basicData.check'), width: '80' },
+ {title: t('basicData.operate'), width: '110', slots: { default: 'button_slot' },fixed:'left'},
+ { type: 'seq',fixed:"left", title: t('basicData.Number'), width: '80' },
+ {field: 'inventoryOrganization', width:'150', title: t('鏂欐灦缂栧彿'), sortable: true,filters:[{ data: '' }],slots: { filter: 'num1_filter' },filterMethod:filterChanged },
+ {field: 'materialCode', width: '150',title: t('鏂欐灦鍚嶇О'), sortable: true,showOverflow:"ellipsis" ,filters:[{ data: '' }],slots: { filter: 'num1_filter' },filterMethod:filterChanged},
+ {field: 'producer', width: '120',title: t('鐜版湁鏁伴噺'), sortable: true,filters:[{ data: '' }],slots: { filter: 'num1_filter' },filterMethod:filterChanged},
+ {field: 'id',width: '100', title: t('鎬绘暟閲�'), sortable: true,showOverflow:"ellipsis",filters:[{ data: '' }],slots: { filter: 'num1_filter' },filterMethod:filterChanged},
+ {field: 'projectNo',width: '100', title: t('鍗曚环'), sortable: true,showOverflow:"ellipsis",filters:[{ data: '' }],slots: { filter: 'num1_filter' },filterMethod:filterChanged},
+
+ {field: 'inventoryQuantity',width: '100', title: t('閲戦'), sortable: true,filters:[{ data: '' }],slots: { filter: 'num1_filter' },filterMethod:filterChanged},
+ {field: 'availableQuantity', width: '100',title: t('鍗曚綅'), sortable: true,filters:[{ data: '' }],slots: { filter: 'num1_filter' },filterMethod:filterChanged},
+ {field: 'planQuantity', width: '100',title: t('鏈�澶ф壙閲�'), sortable: true,filters:[{ data: '' }],slots: { filter: 'num1_filter' },filterMethod:filterChanged},
+ {field: 'totalArea',width: '100', title: t('鏈�澶ч珮'), sortable: true,filters:[{ data: '' }],slots: { filter: 'num1_filter' },filterMethod:filterChanged},
+ {field: 'dateOfManufacture',width: '100', title: t('鏈�澶у'), sortable: true},
+ {field: 'qualityGuaranteePeriod',width: '100', title: t('澶囨敞'), sortable: true,filters:[{ data: '' }],slots: { filter: 'num1_filter' },filterMethod:filterChanged},
+ {field: 'createTime',width: '100', title: t('鍒涘缓鏃堕棿'), sortable: true},
+
+ ],//琛ㄥご鎸夐挳
+ toolbarConfig: {
+ buttons: [
+ {'code': 'add', 'name': t('娣诲姞'),status: 'primary'},
+ {'code': 'out', 'name': t('鍑哄簱'),status: 'primary'}
+ ],
+ /*import: false,
+ export: true,
+ print: true,*/
+ export: true,
+ zoom: true,
+ custom: true
+ },
+ footerMethod ({ columns, data }) {//椤佃剼鍑芥暟
+ return[
+ columns.map((column, columnIndex) => {
+ if (columnIndex === 0) {
+ return t('basicData.total')
+ }
+ const List = ["inventoryQuantity",'availableQuantity','totalArea']
+ if (List.includes(column.field)) {
+ return footSum(data, column.field)
+ }
+ return ''
+ })
+ ]
+ }
+
+})
+
+
+const gridEvents = {
+ async toolbarButtonClick({code}) {
+ const $grid = xGrid.value
+ if ($grid) {
+ switch (code) {
+ case 'out': {
+ $grid.clearFilter()
+ const selectRecords = $grid.getCheckboxRecords()
+
+
+ if (selectRecords.length === 0) {
+ ElMessage.warning(t('productStock.unselectedData'))
+ return
+ }
+ let id = ""
+ const array = [];
+ if (values.value===t('ingredientsStock.inventory')){
+ for (let i = 0; i < selectRecords.length; i++) {
+ array.push(selectRecords[i].id)
+ if (i + 1 === selectRecords.length) {
+ id += selectRecords[i].id
+ } else {
+ id += selectRecords[i].id + "|"
+ }
+ }
+ }else{
+ for (let i = 0; i < selectRecords.length; i++) {
+ array.push(selectRecords[i].useId)
+ if (i + 1 === selectRecords.length) {
+ id += selectRecords[i].useId
+ } else {
+ id += selectRecords[i].useId + "|"
+ }
+ }
+ }
+
+
+
+
+ router.push({path: '/main/ingredientsStock/CreateOutbound', query: {id: id,type:values.value}})
+ break
+
+
+ }
+ case 'add': {
+ dialogTableVisible.value=true
+ rowIndexData.value=null
+ sheetIndex.value=1
+ break
+ }
+
+ case 'update': {
+
+ $grid.clearFilter()
+ const selectRecords = $grid.getCheckboxRecords()
+ if (selectRecords.length === 1) {
+ dialogTableVisible.value=true
+ rowIndexData.value=selectRecords[0]
+ sheetIndex.value=2
+ }else{
+ ElMessage.warning(t('璇烽�変腑涓�琛屾暟鎹�'))
+ return
+ }
+
+
+ break
+ }
+
+ case 'delete': {
+ $grid.clearFilter()
+ const selectRecords = $grid.getCheckboxRecords()
+ if (selectRecords.length === 0) {
+ ElMessage.warning(t('productStock.unselectedData'))
+ return
+ }
+ ElMessageBox.confirm("纭鍒犻櫎锛�",
+ {
+ confirmButtonText: t('basicData.confirmButtonText'),
+ cancelButtonText: t('basicData.cancelButtonText'),
+ distinguishCancelAndClose: true,
+ type: 'warning',
+ }
+ ).then(()=>{
+ let id = ""
+ const array = [];
+ if (values.value===t('ingredientsStock.inventory')){
+ for (let i = 0; i < selectRecords.length; i++) {
+ array.push(selectRecords[i].id)
+ if (i + 1 === selectRecords.length) {
+ id += selectRecords[i].id
+ } else {
+ id += selectRecords[i].id + "|"
+ }
+ }
+ }else{
+ for (let i = 0; i < selectRecords.length; i++) {
+ array.push(selectRecords[i].useId)
+ if (i + 1 === selectRecords.length) {
+ id += selectRecords[i].useId
+ } else {
+ id += selectRecords[i].useId + "|"
+ }
+ }
+ }
+ let flowData = ref({
+ materialInventory: selectRecords,
+ ids: id,
+ creator: userStore.user.userName
+
+ })
+ request.post(`/materialInventory/deleteMaterialInventory`,flowData.value).then((res) => {
+ if(res.code==200 && res.data===true){
+ ElMessage.success(t('searchOrder.msgDeleteSuccess'))
+ router.push({path:'/main/ingredientsStock/selectIngredientsStock', query:{random:Math.random()}})
+ }else{
+ ElMessage.warning(res.msg)
+ }
+ })
+ }).catch((action)=>{
+ })
+ break
+
+
+ }
+ }
+ }
+ },
+ cellDblclick ({row,column}) {
+ copyTableCellValue(row,column)
+ }
+}
+
+
+
+
+
+
+</script>
+
+<template>
+ <div class="main-div-customer">
+ <div class="head">
+ <el-date-picker
+ v-model="selectDate"
+ type="daterange"
+ :start-placeholder="$t('basicData.startDate')"
+ :end-placeholder="$t('basicData.endDate')"
+ format="YYYY-MM-DD"
+ value-format="YYYY-MM-DD"
+
+ />
+ <el-button @click="changeDate" style="margin-top: -5px" id="searchButton" type="primary" :icon="Search">{{$t('basicData.search')}}</el-button>
+ </div>
+
+ <div class="main-table">
+ <vxe-grid
+ height="100%"
+ class="mytable-scrollbar"
+ ref="xGrid"
+ v-bind="gridOptions"
+ v-on="gridEvents"
+
+ >
+ <!-- @toolbar-button-click="toolbarButtonClickEvent"-->
+ <!-- 涓嬫媺鏄剧ず鎵�鏈変俊鎭彃妲�-->
+ <template #content="{ row }">
+ <ul class="expand-wrapper">
+ <li v-for="(item,index) in gridOptions.columns" v-show="item.field!=undefined ">
+ <span style="font-weight: bold">{{item.title+': '}}</span>
+ <span v-if="hasDecimal(item.field)">{{ hasDecimalhtml(item.field,row) }}</span>
+ <span v-else>{{ row[item.field] }}</span>
+ </li>
+ </ul>
+ </template>
+
+ <!--宸﹁竟鍥哄畾鏄剧ず鐨勬彃妲�-->
+ <template #button_slot="{ row }">
+ <el-button @click="getTableRow(row,'edit')"
+ link type="primary" size="small">{{$t('basicData.edit')}}</el-button>
+ <el-button @click="getTableRow(row,'delete')" link type="primary" size="small">{{$t('basicData.delete')}}</el-button>
+ </template>
+
+ <template #num1_filter="{ column, $panel }">
+ <div>
+ <div v-for="(option, index) in column.filters" :key="index">
+ <input type="type" v-model="option.data" @keyup.enter.native="$panel.confirmFilter()" @input="changeFilterEvent($event, option, $panel)"/>
+ </div>
+ </div>
+ </template>
+
+<!-- <template #pager>
+ <!–浣跨敤 pager 鎻掓Ы–>
+ <vxe-pager
+ @page-change="handlePageChange"
+ :layouts="[ 'PrevPage', 'Jump','PageCount', 'NextPage', 'Total']"
+ v-model:current-page="pageNum"
+ v-model:page-size="total.pageSize"
+ v-model:pager-count="total.pageTotal"
+ :total="total.dataTotal"
+ >
+ </vxe-pager>
+ </template>-->
+
+
+ </vxe-grid>
+ </div>
+
+<!-- <el-dialog v-model="dialogTableVisible" :title="$t('ingredients.materialAddition')" style="width: 70%;height:75% ">-->
+<!-- <material-addition v-if="sheetIndex===1" ref="refMaterialAddition" style="width: 100%;height: 100%"-->
+<!-- :data=rowIndexData :type=1-->
+<!-- :close-on-click-modal="false"-->
+<!-- :close-on-press-escape="false"-->
+<!-- />-->
+<!-- <material-addition v-if="sheetIndex===2" ref="refMaterialAddition" style="width: 100%;height: 100%"-->
+<!-- :data=rowIndexData :type=2-->
+<!-- :close-on-click-modal="false"-->
+<!-- :close-on-press-escape="false"-->
+<!-- />-->
+<!-- </el-dialog>-->
+ </div>
+</template>
+
+<style scoped>
+.main-div-customer{
+ width: 99%;
+ height: 100%;
+}
+.main-div-customers{
+ width: 99%;
+ height: 100%;
+}
+.el-col{
+ margin-left: 15px;
+ margin-bottom: 5px;
+}
+.order-primary{
+ width: 100%;
+}
+.head{
+ width: 100%;
+ height: 35px;
+}
+
+.main-table{
+ width: 100%;
+ height: calc(100% - 35px);
+}
+.vxe-grid {
+ /* 绂佺敤娴忚鍣ㄩ粯璁ら�変腑 */
+ -webkit-user-select: none;
+ -moz-user-select: none;
+ -ms-user-select: none;
+ user-select: none;
+}
+</style>
\ No newline at end of file
diff --git a/north-glass-erp/northglass-erp/src/views/pp/glassOptimize/OptimizeControl.vue b/north-glass-erp/northglass-erp/src/views/pp/glassOptimize/OptimizeControl.vue
index 2cbb30d..0e81b0d 100644
--- a/north-glass-erp/northglass-erp/src/views/pp/glassOptimize/OptimizeControl.vue
+++ b/north-glass-erp/northglass-erp/src/views/pp/glassOptimize/OptimizeControl.vue
@@ -12,17 +12,6 @@
</div>
-
- <div style="position: fixed; top: 93px; right: 120px; display: flex; align-items: center;">
- <label style="margin-right: 10px; color: #333;">鏂囦欢淇濆瓨妯″紡:</label>
- <select
- v-model="fileSaveMode"
- style="padding: 8px; border: 1px solid #ccc; border-radius: 4px;"
- >
- <option value="1">鍗曟枃浠�</option>
- <option value="2">澶氭枃浠�</option>
- </select>
- </div>
<button @click="submitLayouts" style="position: fixed; top: 90px; right: 20px; padding: 10px; background: #4CAF50; color: white; border: none; border-radius: 5px; cursor: pointer;">
淇濆瓨OPT
</button>
@@ -34,6 +23,7 @@
import { useI18n } from "vue-i18n";
import { ElMessage } from "element-plus";
import requestOptimize from "@/utils/requestOptimize";
+import useUserInfoStore from "@/stores/userInfo";
const { t } = useI18n();
@@ -48,6 +38,10 @@
const optimizeLayouts = ref(null);
const fileSaveMode = ref(1);
+const fileMode = ref();
+
+const userStore = useUserInfoStore()
+const username = userStore.user.userName;
// 浠� localStorage 璇诲彇搴撳瓨鏁版嵁
const loadInventoryData = () => {
@@ -103,7 +97,26 @@
});
};
-
+const fetchSettings = async (username) => {
+ try {
+ const response = await request.post(`/glassOptimize/selectOptimizeParms/${username}`);
+ if (response.code == 200) {
+ if (!response.data) {
+ console.error('鍝嶅簲鏁版嵁涓虹┖');
+ return;
+ }
+ const parsedData = JSON.parse(response.data);
+ console.log('璁剧疆鍐呭:', parsedData);
+ if (parsedData.server && parsedData.server.fileMode) {
+ fileMode.value = parsedData.server.fileMode;
+ }
+ } else {
+ console.error('璇锋眰澶辫触锛岀姸鎬佺爜:', response.code);
+ }
+ } catch (error) {
+ console.error('璇锋眰鍙戠敓閿欒:', error);
+ }
+};
const selectOptimizeInfo = () => {
@@ -134,10 +147,11 @@
};
onMounted(() => {
- // 璇诲彇搴撳瓨鏁版嵁
+ // 璇诲彇搴撳瓨鏁版嵁鍜屽弬鏁拌缃�
loadInventoryData();
selectLayout();
selectOptimizeInfo();
+ fetchSettings(username);
});
const submitLayouts = async () => {
@@ -154,7 +168,7 @@
glassType:inventoryData.value[0].model,
quantity: inventoryData.value[0].processingQuantity,
fileType:"OPT",
- fileSaveMode:fileSaveMode.value,
+ fileSaveMode:fileMode.value,
glassIdMode:1,
layouts: optimizeLayouts.value.layouts
}, {
diff --git a/north-glass-erp/northglass-erp/src/views/pp/glassOptimize/OptimizeParms.vue b/north-glass-erp/northglass-erp/src/views/pp/glassOptimize/OptimizeParms.vue
index db26dc0..a1a2143 100644
--- a/north-glass-erp/northglass-erp/src/views/pp/glassOptimize/OptimizeParms.vue
+++ b/north-glass-erp/northglass-erp/src/views/pp/glassOptimize/OptimizeParms.vue
@@ -43,6 +43,12 @@
return;
}
const parsedData = JSON.parse(response.data);
+ if (!parsedData.server) {
+ parsedData.server = {};
+ }
+ if (!parsedData.server.fileMode) {
+ parsedData.server.fileMode = '1'; // 榛樿涓哄崟鏂囦欢妯″紡
+ }
Object.assign(settings, parsedData);
console.log('璁剧疆宸叉洿鏂�:', settings);
} else {
@@ -237,6 +243,28 @@
<div class="display-settings">
<h2>缁撴灉杈撳嚭璁剧疆</h2>
<div class="form-group">
+ <label>鍒囧壊鏂囦欢淇濆瓨妯″紡</label>
+ <div style="margin-left: 3px;"></div>
+ <div class="radio-group">
+ <input
+ type="radio"
+ id="singleFile"
+ value="1"
+ v-model="settings.server.fileMode"
+ />
+ <label for="singleFile">鍗曟枃浠�</label>
+
+ <input
+ type="radio"
+ id="multiFile"
+ value="2"
+ v-model="settings.server.fileMode"
+ style="margin-left: 20px;"
+ />
+ <label for="multiFile">澶氭枃浠�</label>
+ </div>
+ </div>
+ <div class="form-group">
<label>宸ョ▼鏂囦欢淇濆瓨璺緞</label>
<input type="text" v-model="settings.server.output_format" />
</div>
@@ -387,7 +415,7 @@
background-color: white;
padding: 15px;
border-radius: 8px;
- box-shadow: 0 2px 4 rgba(0, 0, 0, 0.1);
+ box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);
}
.sidebar-item {
diff --git a/north-glass-erp/northglass-erp/src/views/pp/glassOptimize/page/Compute.vue b/north-glass-erp/northglass-erp/src/views/pp/glassOptimize/page/Compute.vue
index b1a64ab..8517fb6 100644
--- a/north-glass-erp/northglass-erp/src/views/pp/glassOptimize/page/Compute.vue
+++ b/north-glass-erp/northglass-erp/src/views/pp/glassOptimize/page/Compute.vue
@@ -47,7 +47,7 @@
const optionVal = ref(50)
// 瀹氫箟瑁呰浇鐜�
-const percentage1 = ref(80)
+const percentage1 = ref(50)
const percentage2 = ref(50)
// 瀹氫箟鍏朵粬琛ㄥ崟鏁版嵁
diff --git a/north-glass-erp/northglass-erp/src/views/sd/basicData/CreateBasicData.vue b/north-glass-erp/northglass-erp/src/views/sd/basicData/CreateBasicData.vue
index 1e8c904..c718f49 100644
--- a/north-glass-erp/northglass-erp/src/views/sd/basicData/CreateBasicData.vue
+++ b/north-glass-erp/northglass-erp/src/views/sd/basicData/CreateBasicData.vue
@@ -1,18 +1,21 @@
<script setup>
import request from "@/utils/request"
-import {onMounted, ref, watch} from "vue";
+import {onMounted, ref} from "vue";
import {useI18n} from "vue-i18n"
import {ElMessage} from "element-plus"
-import {useRouter,useRoute} from "vue-router"
+import {useRoute, useRouter} from "vue-router"
+
const { t } = useI18n()
const router = useRouter()
const route = useRoute()
+let iconWidth=ref(null)
+let iconHeight=ref(null)
let basic = ref({
basicType : ['',''],
input:'',
- nickname:''
+ nickname:null
})
let options=ref([
{ "label": t('orderBasicData.order'),
@@ -128,8 +131,16 @@
if(props.rowIndex){
basic.value.basicType[0] = props.rowIndex.basicType
basic.value.basicType[1] = props.rowIndex.basicCategory
- basic.value.input = props.rowIndex.basicName
- basic.value.nickname = props.rowIndex.nickname
+ if(basic.value.basicType[1]==="icon"){
+ basic.value.input = props.rowIndex.basicName
+ basic.value.nickname = JSON.parse(props.rowIndex.nickname).data
+ iconWidth.value=JSON.parse(props.rowIndex.nickname).width
+ iconHeight.value=JSON.parse(props.rowIndex.nickname).height
+ }else{
+ basic.value.input = props.rowIndex.basicName
+ basic.value.nickname = props.rowIndex.nickname
+ }
+
}
})
@@ -139,6 +150,15 @@
if(!basic.value.input.includes("mm")){
basic.value.input=basic.value.input+"mm"
}
+ }
+ if(basic.value.basicType[1]==="icon"){
+ let nickname=basic.value.nickname
+ let data={
+ width: iconWidth.value,
+ height: iconHeight.value,
+ data: nickname
+ }
+ basic.value.nickname=JSON.stringify(data)
}
basic.value.input=basic.value.input.trim()
request.post(`/basicData/addBasicData`, basic.value).then(res => {
@@ -153,6 +173,15 @@
if(!basic.value.input.includes("mm")){
basic.value.input=basic.value.input+"mm"
}
+ }
+ if(basic.value.basicType[1]==="icon"){
+ let nickname=basic.value.nickname
+ let data={
+ width: iconWidth.value,
+ height: iconHeight.value,
+ data: nickname
+ }
+ basic.value.nickname=JSON.stringify(data)
}
let submitArr = props.rowIndex
submitArr.basicType = basic.value.basicType[0]
@@ -238,6 +267,22 @@
</el-col>
</el-row>
<el-row v-if="basic.basicType.length!==0 && basic.basicType[1]==='icon'" >
+ <el-col :span="4">
+ {{ $t('order.width') }}:
+ </el-col>
+ <el-col :span="12">
+ <el-input v-model="iconWidth"/>
+ </el-col>
+ </el-row>
+ <el-row v-if="basic.basicType.length!==0 && basic.basicType[1]==='icon'" >
+ <el-col :span="4">
+ {{ $t('order.height') }}:
+ </el-col>
+ <el-col :span="12">
+ <el-input v-model="iconHeight"/>
+ </el-col>
+ </el-row>
+ <el-row v-if="basic.basicType.length!==0 && basic.basicType[1]==='icon'" >
<el-col :span="4"></el-col>
<el-col :span="12">
<el-upload
diff --git a/north-glass-erp/src/main/resources/mapper/pp/GlassOptimize.xml b/north-glass-erp/src/main/resources/mapper/pp/GlassOptimize.xml
index 544545d..ea8cf33 100644
--- a/north-glass-erp/src/main/resources/mapper/pp/GlassOptimize.xml
+++ b/north-glass-erp/src/main/resources/mapper/pp/GlassOptimize.xml
@@ -1711,7 +1711,10 @@
p.creater = a.Id
)))
WHERE
- ( p.state = 1 ) and p.tempering_state=0 and optimize_state=0 and p.project_no = #{projectNo}
+ ( p.state = 1 ) and
+# p.tempering_state=0 and
+# optimize_state=0 and
+ p.project_no = #{projectNo}
ORDER BY
p.create_time DESC,
p.project_no
@@ -1881,27 +1884,40 @@
</select>
<select id="getOptimizeDetailsInfo" resultType="java.util.Map">
SELECT
- 0 As isRemain,
- width AS realWidth,
- height AS realHeight,
- p_width AS width,
- p_height AS height,
- process_id AS processId,
- layer,
- total_layer AS totalLayer,
- order_sort As orderSort,
- stock_id AS layoutId,
- stock_number AS glassSort,
- x_axis AS x,
- y_axis AS y,
- mark_icon AS markIcon,
- isRotate,
- glass_point AS glassPoint,
- rack_no As rackNo
+ 0 AS isRemain,
+ od.width AS realWidth,
+ od.height AS realHeight,
+ od.p_width AS width,
+ od.p_height AS height,
+ od.process_id AS processId,
+ od.layer,
+ od.total_layer AS totalLayer,
+ od.order_sort AS orderSort,
+ od.stock_id AS layoutId,
+ od.stock_number AS glassSort,
+ od.x_axis AS x,
+ od.y_axis AS y,
+ od.mark_icon AS markIcon,
+ od.isRotate,
+ od.glass_point AS glassPoint,
+ fc.order_id AS orderNo,
+ ogd.process,
+ o.customer_name AS customerName,
+ o.processing_note AS processingNote,
+ o.project AS projectName,
+ ord.product_name AS productName,
+ ord.building_number AS buildingNumber,
+ COALESCE(h.layout_id, 0) as heatLayoutId,
+ od.rack_no AS rackNo
FROM
- pp.optimize_detail
+ pp.optimize_detail od
+ LEFT JOIN pp.flow_card fc on od.process_id = fc.process_id
+ LEFT JOIN sd.order_glass_detail ogd ON fc.order_id = ogd.order_id
+ LEFT JOIN sd.ORDER o ON o.order_id = fc.order_id
+ LEFT JOIN sd.order_detail ord ON fc.order_id = ord.order_id
+ LEFT JOIN pp.optimize_heat_detail h ON h.process_id = fc.process_id
WHERE
- project_no = #{projectId}
+ od.project_no = #{projectId}
</select>
<select id="getOptimizeOffsetsInfo" resultType="java.util.Map">
SELECT
--
Gitblit v1.8.0