Merge branch 'master' of http://bore.pub:10439/r/ERP_override
| | |
| | | // 遍历 lastList 并更新对应的属性 |
| | | lastList.value.forEach(obj => { |
| | | // 获取前缀和 orderId |
| | | const prefix = obj.processId.substring(0, 11); |
| | | const prefix = lastList.value[id].processId.substring(0, 11); |
| | | const orderId = obj.orderId; |
| | | const glassNumber=lastList.value[id].glassNumber |
| | | const customerName = obj.customerName |
| | |
| | | list:null,//勾选的数据 |
| | | faceOrientation:null,//内外面 |
| | | type:null,//标签模板 |
| | | lableType:null//标签类型 |
| | | lableType:null,//标签类型 |
| | | titleList:null,//标题 |
| | | switch:null//判断是否为新打印 |
| | | }) |
| | | |
| | | const {currentRoute} = useRouter() |
| | |
| | | faceOrientation='OUTSIDE' |
| | | } |
| | | let lableType = props.lableType |
| | | let switchType = props.switch |
| | | data.value.printList = JSON.parse(props.list) |
| | | onMounted(() => { |
| | | request.post(`/processCard/getSelectPrintCustomLabelDetails/${type}/${lableType}`, data.value).then((res) => { |
| | |
| | | list.value = deepClone(res.data.data) |
| | | const data = produceList.value[0].value |
| | | dataList = JSON.parse(`[${data}]`); |
| | | labelList = dataList[0] |
| | | if (switchType===true){ |
| | | labelList = props.titleList |
| | | }else { |
| | | labelList = dataList[0] |
| | | } |
| | | for (let i = 0; i < list.value.length; i++) { |
| | | let count = list.value[i].data.length |
| | | for (let j = 0; j < count; j++) { |
| | |
| | | } |
| | | } |
| | | } |
| | | |
| | | } else { |
| | | ElMessage.warning(res.msg) |
| | | router.push("/login") |
| | | } |
| | | }) |
| | | |
| | |
| | | // 遍历 lastList 并更新对应的属性 |
| | | lastList.value.forEach(obj => { |
| | | // 获取前缀和 orderId |
| | | const prefix = obj.processId.substring(0, 11); |
| | | const prefix = lastList.value[id].processId.substring(0, 11); |
| | | const orderId = obj.orderId; |
| | | const glassNumber=lastList.value[id].glassNumber |
| | | // 根据 propertyName 更新属性 |
| | |
| | | list:null,//勾选的数据 |
| | | faceOrientation:null,//内外面 |
| | | type:null,//标签模板 |
| | | lableType:null//标签类型 |
| | | lableType:null,//标签类型 |
| | | titleList:null,//标题 |
| | | switch:null//判断是否为新打印 |
| | | }) |
| | | |
| | | const {currentRoute} = useRouter() |
| | |
| | | let type = props.type |
| | | let faceOrientation = props.faceOrientation |
| | | let lableType = props.lableType |
| | | let switchType = props.switch |
| | | data.value.printList = JSON.parse(props.list) |
| | | |
| | | onMounted(() => { |
| | | request.post(`/processCard/getSelectPrintCustomLabel/${type}/${lableType}`, data.value).then((res) => { |
| | | if (res.code == 200) { |
| | |
| | | list.value = deepClone(res.data.data) |
| | | const data = produceList.value[0].value |
| | | dataList = JSON.parse(`[${data}]`); |
| | | labelList = dataList[0] |
| | | if (switchType===true){ |
| | | labelList = props.titleList |
| | | }else { |
| | | labelList = dataList[0] |
| | | } |
| | | for (let i = 0; i < list.value.length; i++) { |
| | | let count= list.value[i].data.length |
| | | for (let j = 0; j < count; j++) { |
| | |
| | | } |
| | | } else { |
| | | ElMessage.warning(res.msg) |
| | | router.push("/login") |
| | | } |
| | | }) |
| | | |
| New file |
| | |
| | | <script setup> |
| | | import request from "@/utils/request" |
| | | import {ElDatePicker, ElMessage} from "element-plus" |
| | | import {nextTick, onMounted, onUnmounted, reactive, ref, watch} from "vue" |
| | | import {Search} from "@element-plus/icons-vue" |
| | | import {useRouter} from 'vue-router' |
| | | import {changeFilterEvent, filterChanged} from "@/hook" |
| | | import {useI18n} from 'vue-i18n' |
| | | import deepClone from "@/utils/deepClone"; |
| | | import companyInfo from "@/stores/sd/companyInfo" |
| | | |
| | | const company = companyInfo() |
| | | //语言获取 |
| | | const {t} = useI18n() |
| | | let router = useRouter() |
| | | let produceList = ref([]) |
| | | let labelList = ref([]) |
| | | let titleList = ref([]) |
| | | let dataList = ref([]) |
| | | let list = ref([]) |
| | | let lastList = ref([]) |
| | | |
| | | let filterData = ref({}) |
| | | |
| | | const data = ref({ |
| | | printList: [] |
| | | }) |
| | | |
| | | let props = defineProps({ |
| | | list:null,//勾选的数据 |
| | | faceOrientation:null,//内外面 |
| | | type:null,//标签模板 |
| | | lableType:null,//标签类型 |
| | | switch:null//判断是否为新打印 |
| | | }) |
| | | |
| | | const {currentRoute} = useRouter() |
| | | const route = currentRoute.value |
| | | let type = props.type |
| | | let faceOrientation = props.faceOrientation |
| | | if (type.indexOf("英文")>-1 && faceOrientation==="此面为室内面"){ |
| | | faceOrientation='INSIDE' |
| | | } |
| | | else if (type.indexOf("英文")>-1 && faceOrientation==="此面为室外面"){ |
| | | faceOrientation='OUTSIDE' |
| | | } |
| | | let lableType = props.lableType |
| | | data.value.printList = JSON.parse(props.list) |
| | | let switchType = props.switch |
| | | onMounted(() => { |
| | | request.post(`/processCard/getSelectPrintCustomLabel/${type}/${lableType}`, data.value).then((res) => { |
| | | if (res.code == 200) { |
| | | |
| | | produceList.value = deepClone(res.data.title) |
| | | list.value = deepClone(res.data.data) |
| | | const data = produceList.value[0].value |
| | | dataList = JSON.parse(`[${data}]`); |
| | | if (switchType===true){ |
| | | labelList = props.titleList |
| | | }else { |
| | | labelList = dataList[0] |
| | | } |
| | | for (let i = 0; i < list.value.length; i++) { |
| | | let count = list.value[i].data.length |
| | | for (let j = 0; j < count; j++) { |
| | | for (let k = 0; k < list.value[i].data[j].quantity; k++) { |
| | | lastList.value.push(list.value[i].data[j]) |
| | | } |
| | | } |
| | | } |
| | | } else { |
| | | ElMessage.warning(res.msg) |
| | | } |
| | | }) |
| | | |
| | | } |
| | | ) |
| | | |
| | | //修改相同产品名称标签 |
| | | const updateProductName = (event, index,id) => { |
| | | // 创建映射对象 |
| | | const propertyMapping = {}; |
| | | labelList.forEach(item => { |
| | | propertyMapping[item.name] = item.title; |
| | | }); |
| | | // 输入的值 |
| | | const newValue = event.target.innerText; |
| | | const parts = newValue.split(':'); |
| | | const result = parts[1]; // 获取冒号后的部分 |
| | | |
| | | // 获取映射中所有的键 |
| | | const keys = Object.keys(propertyMapping); |
| | | |
| | | // 根据 index 获取对应的属性名 |
| | | const propertyName = keys[index]; |
| | | |
| | | // 如果映射中没有该 index,直接返回 |
| | | if (!propertyName) { |
| | | console.warn('Unsupported index:', index); |
| | | return; |
| | | } |
| | | |
| | | // 遍历 lastList 并更新对应的属性 |
| | | lastList.value.forEach(obj => { |
| | | // 获取前缀和 orderId |
| | | const prefix = lastList.value[index].processId.substring(0, 11); |
| | | const orderId = obj.orderId; |
| | | const glassNumber=lastList.value[index].glassNumber |
| | | // 根据 propertyName 更新属性 |
| | | if (propertyName === 'productAbbreviation' && prefix === obj.processId.substring(0, 11)) { |
| | | obj.productAbbreviation = result; |
| | | } |
| | | |
| | | if (propertyName === 'project' && orderId === obj.orderId) { |
| | | obj.project = result; |
| | | } |
| | | if (propertyName === 'productName' && prefix === obj.processId.substring(0, 11)){ |
| | | obj.productName = result; |
| | | } |
| | | if (propertyName === 'customerName' && orderId === obj.orderId){ |
| | | obj.customerName = result; |
| | | } |
| | | }); |
| | | } |
| | | |
| | | </script> |
| | | |
| | | <template> |
| | | <div id="print" :class="company.printLabel.className.semi.printFlowCardName()"> |
| | | <div v-for="(item1,id) in lastList" :class="company.printLabel.className.semi.entiretyName()"> |
| | | <div class="row4">{{ faceOrientation }}</div> |
| | | <div v-for="(item,id) in labelList" :class="company.printLabel.className.semi.contentRowName()"> |
| | | <div contenteditable="true" v-if="item1[item.name] != null && item1[item.name] !== ''" class="row1" @input="updateProductName($event, id,index)">{{ item.title }}:{{ item1[item.name] }}</div> |
| | | <!-- <div v-if="item1[item.name] != null && item1[item.name] !== ''" class="row2">{{ item1[item.name] }}</div>--> |
| | | </div> |
| | | <div v-html="company.printLabel.customSemi(item1)"></div> |
| | | </div> |
| | | </div> |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | </template> |
| | | |
| | | <style scoped> |
| | | * { |
| | | margin: 0; |
| | | padding: 0; |
| | | } |
| | | |
| | | body{ |
| | | overflow: hidden; |
| | | font-family: Arial; |
| | | |
| | | } |
| | | |
| | | #printButton { |
| | | margin-top: -20px; |
| | | width: 100px; |
| | | } |
| | | |
| | | |
| | | |
| | | /*半*/ |
| | | .printFlowCard_semi { |
| | | flex-wrap: wrap; |
| | | font-size: 10px; |
| | | display: flex; |
| | | justify-content:space-between; |
| | | } |
| | | |
| | | |
| | | |
| | | /*半*/ |
| | | .entirety_semi { |
| | | width: 45%; |
| | | display: flex; |
| | | text-align: center; |
| | | flex-direction:column; |
| | | margin: 8px; |
| | | |
| | | } |
| | | |
| | | .row3{ |
| | | text-align: center; |
| | | } |
| | | |
| | | .contentRow{ |
| | | display: flex; |
| | | text-align: center; |
| | | } |
| | | |
| | | label{ |
| | | font-weight: bolder; |
| | | } |
| | | |
| | | .contentRow .row1{ |
| | | width: 100%; |
| | | } |
| | | |
| | | .entirety_semi .row4{ |
| | | text-align: right; |
| | | } |
| | | |
| | | .contentRow .row1,.contentRow .row2{ |
| | | text-align: left; |
| | | } |
| | | |
| | | |
| | | |
| | | @media print { |
| | | @page { |
| | | size: auto; /* auto is the initial value */ |
| | | margin: 13mm 5mm 0mm 7mm; /* this affects the margin in the printer settings */ |
| | | } |
| | | div { |
| | | page-break-inside: avoid; |
| | | } |
| | | |
| | | |
| | | |
| | | .pagebreak { |
| | | page-break-after: always; |
| | | } |
| | | |
| | | } |
| | | |
| | | .printFlowCard_semi1 { |
| | | flex-wrap: wrap; |
| | | font-size: 8pt; |
| | | display: flex; |
| | | } |
| | | |
| | | |
| | | /*成*/ |
| | | .entirety_semi1 { |
| | | width: 50%; |
| | | display: flex; |
| | | text-align: center; |
| | | flex-direction: column; |
| | | margin-left: -10px; |
| | | height: 80px; |
| | | |
| | | } |
| | | |
| | | .contentRow1 { |
| | | font-weight: bolder; |
| | | display: flex; |
| | | text-align: center; |
| | | width: 100%; |
| | | } |
| | | |
| | | .contentRow1 .row1 { |
| | | width: 30%; |
| | | font-weight: bolder; |
| | | } |
| | | |
| | | .entirety_finished1 .row4 { |
| | | font-weight: bolder; |
| | | text-align: right; |
| | | margin-right: 10px; |
| | | } |
| | | |
| | | .contentRow1 .row1, .contentRow1 .row2 { |
| | | text-align: left; |
| | | font-weight: bolder; |
| | | } |
| | | |
| | | </style> |
| | |
| | | import {useRouter} from "vue-router"; |
| | | import deepClone from "@/utils/deepClone"; |
| | | import companyInfo from "@/stores/sd/companyInfo" |
| | | import PrintCustomLabel from '@/components/pp/PrintCustomLabelDetails.vue' |
| | | import PrintCustomLabelSemi from '@/components/pp/PrintCustomLabelSemi.vue' |
| | | import {Printer} from "@element-plus/icons-vue/global"; |
| | | |
| | | const { t } = useI18n() |
| | | const company = companyInfo() |
| | | const dialogTableVisibleLabel = ref(false) |
| | | const dialogTableVisibleCustomLabel = ref(false) |
| | | let produceList = ref([]) |
| | | let labelList = ref([]) |
| | | let dataList = ref([]) |
| | |
| | | height: 45 |
| | | }, |
| | | } |
| | | |
| | | //标签 |
| | | let labelRow = ref({ |
| | | list: null,//勾选的数据 |
| | | faceOrientation: null,//内外面 |
| | | type: null,//标签模板 |
| | | lableType: null,//标签类型 |
| | | titleList:null,//标题列表 |
| | | switch:null//判断是否为新打印 |
| | | }) |
| | | |
| | | //室内室外面 |
| | | const stateValue = ref('') |
| | | const stateOptions = [ |
| | | { |
| | | value: t('processCard.thisIsTheIndoorSurface'), |
| | | label: t('processCard.thisIsTheIndoorSurface'), |
| | | }, |
| | | { |
| | | value: t('processCard.thisSideIsOutsideTheRoom'), |
| | | label: t('processCard.thisSideIsOutsideTheRoom'), |
| | | }, |
| | | ] |
| | | |
| | | const autoPaper = ref({ |
| | | width:null, |
| | | height:null |
| | |
| | | lableType:null//标签类型 |
| | | }) |
| | | |
| | | const printContentLabel = ref({ |
| | | id: 'childLabel', |
| | | }) |
| | | |
| | | const printContentLabelSemi = ref({ |
| | | id: 'childLabelSemi', |
| | | }) |
| | | |
| | | const {currentRoute} = useRouter() |
| | | const route = currentRoute.value |
| | |
| | | } |
| | | |
| | | const htmlPrint = () => { |
| | | let lableTypes= lableType.value |
| | | let faceOrientation = stateValue.value |
| | | type=tag.value.name |
| | | if (type === null || type === '' || type === undefined) { |
| | | ElMessage.warning(t('processCard.pleaseSelectCustomPrintLabelStyle')) |
| | | return |
| | | } |
| | | request.post(`/processCard/getSelectPrintCustomLabel/${type}/${lableType.value}`, data.value).then((res) => { |
| | | if (res.code == 200) { |
| | | produceList.value = deepClone(res.data.title) |
| | | list.value = deepClone(res.data.data) |
| | | const data = produceList.value[0].value |
| | | dataList = JSON.parse(`[${data}]`); |
| | | labelList = dataList[0] |
| | | console.log(labelList.printElements) |
| | | for (let i = 0; i < list.value.length; i++) { |
| | | let count = list.value[i].data.length |
| | | for (let j = 0; j < count; j++) { |
| | | for (let k = 0; k < list.value[i].data[j].quantity; k++) { |
| | | lastList.value.push(list.value[i].data[j]) |
| | | } |
| | | } |
| | | } |
| | | } else { |
| | | ElMessage.warning(res.msg) |
| | | router.push("/login") |
| | | const titleList = ref({}) |
| | | titleList.value=JSON.parse(JSON.stringify(hiprintTemplate.value.getJson())) |
| | | const printElements = titleList.value.panels[0].printElements; |
| | | const result = printElements.map(element => ({ |
| | | title: element.options.title, |
| | | name: element.options.field |
| | | })); |
| | | |
| | | labelRow.value.titleList=result |
| | | labelRow.value.list =props.list |
| | | labelRow.value.faceOrientation = faceOrientation |
| | | labelRow.value.type = type |
| | | labelRow.value.lableType = lableType.value |
| | | labelRow.value.switch=true |
| | | if (lableTypes == 1) { |
| | | |
| | | if (company.label === 1) { |
| | | dialogTableVisibleLabel.value = true |
| | | } |
| | | hiprintTemplate.value.print(lastList.value) |
| | | }) |
| | | |
| | | } else if (lableTypes == 2) { |
| | | if (company.label === 1) { |
| | | dialogTableVisibleCustomLabel.value = true |
| | | } |
| | | } |
| | | // request.post(`/processCard/getSelectPrintCustomLabelDetails/${type}/${lableType.value}`, data.value).then((res) => { |
| | | // if (res.code == 200) { |
| | | // produceList.value = deepClone(res.data.title) |
| | | // list.value = deepClone(res.data.data) |
| | | // const data = produceList.value[0].value |
| | | // dataList = JSON.parse(`[${data}]`); |
| | | // labelList = dataList[0] |
| | | // console.log(labelList.printElements) |
| | | // for (let i = 0; i < list.value.length; i++) { |
| | | // let count = list.value[i].data.length |
| | | // for (let j = 0; j < count; j++) { |
| | | // for (let k = 0; k < list.value[i].data[j].quantity; k++) { |
| | | // lastList.value.push(list.value[i].data[j]) |
| | | // } |
| | | // } |
| | | // } |
| | | // } else { |
| | | // ElMessage.warning(res.msg) |
| | | // router.push("/login") |
| | | // } |
| | | // hiprintTemplate.value.print(lastList.value) |
| | | // }) |
| | | |
| | | |
| | | |
| | |
| | | </el-popover> |
| | | </el-button-group> |
| | | </el-col> |
| | | <el-col :span="6"> |
| | | <el-select v-model="tag" @change="changeTag" placeholder="标签模板列表" > |
| | | <el-col :span="5"> |
| | | <el-select v-model="tag" @change="changeTag" placeholder="标签模板列表" style="width: 140px" > |
| | | <el-option |
| | | v-for="(tag,index) in tags" |
| | | :key="index" |
| | |
| | | :value="tag" |
| | | /> |
| | | </el-select> |
| | | <el-select v-model="lableType" :placeholder="lableTypeOptions[0].label" class="m-2" style="width: 140px"> |
| | | |
| | | <el-select v-model="lableType" :placeholder="lableTypeOptions[0].label" class="m-2" style="width: 120px"> |
| | | <el-option |
| | | v-for="item in filteredOptions" |
| | | :key="item.value" |
| | | :label="item.label" |
| | | :value="item.value" |
| | | /> |
| | | </el-select> |
| | | </el-col> |
| | | <el-col :span="2"> |
| | | <el-select v-model="stateValue" :placeholder="$t('processCard.pleaseSelect')" allow-create class="m-2" clearable |
| | | filterable style="width: 140px"> |
| | | <el-option |
| | | v-for="item in stateOptions" |
| | | :key="item.value" |
| | | :label="item.label" |
| | | :value="item.value" |
| | |
| | | <el-button :disabled="!tag.id" type="danger" @click="deleteTag">删除</el-button> |
| | | </el-col> |
| | | <el-col :span="1"> |
| | | <el-button type="danger" @click="htmlPrint">打印</el-button> |
| | | <el-button type="danger" @click="htmlPrint">预览</el-button> |
| | | </el-col> |
| | | </el-row> |
| | | |
| | |
| | | |
| | | </div> |
| | | |
| | | <!-- 成品标签--> |
| | | <el-dialog |
| | | id="sizeCustom" |
| | | v-model="dialogTableVisibleLabel" |
| | | :title="$t('processCard.printLabel')" |
| | | destroy-on-close |
| | | style="width: 80%;height:75% "> |
| | | <template #header="{ close, titleId, titleClass }"> |
| | | <el-button v-print="printContentLabel" :icon="Printer" circle/> |
| | | </template> |
| | | <print-custom-label id="childLabel" |
| | | :faceOrientation="labelRow.faceOrientation" |
| | | :lableType="labelRow.lableType" |
| | | :list="labelRow.list" |
| | | :type="labelRow.type" |
| | | :titleList="labelRow.titleList" |
| | | :switch="labelRow.switch" |
| | | style="width: 100%;height: 100%"/> |
| | | </el-dialog> |
| | | |
| | | <!-- 小片标签 --> |
| | | <el-dialog |
| | | id="sizeCustomSemi" |
| | | v-model="dialogTableVisibleCustomLabel" |
| | | :title="$t('processCard.labelStyle')" |
| | | destroy-on-close |
| | | style="width: 80%;height:75% "> |
| | | <template #header="{ close, titleId, titleClass }"> |
| | | <el-button v-print="printContentLabelSemi" :icon="Printer" circle/> |
| | | </template> |
| | | <print-custom-label-semi id="childLabelSemi" |
| | | :faceOrientation="labelRow.faceOrientation" |
| | | :lableType="labelRow.lableType" |
| | | :list="labelRow.list" |
| | | :type="labelRow.type" |
| | | :titleList="labelRow.titleList" |
| | | :switch="labelRow.switch" |
| | | style="width: 100%;height: 100%"/> |
| | | </el-dialog> |
| | | |
| | | </template> |
| | | |
| | | <style scoped> |
| | | :deep(#sizeCustom .el-dialog__body) { |
| | | height: 85%; |
| | | width: 100%; |
| | | overflow-y: auto; |
| | | } |
| | | |
| | | :deep(#sizeCustomSemi .el-dialog__body) { |
| | | height: 85%; |
| | | width: 100%; |
| | | overflow-y: auto; |
| | | } |
| | | </style> |
| | |
| | | }, |
| | | |
| | | menu:{ |
| | | salesAndDistribution :'Sales and Distribution', |
| | | productionPlanning :'Production Planning', |
| | | materialManage :'Material Manage', |
| | | userManage :'User Manage', |
| | | "1" :'Sales and Distribution', |
| | | "2" :'Production Planning', |
| | | "3" :'Material Manage', |
| | | "4" :'User Manage', |
| | | |
| | | product :'Product', |
| | | order :'Order', |
| | | delivery :'Delivery', |
| | | returns :'Returns', |
| | | customer :'Customer', |
| | | Customer :'Customer', |
| | | workOrder :'Work Order', |
| | | processCard :'Process Card', |
| | | reportingWorks :'Report for work', |
| | |
| | | machine :'Machine', |
| | | bOM :'BOM', |
| | | report :'Report', |
| | | productStock :'Product Stock', |
| | | ProductStock :'Product Stock', |
| | | ingredientsStock :'Ingredients Stock', |
| | | ingredients :'Ingredients', |
| | | trader :'Trader', |
| | |
| | | }, |
| | | |
| | | menu:{ |
| | | salesAndDistribution :'Продажа и распределение', |
| | | productionPlanning :'Производство и планирование', |
| | | materialManage :'Закупки и материалы', |
| | | userManage :'Пользователи и права доступа', |
| | | "1" :'Продажа и распределение', |
| | | "2" :'Производство и планирование', |
| | | "3" :'Закупки и материалы', |
| | | "4" :'Пользователи и права доступа', |
| | | |
| | | product :'Управление товарными запасами', |
| | | order :'Управление заказами', |
| | | delivery :'Управление доставкой', |
| | | returns :'Управление возвратом', |
| | | customer :'Информация о клиентах', |
| | | Customer :'Информация о клиентах', |
| | | workOrder :'Управление рабочей документацией', |
| | | processCard :'Управление картами процессов', |
| | | reportingWorks :'Управление обратной связью', |
| | |
| | | machine :'Управление оборудованием', |
| | | bOM :'Управление BOM', |
| | | report :'Управление отчетами', |
| | | productStock :'Запасы готовой продукции', |
| | | ProductStock :'Запасы готовой продукции', |
| | | ingredientsStock :'Запасы материалов', |
| | | ingredients :'Материальные данные', |
| | | trader :'Управление поставщиками', |
| | |
| | | }, |
| | | |
| | | menu:{ |
| | | salesAndDistribution :'销售与分销', |
| | | productionPlanning :'生产与计划', |
| | | materialManage :'采购与物资', |
| | | userManage :'用户与权限', |
| | | "1" :'销售与分销', |
| | | "2" :'生产与计划', |
| | | "3" :'采购与物资', |
| | | "4" :'用户与权限', |
| | | |
| | | product :'商品管理', |
| | | order :'订单管理', |
| | | delivery :'送货管理', |
| | | returns :'退货管理', |
| | | customer :'客户信息', |
| | | Customer :'客户信息', |
| | | workOrder :'工单管理', |
| | | processCard :'流程卡管理', |
| | | reportingWorks :'报工管理', |
| | |
| | | machine :'设备管理', |
| | | bOM :'BOM管理', |
| | | report :'报表管理', |
| | | productStock :'成品库存', |
| | | ProductStock :'成品库存', |
| | | ingredientsStock :'物料库存', |
| | | ingredients :'物料资料', |
| | | trader :'供应商管理', |
| | |
| | | </el-menu>--> |
| | | <div class="menu" > |
| | | <div v-for="items in menuList"> |
| | | <div class='menu_title' @click="openMenu(items.id)" >{{items.menuName}}<span class='indicator' >▼</span></div> |
| | | <div class='menu_title' @click="openMenu(items.id)" >{{$t('menu.'+items.id)}}<span class='indicator' >▼</span></div> |
| | | <ul class='enter-x-left' v-show="openFlag==items.id"> |
| | | |
| | | <li v-for="menuItem in menuItemList" |
| | |
| | | > |
| | | <router-link |
| | | :to="{path:menuItem.url}"> |
| | | {{ menuItem.itemName}} |
| | | {{ $t('menu.'+menuItem.menu)}} |
| | | </router-link> |
| | | |
| | | </li> |
| | |
| | | titleSelectJson.value.dataType = res.data.type |
| | | xGrid.value.reloadData(newDataCollection) |
| | | gridOptions.loading = false |
| | | if (userId!='admin'){ |
| | | gridOptions.toolbarConfig.buttons[5].visible=false |
| | | } |
| | | |
| | | |
| | | hideButton() |
| | | } else { |
| | |
| | | style="width: 100%;height: 100%"/> |
| | | </el-dialog> |
| | | |
| | | <!-- 成品标签新疆--> |
| | | <!-- 成品标签两列--> |
| | | <el-dialog |
| | | id="sizeCustom" |
| | | v-model="dialogTableVisibleLabelXJ" |
| | |
| | | <select-sort-table id="child" :orderId="tableRow.orderId"/> |
| | | </el-dialog> |
| | | |
| | | <!-- 标签样式 --> |
| | | <el-dialog |
| | | id="titleStyle" |
| | | :title="$t('processCard.labelStyle')" |
| | |
| | | import PrintLabel from '@/views/pp/processCard/PrintLabel.vue' |
| | | import PrintCustomLabel from '@/components/pp/PrintCustomLabelDetails.vue' |
| | | import PrintCustomLabelSemi from '@/components/pp/PrintCustomLabelSemi.vue' |
| | | import PrintCustomLabelXJ from '@/components/pp/PrintCustomLabelTwo.vue' |
| | | import SortDetail from '@/components/pp/SelectSortDetailProcessCard.vue' |
| | | import footSum from "@/hook/footSum" |
| | | import companyInfo from "@/stores/sd/companyInfo" |
| | | import {CircleCheck, Download, Printer} from "@element-plus/icons-vue/global"; |
| | | import TagStyleDesigner from "@/components/pp/TagStyleDesigner.vue"; |
| | | |
| | | const company = companyInfo() |
| | | |
| | |
| | | const dialogTableVisible = ref(false) |
| | | const dialogTableVisibleLabel = ref(false) |
| | | const dialogTableVisibleCustomLabel = ref(false) |
| | | const dialogTableVisibleLabelXJ = ref(false) |
| | | const printVisible = ref(false) |
| | | let selectRecords = ref(null) |
| | | let titleStyleVisible = ref(false) |
| | | |
| | | const selectRecordsData = ref({ |
| | | printList: [] |
| | |
| | | {code: 'customLabel', name: t('processCard.customLabelPrinting'), status: 'primary'}, |
| | | {code: 'printLabel', name: t('processCard.labelPrinting'), status: 'primary'}, |
| | | {code: 'printLabel2', name: t('processCard.labelPrinting2'), status: 'primary'}, |
| | | {code: 'printLabel3', name: '标签打印2', status: 'primary'}, |
| | | {code: 'printTest', name: "测试打印", status: 'primary'}, |
| | | // {code: 'printLike', name: "同配置打印", status: 'primary'}, |
| | | ], |
| | | // import: false, |
| | |
| | | dialogTableVisible.value = true |
| | | break |
| | | } |
| | | case 'printTest': { |
| | | if (selectRecords === null || selectRecords === '' || selectRecords.length === 0) { |
| | | ElMessage.warning(t('searchOrder.msgList.checkOrder')) |
| | | return |
| | | } |
| | | // if (type === null || type === '' || type === undefined) { |
| | | // ElMessage.warning(t('processCard.pleaseSelectCustomPrintLabelStyle')) |
| | | // return |
| | | // } |
| | | |
| | | let id = "" |
| | | for (let i = 0; i < selectRecords.length; i++) { |
| | | if (i + 1 === selectRecords.length) { |
| | | id += selectRecords[i].id |
| | | } else { |
| | | id += selectRecords[i].id + "|" |
| | | } |
| | | } |
| | | |
| | | labelRow.value.list = JSON.stringify(selectRecords) |
| | | labelRow.value.faceOrientation = faceOrientation |
| | | labelRow.value.type = type |
| | | labelRow.value.lableType = lableTypes |
| | | titleStyleVisible.value = true |
| | | break |
| | | } |
| | | case 'printLabel3': { |
| | | if (selectRecords === null || selectRecords === '' || selectRecords.length === 0) { |
| | | ElMessage.warning(t('searchOrder.msgList.checkOrder')) |
| | | return |
| | | } |
| | | if (type === null || type === '' || type === undefined) { |
| | | ElMessage.warning(t('processCard.pleaseSelectCustomPrintLabelStyle')) |
| | | return |
| | | } |
| | | |
| | | let id = "" |
| | | for (let i = 0; i < selectRecords.length; i++) { |
| | | if (i + 1 === selectRecords.length) { |
| | | id += selectRecords[i].id |
| | | } else { |
| | | id += selectRecords[i].id + "|" |
| | | } |
| | | } |
| | | |
| | | labelRow.value.list = JSON.stringify(selectRecords) |
| | | labelRow.value.faceOrientation = faceOrientation |
| | | labelRow.value.type = type |
| | | labelRow.value.lableType = lableTypes |
| | | dialogTableVisibleLabelXJ.value = true |
| | | break |
| | | } |
| | | } |
| | | } |
| | | }, |
| | |
| | | <sort-detail id="child" :processId="editRow.processId" :technologyNumber="editRow.technologyNumber" :process="editRow.process"/> |
| | | </el-dialog> |
| | | |
| | | <!-- 标签样式 --> |
| | | <el-dialog |
| | | id="titleStyle" |
| | | :title="$t('processCard.labelStyle')" |
| | | style="width: 90%;height:93%;margin-top: 3vh " |
| | | :close-on-click-modal="false" |
| | | :close-on-press-escape="false" |
| | | v-model="titleStyleVisible"> |
| | | <!-- <tag-style style="width: 100%;height: 100%"/>--> |
| | | <tag-style-designer style="width: 100%;height: 100%" |
| | | :faceOrientation="labelRow.faceOrientation" |
| | | :lableType="labelRow.lableType" |
| | | :list="labelRow.list" |
| | | :type="labelRow.type"/> |
| | | </el-dialog> |
| | | |
| | | <!-- 成品标签两列--> |
| | | <el-dialog |
| | | id="sizeCustom" |
| | | v-model="dialogTableVisibleLabelXJ" |
| | | :title="$t('processCard.printLabel')" |
| | | destroy-on-close |
| | | style="width: 80%;height:75% "> |
| | | <template #header="{ close, titleId, titleClass }"> |
| | | <el-button v-print="printContentLabel" :icon="Printer" circle/> |
| | | </template> |
| | | <print-custom-label-x-j id="childLabel" |
| | | :faceOrientation="labelRow.faceOrientation" |
| | | :lableType="labelRow.lableType" |
| | | :list="labelRow.list" |
| | | :type="labelRow.type" |
| | | style="width: 100%;height: 100%"/> |
| | | </el-dialog> |
| | | </div> |
| | | </template> |
| | | |
| | |
| | | overflow-y: auto; |
| | | } |
| | | |
| | | :deep(#titleStyle .el-dialog__body) { |
| | | height: 95%; |
| | | width: 100%; |
| | | overflow-y: auto; |
| | | } |
| | | |
| | | </style> |
| | |
| | | columns:[ |
| | | {type:'expand',fixed:"left",width: 80}, |
| | | {type: 'seq',fixed:"left", title: '自序', width: 80 }, |
| | | {field: 'reportingWork.reportingWorkTime', width: 120, title: t('reportingWorks.reportingWorkTime'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true, }, |
| | | {field: 'reportingWork.processId', width: 160,title: t('processCard.processId') ,filters:[{ data: '' }],slots: { filter: 'num1_filter' }}, |
| | | {field: 'reportingWorkTime', width: 120, title: t('reportingWorks.reportingWorkTime'), sortable: true, }, |
| | | {field: 'processId', width: 160,title: t('processCard.processId') ,filters:[{ data: '' }],slots: { filter: 'num1_filter' }}, |
| | | {field: 'code', width: 160,title: t('reportingWorks.glassNumber') ,filters:[{ data: '' }],slots: { filter: 'num1_filter' }}, |
| | | {field: 'reportingWork.thisProcess',width: 120, title: t('reportingWorks.reportingProcess'), sortable: true,showOverflow:"ellipsis" ,filters:[{ data: '' }],slots: { filter: 'num1_filter' }}, |
| | | {field: 'thisProcess',width: 120, title: t('reportingWorks.reportingProcess'), sortable: true,showOverflow:"ellipsis" ,filters:[{ data: '' }],slots: { filter: 'num1_filter' }}, |
| | | {field: 'responsibleProcess',width: 120, title: t('reportingWorks.responsibleProcess'), sortable: true,showOverflow:"ellipsis" ,filters:[{ data: '' }],slots: { filter: 'num1_filter' }}, |
| | | {field: 'responsibleTeam', width: 130,title: t('reportingWorks.responsibleTeam'), sortable: true,filters:[{ data: '' }],slots: { filter: 'num1_filter' }}, |
| | | {field: 'breakageType', width: 100,title: t('reportingWorks.breakageType'), sortable: true,showOverflow:"ellipsis"}, |
| | | {field: 'breakageReason', width: 100,title: t('reportingWorks.breakageReason'), sortable: true,showOverflow:"ellipsis"}, |
| | | {field: 'breakageQuantity', width: 100,title: t('reportingWorks.quantityBroken'), sortable: true}, |
| | | {field: 'area',width: 100, title: t('reportingWorks.wornArea'), sortable: true}, |
| | | {field: 'order.project', width: 120,title: t('order.project'), sortable: true}, |
| | | {field: 'order.orderId',width: 120, title: t('order.orderId'), sortable: true}, |
| | | {field: 'orderGlassDetail.glassChild',width: 120, title: t('reportingWorks.glassChild'), sortable: true}, |
| | | {field: 'project', width: 120,title: t('order.project'), sortable: true}, |
| | | {field: 'orderId',width: 120, title: t('order.orderId'), sortable: true}, |
| | | {field: 'glassChild',width: 120, title: t('reportingWorks.glassChild'), sortable: true}, |
| | | ],//表格表头字段 |
| | | data:[],//表格数据 |
| | | url :'/report/crossProcessBreaking', |
| | |
| | | filterMethod: filterChanged}, |
| | | {field: 'quantity', width: 90,title: t('order.quantity')}, |
| | | {field: 'broken_num',width: 90, title: t('reportingWorks.quantityBroken')}, |
| | | {field: 'shippedQuantity',width: 120, title: t('report.shippedQuantity')}, |
| | | // {field: 'shippedQuantity',width: 120, title: t('report.shippedQuantity')}, |
| | | {field: 'inventory',width: 120, title: t('report.inventoryNum')}, |
| | | {field: 'inventoryArea',width: 120, title: t('report.inventoryArea')}, |
| | | ] |
| | |
| | | slots: {filter: 'num1_filter'}, |
| | | filterMethod: filterChanged}, |
| | | {field: 'product_name', width: 120,title: t('order.product'),filters:[{ data: '' }],slots: { filter: 'num1_filter' },filterMethod: filterChanged}, |
| | | {field: 'child_width',width: 110, title: t('order.width'),filters:[{ data: '' }],slots: { filter: 'num1_filter' },filterMethod: filterChanged}, |
| | | {field: 'child_width',width: 110, title: t('order.width')}, |
| | | {field: 'child_height', width: 90,title: t('order.height'),showOverflow:"ellipsis"}, |
| | | {field: 'quantity', width: 90,title: t('order.quantity')}, |
| | | {field: 'technology_number',width: 90, title: t('processCard.technologyNumber')}, |
| | | {field: 'glass_child',width: 120, title: t('reportingWorks.glassChild')}, |
| | | {field: 'inventoryNum',width: 120, title: t('report.inventoryNum')}, |
| | | {field: 'inventoryArea',width: 120, title: t('report.inventoryArea')}, |
| | | {field: 'shippedQuantity',width: 120, title: t('report.shippedQuantity')}, |
| | | {field: 'area',width: 120, title: t('report.area')}, |
| | | // {field: 'shippedQuantity',width: 120, title: t('report.shippedQuantity')}, |
| | | // {field: 'area',width: 120, title: t('report.area')}, |
| | | ] |
| | | //需要合并的列 |
| | | let column = [1,2,3] |
| | |
| | | |
| | | </div> |
| | | <vxe-grid |
| | | height="400px" |
| | | height="100%" |
| | | @filter-change="filterChanged" |
| | | class="mytable-scrollbar" |
| | | ref="xGrid" |
| | |
| | | <style scoped> |
| | | .main-div-customer{ |
| | | width: 99%; |
| | | height: 100%; |
| | | height: 95%; |
| | | } |
| | | #selectForm { |
| | | width: 60%; |
| | |
| | | process: titleUploadData.value.previousProcess, |
| | | processId:processId, |
| | | thisProcess:titleUploadData.value.thisProcess, |
| | | technologyStr:technologyStr |
| | | technologyStr:technologyStr, |
| | | userName:user.user.userName |
| | | } |
| | | loadingFlag.value= true |
| | | request.post("/reportingWork/reviewReportingWork",reportWork).then((res) =>{ |
| | |
| | | |
| | | //获取七天前到当前时间 |
| | | function getNowTime() { |
| | | const start = new Date(new Date().getTime()- 3600 * 1000 * 24 * 7) |
| | | const start = new Date(new Date().getTime()- 3600 * 1000 * 24 * 3) |
| | | .toISOString() |
| | | .replace('T', ' ') |
| | | .slice(0,10) //默认开始时间7天前 |
| | |
| | | {field: 'deviceName', width: 100,title: t('reportingWorks.deviceType'),filters:[{ data: '' }],slots: { filter: 'num1_filter' } }, |
| | | {field: 'teamsGroupsName',width: 120, title: t('reportingWorks.teamsType'),filters:[{ data: '' }],slots: { filter: 'num1_filter' } }, |
| | | {field: 'reviewedState',width: 120, title: t('processCard.reviewedState'), }, |
| | | {field: 'reviewed',width: 120, title: '审核人', }, |
| | | {field: 'notes',width: 120, title: t('basicData.remarks'), }, |
| | | |
| | | ],//表头按钮 |
| | |
| | | public Result getOrderReport(@PathVariable Integer pageNum, |
| | | @PathVariable Integer pageSize, |
| | | @PathVariable List<String> selectDate, |
| | | @RequestBody DamageDetails damageDetails) { |
| | | return Result.seccess(reportService.crossProcessBreakingSv(pageNum, pageSize, selectDate, damageDetails)); |
| | | @RequestBody CrossProcessBreakingDTO crossProcessBreakingDTO) { |
| | | return Result.seccess(reportService.crossProcessBreakingSv(pageNum, pageSize, selectDate, crossProcessBreakingDTO)); |
| | | |
| | | } |
| | | |
| | |
| | | private String responsibleProcess; |
| | | @ExcelProperty("责任班组") |
| | | private String responsibleTeam; |
| | | @ExcelProperty("报工工序") |
| | | private String thisProcess; |
| | | @ExcelProperty("次破类型") |
| | | private String breakageType; |
| | | @ExcelProperty("次破原因") |
| | |
| | | private String project; |
| | | @ExcelProperty("销售单号") |
| | | private String orderId; |
| | | @ExcelProperty("流程卡号") |
| | | private String processId; |
| | | @ExcelProperty("单片名称") |
| | | private String glassChild; |
| | | @ExcelProperty("编号") |
| | | private String code; |
| | | } |
| | |
| | | |
| | | List<Map<String, String>> processCardProgressMp(String orderId); |
| | | |
| | | List<DamageDetails> getProcessBreaking(Integer offset, Integer pageSize, String startDate, String endDate, DamageDetails damageDetails); |
| | | List<CrossProcessBreakingDTO> getProcessBreaking(Integer offset, Integer pageSize, String startDate, String endDate, CrossProcessBreakingDTO crossProcessBreakingDTO); |
| | | |
| | | Map<String, Integer> getProcessBreakingTotal(Integer offset, Integer pageSize, String startDate, String endDate, DamageDetails damageDetails); |
| | | Map<String, Integer> getProcessBreakingTotal(Integer offset, Integer pageSize, String startDate, String endDate, CrossProcessBreakingDTO crossProcessBreakingDTO); |
| | | |
| | | List<Map<String, String>> workInProgressMp( |
| | | Integer offset, Integer pageSize, |
| | |
| | | |
| | | Integer selectLayerByReportingWorkId(String reportingWorkId); |
| | | |
| | | Boolean ReviewReportingWorkMp(String substring, String process, String result); |
| | | Boolean ReviewReportingWorkMp(String substring, String process, String result, String userName); |
| | | |
| | | String getPatchConditionMp(String reportingWorkId); |
| | | } |
| | |
| | | |
| | | import com.baomidou.dynamic.datasource.annotation.DS; |
| | | |
| | | import com.example.erp.dto.pp.DamageReportDTO; |
| | | import com.example.erp.dto.pp.ScheduleProductionScheduleDTO; |
| | | import com.example.erp.dto.pp.TeamOutputDTO; |
| | | import com.example.erp.dto.pp.WorkInProgressDTO; |
| | | import com.example.erp.dto.pp.*; |
| | | import com.example.erp.entity.pp.DamageDetails; |
| | | import com.example.erp.entity.pp.Report; |
| | | import com.example.erp.mapper.pp.ProductionSchedulingMapper; |
| | |
| | | return map; |
| | | } |
| | | |
| | | public Map<String, Object> crossProcessBreakingSv(Integer pageNum, Integer pageSize, List<String> selectDate, DamageDetails damageDetails) { |
| | | public Map<String, Object> crossProcessBreakingSv(Integer pageNum, Integer pageSize, List<String> selectDate, CrossProcessBreakingDTO crossProcessBreakingDTO) { |
| | | Integer offset = (pageNum - 1) * pageSize; |
| | | String endDate = LocalDate.now().toString(); |
| | | String startDate = LocalDate.now().minusDays(15).toString(); |
| | |
| | | } |
| | | } |
| | | Map<String, Object> map = new HashMap<>(); |
| | | map.put("data", reportMapper.getProcessBreaking(offset, pageSize, startDate, endDate, damageDetails)); |
| | | map.put("total", reportMapper.getProcessBreakingTotal(offset, pageSize, startDate, endDate, damageDetails)); |
| | | map.put("data", reportMapper.getProcessBreaking(offset, pageSize, startDate, endDate, crossProcessBreakingDTO)); |
| | | map.put("total", reportMapper.getProcessBreakingTotal(offset, pageSize, startDate, endDate, crossProcessBreakingDTO)); |
| | | List<String> list = new ArrayList<>(); |
| | | list.add(startDate); |
| | | list.add(endDate); |
| | |
| | | |
| | | String processId = reportingWork.get("processId"); |
| | | String thisProcess = reportingWork.get("thisProcess"); |
| | | String userName=reportingWork.get("userName"); |
| | | int index = processId.lastIndexOf("/") + 1; |
| | | String result = processId.substring(index); |
| | | String technologyStr = reportingWork.get("technologyStr"); |
| | |
| | | .eq(ReportingWork::getProcessId, processId.substring(0, 14)) |
| | | .eq(ReportingWork::getThisProcess, reportingWork.get("process")) |
| | | .eq(ReportingWork::getReviewedState, 0) |
| | | .eq(ReportingWork::getReviewed, userName) |
| | | .setSql("reviewed_state =1"); |
| | | reportingWorkMapper.update(null, updateWrapper); |
| | | }else { |
| | | reportingWorkMapper.ReviewReportingWorkMp(processId.substring(0, 14),reportingWork.get("process"),technologyStr); |
| | | reportingWorkMapper.ReviewReportingWorkMp(processId.substring(0, 14),reportingWork.get("process"),technologyStr,userName); |
| | | |
| | | } |
| | | return true; |
| | |
| | | for (Map<String, Object> item : ReworkMap) { |
| | | item.put("reworkTeam", ""); |
| | | List<BasicDataProduce> basicCategory = new ArrayList<>(); |
| | | |
| | | List<BasicDataProduce> basicDataProduceList = basicDateProduceMapper.SelectWorkBasicTeams(item.get("reworkProcesses").toString()); |
| | | for (BasicDataProduce basicDataProduce : basicDataProduceList) { |
| | | if (Objects.equals(basicDataProduce.getBasicData().getBasicName(), item.get("reworkProcesses"))) { |
| | |
| | | |
| | | </resultMap> |
| | | |
| | | <resultMap id="damageDetailsTableMap" type="com.example.erp.entity.pp.DamageDetails"> |
| | | <resultMap id="damageDetailsTableMap" type="com.example.erp.dto.pp.CrossProcessBreakingDTO"> |
| | | <result column="responsible_process" property="responsibleProcess"/> |
| | | <result column="responsible_team" property="responsibleTeam"/> |
| | | <result column="breakage_type" property="breakageType"/> |
| | | <result column="breakage_reason" property="breakageReason"/> |
| | | <result column="breakage_quantity" property="breakageQuantity"/> |
| | | <result column="area" property="area"/> |
| | | <result column="reporting_work_id" property="reportingWork.reportingWorkId"/> |
| | | <result column="reporting_work_time" property="reportingWork.reportingWorkTime"/> |
| | | <result column="this_process" property="reportingWork.thisProcess"/> |
| | | <result column="project" property="order.project"/> |
| | | <result column="order_id" property="order.orderId"/> |
| | | <result column="glass_child" property="orderGlassDetail.glassChild"/> |
| | | <result column="process_id" property="reportingWork.processId"/> |
| | | <result column="reporting_work_time" property="reportingWorkTime"/> |
| | | <result column="this_process" property="thisProcess"/> |
| | | <result column="project" property="project"/> |
| | | <result column="order_id" property="orderId"/> |
| | | <result column="glass_child" property="glassChild"/> |
| | | <result column="process_id" property="processId"/> |
| | | <result column="code" property="code"/> |
| | | </resultMap> |
| | | |
| | |
| | | and dd.available = 0 |
| | | and reviewed_state != 2 |
| | | and rw.this_process != dd.responsible_process |
| | | <if test="crossProcessBreakingDTO.code != null and crossProcessBreakingDTO.code != ''"> |
| | | and JSON_UNQUOTE( JSON_EXTRACT( od.other_columns, '$.S01' )) regexp #{crossProcessBreakingDTO.code} |
| | | </if> |
| | | <if test="crossProcessBreakingDTO.processId != null and crossProcessBreakingDTO.processId != ''"> |
| | | and rw.process_id regexp #{crossProcessBreakingDTO.processId} |
| | | </if> |
| | | <if test="crossProcessBreakingDTO.thisProcess != null and crossProcessBreakingDTO.thisProcess != ''"> |
| | | and rw.this_process regexp #{crossProcessBreakingDTO.thisProcess} |
| | | </if> |
| | | <if test="crossProcessBreakingDTO.responsibleProcess != null and crossProcessBreakingDTO.responsibleProcess != ''"> |
| | | and dd.responsible_process regexp #{crossProcessBreakingDTO.responsibleProcess} |
| | | </if> |
| | | <if test="crossProcessBreakingDTO.responsibleTeam != null and crossProcessBreakingDTO.responsibleTeam != ''"> |
| | | and dd.responsible_team regexp #{crossProcessBreakingDTO.responsibleTeam} |
| | | </if> |
| | | GROUP BY dd.id |
| | | order by dd.id desc |
| | | limit #{offset},#{pageSize} |
| | |
| | | <result property="thisWornQuantity" column="this_worn_quantity"/> |
| | | <result property="deviceName" column="device_name"/> |
| | | <result property="teamsGroupsName" column="teams_groups_name"/> |
| | | <result property="reviewedState" column="reviewed_state"/> |
| | | <result property="reportingWorkId" column="reporting_work_id"/> |
| | | <result property="processId" column="process_id"/> |
| | | <result property="completedArea" column="completedArea"/> |
| | |
| | | <result property="qualityInspector" column="quality_inspector"/> |
| | | <result property="qualityInsTime" column="quality_ins_time"/> |
| | | <result property="notes" column="notes"/> |
| | | <result property="reviewed" column="reviewed"/> |
| | | |
| | | <association property="order" javaType="com.example.erp.entity.sd.Order"> |
| | | <result property="customerId" column="customer_id"/> |
| | |
| | | rw.device_name, |
| | | rw.teams_groups_name, |
| | | rw.reviewed_state, |
| | | rw.notes |
| | | rw.notes, |
| | | rw.reviewed |
| | | # (IF(rw.reviewed_state = 0, '未审核', IF(rw.reviewed_state = 1, '审核通过', '审核不通过'))) as reviewed_state |
| | | from sd.order as o |
| | | left join sd.order_glass_detail as ogd on ogd.order_id = o.order_id |
| | |
| | | <update id="ReviewReportingWorkMp"> |
| | | update reporting_work as rw |
| | | left join reporting_work_detail as rwd on rw.reporting_work_id = rwd.reporting_work_id |
| | | set rw.reviewed_state = 1 |
| | | set rw.reviewed_state = 1 ,rw.reviewed=#{userName} |
| | | where rw.process_id = #{substring} and rw.this_process=#{process} |
| | | and POSITION(rwd.technology_number in #{result}) and reviewed_state=0 |
| | | </update> |
| | |
| | | from sys_menu as a |
| | | where |
| | | a.state=1 |
| | | and a.languageType = #{lang} |
| | | order by a.listSort |
| | | ; |
| | | </select> |
| | |
| | | from `sys_menu_item` as a |
| | | where |
| | | a.state=1 |
| | | and a.languageType = #{lang} |
| | | order by |
| | | a.menuId,a.listSort |
| | | ; |