Przeglądaj źródła

Merge branch 'master' of https://git.7in6.com/Minong/mes-admin-backend-ui

曹鹤洋 1 rok temu
rodzic
commit
4dab8cf3e7

BIN
public/src/assets/保养.png


BIN
public/src/assets/待单.png


BIN
public/src/assets/待料.png


BIN
public/src/assets/打样.png


BIN
public/src/assets/测试.png


BIN
public/src/assets/生产.png


BIN
public/src/assets/维修.png


BIN
public/src/assets/装版.png


+ 43 - 1
src/api/jixiaoguanli/baogong.js

@@ -57,4 +57,46 @@ export const  ComplaintRecord= (params) => {
     method: 'get',
 	params
   })
-}
+}
+export const MachineTeamAdd = (data) => {
+  return service({
+    url:'/mes_server/facility/MachineTeamAdd',
+    method: 'post',
+    data
+  })
+}
+export const remodelDataAdd = (data) => {
+  return service({
+    url:'/mes_server/facility/remodelDataAdd',
+    method: 'post',
+    data
+  })
+}
+export const remodelDataEdit = (data) => {
+  return service({
+    url:'/mes_server/facility/remodelDataEdit',
+    method: 'post',
+    data
+  })
+}
+export const PrintDetailAdd = (data) => {
+  return service({
+    url:'/mes_server/facility/PrintDetailAdd',
+    method: 'post',
+    data
+  })
+}
+export const remodelDataDel = (params) => {
+  return service({
+    url:'/mes_server/facility/remodelDataDel',
+    method: 'get',
+    params
+  })
+}
+export const PrintDetailEdit = (params) => {
+  return service({
+    url:'/mes_server/facility/PrintDetailEdit',
+    method: 'get',
+    params
+  })
+}

+ 1 - 0
src/view/job/processSheet/processSheet.vue

@@ -130,6 +130,7 @@
 	import { getDictFunc, formatDate, formatBoolean, filterDict, ReturnArrImg, onDownloadFile } from '@/utils/format'
 	import { ElMessage, ElMessageBox } from 'element-plus'
 	import { ref, reactive } from 'vue'
+  import {hiprint} from "vue-plugin-hiprint";
 	const workData = ref({
 		Gd_gdbh:'',
 		maobao:'',

+ 4 - 4
src/view/login/index.vue

@@ -159,7 +159,7 @@ defineOptions({
 const router = useRouter()
 // 验证函数
 const checkUsername = (rule, value, callback) => {
-  if (value.length < 5) {
+  if (value.length < 3) {
     return callback(new Error('请输入正确的用户名'))
   } else {
     callback()
@@ -193,15 +193,15 @@ loginVerify()
 const loginForm = ref(null)
 const picPath = ref('')
 const loginFormData = reactive({
-  username: 'admin',
-  password: '123456',
+  username: '',
+  password: '',
   captcha: '',
   captchaId: '',
   openCaptcha: false,
 })
 const rules = reactive({
   username: [{ validator: checkUsername, trigger: 'blur' }],
-  password: [{ validator: checkPassword, trigger: 'blur' }],
+  // password: [{ validator: checkPassword, trigger: 'blur' }],
   captcha: [
     {
       message: '验证码格式不正确',

+ 0 - 423
src/view/performance/12-orderAccounting/bak.vue

@@ -1,423 +0,0 @@
-<template>
-  <div>
-    <el-container>
-      <!-- 左侧树形结构 -->
-      <el-scrollbar max-height="80vh">
-        <el-aside width="280px">
-          <div class="JKWTree-tree">
-            <h3>工单超节损核算</h3>
-            <el-tree
-              :data="treeData"
-              highlight-current
-              @node-click="handleNodeClick"
-            />
-          </div>
-        </el-aside>
-      </el-scrollbar>
-
-      <el-container>
-        <el-main>
-          <div class="gva-table-box">
-            <!-- 按钮区域 -->
-            <div class="gva-btn-list">
-              <el-row :span="6">
-                <el-input
-                  v-model="searchInfo"
-                  placeholder="输入工单编号或产品名称"
-                />
-              </el-row>
-              <el-button
-                type="primary"
-                :icon="Search"
-                @click="onSearch"
-              >定位</el-button>
-
-              <el-button
-                type="primary"
-                :icon="Download"
-                style="margin-left: auto;"
-                @click="exportExcel"
-              >导出到Excel</el-button>
-            </div>
-            <!-- 数据展示 -->
-            <el-table
-              style="width: 100%;height:30vh;"
-              :data="tableData"
-              row-key="ID"
-              highlight-current-row
-              border
-              :row-style="{ height: '20px' }"
-              :cell-style="{ padding: '0px' }"
-              :header-row-style="{ height: '20px' }"
-              :header-cell-style="{ padding: '0px' }"
-              @selection-change="handleSelectionChange"
-              @row-dblclick="doubleClick"
-            >
-              <el-table-column
-                type="selection"
-                width="55"
-              />
-              <!-- 使用 v-for 循环渲染每一列 -->
-              <el-table-column
-                v-for="column in tableCols"
-                :key="column.prop"
-                :prop="column.prop"
-                :label="column.label"
-                :width="column.width"
-                show-overflow-tooltip="true"
-              />
-
-            </el-table>
-            <br>
-            <el-table
-              style="width: 100%;height: 40vh;"
-              row-key="ID"
-              highlight-current-row
-              border
-              :row-style="{ height: '20px' }"
-              :cell-style="{ padding: '0px' }"
-              :header-row-style="{ height: '20px' }"
-              :header-cell-style="{ padding: '0px' }"
-              @selection-change="handleSelectionChange"
-              @row-dblclick="doubleClick"
-            >
-              <el-table-column
-                type="selection"
-                width="55"
-              />
-              <!-- 使用 v-for 循环渲染每一列 -->
-              <el-table-column
-                v-for="column in tableCols"
-                :key="column.prop"
-                :prop="column.prop"
-                :label="column.label"
-                :width="column.width"
-                show-overflow-tooltip="true"
-              />
-
-            </el-table>
-          </div>
-          <!-- 弹出框 -->
-
-        </el-main>
-      </el-container>
-    </el-container>
-
-  </div>
-</template>
-
-<script setup>
-
-// 全量引入格式化工具 请按需保留
-import { ElMessage, ElMessageBox } from 'element-plus'
-import { Search, Refresh, Download } from '@element-plus/icons-vue'
-import { ref, reactive, onMounted } from 'vue'
-import { getSide, getTable } from '@/api/mes_api_gty/orderAccounting'
-
-defineOptions({
-  name: '12orderAccounting'
-})
-
-// 侧边栏数据
-const treeData = ref([])
-const getSideData = async() => {
-  const res = await getSide()
-  if (res.code === 0) {
-    const { data } = res
-    const transformedData = []
-
-    for (const [key, value] of Object.entries(data)) {
-      const [date, total] = key.split('-') // 提取日期和数量
-
-      const transformedItem = {
-        label: `${date}(工单数:${total})`,
-        children: value.map(item => ({
-          label: `${item['客户编号']}【${item['客户名称']}】(工单数:${item.total})`
-        })),
-      }
-
-      transformedData.push(transformedItem)
-    }
-    treeData.value = transformedData
-  }
-}
-
-getSideData()
-
-// 自动化生成的字典(可能为空)以及字段
-const formData = ref({
-  id: '',
-  name: '',
-  date: '',
-  group: '',
-  packingOutput: '',
-  reworkOutput: '',
-  pieceOutput: '',
-  order: '',
-  user: '',
-  createTime: '',
-  updateTime: '',
-  uniqid: '',
-})
-
-// 验证规则
-const rule = reactive({
-})
-
-const elFormRef = ref()
-const elSearchFormRef = ref()
-
-// =========== 表格控制部分 ===========
-const tableCols = [
-  { label: '工单编号', prop: 'qczl_gdbh', width: '100' },
-  { label: '印件号', prop: 'qczl_yjno', width: '100' },
-  { label: '印件名称', prop: 'Gd_cpmc', width: '400' },
-  { label: '日期', prop: 'qczl_rq', width: '100' },
-  { label: '流程单号', prop: 'qczl_num', width: '100' },
-  { label: '流程单备注', prop: 'qczl_NumDesc', width: '100' },
-  { label: '总废品', prop: 'qczl_fp', width: '100' },
-  { label: '废品1', prop: 'sl_lb1', width: '250' },
-  { label: '废品2', prop: 'sl_lb2', width: '250' },
-  { label: '废品3', prop: 'sl_lb3', width: '250' },
-  { label: '废品4', prop: 'sl_lb4', width: '250' },
-  { label: '废品5', prop: 'sl_lb5', width: '250' },
-  { label: '废品6', prop: 'sl_lb6', width: '250' },
-  { label: '废品7', prop: 'sl_lb7', width: '250' },
-  { label: '废品8', prop: 'sl_lb8', width: '250' },
-  { label: '废品9', prop: 'sl_lb9', width: '250' },
-  { label: '废品10', prop: 'sl_lb10', width: '250' },
-  { label: '废品11', prop: 'sl_lb11', width: '250' },
-  { label: '废品12', prop: 'sl_lb12', width: '250' },
-  { label: '废品13', prop: 'sl_lb13', width: '250' },
-  { label: '废品14', prop: 'sl_lb14', width: '250' },
-  { label: '废品15', prop: 'sl_lb15', width: '250' },
-  { label: '废品16', prop: 'sl_lb16', width: '250' },
-  { label: '废品17', prop: 'sl_lb17', width: '250' },
-  { label: '创建用户', prop: 'sys_id', width: '200' },
-]
-const tableData = reactive([])
-const detailData = reactive([
-  {
-    gdbh: '2311736',
-    yjgx: '01-15',
-    gxmc: '包装(圆切)',
-    yjmc: '利群(新)小《降焦改版)',
-    bzcl: '13.00',
-    fgcl: '0.00',
-    mxsl: '2500',
-    jcxs: '1.000',
-    ly: '',
-    dedh: '030002002',
-  },
-])
-const total = ref(0)
-const page = ref(1)
-const limit = ref(10)
-const searchInfo = ref('')
-const params = {
-  date: '',
-  sys_id: '',
-  page: page.value.toString(),
-  limit: limit.value.toString(),
-}
-
-const getTableData = async() => {
-  try {
-    const response = await getOrderVerificationTable(params)
-    if (response.code === 0) {
-      tableData.splice(0, tableData.length, ...response.data.rows)
-    }
-  } catch (error) {
-    console.log(error)
-  }
-}
-
-const handleNodeClick = (node, check) => {
-  if (node.params) {
-    params.date = node.params.date
-    params.sys_id = node.params.sys_id
-    total.value = node.params.total
-    getTableData()
-  }
-}
-
-// 搜索
-function onSearch() {
-
-}
-// ============== 表格控制部分结束 ===============
-
-// 获取需要的字典 可能为空 按需保留
-const setOptions = async() => {
-}
-
-// 获取需要的字典 可能为空 按需保留
-setOptions()
-
-// 多选数据
-const multipleSelection = ref([])
-// 多选
-const handleSelectionChange = (val) => {
-  multipleSelection.value = val
-}
-
-// 批量删除控制标记
-const deleteVisible = ref(false)
-
-// 多选删除
-const onDelete = async() => {
-  const ids = []
-  if (multipleSelection.value.length === 0) {
-    ElMessage({
-      type: 'warning',
-      message: '请选择要删除的数据'
-    })
-    return
-  }
-  multipleSelection.value &&
-    multipleSelection.value.map(item => {
-      ids.push(item.ID)
-    })
-  const res = await deleteCompanyByIds({ ids })
-  if (res.code === 0) {
-    ElMessage({
-      type: 'success',
-      message: '删除成功'
-    })
-    if (tableData.value.length === ids.length && page.value > 1) {
-      page.value--
-    }
-    deleteVisible.value = false
-    getTableData()
-  }
-}
-
-// 行为控制标记(弹窗内部需要增还是改)
-const type = ref('')
-
-// 更新行
-const updateCompanyFunc = async(row) => {
-  const res = await findCompany({ ID: row.ID })
-  type.value = 'update'
-  if (res.code === 0) {
-    formData.value = res.data.recompany
-    dialogFormVisible.value = true
-  }
-}
-
-// 弹窗控制标记
-const dialogFormVisible = ref(false)
-
-// 打开弹窗
-const openDialog = () => {
-  type.value = 'create'
-  dialogFormVisible.value = true
-}
-
-// 关闭弹窗
-const closeDialog = () => {
-  dialogFormVisible.value = false
-  formData.value = {
-    address: '',
-    image: '',
-    name: '',
-  }
-}
-// 弹窗确定
-const enterDialog = async() => {
-  elFormRef.value?.validate(async(valid) => {
-    if (!valid) return
-    let res
-    switch (type.value) {
-      case 'create':
-        res = await createCompany(formData.value)
-        break
-      case 'update':
-        res = await updateCompany(formData.value)
-        break
-      default:
-        res = await createCompany(formData.value)
-        break
-    }
-    if (res.code === 0) {
-      ElMessage({
-        type: 'success',
-        message: '创建/更改成功'
-      })
-      closeDialog()
-      getTableData()
-    }
-  })
-}
-
-// 双击表格操作
-function doubleClick(row, column, event) {
-  console.log(row, column, event)
-  // updateCompanyFunc(row);
-  type.value = 'update'
-  dialogFormVisible.value = true
-}
-
-// 导出excel
-function exportExcel() {
-  console.log('导出到excel')
-}
-
-// 生命周期钩子
-onMounted(async() => {
-})
-</script>
-
-<style scoped>
-.JKWTree-container {
-  display: flex;
-}
-
-.JKWTree-tree {
-  width: 300px;
-  background-color: #fff;
-  padding: 10px;
-  margin-right: 20px;
-}
-
-.JKWTree-tree h3 {
-  font-size: 15px;
-  font-weight: 700;
-  margin: 10px 0;
-}
-
-.JKWTree-content {
-  flex: 1;
-}
-
-/* 选中某行时的背景色 */
-:deep(.el-table__body tr.current-row) > td {
-  background: #ff80ff !important;
-}
-</style>
-<style scoped>
-:deep(.el-table td .cell) {
-  line-height: 20px !important;
-}
-:deep(.el-tabs__header){
-  margin-bottom: 0;
-}
-.search{
-  margin-left: 0px !important;
-  margin-right: 10px !important;
-}
-.bt{
-  margin-left: 2px !important;
-  padding: 3px !important;
-  font-size: 12px;
-}
-.el-tabs__header{
-  margin: 0px !important;
-}
-.gva-table-box{
-  padding: 0px !important;
-}
-.mab{
-  margin-bottom: 5px;
-}
-</style>

+ 1 - 1
src/view/performance/12-orderAccounting/componets/detail.vue

@@ -9,6 +9,7 @@
     <el-form
       inline
       label-position="left"
+      @submit.native.prevent
     >
       <el-form-item
         label="工单编号"
@@ -129,7 +130,6 @@ const updateOrderGy = (data) => {
 import { defineEmits, defineProps, ref } from 'vue'
 import { ElMessage } from 'element-plus'
 
-// const props = defineProps(['isShow', 'gdbh'])
 const props = defineProps({
   isShow: {
     type: Boolean,

+ 99 - 734
src/view/performance/12-orderAccounting/componets/gdcjstj.vue

@@ -2,8 +2,12 @@
   <div style="width: 30vw; height: 50vh">
     <el-input v-model="input" />
     <el-button
-      @click="handlePrint"
-    >打印测试
+      @click="handlePrint1"
+    >按工序打印
+    </el-button>
+    <el-button
+      @click="handlePrint2"
+    >按班组打印
     </el-button>
   </div>
 </template>
@@ -25,737 +29,26 @@ const getOrderSuperLossCount = (params) => {
 </script>
 
 <script setup>
-import { watch, ref, reactive, defineProps, defineEmits } from 'vue'
-
-import { hiprint, defaultElementTypeProvider } from 'vue-plugin-hiprint'
-
-const jsonData = {
-  'panels': [{
-    'index': 0,
-    'name': 1,
-    'paperType': 'A4',
-    'height': 210,
-    'width': 297,
-    'paperHeader': 108,
-    'paperFooter': 551.5151515151515,
-    'printElements': [{
-      'options': {
-        'left': 267.5,
-        'top': 17.5,
-        'height': 22,
-        'width': 294,
-        'title': '工单工序各班组超节损统计表',
-        'coordinateSync': false,
-        'widthHeightSync': false,
-        'fontSize': 12,
-        'color': '#000000',
-        'textAlign': 'center',
-        'textContentVerticalAlign': 'middle',
-        'textContentWrap': 'ellipsis',
-        'qrCodeLevel': 0,
-        'right': 560.5625381469727,
-        'bottom': 39.8125,
-        'vCenter': 413.56253814697266,
-        'hCenter': 28.8125,
-        'fontWeight': 600,
-      }, 'printElementType': { 'title': '这是更新后的元素', 'type': 'text' },
-    }, {
-      'options': {
-        'left': 157.5,
-        'top': 50,
-        'height': 14,
-        'width': 129,
-        'title': '成品代号',
-        'field': 'cpdh',
-        'coordinateSync': false,
-        'widthHeightSync': false,
-        'fontSize': 12,
-        'color': '#000000',
-        'textContentVerticalAlign': 'middle',
-        'textContentWrap': 'ellipsis',
-        'qrCodeLevel': 0,
-        'qid': 'gdbh_1',
-        'right': 285.562557220459,
-        'bottom': 63.99998092651367,
-        'vCenter': 221.06255722045898,
-        'hCenter': 56.99998092651367,
-      }, 'printElementType': { 'title': '这是更新后的元素', 'type': 'text' },
-    }, {
-      'options': {
-        'left': 17.5,
-        'top': 50,
-        'height': 14,
-        'width': 129,
-        'title': '工单编号',
-        'field': 'gdbh',
-        'coordinateSync': false,
-        'widthHeightSync': false,
-        'fontSize': 12,
-        'color': '#000000',
-        'textContentVerticalAlign': 'middle',
-        'textContentWrap': 'ellipsis',
-        'qrCodeLevel': 0,
-      }, 'printElementType': { 'title': '这是更新后的元素', 'type': 'text' },
-    }, {
-      'options': {
-        'left': 305,
-        'top': 50,
-        'height': 14,
-        'width': 507,
-        'title': '成品名称',
-        'field': 'cpmc',
-        'coordinateSync': false,
-        'widthHeightSync': false,
-        'fontSize': 12,
-        'color': '#000000',
-        'textContentVerticalAlign': 'middle',
-        'textContentWrap': 'ellipsis',
-        'qrCodeLevel': 0,
-        'qid': 'cpdh_1',
-        'right': 442.125057220459,
-        'bottom': 63.99998092651367,
-        'vCenter': 377.625057220459,
-        'hCenter': 56.99998092651367,
-      }, 'printElementType': { 'title': '这是更新后的元素', 'type': 'text' },
-    }, {
-      'options': {
-        'left': 15,
-        'top': 67.5,
-        'height': 42,
-        'width': 811.5,
-        'right': 824,
-        'bottom': 106.16669209798177,
-        'vCenter': 418.25,
-        'hCenter': 85.16669209798177,
-        'coordinateSync': false,
-        'widthHeightSync': false,
-      }, 'printElementType': { 'title': '矩形', 'type': 'rect' },
-    }, {
-      'options': {
-        'left': 207.5,
-        'top': 70,
-        'height': 14,
-        'width': 150,
-        'title': '订单数量',
-        'field': 'ddsl',
-        'coordinateSync': false,
-        'widthHeightSync': false,
-        'fontSize': 12,
-        'color': '#000000',
-        'textContentVerticalAlign': 'middle',
-        'textContentWrap': 'ellipsis',
-        'qrCodeLevel': 0,
-        'qid': 'xsddh_1',
-        'right': 365.8750190734863,
-        'bottom': 88.68750476837158,
-        'vCenter': 286.3750190734863,
-        'hCenter': 81.68750476837158,
-      }, 'printElementType': { 'title': '这是更新后的元素', 'type': 'text' },
-    }, {
-      'options': {
-        'left': 357.5,
-        'top': 70,
-        'height': 14,
-        'width': 160,
-        'title': '实际投料',
-        'field': 'sjtl',
-        'coordinateSync': false,
-        'widthHeightSync': false,
-        'fontSize': 12,
-        'color': '#000000',
-        'textContentVerticalAlign': 'middle',
-        'textContentWrap': 'ellipsis',
-        'qrCodeLevel': 0,
-        'qid': 'ddsl_1',
-        'right': 493.3333079020182,
-        'bottom': 88.16669209798177,
-        'vCenter': 425.8333079020182,
-        'hCenter': 81.16669209798177,
-      }, 'printElementType': { 'title': '这是更新后的元素', 'type': 'text' },
-    }, {
-      'options': {
-        'left': 520,
-        'top': 70,
-        'height': 14,
-        'width': 135,
-        'title': '入仓日期',
-        'field': 'rcrq',
-        'coordinateSync': false,
-        'widthHeightSync': false,
-        'fontSize': 12,
-        'color': '#000000',
-        'textContentVerticalAlign': 'middle',
-        'textContentWrap': 'ellipsis',
-        'qrCodeLevel': 0,
-        'qid': 'sstl_1',
-        'right': 654.1666412353516,
-        'bottom': 89.0000254313151,
-        'vCenter': 586.6666412353516,
-        'hCenter': 82.0000254313151,
-      }, 'printElementType': { 'title': '这是更新后的元素', 'type': 'text' },
-    }, {
-      'options': {
-        'left': 22.5,
-        'top': 70,
-        'height': 14,
-        'width': 172.5,
-        'title': '销售订单号',
-        'field': 'xsddh',
-        'coordinateSync': false,
-        'widthHeightSync': false,
-        'fontSize': 12,
-        'color': '#000000',
-        'textContentVerticalAlign': 'middle',
-        'textContentWrap': 'ellipsis',
-        'qrCodeLevel': 0,
-        'qid': 'gdbh_1',
-        'right': 195.0000254313151,
-        'bottom': 89.0000254313151,
-        'vCenter': 108.75002543131511,
-        'hCenter': 82.0000254313151,
-      }, 'printElementType': { 'title': '这是更新后的元素', 'type': 'text' },
-    }, {
-      'options': {
-        'left': 657.5,
-        'top': 70,
-        'height': 14,
-        'width': 135,
-        'title': '入仓合计',
-        'field': 'rchj',
-        'coordinateSync': false,
-        'widthHeightSync': false,
-        'fontSize': 12,
-        'color': '#000000',
-        'textContentVerticalAlign': 'middle',
-        'textContentWrap': 'ellipsis',
-        'qrCodeLevel': 0,
-        'qid': 'rcrq_1',
-        'right': 797.4999745686848,
-        'bottom': 87.33335876464844,
-        'vCenter': 729.9999745686848,
-        'hCenter': 80.33335876464844,
-      }, 'printElementType': { 'title': '这是更新后的元素', 'type': 'text' },
-    }, {
-      'options': {
-        'left': 15,
-        'top': 87.5,
-        'height': 9,
-        'width': 810,
-        'right': 106.66666666666667,
-        'bottom': 95.66669209798178,
-        'vCenter': 61.66666666666667,
-        'hCenter': 91.16669209798178,
-        'coordinateSync': false,
-        'widthHeightSync': false,
-        'borderWidth': 0.75,
-      }, 'printElementType': { 'title': '横线', 'type': 'hline' },
-    }, {
-      'options': {
-        'left': 300,
-        'top': 90,
-        'height': 14,
-        'width': 100,
-        'title': '制程废',
-        'field': 'zcf',
-        'coordinateSync': false,
-        'widthHeightSync': false,
-        'fontSize': 12,
-        'color': '#000000',
-        'textContentVerticalAlign': 'middle',
-        'textContentWrap': 'ellipsis',
-        'qrCodeLevel': 0,
-        'qid': 'ltcl_1',
-        'right': 439.5454476096413,
-        'bottom': 101.5000069358132,
-        'vCenter': 387.0454476096413,
-        'hCenter': 94.5000069358132,
-      }, 'printElementType': { 'title': '这是更新后的元素', 'type': 'text' },
-    }, {
-      'options': {
-        'left': 400,
-        'top': 90,
-        'height': 14,
-        'width': 100,
-        'title': '质检废',
-        'field': 'zjf',
-        'coordinateSync': false,
-        'widthHeightSync': false,
-        'fontSize': 12,
-        'color': '#000000',
-        'textContentVerticalAlign': 'middle',
-        'textContentWrap': 'ellipsis',
-        'qrCodeLevel': 0,
-        'qid': 'zcf_1',
-        'right': 504.5454614812677,
-        'bottom': 98.54545454545455,
-        'vCenter': 454.5454614812677,
-        'hCenter': 91.54545454545455,
-      }, 'printElementType': { 'title': '这是更新后的元素', 'type': 'text' },
-    }, {
-      'options': {
-        'left': 202.5,
-        'top': 90,
-        'height': 14,
-        'width': 100,
-        'title': '零头处理',
-        'field': 'ltcl',
-        'coordinateSync': false,
-        'widthHeightSync': false,
-        'fontSize': 12,
-        'color': '#000000',
-        'textContentVerticalAlign': 'middle',
-        'textContentWrap': 'ellipsis',
-        'qrCodeLevel': 0,
-        'qid': 'wff_1',
-        'right': 341.81818875399495,
-        'bottom': 101.5000069358132,
-        'vCenter': 289.31818875399495,
-        'hCenter': 94.5000069358132,
-      }, 'printElementType': { 'title': '这是更新后的元素', 'type': 'text' },
-    }, {
-      'options': {
-        'left': 500,
-        'top': 90,
-        'height': 14,
-        'width': 100,
-        'title': '无形损',
-        'field': 'wxs',
-        'coordinateSync': false,
-        'widthHeightSync': false,
-        'fontSize': 12,
-        'color': '#000000',
-        'textContentVerticalAlign': 'middle',
-        'textContentWrap': 'ellipsis',
-        'qrCodeLevel': 0,
-        'qid': 'zjf_1',
-        'right': 602.500021457672,
-        'bottom': 100.87499999999999,
-        'vCenter': 552.500021457672,
-        'hCenter': 93.87499999999999,
-      }, 'printElementType': { 'title': '这是更新后的元素', 'type': 'text' },
-    }, {
-      'options': {
-        'left': 117.5,
-        'top': 90,
-        'height': 14,
-        'width': 90,
-        'title': '外发废',
-        'field': 'wff',
-        'coordinateSync': false,
-        'widthHeightSync': false,
-        'fontSize': 12,
-        'color': '#000000',
-        'textContentVerticalAlign': 'middle',
-        'textContentWrap': 'ellipsis',
-        'qrCodeLevel': 0,
-        'qid': 'clf_1',
-        'right': 224.99999306418678,
-        'bottom': 100.81818875399503,
-        'vCenter': 177.49999306418678,
-        'hCenter': 93.81818875399503,
-      }, 'printElementType': { 'title': '这是更新后的元素', 'type': 'text' },
-    }, {
-      'options': {
-        'left': 597.5,
-        'top': 90,
-        'height': 14,
-        'width': 114,
-        'title': '目标合格率',
-        'field': 'mbhgl',
-        'coordinateSync': false,
-        'widthHeightSync': false,
-        'fontSize': 12,
-        'color': '#000000',
-        'textContentVerticalAlign': 'middle',
-        'textContentWrap': 'ellipsis',
-        'qrCodeLevel': 0,
-        'qid': 'wxs_1',
-        'right': 728.375021457672,
-        'bottom': 102.12499999999997,
-        'vCenter': 671.375021457672,
-        'hCenter': 95.12499999999997,
-      }, 'printElementType': { 'title': '这是更新后的元素', 'type': 'text' },
-    }, {
-      'options': {
-        'left': 22.5,
-        'top': 90,
-        'height': 14,
-        'width': 95,
-        'title': '材料废',
-        'field': 'clf',
-        'coordinateSync': false,
-        'widthHeightSync': false,
-        'fontSize': 12,
-        'color': '#000000',
-        'textContentVerticalAlign': 'middle',
-        'textContentWrap': 'ellipsis',
-        'qrCodeLevel': 0,
-        'qid': 'xsddh_1',
-        'right': 150.25001907348633,
-        'bottom': 85.25001430511475,
-        'vCenter': 85.75001907348633,
-        'hCenter': 78.25001430511475,
-      }, 'printElementType': { 'title': '这是更新后的元素', 'type': 'text' },
-    }, {
-      'options': {
-        'left': 712.5,
-        'top': 90,
-        'height': 14,
-        'width': 114,
-        'title': '实际合格率',
-        'field': 'sjhgl',
-        'coordinateSync': false,
-        'widthHeightSync': false,
-        'fontSize': 12,
-        'color': '#000000',
-        'textContentVerticalAlign': 'middle',
-        'textContentWrap': 'ellipsis',
-        'qrCodeLevel': 0,
-        'qid': 'mbhgl_1',
-        'right': 820.875021457672,
-        'bottom': 128.37499999999994,
-        'vCenter': 763.875021457672,
-        'hCenter': 121.37499999999996,
-      }, 'printElementType': { 'title': '这是更新后的元素', 'type': 'text' },
-    }, {
-      'options': {
-        'left': 15,
-        'top': 108.5,
-        'height': 442.5,
-        'width': 811.5,
-        'right': 813.6666666666666,
-        'bottom': 153.5000254313151,
-        'vCenter': 413.9166666666667,
-        'hCenter': 135.5000254313151,
-        'field': 'table',
-        'coordinateSync': false,
-        'widthHeightSync': false,
-        'fontSize': 10.5,
-        'tableHeaderRowHeight': 30,
-        'tableFooterRepeat': 'last',
-        'tableHeaderRepeat': 'page',
-        'columns': [[{
-          'width': 109.58270193697071,
-          'title': '印件及工序名称\n',
-          'titleSync': false,
-          'field': 'gxmc',
-          'checked': true,
-          'columnId': 'gxmc',
-          'fixed': false,
-          'rowspan': 1,
-          'colspan': 1,
-          'halign': 'center',
-          'tableQRCodeLevel': 0,
-          'tableSummaryTitle': true,
-          'tableSummaryText': '合计',
-          'tableSummary': '',
-          'tableSummaryAlign': 'right',
-        }, {
-          'width': 53.99363831254071,
-          'title': '工序计划产量',
-          'titleSync': false,
-          'field': 'jhcl',
-          'checked': true,
-          'columnId': 'jhcl',
-          'fixed': false,
-          'rowspan': 1,
-          'colspan': 1,
-          'align': 'right',
-          'halign': 'center',
-          'tableQRCodeLevel': 0,
-          'tableSummaryTitle': true,
-          'tableSummary': '',
-        }, {
-          'width': 53.99363831254071,
-          'title': '工序计划损耗',
-          'titleSync': false,
-          'field': 'jhsh',
-          'checked': true,
-          'columnId': 'jhsh',
-          'fixed': false,
-          'rowspan': 1,
-          'colspan': 1,
-          'align': 'right',
-          'halign': 'center',
-          'tableQRCodeLevel': 0,
-          'tableSummaryTitle': false,
-          'tableSummaryColspan': '0',
-          'tableSummary': 'sum',
-          'tableSummaryAlign': 'right',
-          'tableSummaryNumFormat': '0',
-        }, {
-          'width': 53.99363831254071,
-          'title': '制程废',
-          'titleSync': false,
-          'field': 'zcf',
-          'checked': true,
-          'columnId': 'zcf',
-          'fixed': false,
-          'rowspan': 1,
-          'colspan': 1,
-          'align': 'right',
-          'halign': 'center',
-          'tableQRCodeLevel': 0,
-          'tableSummaryTitle': false,
-          'tableSummary': 'sum',
-          'tableSummaryAlign': 'right',
-          'tableSummaryNumFormat': '0',
-        }, {
-          'width': 53.99363831254071,
-          'title': '质检废',
-          'titleSync': false,
-          'field': 'zjf',
-          'checked': true,
-          'columnId': 'zjf',
-          'fixed': false,
-          'rowspan': 1,
-          'colspan': 1,
-          'align': 'right',
-          'halign': 'center',
-          'tableQRCodeLevel': 0,
-          'tableSummaryTitle': false,
-          'tableSummary': 'sum',
-          'tableSummaryAlign': 'right',
-          'tableSummaryNumFormat': '0',
-        }, {
-          'width': 53.99363831254071,
-          'title': '无形损',
-          'titleSync': false,
-          'field': 'wxs',
-          'checked': true,
-          'columnId': 'wxs',
-          'fixed': false,
-          'rowspan': 1,
-          'colspan': 1,
-          'align': 'right',
-          'halign': 'center',
-          'tableQRCodeLevel': 0,
-          'tableSummaryTitle': false,
-          'tableSummary': 'sum',
-          'tableSummaryAlign': 'right',
-          'tableSummaryNumFormat': '0',
-        }, {
-          'width': 53.99363831254071,
-          'title': '报废合计',
-          'titleSync': false,
-          'field': 'bfhj',
-          'checked': true,
-          'columnId': 'bfhj',
-          'fixed': false,
-          'rowspan': 1,
-          'colspan': 1,
-          'align': 'right',
-          'halign': 'center',
-          'tableQRCodeLevel': 0,
-          'tableSummaryTitle': false,
-          'tableSummary': 'sum',
-          'tableSummaryAlign': 'right',
-          'tableSummaryNumFormat': '0',
-        }, {
-          'width': 53.99363831254071,
-          'title': '工序节损数',
-          'titleSync': false,
-          'field': 'jss',
-          'checked': true,
-          'columnId': 'jss',
-          'fixed': false,
-          'rowspan': 1,
-          'colspan': 1,
-          'align': 'right',
-          'halign': 'center',
-          'tableQRCodeLevel': 0,
-          'tableSummaryTitle': false,
-          'tableSummary': 'sum',
-          'tableSummaryAlign': 'right',
-          'tableSummaryNumFormat': '0',
-        }, {
-          'width': 53.99363831254071,
-          'title': '占投料报废率',
-          'titleSync': false,
-          'field': 'tlbfl',
-          'checked': true,
-          'columnId': 'tlbfl',
-          'fixed': false,
-          'rowspan': 1,
-          'colspan': 1,
-          'align': 'right',
-          'halign': 'center',
-          'tableQRCodeLevel': 0,
-          'tableSummaryTitle': true,
-          'tableSummary': '',
-        }, {
-          'width': 53.99363831254071,
-          'title': '工序目标报废率',
-          'titleSync': false,
-          'field': 'mbbfl',
-          'checked': true,
-          'columnId': 'mbbfl',
-          'fixed': false,
-          'rowspan': 1,
-          'colspan': 1,
-          'align': 'right',
-          'halign': 'center',
-          'tableQRCodeLevel': 0,
-          'tableSummaryTitle': true,
-          'tableSummary': '',
-        }, {
-          'width': 53.99363831254071,
-          'title': '工序实际报废率',
-          'titleSync': false,
-          'field': 'sjbfl',
-          'checked': true,
-          'columnId': 'sjbfl',
-          'fixed': false,
-          'rowspan': 1,
-          'colspan': 1,
-          'align': 'right',
-          'halign': 'center',
-          'tableQRCodeLevel': 0,
-          'tableSummaryTitle': true,
-          'tableSummary': '',
-        }, {
-          'width': 53.99363831254071,
-          'title': '超节损承担比例',
-          'titleSync': false,
-          'field': 'cdbl',
-          'checked': true,
-          'columnId': 'cdbl',
-          'fixed': false,
-          'rowspan': 1,
-          'colspan': 1,
-          'align': 'right',
-          'halign': 'center',
-          'tableQRCodeLevel': 0,
-          'tableSummaryTitle': true,
-          'tableSummary': '',
-        }, {
-          'width': 53.99363831254071,
-          'title': '工序超节损金额',
-          'titleSync': false,
-          'field': 'cjsje',
-          'checked': true,
-          'columnId': 'cjsje',
-          'fixed': false,
-          'rowspan': 1,
-          'colspan': 1,
-          'align': 'right',
-          'halign': 'center',
-          'tableQRCodeLevel': 0,
-          'tableSummaryTitle': false,
-          'tableSummary': 'sum',
-          'tableSummaryAlign': 'right',
-          'tableSummaryNumFormat': '1',
-        }, {
-          'width': 53.99363831254071,
-          'title': '主管确认',
-          'titleSync': false,
-          'field': 'zgqr',
-          'checked': true,
-          'columnId': 'zgqr',
-          'fixed': false,
-          'rowspan': 1,
-          'colspan': 1,
-          'align': 'right',
-          'halign': 'center',
-          'tableQRCodeLevel': 0,
-          'tableSummaryTitle': true,
-          'tableSummary': '',
-        }]],
-      },
-      'printElementType': {
-        'title': '空白表格',
-        'type': 'table',
-        'editable': true,
-        'columnDisplayEditable': true,
-        'columnDisplayIndexEditable': true,
-        'columnTitleEditable': true,
-        'columnResizable': true,
-        'columnAlignEditable': true,
-        'isEnableEditField': true,
-        'isEnableContextMenu': true,
-        'isEnableInsertRow': true,
-        'isEnableDeleteRow': true,
-        'isEnableInsertColumn': true,
-        'isEnableDeleteColumn': true,
-        'isEnableMergeCell': true,
-      },
-    }, {
-      'options': {
-        'left': 301.5,
-        'top': 562.5,
-        'height': 19.5,
-        'width': 120,
-        'title': '复核:',
-        'coordinateSync': false,
-        'widthHeightSync': false,
-        'fontSize': 12,
-        'qrCodeLevel': 0,
-        'right': 292.5,
-        'bottom': 583.5000171661377,
-        'vCenter': 232.5,
-        'hCenter': 573.7500171661377,
-      }, 'printElementType': { 'title': '文本', 'type': 'text' },
-    }, {
-      'options': {
-        'left': 18,
-        'top': 562.5,
-        'height': 19.5,
-        'width': 120,
-        'title': '会签:',
-        'coordinateSync': false,
-        'widthHeightSync': false,
-        'fontSize': 12,
-        'qrCodeLevel': 0,
-        'right': 132,
-        'bottom': 582.0000171661377,
-        'vCenter': 72,
-        'hCenter': 572.2500171661377,
-      }, 'printElementType': { 'title': '文本', 'type': 'text' },
-    }, {
-      'options': {
-        'left': 643.5,
-        'top': 564,
-        'height': 19.5,
-        'width': 120,
-        'title': '审批:',
-        'coordinateSync': false,
-        'widthHeightSync': false,
-        'fontSize': 12,
-        'qrCodeLevel': 0,
-        'right': 190.5,
-        'bottom': 504.0000171661377,
-        'vCenter': 130.5,
-        'hCenter': 494.2500171661377,
-      }, 'printElementType': { 'title': '文本', 'type': 'text' },
-    }],
-    'paperNumberLeft': 816,
-    'paperNumberTop': 555,
-    'paperNumberContinue': true,
-    'backgroundColor': '#ffffff',
-    'orient': 2,
-    'overPrintOptions': { 'content': '', 'opacity': 0.7, 'type': 1 },
-    'watermarkOptions': {
-      'content': '',
-      'rotate': 25,
-      'timestamp': true,
-      'format': 'YYYY-MM-DD HH:mm',
-      'fillStyle': 'rgba(184, 184, 184, 0.3)',
-      'fontSize': '14px',
-      'width': 200,
-      'height': 200,
-    },
-  }],
-}
-const props = defineProps(['gdbh'])
-const input = ref(props?.['gdbh'])
+import { ref, defineProps } from 'vue'
+import { hiprint } from 'vue-plugin-hiprint'
+import { ElMessage } from 'element-plus'
+import template1 from './template-gx.json'
+import template2 from './template-bz.json'
 
-// 引入后使用示例
-hiprint.init()
-// 下列方法都是没有拖拽设计页面的, 相当于代码模式, 使用代码设计页面
-// 想要实现拖拽设计页面,请往下看 '自定义设计'
-const hiprintTemplate = new hiprint.PrintTemplate({ template: jsonData })
+// const props = defineProps(['gdbh'])
+const props = defineProps({
+  gdbh: {
+    type: String,
+    default: '',
+  }
+})
+const input = ref(props['gdbh'])
 
-const handlePrint = async() => {
+const handlePrint1 = async() => {
+  // 引入后初始化
+  hiprint.init()
+  const template = JSON.parse(JSON.stringify(template1))
+  const hiprintTemplate = new hiprint.PrintTemplate({ template })
   const params = {
     order: input.value,
     type: '1',
@@ -764,13 +57,20 @@ const handlePrint = async() => {
   if (res['code'] === 0) {
     console.log(res['data'])
     const { data } = res
+    if (!data) {
+      ElMessage({
+        type: 'info',
+        message: res['msg']
+      })
+      return
+    }
     const tableData = {
       'gdbh': data['Gd_gdbh'],
       'cpdh': data['成品代号'],
       'cpmc': data['成品名称'],
       'xsddh': data['销售订单号'],
-      'ddsl': data['订单数量'],
-      'sjtl': data['实际投料'],
+      'ddsl': `${parseFloat(data['订单数量']).toFixed(4)} 万张`,
+      'sjtl': `${parseFloat(data['实际投料']).toFixed(4)} 万张`,
       'rcrq': data['warehousing_date'],
       'rchj': data['warehousing_num'],
       'clf': data['material_waste'],
@@ -781,8 +81,15 @@ const handlePrint = async() => {
       'wxs': data['intangible_loss'],
       'mbhgl': data['target_rate'],
       'sjhgl': data['real_rate'],
+      'total1': data['total']['plan_loss'],
+      'total2': data['total']['total_fp'],
+      'total3': data['total']['waste_quality'],
+      'total4': data['total']['waste_intangible'],
+      'total5': data['total']['total_waste'],
+      'total6': data['total']['loss'],
+      // 'total7': data['total'][''],
       'table': data['gy_data'].map(item => ({
-        'gxmc': `${item.Gy0_yjno}-${item.Gy0_gxh}-${item.Gy0_gxmc}-${item.Add_gxmc}`,
+        'gxmc': `${item.Gy0_yjno}${item.Gy0_gxh === '' ? '' : '-' + item.Gy0_gxh}${item.Gy0_gxmc === '' ? '' : '-' + item.Gy0_gxmc}${item.Add_gxmc === '' ? '' : '-' + item.Add_gxmc}`.substring(0, 20),
         'jhcl': item['Gy0_计划接货数'],
         'jhsh': item['Gy0_计划损耗'],
         'zcf': item['total_fp'],
@@ -798,6 +105,64 @@ const handlePrint = async() => {
         'zgqr': item[''],
       })),
     }
+    console.log(tableData)
+    hiprintTemplate.print(tableData)
+  }
+}
+
+const handlePrint2 = async() => {
+  // 引入后初始化
+  hiprint.init()
+  const template = JSON.parse(JSON.stringify(template2))
+  const hiprintTemplate = new hiprint.PrintTemplate({ template })
+  const params = {
+    order: input.value,
+    type: '2',
+  }
+  const res = await getOrderSuperLossCount(params)
+  if (res['code'] === 0) {
+    console.log(res['data'])
+    const { data } = res
+    if (!data) {
+      ElMessage({
+        type: 'info',
+        message: res['msg']
+      })
+      return
+    }
+    const tableData = {
+      'gdbh': data['Gd_gdbh'],
+      'cpmc': data['成品名称'],
+      'sjtl': parseFloat(data['实际投料']).toFixed(2) + '万张',
+      'rcs': data['warehousing_num'],
+      'wg': data['warehousing_date'],
+      'clf': data['材料废'],
+      'wff': data['外发废'],
+      'ltcl': data['零头处理'],
+      'zcf': data[''],
+      'zjf': data['工单质检废'],
+      'wxs': data[''],
+      'mbhgl': data['target_rate'],
+      'sjhgl': data['real_rate'],
+      'plan_loss': data['total']['plan_loss'],
+      'total_fp': data['total']['total_fp'],
+      'waste_quality': data['total']['waste_quality'],
+      'waste_intangible': data['total']['waste_intangible'],
+      'total_jsj': '',
+      'table': data['gy_data'].map(item => ({
+        'bzcy': item['member'],
+        'yjgx': item['sczl_gxmc'].substring(0, 20),
+        'cl': item['total_cl'],
+        'jhsh': item['计划损耗'],
+        'zcfp': item['sczl_zcfp'],
+        'zjf': item['waste_quality'],
+        'wxsft': item['intangible_loss'],
+        'jssl': item['loss'],
+        'cdbl': item['超节损承担比例'],
+        'jsj': `<span style="color: red;">${item['loss'] ? item['loss'] : ''}</span>`,
+      })),
+    }
+    console.log(tableData)
     hiprintTemplate.print(tableData)
   }
 }

+ 250 - 0
src/view/performance/12-orderAccounting/componets/hjfpfb.vue

@@ -0,0 +1,250 @@
+<template>
+  <el-dialog
+    :model-value="modelValue"
+    title="核检废品日统计"
+    fullscreen
+    destroy-on-close
+    :before-close="() => emits('update:modelValue', false )"
+  >
+    <el-container>
+      <!-- 按钮部分 -->
+      <el-header height="90px">
+        <div>
+          <el-button
+            type="primary"
+            size="large"
+            @click="handleExcel"
+          >导出到Excel
+          </el-button>
+          <el-button
+            type="primary"
+            size="large"
+            @click="() => emits('update:modelValue', false )"
+          >退出
+          </el-button>
+        </div>
+
+        <div style="margin-top: 10px;">
+          <el-form
+            :inline="true"
+            :model="form"
+            @submit.prevent
+          >
+            <el-form-item label="工单编号">
+              <el-input
+                v-model="form.gdbh"
+                style="width: 100px;"
+              />
+              <el-button
+                type="primary"
+                :loading="isLoading"
+                style="margin-left: 1px;"
+                @click="handleSearch"
+              >刷新
+              </el-button>
+            </el-form-item>
+
+            <el-form-item label="印件名称">
+              <el-input
+                v-model="form.yjmc"
+                readonly
+                style="width: 200px;"
+              />
+            </el-form-item>
+
+            <el-form-item label="投料量">
+              <el-input
+                v-model="form.tll"
+                readonly
+                style="width: 100px;"
+              />
+            </el-form-item>
+
+            <el-form-item label="总废品">
+              <el-input
+                v-model="form.zfp"
+                readonly
+                style="width: 100px;"
+              />
+            </el-form-item>
+
+            <el-form-item label="实际合格率">
+              <el-input
+                v-model="form.sjhgl"
+                readonly
+                style="width:100px;"
+              />
+            </el-form-item>
+          </el-form>
+
+        </div>
+
+      </el-header>
+
+      <el-container>
+        <el-aside width="400px">
+          <el-table
+            ref="multipleTable"
+            height="70vh"
+            :data="tableData"
+            row-key="ID"
+            highlight-current-row
+            border
+            show-overflow-tooltip
+            :row-style="{ height: '20px' }"
+            :cell-style="{ padding: '0px' }"
+            :header-row-style="{ height: '20px' }"
+            :header-cell-style="{ padding: '0px' }"
+          >
+            <!-- 循环渲染表格列 -->
+            <el-table-column
+              v-for="column in tableColumns"
+              :key="column.prop"
+              :prop="column.prop"
+              :label="column.label"
+              :width="column.width"
+            />
+          </el-table>
+        </el-aside>
+        <el-main>
+          <div
+            ref="echart"
+            style="height: 100%; width: 100%;"
+          />
+        </el-main>
+      </el-container>
+
+    </el-container>
+  </el-dialog>
+</template>
+
+<script>
+export default {
+  name: 'Hjfpfb',
+}
+
+// 3.1工单核检废品分布
+import service from '@/utils/request'
+export const getWasteDistribution = (params) => {
+  return service({
+    url: '/mes_server/work_order_verification/wasteDistribution',
+    method: 'get',
+    params
+  })
+}
+</script>
+
+<script setup>
+import * as echarts from 'echarts'
+import { nextTick, onMounted, onUnmounted, ref, shallowRef, defineProps, defineEmits } from 'vue'
+
+const props = defineProps(['modelValue', 'val'])
+const emits = defineEmits(['update:modelValue'])
+const form = ref({
+  gdbh: props['val'],
+})
+
+const tableColumns = ref([
+  { label: '废品分类', prop: 'fpfl', width: '130' },
+  { label: '数量', prop: 'sl', width: '70' },
+  { label: '报损率', prop: 'bsl', width: '100' },
+  { label: '废品占比', prop: 'fpzb', width: '100' },
+])
+const tableData = ref([])
+const isLoading = ref(false)
+
+const handleExcel = () => {
+}
+
+const handleSearch = async() => {
+  const order = form.value['gdbh']
+  const res = await getWasteDistribution({ order })
+  if (res['code'] === 0) {
+    console.log(res['data'])
+    form.value = {
+      ...form.value,
+      gdbh: res['data']['Gd_gdbh'],
+      yjmc: res['data']['yj_yjmc'],
+      tll: res['data']['实际投料'],
+      zfp: res['data']['wasteTotal'],
+      sjhgl: res['data']['passRate'],
+    }
+    tableData.value = res['data']['wasteData'].map(item => ({
+      fpfl: item['type'],
+      sl: item['num'],
+      bsl: item['lossesRate'],
+      fpzb: item['wasteRate'],
+    }))
+
+    const data = []
+    res['data']['rightData'].forEach(element => {
+      data.push({ name: element['type'], value: parseFloat(element['rate']) })
+    })
+    setOptions(data)
+  }
+}
+
+const chart = shallowRef(null)
+const echart = ref(null)
+const initChart = () => {
+  chart.value = echarts.init(echart.value /* 'macarons' */)
+}
+const setOptions = (data) => {
+  chart.value.setOption({
+    // title: {
+    //   text: 'Weather Statistics',
+    //   subtext: 'Fake Data',
+    //   left: 'center'
+    // },
+    // tooltip: {
+    //   trigger: 'item',
+    //   formatter: '{a} <br/>{b} : {c} ({d}%)'
+    // },
+    legend: {
+      orient: 'vertical',
+      right: 20,
+      top: 'center',
+      textStyle: {
+        fontSize: 14,
+      },
+      selectedMode: false, // 设置图例禁止点击
+      data: data.map(item => item['name'])
+    },
+    series: [
+      {
+        type: 'pie',
+        radius: '65%',
+        center: ['40%', '50%'],
+        data: data,
+        label: {
+          show: true,
+          formatter: '{b}: {d}%',
+          fontSize: 14,
+        },
+      },
+
+    ]
+  })
+}
+
+onMounted(async() => {
+  await nextTick()
+  initChart()
+})
+
+onUnmounted(() => {
+  if (!chart.value) {
+    return
+  }
+  chart.value.dispose()
+  chart.value = null
+})
+
+</script>
+
+  <style scoped>
+
+  :deep(.el-table td .cell) {
+    line-height: 20px !important;
+  }
+  </style>

+ 4 - 1
src/view/performance/12-orderAccounting/componets/khsz.vue

@@ -17,7 +17,10 @@
       @click="emits('update:modelValue', false )"
     >退出</el-button>
 
-    <el-form inline>
+    <el-form
+      inline
+      @submit.native.prevent
+    >
       <el-form-item label="工单编号">
         <el-input
           v-model="input"

Plik diff jest za duży
+ 17 - 0
src/view/performance/12-orderAccounting/componets/template-bz.json


Plik diff jest za duży
+ 16 - 0
src/view/performance/12-orderAccounting/componets/template-gx.json


+ 21 - 2
src/view/performance/12-orderAccounting/index.vue

@@ -8,6 +8,7 @@
             ref="elSearchFormRef"
             inline
             class="demo-form-inline"
+            @submit.native.prevent
           >
             <el-form-item>
               <el-input
@@ -70,6 +71,14 @@
               >工单质检废品统计
               </el-button>
 
+              <el-button
+                type="primary"
+                icon="edit"
+                class="bt"
+                @click="()=>{dialogHjfpfb = true}"
+              >核检废品分布
+              </el-button>
+
             </el-form-item>
           </el-form>
 
@@ -119,6 +128,13 @@
               v-model="dialogGdzjfptj"
               :val="gdbh"
             />
+
+            <!-- 核检废品分布 -->
+            <Hjfpfb
+              v-if="dialogHjfpfb"
+              v-model="dialogHjfpfb"
+              :val="gdbh"
+            />
           </div>
 
         </div>
@@ -225,6 +241,7 @@ import Gxclhc from '@/view/performance/12-orderAccounting/componets/gxclhc.vue'
 import Gongdanzhijianfeipintongji
   from '@/view/performance/09-workOrderVerification/componets/gongdanzhijianfeipintongji.vue'
 import Detail from '@/view/performance/12-orderAccounting/componets/detail.vue'
+import Hjfpfb from './componets/hjfpfb.vue'
 
 // 弹窗
 const dialogGdcjstj = ref(false)
@@ -233,6 +250,7 @@ const dialogKhsz = ref(false)
 const dialogXzgdtl = ref(false)
 const dialogGxclhc = ref(false)
 const dialogGdzjfptj = ref(false)
+const dialogHjfpfb = ref(false)
 
 // 侧边栏数据
 const treeData = ref([])
@@ -285,7 +303,7 @@ const tableCols1 = [
   { label: '工单计划损耗', prop: '工单计划损耗', width: '120' },
   { label: '工单制程废', prop: '', width: '100' },
   { label: '工单检验废', prop: '工单质检废', width: '100' },
-  { label: '年月', prop: '', width: '100' },
+  { label: '年月', prop: 'date', width: '100' },
 ]
 const tableCols2 = [
   { label: '工单编号', prop: 'Gy0_gdbh', width: '100' },
@@ -310,7 +328,7 @@ const searchInfo = ref('')
 
 watch(currentRow, (value, oldValue, onCleanup) => {
   gdbh.value = value?.['Gd_gdbh']
-  date.value = value?.['年月']
+  date.value = value?.['date']
 })
 
 // 显示上方表格
@@ -322,6 +340,7 @@ const handleNodeClick = async(node) => {
     tableData1.value = res.data.data.map(item => ({
       ...item,
       csgd: parseFloat(item['target_rate']) - parseFloat(item['real_rate']) > 0 ? '√' : '',
+      date: date,
     }))
     console.log(res.data)
   } else {

+ 27 - 0
src/view/performance/14-overTimePayVerification/index.vue

@@ -81,6 +81,7 @@
               :header-row-style="{ height: '20px' }"
               :header-cell-style="{ padding: '0px' }"
               @cell-dblclick="handleDblclick1"
+			  @row-click="clickybupdate"
               @selection-change="handleSelectionChange"
             >
               <el-table-column
@@ -248,6 +249,31 @@ const handleNodeClick = async(node, check) => {
 }
 
 const handleDblclick1 = async(row) => {
+  // params.code = row.bh
+  // const { date, code } = params
+  // const res = await getDownData({ date, code })
+  // if (res.code === 0) {
+  //   const data = res.data
+  //   let totalPersonalPieceWage = 0
+  //   let totalOvertimeWage = 0
+
+  //   data.forEach(employee => {
+  //     const personalPieceWage = parseFloat(employee['个人计件工资']) || 0
+  //     const overtimeWage = parseFloat(employee['个人加班工资']) || 0
+
+  //     totalPersonalPieceWage += personalPieceWage
+  //     totalOvertimeWage += overtimeWage
+  //   })
+  //   data.push({
+  //     'Gd_cpmc': '合计',
+  //     '个人计件工资': totalPersonalPieceWage.toFixed(2),
+  //     '个人加班工资': totalOvertimeWage.toFixed(2),
+  //   })
+
+  //   tableData2.splice(0, tableData2.length, ...data)
+  // }
+}
+const clickybupdate = async(row) => {
   params.code = row.bh
   const { date, code } = params
   const res = await getDownData({ date, code })
@@ -271,6 +297,7 @@ const handleDblclick1 = async(row) => {
 
     tableData2.splice(0, tableData2.length, ...data)
   }
+  console.log('22')
 }
 
 // 搜索

Plik diff jest za duży
+ 610 - 143
src/view/performance/chejianbaogong.vue


+ 2 - 2
src/view/superAdmin/user/user.vue

@@ -413,11 +413,11 @@ const userInfo = ref({
 const rules = ref({
   userName: [
     { required: true, message: '请输入用户名', trigger: 'blur' },
-    { min: 5, message: '最低5位字符', trigger: 'blur' }
+    { min: 3, message: '最低3位字符', trigger: 'blur' }
   ],
   password: [
     { required: true, message: '请输入用户密码', trigger: 'blur' },
-    { min: 6, message: '最低6位字符', trigger: 'blur' }
+    { min: 0, message: '最低0位字符', trigger: 'blur' }
   ],
   nickName: [
     { required: true, message: '请输入用户昵称', trigger: 'blur' }

+ 18 - 10
src/view/yunyin/shengchanguanli/components/print.vue

@@ -89,7 +89,7 @@ const cp_print_ProductValue = async (e) => {
   }
 }
 
-//打印作业通知单->工单印件及工序列表
+//打印作业通知单->工单印件及工序列表【印件号】【终止工序号】
 const _PrintCodeList = async () => {
   const workOrder = form['gdbh'];
   const PrintCodeList_list = await PrintCodeList({workOrder:workOrder});
@@ -99,8 +99,8 @@ const _PrintCodeList = async () => {
     yjlist.value = PrintCodeList_list.data
     form['yjno'] = PrintCodeList_list.data[0].印件号;
     form['yjmc'] = PrintCodeList_list.data[0].印件名称;
-
     const res = await ProcessCodeList({workOrder:workOrder, yjno: form['yjno']});
+    form['gxh'] = res.data[0]['工序号']
     gxlist.value = res.data
   }
 }
@@ -2606,9 +2606,12 @@ hiprint.init()
 const hiprintTemplate = new hiprint.PrintTemplate({ template: jsondata })
 const _gdlx = ref('')
 const cp_print_handleConfirm = async () => {
+  if(form['yjno'] === '' || form['yjno'] === undefined){
+    ElMessage({type: 'warning',message: '印件资料为空'})
+    return false;
+  }
   let params = {};
-  //2310707
-  //2012127
+  //2310707、2012127
   params.workOrder = form['gdbh'];
   params.PrepareDocument = form['zd'];
   params.examine = form['sh'];
@@ -2616,11 +2619,18 @@ const cp_print_handleConfirm = async () => {
   params.gxh = form['gxh'];
   //调用打印接口【打印作业通知单】
   const print_PrintJobOrder = await PrintJobOrder(params);
-  console.log(print_PrintJobOrder)
-  _gdlx.value =  '★' +print_PrintJobOrder.data['工单类型']
+  // console.log(print_PrintJobOrder)
+  if(print_PrintJobOrder.msg === '未找到物料资料信息'){
+    ElMessage({type: 'warning',message: '未找到物料资料信息'})
+    return false;
+  }
+  if(print_PrintJobOrder.data['工单类型']){
+    _gdlx.value =  '★' +print_PrintJobOrder.data['工单类型']
+  }
 
-  if(print_PrintJobOrder.data === null){
-    ElMessage({type: 'error',message: print_PrintJobOrder.msg})
+  if(print_PrintJobOrder.data === null || print_PrintJobOrder.data === undefined || print_PrintJobOrder.data === ''){
+    ElMessage({type: 'error',message: print_PrintJobOrder.msg});
+    return false;
   }
   // 获取当前日期
   const today = new Date();
@@ -2638,7 +2648,6 @@ const cp_print_handleConfirm = async () => {
     "printcode":print_PrintJobOrder.data['生产批次号'],
     "dysj":currentDate,
     "scpch":print_PrintJobOrder.data['生产批次号'],
-    // "xsddh":print_PrintJobOrder.data['生产批次号'],
     "xsddh":print_PrintJobOrder.data['销售订单号'],
     "khdh":  print_PrintJobOrder.data['客户代码'],
     "khmc":  print_PrintJobOrder.data['客户名称'],
@@ -2684,7 +2693,6 @@ const cp_print_handleConfirm = async () => {
     })),
     "shr":form['sh'],
     "zdr":form['zd']
-
   }
   hiprintTemplate.print(printdata);
   // cp_print_gdlist.value = false;

+ 18 - 18
src/view/yunyin/shengchanguanli/gongdanshengchan.vue

@@ -150,11 +150,11 @@
                         :cell-style="{ padding: '0px' }" :header-row-style="{ height: '0px' }"
                         :header-cell-style="{ padding: '0px' }"
                         style="width: 100%;height: 74vh" border tooltip-effect="dark"
-                        highlight-current-row="true"
                         @row-click="cjpc_tableRowClick"
                         :data="paichengData" row-key="ID"
                         :cell-class-name="cjzcCellClass"
               >
+<!--                highlight-current-row="true"-->
                 <template v-for="(item, idx) in paichengColumns">
                   <el-table-column #default="{ row, column, $index }" align="left" :label="item.label" :width="item.width" >
                     <div v-if="['优先次序', '生产工时', '辅助工时', '班次安排', '排单备注','最早开工时间', '计划开工时间'].includes(item.prop)">
@@ -579,7 +579,7 @@ const bottomTableF = ref({
     { title:'机组', prop: '机组', width: 120, align:'left', },
     { title:'设备编号', prop: '设备编号', width: 120, align:'left', },
     { title:'工序产量', prop: '工序产量', width: 120, align:'left', },
-    { title:'已完成产量', prop: '已完成产量', width: 120, align:'left', },
+    { title:'已完成产量', prop: '产量', width: 120, align:'left', },
     { title:'剩余产量', prop: '剩余产量', width: 120, align:'left', },
     { title:'小时产能', prop: '小时产能', width: 120, align:'left', },
     { title:'产能系数', prop: '产能系数', width: 120, align:'left', },
@@ -600,7 +600,7 @@ const bottomTableF = ref({
     { title:'机组', prop: '机组', width: 120, align:'left', },
     { title:'设备编号', prop: '设备编号', width: 120, align:'left', },
     { title:'工序产量', prop: '工序产量', width: 120, align:'left', },
-    { title:'已完成产量', prop: '已完成产量', width: 120, align:'left', },
+    { title:'已完成产量', prop: '产量', width: 120, align:'left', },
     { title:'剩余产量', prop: '剩余产量', width: 120, align:'left', },
     { title:'小时产能', prop: '小时产能', width: 120, align:'left', },
     { title:'产能系数', prop: '产能系数', width: 120, align:'left', },
@@ -666,6 +666,7 @@ const gdtableRowClick = async (row) => {
 
   if (currentNode.value == "排程中") {
     const pc_scheduleProcess = await scheduleProcess({Gd_gdbh: _Gd_gdbh.value});
+    // console.log(pc_scheduleProcess)
     bottomData.value = pc_scheduleProcess.data;
   }
 
@@ -1074,23 +1075,17 @@ const handleConfirm = async () => {
   //状态
   let statusCode;
   if (status.value === '计划中') {
-    statusCode = "1-计划中";
+    statusCode = "3-计划中";
   } else if (status.value === '生产中') {
     statusCode = "2-生产中";
   }else if (status.value === '已完工') {
-    statusCode = "3-已完工";
+    statusCode = "1-已完工";
   }
   const StatusEditdata = await StatusEdit({workOrder:workOrder,status:statusCode});
   if (StatusEditdata.code === 0) {
-    ElMessage({
-      type: 'success',
-      message: '更新成功'
-    })
+    ElMessage({type: 'success',message: '更新成功'})
   } else {
-    ElMessage({
-      type: 'error',
-      message: '更新失败'
-    })
+    ElMessage({type: 'error',message: '更新失败'})
   }
   onstatuslist.value = false;
 };
@@ -1229,7 +1224,8 @@ const paichengColumns = ref(
     [
       { label: '优先次序', prop: '优先次序', width: '105' },
       { label: '工单编号', prop: '工单编号', width: '100' },
-      { label: '印件名称', prop: '印件名称', width: '220' },
+      // { label: '印件名称', prop: '印件名称', width: '220' },
+      { label: '印件名称', prop: '印件名称', width: '100' },
       { label: '接货数', prop: '接货数', width: '105' },
       { label: '小时产能', prop: '小时产能', width: '100' },
       { label: '生产工时', prop: '生产工时', width: '100' },
@@ -1244,6 +1240,7 @@ const paichengColumns = ref(
     ]
 )
 const handleKeyDown = (event, x, y, prop) => {
+  console.log(event)
   const currentElement = document.getElementById(`input${x}${y}`);
   if (currentElement === null && currentElement === undefined) return
   let move = 0
@@ -1252,6 +1249,7 @@ const handleKeyDown = (event, x, y, prop) => {
       if (x === 0 && y === +y) {
         console.log("排序前的值");
         console.log(paichengData.value);
+
         paichengData.value.sort((a, b) => {
           const priorityA = parseFloat(a['优先次序']);
           const priorityB = parseFloat(b['优先次序']);
@@ -1273,12 +1271,12 @@ const handleKeyDown = (event, x, y, prop) => {
           const hours = date.getHours().toString().padStart(2, '0');
           const minutes = date.getMinutes().toString().padStart(2, '0');
           const seconds = date.getSeconds().toString().padStart(2, '0');
-
           const formattedDate = `${year}-${month}-${day} ${hours}:${minutes}:${seconds}`;
           return formattedDate;
         }
         // 获取第一行数据
         const firstRow = paichengData.value[+y];
+        console.log(firstRow)
         // 初始化上一行的计划完工时间为第一行的计划开工时间
         let prevCompletionTime = new Date(firstRow['计划开工时间']).getTime() / 1000;
         // 遍历每一行数据
@@ -1290,6 +1288,7 @@ const handleKeyDown = (event, x, y, prop) => {
           const finalTimestamp = prevCompletionTime + resultTimestamp;
           // 将计划完工时间赋值到当前行
           row['计划完工时间'] = formatTimestamp(finalTimestamp);
+          // row['计划开工时间'] =formatTimestamp(finalTimestamp);
           // 更新上一行的计划完工时间为当前行的计划完工时间
           prevCompletionTime = finalTimestamp;
 
@@ -1402,6 +1401,7 @@ const _EquipmentSchedulingdata = async ()=>{
   let machine = _machine.value;
   try {
     const EquipmentSchedulingdata = await EquipmentScheduling({machine:machine});
+    console.log(EquipmentSchedulingdata)
     if (EquipmentSchedulingdata.code === 0) {
       paichengData.value = EquipmentSchedulingdata.data
     }
@@ -1576,9 +1576,9 @@ const rowContextMenu = (row) => {
   color: blue !important;
 }
 /*车间设备制程背景粉色*/
-/*:deep(.el-table__body .background-color-column-fen div div div) {*/
-/*  background: #ff80ff !important;*/
-/*}*/
+:deep(.el-table__body .background-color-column-fen div div div) {
+  background: #ff80ff !important;
+}
 /*文字蓝色*/
 :deep(.color-column-lan div) {
   color: red !important;

Plik diff jest za duży
+ 358 - 269
src/view/yunyin/shengchanguanli/gongdanziliao.vue


+ 17 - 17
src/view/yunyin/shengchanguanli/shebeiyunxing.vue

@@ -35,10 +35,10 @@
 				  <el-form-item label="工单编号" prop="name">
 					<el-row :gutter="20">
 					  <el-col :span="6">
-						<el-input v-model="formData.工单编号" :clearable="true"  />							
+						<el-input v-model="formData.工单编号" disabled :clearable="true"  />							
 					  </el-col>
 					  <el-col :span="18">
-						<el-input v-model="formData.产品名称" :clearable="true"  />
+						<el-input v-model="formData.产品名称" disabled :clearable="true"  />
 					  </el-col>
 					</el-row>
 					
@@ -49,12 +49,12 @@
 			  <el-row :gutter="20">
 				<el-col :span="6">
 				 <el-form-item label="印件编号" prop="id">
-				   <el-input v-model="formData.印件编号" :clearable="true"  />
+				   <el-input v-model="formData.印件编号" disabled :clearable="true"  />
 				 </el-form-item>
 				</el-col>
 			  <el-col :span="17">
 				 <el-form-item label="工序名称" prop="name">
-				   <el-input v-model="formData.工序名称" :clearable="true"  />
+				   <el-input v-model="formData.工序名称" disabled :clearable="true"  />
 				 </el-form-item>
 				</el-col>			    
 			  </el-row>
@@ -69,45 +69,45 @@
 <el-row :gutter="1">
 			 
 			 <el-col :span="4">
-			   <el-input v-model="formData.sczl_bh1" :clearable="true"  />
+			   <el-input v-model="formData.sczl_bh1" disabled :clearable="true"  />
 			 </el-col>
 			<el-col :span="4">
-			  <el-input v-model="formData.sczl_bh2" :clearable="true"  />
+			  <el-input v-model="formData.sczl_bh2" disabled :clearable="true"  />
 			</el-col>
 			  <el-col :span="4">			  			
-				<el-input v-model="formData.sczl_bh3" :clearable="true"  />
+				<el-input v-model="formData.sczl_bh3" disabled :clearable="true"  />
 			  </el-col>
 			  
 			 <el-col :span="4">
-				<el-input v-model="formData.sczl_bh4" :clearable="true"  />
+				<el-input v-model="formData.sczl_bh4" disabled :clearable="true"  />
 			  </el-col>
 			  <el-col :span="4">
-				<el-input v-model="formData.sczl_bh5" :clearable="true"  />
+				<el-input v-model="formData.sczl_bh5" disabled :clearable="true"  />
 			  </el-col>
 			  <el-col :span="4">
-				<el-input v-model="formData.sczl_bh6" :clearable="true"  />
+				<el-input v-model="formData.sczl_bh6" disabled :clearable="true"  />
 			  </el-col> 
 		   </el-row>
 		   
 		   <el-row :gutter="1">
 		 
 		 <el-col :span="4">
-		   <el-input v-model="formData.sczl_name1" :clearable="true"  />
+		   <el-input v-model="formData.sczl_name1" disabled :clearable="true"  />
 		 </el-col>
 		<el-col :span="4">
-		  <el-input v-model="formData.sczl_name2" :clearable="true"  />
+		  <el-input v-model="formData.sczl_name2" disabled :clearable="true"  />
 		</el-col>
 		  <el-col :span="4">			  			
-			<el-input v-model="formData.sczl_name3" :clearable="true"  />
+			<el-input v-model="formData.sczl_name3" disabled :clearable="true"  />
 		  </el-col>
 		  <el-col :span="4">
-		  			<el-input v-model="formData.sczl_name4" :clearable="true"  />
+		  			<el-input v-model="formData.sczl_name4" disabled :clearable="true"  />
 		  </el-col>
 		  <el-col :span="4">
-		  			<el-input v-model="formData.sczl_name5" :clearable="true"  />
+		  			<el-input v-model="formData.sczl_name5" disabled :clearable="true"  />
 		  </el-col>
 		  <el-col :span="4">
-		  			<el-input v-model="formData.sczl_name6" :clearable="true"  />
+		  			<el-input v-model="formData.sczl_name6" disabled :clearable="true"  />
 		  </el-col>
 	   </el-row>
                                  		                    
@@ -1626,7 +1626,7 @@ const GetdialogSbyxgl = async () => {
 			let time = new Date();
 			time.setDate(time.getDate() - 0); // 今天的前N天的日期,N自定义
 			titinfo = `${time.getFullYear()}-${time.getMonth() + 1}-${time.getDate()}`;
-			titinfo+='【'+response.data.工单编号+response.data.产品名称+'】'+response.data.工序名称
+			titinfo+='【'+JTMC+response.data.工单编号+response.data.产品名称+'】'+response.data.工序名称
     		let sczl_bhkey=''
     		let sczl_namekey=''
     		if (response.data.班组成员) {

Niektóre pliki nie zostały wyświetlone z powodu dużej ilości zmienionych plików