Merge branch 'master' of http://10.153.19.25:10105/r/ERP_override
| | |
| | | ], |
| | | |
| | | }, |
| | | columns:[[null,null,null,null,null,null]] |
| | | columns:[[null,null,null,null,null,null,null,null]] |
| | | |
| | | } |
| | | let list = [] |
| | |
| | | productIdData.value=deepClone(res.data.data) |
| | | produceList.value = deepClone(res.data.data) |
| | | |
| | | console.log(produceList.value) |
| | | |
| | | delivery.value=deepClone(res.data.delivery) |
| | | console.log(delivery.value) |
| | | money.value=deepClone(res.data.money) |
| | | produceList.value.forEach(item => { |
| | | sumMoney+=item.DeliveryDetail.grossAmount |
| | |
| | | <el-row :gutter="20" style="margin-top: 20px;" v-if="company.showDeliveryCreator"> |
| | | <el-col :span="24"><div class="bottom">{{remark}}</div></el-col> |
| | | </el-row> |
| | | <el-row :gutter="20" style="margin-top: 20px;" v-if="!company.showDeliveryCreator"> |
| | | <!-- <el-input |
| | | v-model="" |
| | | autosize |
| | | type="textarea" |
| | | placeholder="Please input" |
| | | />--> |
| | | <el-col :span="24"><div class="bottom">{{delivery.processingNote}}</div></el-col> |
| | | </el-row> |
| | | |
| | | <el-dialog v-model="dialogVisible" style="width: 40%;height: 20%;margin-top: 10%" > |
| | | <el-select v-model="selectedValues" style="width: 100%" @change="handleChange" multiple placeholder="è¯·éæ©"> |
| | |
| | | component: () => import('../views/pp/glassOptimize/OptimizePrint.vue'), |
| | | }, |
| | | { |
| | | path: '/projectDetail/:projectNo', |
| | | name: 'projectDetail', |
| | | component: () => import('../views/pp/glassOptimize/OptimizeProject.vue'), |
| | | }, |
| | | { |
| | | path: '', |
| | | redirect:'/main/glassOptimize/optimizeProject' |
| | | } |
| | |
| | | }, |
| | | }, |
| | | hideButton:'true',//æµç¨å¡æå°ç颿鮿¯å¦æ¾ç¤º |
| | | getSelectFlowCard:2,//æµç¨å¡æå°æ¥è¯¢æ¯å¦åå¹¶ 1åå¹¶2ä¸åå¹¶ |
| | | getSelectFlowCard:1,//æµç¨å¡æå°æ¥è¯¢æ¯å¦åå¹¶ 1åå¹¶2ä¸åå¹¶ |
| | | columnsLabel:2,//ä¸è¡ä¸¤åæåæ ç¾ 1æ°çä¸è¡ä¸¤åæåæ ç¾ï¼2å
¶å® |
| | | }, |
| | | |
| | |
| | | return []; |
| | | }; |
| | | |
| | | const props = defineProps({ |
| | | projectNo : String |
| | | }); |
| | | |
| | | </script> |
| | | |
| | | <template> |
| | | <div style="width: 100%; height: 100%;"> |
| | | |
| | | <div id="compute"> |
| | | <compute @fetch-data="handleFetchData" /> |
| | | <compute @fetch-data="handleFetchData" :project-no="props.projectNo"/> |
| | | </div> |
| | | |
| | | <div id="computeCard"> |
| | |
| | | dialogVisible.value = true |
| | | detailPage.value = value |
| | | } |
| | | |
| | | //ä»å·¥ç¨ç®¡çè·åå·¥ç¨å·ï¼å¹¶è·³è½¬ |
| | | const projectNumber = ref(''); |
| | | const switchDialog = (number) => { |
| | | projectNumber.value = number; |
| | | detailPage.value = 3; |
| | | }; |
| | | |
| | | </script> |
| | | |
| | | <template > |
| | |
| | | z-index="100" |
| | | > |
| | | <project-create v-if="detailPage===1" /> |
| | | <project-mange v-if="detailPage===2" /> |
| | | <glass-computed v-if="detailPage===3" /> |
| | | <project-mange v-if="detailPage===2" @switch-dialog="switchDialog"/> |
| | | <glass-computed v-if="detailPage===3" :project-no="projectNumber"/> |
| | | </el-dialog> |
| | | |
| | | </div> |
| | |
| | | import useOrderInfoStore from "@/stores/sd/order/orderInfo"; |
| | | import useUserInfoStore from "@/stores/userInfo"; |
| | | import userInfo from "@/stores/userInfo"; |
| | | import GlassComputed from "@/views/pp/glassOptimize/GlassComputed.vue"; |
| | | import {useRouter} from 'vue-router'; |
| | | import {defineEmits} from 'vue'; |
| | | |
| | | |
| | | const {t} = useI18n() |
| | | const userStore = useUserInfoStore() |
| | | const user = userInfo() |
| | | const orderInfo = useOrderInfoStore() |
| | | |
| | | const router = useRouter(); |
| | | |
| | | const xGrid = ref() |
| | | const gridOptions = reactive({ |
| | |
| | | body: { |
| | | options: [ |
| | | [ |
| | | {code: 'openproject', name: 'æå¼å·¥ç¨', prefixIcon: 'vxe-icon-folder-open'}, |
| | | {code: 'openProject', name: 'æå¼å·¥ç¨', prefixIcon: 'vxe-icon-folder-open'}, |
| | | {code: 'compute', name: '模æè®¡ç®', prefixIcon: 'vxe-icon-subtable'}, |
| | | {code: 'optimizetypography', name: 'ä¼åæç', prefixIcon: 'vxe-icon-menu'}, |
| | | {code: 'optimizetyPography', name: 'ä¼åæç', prefixIcon: 'vxe-icon-menu'}, |
| | | {code: 'production', name: 'å
许ç产', prefixIcon: 'vxe-icon-square-checked'}, |
| | | {code: 'novisible', name: 'ç产ä¸å¯è§', prefixIcon: 'vxe-icon-eye-fill-close'}, |
| | | {code: 'copyproject', name: 'å¤å»å·¥ç¨', prefixIcon: 'vxe-icon-copy'}, |
| | | {code: 'undooptimize', name: 'æ¤éä¼å', prefixIcon: 'vxe-icon-error-circle-fill'}, |
| | | {code: 'undocompute', name: 'æ¤é模æè®¡ç®', prefixIcon: 'vxe-icon-error-circle-fill'}, |
| | | {code: 'Initializeproject', name: 'åå§åå·¥ç¨', prefixIcon: 'vxe-icon-undo'}, |
| | | {code: 'delproject', name: 'å é¤å·¥ç¨', prefixIcon: 'vxe-icon-delete'}, |
| | | {code: 'undoOptimize', name: 'æ¤éä¼å', prefixIcon: 'vxe-icon-error-circle-fill'}, |
| | | {code: 'undoCompute', name: 'æ¤é模æè®¡ç®', prefixIcon: 'vxe-icon-error-circle-fill'}, |
| | | {code: 'InitializeProject', name: 'åå§åå·¥ç¨', prefixIcon: 'vxe-icon-undo'}, |
| | | {code: 'delProject', name: 'å é¤å·¥ç¨', prefixIcon: 'vxe-icon-delete'}, |
| | | {code: 'viewTempered', name: 'æ¥çé¢åçå¾', prefixIcon: 'vxe-icon-custom-column'}, |
| | | {code: 'viewOptimize', name: 'æ¥çä¼åçå¾', prefixIcon: 'vxe-icon-layout'}, |
| | | {code: 'Export', name: 'æ°æ®å¯¼åº', prefixIcon: 'vxe-icon-download', visible: true, disabled: false}, |
| | |
| | | // å®ä¹æä½é
置对象æ°ç»ï¼éä¸ç®¡çä¸åæä½é项对åºçåæ° |
| | | const operationConfigs = [ |
| | | { |
| | | code: 'openProject', // æå¼å·¥ç¨ |
| | | initialState: ['10', '20', '100', '200'], // |
| | | targetState: null, |
| | | successMsg: 'å·²æå¼å·¥ç¨ï¼', |
| | | checkMessage: 'å½åå·¥ç¨ç¶æä¸ç¬¦åæ¡ä»¶ï¼è¯·ç¡®è®¤å·¥ç¨ç¶æååæä½ï¼', |
| | | requiresRow: true, |
| | | openFile: async ({row}) => { |
| | | const projectNumber = row.projectNumber; |
| | | await router.replace({ |
| | | name: 'projectDetail', |
| | | params: { |
| | | projectNo: projectNumber |
| | | } |
| | | }); |
| | | } |
| | | }, |
| | | { |
| | | code: 'compute', // æå¼æ¨¡æè®¡ç®æä½ |
| | | initialState: ['1', '2'], // |
| | | targetState: null, |
| | |
| | | checkMessage: 'å½åå·¥ç¨ç¶æä¸ç¬¦å模æè®¡ç®æ¡ä»¶ï¼è¯·ç¡®è®¤å·¥ç¨ç¶æååæä½ï¼', |
| | | requiresRow: true, |
| | | actionFunction: async ({row}) => { |
| | | console.log('è·åçè¡æ°æ®', row); |
| | | try { |
| | | // ä½¿ç¨æµè§å¨åçClipboard APIå¤å¶å·¥ç¨å· |
| | | await navigator.clipboard.writeText(row.projectNumber); |
| | | console.log('å·¥ç¨å·å·²å¤å¶å°åªè´´æ¿'); |
| | | ElMessage.success('å·¥ç¨å·å·²æåå¤å¶'); |
| | | } catch (error) { |
| | | console.error('å¤å¶å·¥ç¨å·æ¶åºé:', error); |
| | | ElMessage.error('å¤å¶å·¥ç¨å·å¤±è´¥ï¼è¯·ç¨åéè¯'); |
| | | } |
| | | optimizeCompute.value = true; |
| | | Mange.value = false; |
| | | const projectNumber = row.projectNumber; |
| | | emit('switch-dialog', projectNumber); |
| | | } |
| | | }, |
| | | { |
| | | code: 'undocompute', |
| | | code: 'undoCompute', |
| | | initialState: '10', |
| | | targetState: 2, |
| | | successMsg: 'æ¤é模æè®¡ç®æåï¼æ°æ®å·²æ´æ°ï¼', |
| | |
| | | requiresRow: true, |
| | | }, |
| | | { |
| | | code: 'undooptimize', |
| | | code: 'undoOptimize', |
| | | initialState: '20', |
| | | targetState: 10, |
| | | successMsg: 'æ¤éä¼åæåï¼æ°æ®å·²æ´æ°ï¼', |
| | |
| | | requiresRow: true, |
| | | }, |
| | | { |
| | | code: 'Initializeproject', |
| | | code: 'InitializeProject', |
| | | initialState: ['2', '10', '20'], |
| | | targetState: 1, |
| | | successMsg: 'åå§åå·¥ç¨æåï¼', |
| | |
| | | requiresRow: true, |
| | | }, |
| | | { |
| | | code: 'delproject', |
| | | code: 'delProject', |
| | | initialState: ['1', '2', '10', '20', '100'], |
| | | targetState: null, |
| | | successMsg: 'å·¥ç¨å 餿åï¼', |
| | |
| | | failureMsg: 'å·¥ç¨å é¤å¤±è´¥ï¼è¯·è系管çåï¼', |
| | | } |
| | | ]; |
| | | |
| | | function getOriginalState(targetState) { |
| | | // æ ¹æ®å·¥ç¨ç¶æè¿å对åºçåå§ç¶æ |
| | | const stateMapping = { |
| | |
| | | }; |
| | | return stateMapping[targetState] || targetState; |
| | | } |
| | | |
| | | //å³é®è忡件夿 |
| | | function checkOperationCondition(config, row) { |
| | | if (!config.requiresRow ||!row) { |
| | |
| | | } |
| | | return config.initialState === String(row.state); |
| | | } |
| | | |
| | | // å³é®èåç¹å»äºä»¶ |
| | | const gridEvents = { |
| | | menuClick({ menu, row }) { |
| | |
| | | }); |
| | | return; |
| | | } |
| | | if (config.code === 'delproject') { |
| | | if (config.code === 'delProject') { |
| | | if (!row) { |
| | | ElMessage.warning(config.checkMessage); |
| | | return; |
| | |
| | | ElMessage.warning(config.checkMessage); |
| | | return; |
| | | } else { |
| | | if (config.code === 'openProject') { |
| | | config.openFile({row}); |
| | | ElMessage.success(config.successMsg); |
| | | }else |
| | | if (config.code === 'compute') { |
| | | config.actionFunction({ row }); |
| | | } else { |
| | | } |
| | | else { |
| | | row.state = config.targetState; |
| | | const index = produceList.value.findIndex(item => item === row); |
| | | if (index!== -1) { |
| | |
| | | console.error(`æªæ¾å°æä½é项 ${menu.code} 对åºçé
ç½®ï¼è¯·æ£æ¥é
置项`); |
| | | } |
| | | } |
| | | }, |
| | | cellDblclick: ({ row }) => { |
| | | const menu = { code: 'openProject' }; |
| | | gridEvents.menuClick({ menu, row }); // ç´æ¥éè¿gridEvents对象è°ç¨menuClick |
| | | } |
| | | }; |
| | | |
| | | // å°è£
åéå³é®èå请æ±ãå¤çååºä»¥åéè¯¯åæ»çé»è¾ç彿° |
| | | function rollbackStateAndReloadGrid(row, targetState) { |
| | | row.state = getOriginalState(targetState); |
| | |
| | | xGrid.value.reloadData(produceList.value); |
| | | } |
| | | } |
| | | |
| | | function updateProjectStateAndHandleResponse(row, projectNumber, targetState, successMsg) { |
| | | const updateParams = { |
| | | projectNumber: projectNumber, |
| | |
| | | }); |
| | | } |
| | | |
| | | //å®ä¹æ¨¡æè®¡ç®å¼¹çªé»è®¤éè |
| | | const optimizeCompute = ref(false) |
| | | const Mange = ref(true) |
| | | //å®ä¹åæ¢æ¨¡æè®¡ç®å¼¹çª |
| | | const emit = defineEmits(['switch-dialog']); |
| | | |
| | | //å®ä¹å·¥ç¨ç¶æ |
| | | const optionVal = ref('all') |
| | |
| | | |
| | | <template> |
| | | <div id="mange"> |
| | | <glass-computed v-if="optimizeCompute"/> |
| | | <div style="height: 100%; width: 100%" v-if="Mange"> |
| | | <div id="select"> |
| | | <span>ä¼åæ¥æ</span> |
| | | <el-date-picker |
| | |
| | | <el-input class="input" disabled v-model="originalPieceQuantityInput"></el-input> |
| | | åçé¢ç§¯ |
| | | <el-input class="input" disabled v-model="originalPieceAreaInput"></el-input> |
| | | </div> |
| | | </div> |
| | | </div> |
| | | </template> |
| | |
| | | }, |
| | | ] |
| | | |
| | | //è·åå·¥ç¨å· |
| | | const props = defineProps({ |
| | | projectNo : String |
| | | }); |
| | | // å®ä¹ååºå¼æ°æ®ï¼ç¨äºç»å®å·¥ç¨å·è¾å
¥æ¡çå¼ |
| | | const projectNumber = ref(''); |
| | | const projectNumber = ref(props.projectNo); |
| | | |
| | | let emit = defineEmits(['fetch-data']); |
| | | |
| | |
| | | <script setup> |
| | | import {onMounted, reactive, ref} from "vue"; |
| | | import {useI18n} from "vue-i18n"; |
| | | import { |
| | | Folder, |
| | | Plus, |
| | | Setting, |
| | | Operation, |
| | | } from "@element-plus/icons-vue"; |
| | | import {Folder, Plus, Setting, Operation,} from "@element-plus/icons-vue"; |
| | | import OptimizeCompute from "@/views/pp/glassOptimize/page/OptimizeCompute.vue"; |
| | | import SetAmount from "@/views/pp/glassOptimize/page/SetAmount.vue"; |
| | | import SetTrimming from "@/views/pp/glassOptimize/page/SetTrimming.vue"; |
| | | import CheckInventory from "@/views/pp/glassOptimize/page/CheckInventory.vue"; |
| | | import request from "@/utils/request"; |
| | | import {ElMessage} from "element-plus"; |
| | | import { useRoute } from 'vue-router'; |
| | | |
| | | |
| | | const {t} = useI18n() |
| | | |
| | |
| | | mode: 'row', |
| | | showStatus: true |
| | | }, |
| | | /*formConfig: { |
| | | data: { |
| | | width: '', |
| | | height: '', |
| | | quantity: '' |
| | | }, |
| | | items: [ |
| | | { field: 'width', title: t('order.width')+':', itemRender: { name: 'VxeInput' } }, |
| | | { field: 'height', title: t('order.height')+':', itemRender: { name: 'VxeInput' } }, |
| | | { field: 'quantity', title: t('order.quantity')+':', itemRender: { name: 'VxeInput' } }, |
| | | { |
| | | itemRender: { |
| | | name: 'VxeButtonGroup', |
| | | options: [ |
| | | { type: 'submit', content: t('craft.sure'), status: 'primary' }, |
| | | { type: 'reset', content: t('product.msg.reset') } |
| | | ] |
| | | } |
| | | } |
| | | ] |
| | | },*/ |
| | | |
| | | columns: [ |
| | | {field: 'seq', title: '', width: 70}, |
| | | {field: 'order_number', title: '订åº', width: 70}, |
| | | {field: 'child_width', width: 100, title: t('order.width'), filters: [{data: ''}], slots: {filter: 'num2_filter'}}, |
| | | {field: 'child_height', width: 100, title: t('order.height'),filters: [{data: ''}],slots: {filter: 'num2_filter'}}, |
| | | {field: 'quantity', width: 150, title: t('order.quantity'), filters: [{data: ''}], slots: {filter: 'num1_filter'}, sortable: true}, |
| | | {field: '', width: 150, title: 'é¿ç£¨1', filters: [{data: ''}], slots: {filter: 'num1_filter'}, sortable: true}, |
| | | {field: '', width: 150, title: 'é¿ç£¨2', filters: [{data: ''}], slots: {filter: 'num1_filter'}, sortable: true}, |
| | | {field: '', width: 150, title: 'ç磨1', filters: [{data: ''}], slots: {filter: 'num1_filter'}, sortable: true}, |
| | | {field: '', width: 150, title: 'ç磨1', filters: [{data: ''}], slots: {filter: 'num1_filter'}, sortable: true}, |
| | | {field: 'longGrind1', width: 150, title: 'é¿ç£¨1', filters: [{data: ''}], slots: {filter: 'num1_filter'}, sortable: true}, |
| | | {field: 'longGrind2', width: 150, title: 'é¿ç£¨2', filters: [{data: ''}], slots: {filter: 'num1_filter'}, sortable: true}, |
| | | {field: 'shortGrind1', width: 150, title: 'ç磨1', filters: [{data: ''}], slots: {filter: 'num1_filter'}, sortable: true}, |
| | | {field: 'shortGrind2', width: 150, title: 'ç磨2', filters: [{data: ''}], slots: {filter: 'num1_filter'}, sortable: true}, |
| | | { |
| | | field: 'shape', |
| | | width: 150, |
| | |
| | | sortable: true |
| | | }, |
| | | { |
| | | field: 'building_number', |
| | | field: 'remark', |
| | | width: 150, |
| | | title: t('order.buildingNumber'), |
| | | title: t('basicData.remarks'), |
| | | filters: [{data: ''}], |
| | | slots: {filter: 'num1_filter'}, |
| | | sortable: true |
| | | }, |
| | | { |
| | | field: 'remark', |
| | | field: 'building_number', |
| | | width: 150, |
| | | title: t('basicData.remarks'), |
| | | title: '楼å±å·', |
| | | filters: [{data: ''}], |
| | | slots: {filter: 'num1_filter'}, |
| | | sortable: true |
| | |
| | | }, |
| | | |
| | | { |
| | | field: '', |
| | | field: 'shelf_number', |
| | | width: 150, |
| | | title: 'æ¶å·', |
| | | filters: [{data: ''}], |
| | |
| | | const openDialog = (index) => { |
| | | dialogVisible.value[index] = true; |
| | | }; |
| | | |
| | | const route = useRoute(); |
| | | //å·¥ç¨å· |
| | | const projectNo = ref('P24120301'); |
| | | const projectNo = ref(route.params.projectNo); |
| | | const projectName = ref(''); |
| | | console.log(projectNo.value); |
| | | |
| | | const fetchData = () => { |
| | | request.post(`/glassOptimize/projectInfo/${projectNo.value}`).then((res) => { |
| | | if ((Number(res.code) === 200)) { |
| | | const data = res.data.data; |
| | | data.forEach(item => { |
| | | item.longGrind1 = 0; |
| | | item.longGrind2 = 0; |
| | | item.shortGrind1 = 0; |
| | | item.shortGrind2 = 0; |
| | | item.shelf_number = 0; |
| | | }); |
| | | xGrid.value.loadData(res.data.data); |
| | | projectName.value = res.data.data[0].project_name; |
| | | } else { |
| | | ElMessage.warning(res.msg); |
| | | } |
| | | }).catch((error) => { |
| | | console.error("è·åæ°æ®åºé:", error); |
| | | ElMessage.error('è·åæ°æ®æ¶åºç°é误ï¼è¯·ç¨ååè¯'); |
| | | }); |
| | | }; |
| | | onMounted(() => { |
| | | if (projectNo.value) { |
| | | fetchData(); |
| | | } |
| | | }); |
| | | |
| | | |
| | |
| | | <div id="header"> |
| | | <div id="title"> |
| | | <span>å·¥ç¨ç¼å·ï¼</span> |
| | | <vxe-input disabled placeholder=""></vxe-input> |
| | | <el-input disabled placeholder="" style="width: 150px" v-model="projectNo"></el-input> |
| | | <span>å·¥ç¨åç§°ï¼</span> |
| | | <vxe-input placeholder="" style="margin-right: 270px"></vxe-input> |
| | | <el-input disabled placeholder="" style="width: 150px; margin-right: 350px" v-model="projectName"></el-input> |
| | | <el-button id="checkinventory" type="primary" @click="openDialog(1)">æ¥è¯¢åºå</el-button> |
| | | <el-dialog |
| | | v-model="dialogVisible[1]" |
| | |
| | | round((`g`.`area` * `f`.`quantity`),4) AS area, |
| | | f.technology_number , |
| | | g.glass_child , |
| | | g.icon |
| | | g.icon, |
| | | op.project_name |
| | | FROM |
| | | ((pp.flow_card AS f |
| | | LEFT JOIN sd.order_detail AS d ON (((f.order_id = d.order_id) AND (f.order_number = d.order_number)))) |
| | |
| | | <select id="getSelectShippingOrderDetailPrinting" > |
| | | select |
| | | d.order_id,d.quantity,round(d.money,0) as money ,d.area,d.project, |
| | | d.customer_id,d.customer_name,d.creator,d.salesman,d.salesman_id |
| | | d.customer_id,d.customer_name,d.creator,d.salesman,d.salesman_id, |
| | | d.processing_note |
| | | from sd.`order` d |
| | | <where> |
| | | <if test="orderDetail.orderId != null and orderDetail.orderId != ''"> |