Browse Source

初步完成追溯页面

zhaoyaxiong 1 year ago
parent
commit
ff487bf23a

+ 7 - 1
ZRAdmin-vue-main/src/api/business/qainspectrecord.js

@@ -11,7 +11,13 @@ export function listQaInspectRecord(query) {
     params: query,
   })
 }
-
+export function reportQaInspectRecord(query) {
+  return request({
+    url: 'business/QaInspectRecord/report',
+    method: 'get',
+    params: query,
+  })
+}
 
 /**
 * 新增质检管理/质检记录表

+ 16 - 3
ZRAdmin-vue-main/src/components/RightToolbar/index.vue

@@ -2,7 +2,7 @@
   <div class="top-right-btn">
     <el-tooltip class="item" effect="dark" content="显隐列" placement="top" v-if="data">
       <el-dropdown :hide-on-click="false" style="margin-right: 10px" trigger="click">
-        <el-button circle icon="menu" />
+        <el-button v-if="columnsShow" circle icon="menu" />
         <template #dropdown>
           <el-dropdown-menu>
             <el-dropdown-item v-for="(item, index) in data" :key="index">
@@ -14,10 +14,10 @@
     </el-tooltip>
 
     <el-tooltip class="item" effect="dark" :content="showSearch ? '隐藏搜索' : '显示搜索'" placement="top">
-      <el-button circle icon="Search" @click="toggleSearch()" />
+      <el-button v-if="showSearchShow" circle icon="Search" @click="toggleSearch()" />
     </el-tooltip>
     <el-tooltip class="item" effect="dark" content="刷新" placement="top">
-      <el-button circle icon="Refresh" @click="refresh()" />
+      <el-button v-if="refreshShow" circle icon="Refresh" @click="refresh()" />
     </el-tooltip>
 
     <!-- <el-tooltip class="item" effect="dark" content="显隐列" placement="top" v-if="data">
@@ -39,6 +39,18 @@ const props = defineProps({
   },
   columns: {
     type: Object
+  },
+  showSearchShow: {
+    type: Boolean,
+    default: true
+  },
+  columnsShow: {
+    type: Boolean,
+    default: true
+  },
+  refreshShow: {
+    type: Boolean,
+    default: true
   }
 })
 
@@ -115,6 +127,7 @@ init()
 .my-el-transfer {
   text-align: center;
 }
+
 .el-dropdown-menu {
   max-height: 400px;
   overflow-y: scroll;

+ 268 - 0
ZRAdmin-vue-main/src/views/Business/Report/index.vue

@@ -0,0 +1,268 @@
+<!--
+ * @Descripttion: (接口管理/SAP交验单记录表/sap_deliver_record)
+ * @version: (1.0)
+ * @Author: (admin)
+ * @Date: (2023-05-10)
+ * @LastEditors: (admin)
+ * @LastEditTime: (2023-05-10)
+-->
+<template>
+  <div>
+    <el-form :model="queryParams" label-position="right" inline ref="queryRef" v-show="showSearch" @submit.prevent
+      size="large">
+      <el-row>
+        <el-form-item label="物料名称" prop="materialName">
+          <el-input v-model="queryParams.materialName" placeholder="请输入" class="z-el-input" clearable
+            @keyup.enter="handleQuery" />
+        </el-form-item>
+        <el-form-item label="物料编码" prop="materialCode">
+          <el-input v-model="queryParams.materialCode" placeholder="请输入" class="z-el-input" clearable
+            @keyup.enter="handleQuery" />
+        </el-form-item>
+        <el-form-item label="BN / SN码" prop="bnSnCode">
+          <el-input v-model="queryParams.bnSnCode" placeholder="请输入" class="z-el-input" clearable
+            @keyup.enter="handleQuery" />
+        </el-form-item>
+        <el-form-item label="规格型号 / 图号" prop="materialSpec">
+          <el-input v-model="queryParams.materialSpec" placeholder="请输入" class="z-el-input" clearable
+            @keyup.enter="handleQuery" />
+        </el-form-item>
+      </el-row>
+      <el-row>
+        <el-form-item label="物料类型" prop="category">
+          <el-select v-model="queryParams.category" placeholder="请选择" clearable style="width:120px" @change="handleQuery">
+            <el-option v-for="dict in options.materialTypeOptions" :key="dict.dictValue" :label="dict.dictLabel"
+              :value="dict.dictValue">
+              <dict-tag :options="options.materialTypeOptions" :value="dict.dictValue" />
+            </el-option>
+          </el-select>
+        </el-form-item>
+        <el-form-item label="关键件标识" prop="keyFlag">
+          <el-select v-model="queryParams.keyFlag" placeholder="请选择" clearable style="width:120px" @change="handleQuery">
+            <el-option v-for="dict in options.keyFlagOptions" :key="dict.dictValue" :label="dict.dictLabel"
+              :value="dict.dictValue">
+              <dict-tag :options="options.keyFlagOptions" :value="dict.dictValue" />
+            </el-option>
+          </el-select>
+        </el-form-item>
+
+        <el-form-item>
+          <el-button icon="search" type="primary" @click="handleQuery">{{ $t('btn.search') }}</el-button>
+          <el-button icon="refresh" @click="resetQuery">{{ $t('btn.reset') }}</el-button>
+        </el-form-item>
+      </el-row>
+    </el-form>
+    <!-- 工具区域 -->
+    <el-row :gutter="10" class="mb8">
+      <el-col :span="1.5">
+        <!-- <el-button type="danger" :disabled="multiple" v-hasPermi="['business:sapdeliverrecord:delete']" plain
+          icon="delete" @click="handleDelete">
+          {{ $t('btn.delete') }}
+        </el-button> -->
+      </el-col>
+      <right-toolbar v-model:showSearch="showSearch" @queryTable="getList" :columns="columns"></right-toolbar>
+    </el-row>
+
+    <!-- 数据区域 -->
+    <el-table :data="dataList" v-loading="loading" ref="table" highlight-current-row @sort-change="sortChange"
+      @selection-change="handleSelectionChange">
+      <el-table-column type="index" label="序号" width="50" align="center" />
+      <el-table-column prop="category" label="物料类型" align="center" :show-overflow-tooltip="true" width="80"
+        v-if="columns.showColumn('category')">
+        <template #default="scope">
+          <dict-tag :options="options.materialTypeOptions" :value="scope.row.category" />
+        </template>
+      </el-table-column>
+      <el-table-column prop="materialCode" label="物料编码" align="center" :show-overflow-tooltip="true" width="150"
+        v-if="columns.showColumn('materialCode')" />
+      <el-table-column prop="bnSnCode" label="BN / SN码" align="center" :show-overflow-tooltip="true" width="150"
+        v-if="columns.showColumn('bnSnCode')" />
+      <el-table-column prop="materialName" label="物料名称" align="center" :show-overflow-tooltip="true"
+        v-if="columns.showColumn('materialName')" />
+      <el-table-column prop="materialSpec" label="规格型号 / 图号" align="center" :show-overflow-tooltip="true"
+        v-if="columns.showColumn('materialSpec')" />
+      <el-table-column prop="keyFlag" label="关键件" align="center" v-if="columns.showColumn('keyFlag')" width="80">
+        <template #default="scope">
+          <el-icon v-if="scope.row.keyFlag" size="large" color="red">
+            <StarFilled />
+          </el-icon>
+          <el-icon v-else />
+        </template>
+      </el-table-column>
+      <el-table-column prop="checkQty" label="合格数量" align="center" v-if="columns.showColumn('checkQty')" width="80" />
+      <el-table-column prop="instoreQty" label="入库数量" align="center" v-if="columns.showColumn('instoreQty')" width="80" />
+      <el-table-column prop="outstoreQty" label="出库数量" align="center" v-if="columns.showColumn('outstoreQty')"
+        width="80" />
+      <el-table-column prop="assQty" label="装配数量" align="center" v-if="columns.showColumn('assQty')" width="80" />
+      <el-table-column label="追溯" align="center" width="400">
+        <template #default="scope">
+          <el-button-group>
+            <el-button plain type="primary" @click="handleReportQa(scope.row)" icon="view">质检</el-button>
+            <el-button plain type="primary" @click="handleReportIn(scope.row)" icon="download"> 入库 </el-button>
+            <el-button plain type="primary" @click="handleReportOut(scope.row)" icon="upload"> 出库 </el-button>
+            <el-button plain type="primary" @click="handleReportAss(scope.row)" icon="setting"> 装配 </el-button>
+            <!-- <el-button plain type="primary" @click="handleReport(scope.row)" icon="clock"> 时间线 </el-button> -->
+          </el-button-group>
+        </template>
+      </el-table-column>
+    </el-table>
+    <pagination class="mt10" background :total="total" v-model:page="queryParams.pageNum"
+      v-model:limit="queryParams.pageSize" @pagination="getList" />
+
+    <!-- 关键件信息追溯对话框 -->
+    <el-dialog :title="title" :lock-scroll="false" v-model="open" width="70%">
+      <QaRecord v-if="openType == 1" :tranceParams="tranceParams" />
+      <InRecord v-if="openType == 2" :tranceParams="tranceParams" />
+      <OutRecord v-if="openType == 3" :tranceParams="tranceParams" />
+      <AssRecord v-if="openType == 4" :tranceParams="tranceParams" />
+    </el-dialog>
+  </div>
+</template>
+
+<script setup name="report">
+
+import { reportQaInspectRecord } from '@/api/business/qainspectrecord.js';
+
+import QaRecord from '@/views/tables/QaRecord'
+import InRecord from '@/views/tables/InstoreRecord'
+import OutRecord from '@/views/tables/OutstoreRecord'
+import AssRecord from '@/views/tables/AssembleRecord'
+
+const { proxy } = getCurrentInstance()
+// 选中id数组数组
+const ids = ref([])
+const single = ref(true)
+const multiple = ref(true)
+const loading = ref(false)
+const showSearch = ref(true)
+const queryParams = reactive({
+  pageNum: 1,
+  pageSize: 10,
+  sort: '',
+  sortType: 'asc',
+})
+const columns = ref([
+  { visible: true, prop: 'category', label: '物料类型' },
+  { visible: true, prop: 'materialCode', label: '物料编码' },
+  { visible: true, prop: 'bnSnCode', label: 'BN / SN码' },
+  { visible: true, prop: 'materialName', label: '物料名称' },
+  { visible: true, prop: 'materialSpec', label: '规格型号 / 图号' },
+  { visible: true, prop: 'keyFlag', label: '关键件' },
+  { visible: true, prop: 'checkQty', label: '质检数量' },
+  { visible: true, prop: 'instoreQty', label: '入库数量' },
+  { visible: true, prop: 'outstoreQty', label: '出库数量' },
+  { visible: true, prop: 'assQty', label: '装配数量' },
+])
+
+const total = ref(0)
+const dataList = ref([])
+const queryRef = ref()
+
+function getList() {
+  loading.value = true
+  reportQaInspectRecord(queryParams).then(res => {
+    const { code, data } = res
+    if (code == 200) {
+      dataList.value = data.result
+      total.value = data.totalNum
+      loading.value = false
+    }
+  })
+}
+
+// 查询
+function handleQuery() {
+  queryParams.pageNum = 1
+  getList()
+}
+
+// 重置查询操作
+function resetQuery() {
+  proxy.resetForm("queryRef")
+  handleQuery()
+}
+
+// 自定义排序
+function sortChange(column) {
+  var sort = undefined
+  var sortType = undefined
+
+  if (column.prop != null && column.order != null) {
+    sort = column.prop
+    sortType = column.order
+
+  }
+  queryParams.sort = sort
+  queryParams.sortType = sortType
+  handleQuery()
+}
+/*************** form操作 ***************/
+const formRef = ref()
+const title = ref("")
+//  1质检  2入库  3出库  4装配
+const openType = ref(0)
+const open = ref(false)
+const tranceParams = reactive({
+  materialCode: undefined,
+  bnSnCode: undefined
+})
+const state = reactive({
+  form: {},
+  options: {
+    keyFlagOptions: [], // 关键件标识字典
+    operationResultOptions: [],// 操作结果字典
+    materialTypeOptions: [],// 物料类型字典
+    qaResultOptions: [],//质检结果字典
+  }
+})
+
+const { form, rules, options } = toRefs(state)
+
+var dictParams = [
+  { dictType: 'my_key_flag', columnName: 'keyFlagOptions' },
+  { dictType: 'my_operation_result', columnName: 'operationResultOptions' },
+  { dictType: 'my_material_type', columnName: 'materialTypeOptions' },
+  { dictType: 'my_qa_result', columnName: 'qaResultOptions' },
+]
+proxy.getDicts(dictParams).then((response) => {
+  response.data.forEach((element) => {
+    state.options[element.columnName] = element.list
+  })
+})
+// 打开dialog
+function handleReportQa(row) {
+  openType.value = 1
+  title.value = "【质检记录】  " + row.materialName
+  tranceParams.materialCode = row.materialCode
+  tranceParams.bnSnCode = row.bnSnCode
+  open.value = true
+}
+function handleReportIn(row) {
+  openType.value = 2
+  title.value = "【入库记录】  " + row.materialName
+  tranceParams.materialCode = row.materialCode
+  tranceParams.bnSnCode = row.bnSnCode
+  open.value = true
+}
+function handleReportOut(row) {
+  openType.value = 3
+  title.value = "【出库记录】  " + row.materialName
+  tranceParams.materialCode = row.materialCode
+  tranceParams.bnSnCode = row.bnSnCode
+  open.value = true
+}
+function handleReportAss(row) {
+  openType.value = 4
+  title.value = "【装配记录】  " + row.materialName
+  tranceParams.materialCode = row.materialCode
+  tranceParams.bnSnCode = row.bnSnCode
+  open.value = true
+}
+// 关闭dialog
+function cancel() {
+  openType.value = 0
+  open.value = false
+}
+
+handleQuery()
+</script>

+ 0 - 21
ZRAdmin-vue-main/src/views/Business/SapDeliverRecord/index.vue

@@ -640,27 +640,6 @@ function handleDelete(row) {
     .catch(() => { })
 }
 
-// 关键件标识字典
-const keyFlagOptions = ref([])
-proxy.getDicts('my_key_flag').then((response) => {
-  keyFlagOptions.value = response.data
-})
-// 操作结果字典
-const operationResultOptions = ref([])
-proxy.getDicts('my_operation_result').then((response) => {
-  operationResultOptions.value = response.data
-})
-// 物料类型字典
-const materialTypeOptions = ref([])
-proxy.getDicts('my_material_type').then((response) => {
-  materialTypeOptions.value = response.data
-})
-// 质检结果字典
-const qaResultOptions = ref([])
-proxy.getDicts('my_qa_result').then((response) => {
-  qaResultOptions.value = response.data
-})
-
 
 handleQuery()
 </script>

+ 152 - 0
ZRAdmin-vue-main/src/views/tables/AssembleRecord.vue

@@ -0,0 +1,152 @@
+<template>
+  <div>
+    <el-row :gutter="10" class="mb8">
+      <right-toolbar :showSearchShow="false" :refreshShow="false" :columns="columns"></right-toolbar>
+    </el-row>
+    <el-table :data="dataList" v-loading="loading" ref="table" highlight-current-row @sort-change="sortChange"
+      @selection-change="handleSelectionChange">
+      <!-- <el-table-column type="selection" width="50" align="center" /> -->
+      <el-table-column type="index" label="序号" width="50" align="center" />
+      <el-table-column prop="assembleId" label="ID" align="center" v-if="columns.showColumn('assembleId')" />
+      <el-table-column prop="bomNo" label="生产令号" align="center" :show-overflow-tooltip="true"
+        v-if="columns.showColumn('bomNo')" />
+      <el-table-column prop="materialCode" label="物料编码" align="center" :show-overflow-tooltip="true"
+        v-if="columns.showColumn('materialCode')" />
+      <el-table-column prop="materialName" label="物料名称" align="center" :show-overflow-tooltip="true"
+        v-if="columns.showColumn('materialName')" />
+      <el-table-column prop="materialSpec" label="规格型号/图号" align="center" :show-overflow-tooltip="true"
+        v-if="columns.showColumn('materialSpec')" />
+      <el-table-column prop="category" label="物料类型" align="center" :show-overflow-tooltip="true"
+        v-if="columns.showColumn('category')">
+        <template #default="scope">
+          <dict-tag :options="options.materialTypeOptions" :value="scope.row.category" />
+        </template>
+      </el-table-column>
+      <el-table-column prop="keyFlag" label="关键件" align="center" v-if="columns.showColumn('keyFlag')">
+        <template #default="scope">
+          <el-icon v-if="scope.row.keyFlag" size="large" color="red">
+            <StarFilled />
+          </el-icon>
+          <el-icon v-else />
+        </template>
+      </el-table-column>
+      <el-table-column prop="bnSnCode" label="BN/SN码" align="center" :show-overflow-tooltip="true"
+        v-if="columns.showColumn('bnSnCode')" />
+      <el-table-column prop="result" label="装配结果" align="center" v-if="columns.showColumn('result')">
+        <template #default="scope">
+          <dict-tag :options="options.operationResultOptions" :value="scope.row.result" />
+        </template>
+      </el-table-column>
+      <el-table-column prop="picture" label="实物图片" align="center" v-if="columns.showColumn('picture')">
+        <template #default="scope">
+          <el-image preview-teleported :hide-on-click-modal="true" lazy class="table-td-thumb" fit="contain"
+            :src="scope.row.picture" :preview-src-list="[scope.row.picture]">
+            <div>
+              <el-icon :size="15">
+                <document />
+              </el-icon>
+            </div>
+          </el-image>
+        </template>
+      </el-table-column>
+      <el-table-column prop="assembleQty" label="装配数量" align="center" v-if="columns.showColumn('assembleQty')" />
+      <el-table-column prop="remark" label="备注" align="center" :show-overflow-tooltip="true"
+        v-if="columns.showColumn('remark')" />
+      <el-table-column prop="createBy" label="创建人" align="center" v-if="columns.showColumn('createBy')" />
+      <el-table-column prop="createTime" label="创建时间" align="center" width="160"
+        v-if="columns.showColumn('createTime')" />
+      <el-table-column prop="updateBy" label="更新人" align="center" v-if="columns.showColumn('updateBy')" />
+      <el-table-column prop="updateTime" label="更新时间" align="center" width="160"
+        v-if="columns.showColumn('updateTime')" />
+      <!-- <el-table-column label="操作" align="center" width="160">
+                                      <template #default="scope">
+                                        <el-button v-hasPermi="['business:outassemblerecord:edit']" type="success" plain icon="edit" title="编辑"
+                                          @click="handleUpdate(scope.row)"></el-button>
+                                        <el-button v-hasPermi="['business:outassemblerecord:delete']" type="danger" plain icon="delete" title="删除"
+                                          @click="handleDelete(scope.row)"></el-button>
+                                      </template>
+                                    </el-table-column> -->
+    </el-table>
+    <pagination class="mt10" background :total="total" v-model:page="queryParams.pageNum"
+      v-model:limit="queryParams.pageSize" @pagination="getList" />
+  </div>
+</template>
+<script setup>
+import { listOutAssembleRecord } from '@/api/business/outassemblerecord.js';
+const { proxy } = getCurrentInstance()
+const props = defineProps({
+  tranceParams: {
+    type: Object
+  }
+})
+const queryParams = reactive({
+  pageNum: 1,
+  pageSize: 10,
+  sort: '',
+  sortType: 'asc',
+})
+const loading = ref(false)
+const total = ref(0)
+const dataList = ref([])
+
+const columns = ref([
+  { visible: false, prop: 'assembleId', label: 'ID' },
+  { visible: true, prop: 'bomNo', label: '生产令号' },
+  { visible: true, prop: 'materialCode', label: '物料编码' },
+  { visible: false, prop: 'materialName', label: '物料名称' },
+  { visible: true, prop: 'materialSpec', label: '物料规格' },
+  { visible: true, prop: 'category', label: '物料类型' },
+  { visible: true, prop: 'keyFlag', label: '关键件' },
+  { visible: true, prop: 'bnSnCode', label: 'BN / SN码' },
+  { visible: true, prop: 'result', label: '装配结果' },
+  { visible: true, prop: 'picture', label: '实物图片' },
+  { visible: true, prop: 'assembleQty', label: '装配数量' },
+  { visible: true, prop: 'createBy', label: '创建人' },
+  { visible: true, prop: 'createTime', label: '创建时间' },
+  { visible: false, prop: 'updateBy', label: '更新人' },
+  { visible: false, prop: 'updateTime', label: '更新时间' },
+  { visible: false, prop: 'remark', label: '备注' },
+])
+const state = reactive({
+  form: {},
+  options: {
+    keyFlagOptions: [], // 关键件标识字典
+    operationResultOptions: [],// 操作结果字典
+    materialTypeOptions: [],// 物料类型字典
+    qaResultOptions: [],//质检结果字典
+  }
+})
+
+const { form, rules, options } = toRefs(state)
+
+var dictParams = [
+  { dictType: 'my_key_flag', columnName: 'keyFlagOptions' },
+  { dictType: 'my_operation_result', columnName: 'operationResultOptions' },
+  { dictType: 'my_material_type', columnName: 'materialTypeOptions' },
+  { dictType: 'my_qa_result', columnName: 'qaResultOptions' },
+]
+proxy.getDicts(dictParams).then((response) => {
+  response.data.forEach((element) => {
+    state.options[element.columnName] = element.list
+  })
+})
+function getList() {
+  loading.value = true
+  listOutAssembleRecord(queryParams).then(res => {
+    const { code, data } = res
+    if (code == 200) {
+      dataList.value = data.result
+      total.value = data.totalNum
+      loading.value = false
+    }
+  })
+}
+function handleQuery() {
+  queryParams.pageNum = 1
+  queryParams.materialCode = props.tranceParams.materialCode
+  queryParams.bnSnCode = props.tranceParams.bnSnCode
+  getList()
+}
+handleQuery()
+</script>
+<style></style>

+ 148 - 0
ZRAdmin-vue-main/src/views/tables/InstoreRecord.vue

@@ -0,0 +1,148 @@
+<template>
+  <div>
+    <el-row :gutter="10" class="mb8">
+      <right-toolbar :showSearchShow="false" :refreshShow="false" :columns="columns"></right-toolbar>
+    </el-row>
+    <el-table :data="dataList" v-loading="loading" ref="table" highlight-current-row @sort-change="sortChange"
+      @selection-change="handleSelectionChange">
+      <!-- <el-table-column type="selection" width="50" align="center" /> -->
+      <!-- <el-table-column type="index" label="序号" width="50" align="center" /> -->
+      <el-table-column prop="inStoreId" label="ID" align="center" v-if="columns.showColumn('inStoreId')" />
+      <el-table-column prop="inStoreNo" label="入库记录单号" align="center" :show-overflow-tooltip="true"
+        v-if="columns.showColumn('inStoreNo')" />
+      <el-table-column prop="deliverNo" label="交验单号" align="center" :show-overflow-tooltip="true"
+        v-if="columns.showColumn('deliverNo')" />
+      <el-table-column prop="bomNo" label="生产令号" align="center" :show-overflow-tooltip="true"
+        v-if="columns.showColumn('bomNo')" />
+      <el-table-column prop="inspectNo" label="质检记录单号" align="center" :show-overflow-tooltip="true"
+        v-if="columns.showColumn('inspectNo')" />
+      <el-table-column prop="materialCode" label="物料编码" align="center" :show-overflow-tooltip="true"
+        v-if="columns.showColumn('materialCode')" />
+      <el-table-column prop="materialName" label="物料名称" align="center" :show-overflow-tooltip="true"
+        v-if="columns.showColumn('materialName')" />
+      <el-table-column prop="materialSpec" label="规格型号 / 图号" align="center" min-width="100" :show-overflow-tooltip="true"
+        v-if="columns.showColumn('materialSpec')" />
+      <el-table-column prop="category" label="物料类型" align="center" :show-overflow-tooltip="true" width="80"
+        v-if="columns.showColumn('category')">
+        <template #default="scope">
+          <dict-tag :options="options.materialTypeOptions" :value="scope.row.category" />
+        </template>
+      </el-table-column>
+      <el-table-column prop="keyFlag" label="关键件" align="center" v-if="columns.showColumn('keyFlag')" width="80">
+        <template #default="scope">
+          <el-icon v-if="scope.row.keyFlag == 1" size="large" color="red">
+            <StarFilled />
+          </el-icon>
+          <el-icon v-else />
+        </template>
+      </el-table-column>
+      <el-table-column prop="bnSnCode" label="BN / SN码" align="center" :show-overflow-tooltip="true"
+        v-if="columns.showColumn('bnSnCode')" />
+      <el-table-column prop="checkQty" label="合格数量" align="center" v-if="columns.showColumn('checkQty')" width="80" />
+      <el-table-column prop="inStoreQty" label="入库数量" align="center" v-if="columns.showColumn('inStoreQty')" width="80" />
+      <el-table-column prop="result" label="入库结果" align="center" v-if="columns.showColumn('result')" width="80">
+        <template #default="scope">
+          <dict-tag :options="options.operationResultOptions" :value="scope.row.result" />
+        </template>
+      </el-table-column>
+      <el-table-column prop="rowNo" label="交验单行项目" align="center" v-if="columns.showColumn('rowNo')" />
+      <el-table-column prop="qty" label="交验单数量" align="center" v-if="columns.showColumn('qty')" />
+
+      <el-table-column prop="remark" label="备注" align="center" :show-overflow-tooltip="true"
+        v-if="columns.showColumn('remark')" />
+      <el-table-column prop="createBy" label="创建人" align="center" v-if="columns.showColumn('createBy')" />
+      <el-table-column prop="createTime" label="创建时间" align="center" width="160"
+        v-if="columns.showColumn('createTime')" />
+      <el-table-column prop="updateBy" label="更新人" align="center" v-if="columns.showColumn('updateBy')" />
+      <el-table-column prop="updateTime" label="更新时间" align="center" width="160"
+        v-if="columns.showColumn('updateTime')" />
+    </el-table>
+    <pagination class="mt10" background :total="total" v-model:page="queryParams.pageNum"
+      v-model:limit="queryParams.pageSize" @pagination="getList" />
+  </div>
+</template>
+
+<script setup>
+import { listInInstoreRecord } from '@/api/business/ininstorerecord.js';
+const { proxy } = getCurrentInstance()
+const props = defineProps({
+  tranceParams: {
+    type: Object
+  }
+})
+const queryParams = reactive({
+  pageNum: 1,
+  pageSize: 10,
+  sort: '',
+  sortType: 'asc',
+})
+const loading = ref(false)
+const total = ref(0)
+const dataList = ref([])
+
+const columns = ref([
+  { visible: false, prop: 'inStoreId', label: 'ID' },
+  { visible: false, prop: 'inStoreNo', label: '入库记录单号' },
+  { visible: true, prop: 'deliverNo', label: '交验单号' },
+  { visible: true, prop: 'bomNo', label: '生产令号' },
+  { visible: false, prop: 'inspectNo', label: '质检记录单号' },
+  { visible: true, prop: 'materialCode', label: '物料编码' },
+  { visible: false, prop: 'materialName', label: '物料名称' },
+  { visible: true, prop: 'materialSpec', label: '物料规格' },
+  { visible: true, prop: 'category', label: '物料类型' },
+  { visible: true, prop: 'keyFlag', label: '关键件' },
+  { visible: true, prop: 'bnSnCode', label: 'BN / SN码' },
+  { visible: true, prop: 'checkQty', label: '合格数量' },
+  { visible: true, prop: 'inStoreQty', label: '入库数量' },
+  { visible: true, prop: 'result', label: '入库结果' },
+  { visible: true, prop: 'createBy', label: '创建人' },
+  { visible: true, prop: 'createTime', label: '创建时间' },
+  { visible: false, prop: 'updateBy', label: '更新人' },
+  { visible: false, prop: 'updateTime', label: '更新时间' },
+  { visible: false, prop: 'remark', label: '备注' },
+  { visible: false, prop: 'rowNo', label: '交验单行项目' },
+  { visible: false, prop: 'qty', label: '交验单数量' },
+])
+const state = reactive({
+  form: {},
+  options: {
+    keyFlagOptions: [], // 关键件标识字典
+    operationResultOptions: [],// 操作结果字典
+    materialTypeOptions: [],// 物料类型字典
+    qaResultOptions: [],//质检结果字典
+  }
+})
+
+const { form, rules, options } = toRefs(state)
+
+var dictParams = [
+  { dictType: 'my_key_flag', columnName: 'keyFlagOptions' },
+  { dictType: 'my_operation_result', columnName: 'operationResultOptions' },
+  { dictType: 'my_material_type', columnName: 'materialTypeOptions' },
+  { dictType: 'my_qa_result', columnName: 'qaResultOptions' },
+]
+proxy.getDicts(dictParams).then((response) => {
+  response.data.forEach((element) => {
+    state.options[element.columnName] = element.list
+  })
+})
+function getList() {
+  loading.value = true
+  listInInstoreRecord(queryParams).then(res => {
+    const { code, data } = res
+    if (code == 200) {
+      dataList.value = data.result
+      total.value = data.totalNum
+      loading.value = false
+    }
+  })
+}
+function handleQuery() {
+  queryParams.pageNum = 1
+  queryParams.materialCode = props.tranceParams.materialCode
+  queryParams.bnSnCode = props.tranceParams.bnSnCode
+  getList()
+}
+handleQuery()
+</script>
+<style></style>

+ 132 - 0
ZRAdmin-vue-main/src/views/tables/OutstoreRecord.vue

@@ -0,0 +1,132 @@
+<template>
+  <div>
+    <el-row :gutter="10" class="mb8">
+      <right-toolbar :showSearchShow="false" :refreshShow="false" :columns="columns"></right-toolbar>
+    </el-row>
+    <el-table :data="dataList" v-loading="loading" ref="table" highlight-current-row @sort-change="sortChange"
+      @selection-change="handleSelectionChange">
+      <!-- <el-table-column type="selection" width="50" align="center" /> -->
+      <!-- <el-table-column type="index" label="序号" width="50" align="center" /> -->
+      <el-table-column prop="outStoreId" label="ID" align="center" v-if="columns.showColumn('outStoreId')" />
+      <el-table-column prop="outSotreNo" label="出库记录单号" align="center" :show-overflow-tooltip="true"
+        v-if="columns.showColumn('outSotreNo')" />
+      <el-table-column prop="bomNo" label="生产令号" align="center" :show-overflow-tooltip="true"
+        v-if="columns.showColumn('bomNo')" />
+      <el-table-column prop="materialCode" label="物料编码" align="center" :show-overflow-tooltip="true"
+        v-if="columns.showColumn('materialCode')" />
+      <el-table-column prop="materialName" label="物料名称" align="center" :show-overflow-tooltip="true"
+        v-if="columns.showColumn('materialName')" />
+      <el-table-column prop="materialSpec" label="规格型号 / 图号" align="center" :show-overflow-tooltip="true"
+        v-if="columns.showColumn('materialSpec')" />
+      <el-table-column prop="category" label="物料类型" align="center" :show-overflow-tooltip="true"
+        v-if="columns.showColumn('category')">
+        <template #default="scope">
+          <dict-tag :options="options.materialTypeOptions" :value="scope.row.category" />
+        </template></el-table-column>
+      <el-table-column prop="keyFlag" label="关键件" align="center" v-if="columns.showColumn('keyFlag')">
+        <template #default="scope">
+          <el-icon v-if="scope.row.keyFlag" size="large" color="red">
+            <StarFilled />
+          </el-icon>
+          <el-icon v-else />
+        </template>
+      </el-table-column>
+      <el-table-column prop="bnSnCode" label="BN/SN码" align="center" :show-overflow-tooltip="true"
+        v-if="columns.showColumn('bnSnCode')" />
+      <el-table-column prop="result" label="出库结果" align="center" v-if="columns.showColumn('result')">
+        <template #default="scope">
+          <dict-tag :options="options.operationResultOptions" :value="scope.row.result" />
+        </template></el-table-column>
+      <el-table-column prop="outStoreQty" label="出库数量" align="center" v-if="columns.showColumn('outStoreQty')" />
+      <el-table-column prop="createBy" label="创建人" align="center" v-if="columns.showColumn('createBy')" />
+      <el-table-column prop="createTime" label="创建时间" align="center" width="160"
+        v-if="columns.showColumn('createTime')" />
+      <el-table-column prop="updateBy" label="更新人" align="center" v-if="columns.showColumn('updateBy')" />
+      <el-table-column prop="updateTime" label="更新时间" align="center" width="160"
+        v-if="columns.showColumn('updateTime')" />
+      <el-table-column prop="remark" label="备注" align="center" :show-overflow-tooltip="true"
+        v-if="columns.showColumn('remark')" />
+    </el-table>
+    <pagination class="mt10" background :total="total" v-model:page="queryParams.pageNum"
+      v-model:limit="queryParams.pageSize" @pagination="getList" />
+  </div>
+</template>
+<script setup>
+import { listOutOutstoreRecord } from '@/api/business/outoutstorerecord.js';
+const { proxy } = getCurrentInstance()
+const props = defineProps({
+  tranceParams: {
+    type: Object
+  }
+})
+const queryParams = reactive({
+  pageNum: 1,
+  pageSize: 10,
+  sort: '',
+  sortType: 'asc',
+})
+const loading = ref(false)
+const total = ref(0)
+const dataList = ref([])
+
+const columns = ref([
+  { visible: false, prop: 'outStoreId', label: 'ID' },
+  { visible: false, prop: 'outSotreNo', label: '出库记录单号' },
+  { visible: true, prop: 'bomNo', label: '生产令号' },
+  { visible: true, prop: 'materialCode', label: '物料编码' },
+  { visible: false, prop: 'materialName', label: '物料名称' },
+  { visible: true, prop: 'materialSpec', label: '规格型号 / 图号' },
+  { visible: true, prop: 'category', label: '物料类型' },
+  { visible: true, prop: 'keyFlag', label: '关键件标识' },
+  { visible: true, prop: 'bnSnCode', label: 'BN / SN码' },
+  { visible: true, prop: 'result', label: '出库结果' },
+  { visible: true, prop: 'outStoreQty', label: '出库数量' },
+  { visible: true, prop: 'createBy', label: '创建人' },
+  { visible: true, prop: 'createTime', label: '创建时间' },
+  { visible: false, prop: 'updateBy', label: '更新人' },
+  { visible: false, prop: 'updateTime', label: '更新时间' },
+  { visible: false, prop: 'remark', label: '备注' },
+])
+const state = reactive({
+  form: {},
+  options: {
+    keyFlagOptions: [], // 关键件标识字典
+    operationResultOptions: [],// 操作结果字典
+    materialTypeOptions: [],// 物料类型字典
+    qaResultOptions: [],//质检结果字典
+  }
+})
+
+const { form, rules, options } = toRefs(state)
+
+var dictParams = [
+  { dictType: 'my_key_flag', columnName: 'keyFlagOptions' },
+  { dictType: 'my_operation_result', columnName: 'operationResultOptions' },
+  { dictType: 'my_material_type', columnName: 'materialTypeOptions' },
+  { dictType: 'my_qa_result', columnName: 'qaResultOptions' },
+]
+proxy.getDicts(dictParams).then((response) => {
+  response.data.forEach((element) => {
+    state.options[element.columnName] = element.list
+  })
+})
+function getList() {
+  loading.value = true
+  listOutOutstoreRecord(queryParams).then(res => {
+    const { code, data } = res
+    if (code == 200) {
+      dataList.value = data.result
+      total.value = data.totalNum
+      loading.value = false
+    }
+  })
+}
+function handleQuery() {
+  queryParams.pageNum = 1
+  queryParams.materialCode = props.tranceParams.materialCode
+  queryParams.bnSnCode = props.tranceParams.bnSnCode
+  getList()
+}
+handleQuery()
+</script>
+<style></style>

+ 147 - 0
ZRAdmin-vue-main/src/views/tables/QaRecord.vue

@@ -0,0 +1,147 @@
+<template>
+  <div>
+    <el-row :gutter="10" class="mb8">
+      <right-toolbar :showSearchShow="false" :refreshShow="false" :columns="columns"></right-toolbar>
+    </el-row>
+    <el-table :data="dataList" v-loading="loading" ref="table" highlight-current-row>
+      <!-- <el-table-column type="index" label="序号" width="50" align="center" /> -->
+      <el-table-column prop="inspectId" label="ID" align="center" v-if="columns.showColumn('inspectId')" />
+      <el-table-column prop="inspectNo" label="质检记录单号" align="center" :show-overflow-tooltip="true" width="120"
+        v-if="columns.showColumn('inspectNo')" />
+      <el-table-column prop="deliverNo" label="交验单号" align="center" :show-overflow-tooltip="true" width="150"
+        v-if="columns.showColumn('deliverNo')" />
+      <el-table-column prop="bomNo" label="生产令号" align="center" :show-overflow-tooltip="true" width="100"
+        v-if="columns.showColumn('bomNo')" />
+      <el-table-column prop="rowNo" label="交验单行项目" align="center" v-if="columns.showColumn('rowNo')" width="100" />
+      <el-table-column prop="category" label="物料类型" align="center" :show-overflow-tooltip="true" width="80"
+        v-if="columns.showColumn('category')">
+        <template #default="scope">
+          <dict-tag :options="options.materialTypeOptions" :value="scope.row.category" />
+        </template>
+      </el-table-column>
+      <el-table-column prop="materialCode" label="物料编码" align="center" :show-overflow-tooltip="true" width="150"
+        v-if="columns.showColumn('materialCode')" />
+      <el-table-column prop="materialName" label="物料名称" align="center" :show-overflow-tooltip="true"
+        v-if="columns.showColumn('materialName')" />
+      <el-table-column prop="materialSpec" label="规格型号 / 图号" align="center" :show-overflow-tooltip="true" width="150"
+        v-if="columns.showColumn('materialSpec')" />
+      <el-table-column prop="keyFlag" label="关键件" align="center" v-if="columns.showColumn('keyFlag')" width="60">
+        <template #default="scope">
+          <el-icon v-if="scope.row.keyFlag == 1" size="large" color="red">
+            <StarFilled />
+          </el-icon>
+          <el-icon v-else />
+        </template>
+      </el-table-column>
+      <el-table-column prop="bnSnCode" label="BN / SN码" align="center" :show-overflow-tooltip="true" width="150"
+        v-if="columns.showColumn('bnSnCode')" />
+      <el-table-column prop="qty" label="交验单数量" align="center" v-if="columns.showColumn('qty')" />
+      <el-table-column prop="checkQty" label="合格数量" align="center" v-if="columns.showColumn('checkQty')" width="80" />
+      <el-table-column prop="result" label="质检结果" align="center" :show-overflow-tooltip="true" width="80"
+        v-if="columns.showColumn('result')">
+        <template #default="scope">
+          <dict-tag :options="options.qaResultOptions" :value="scope.row.result" />
+        </template>
+      </el-table-column>
+      <el-table-column prop="inspectedBy" label="质检人" align="center" :show-overflow-tooltip="true"
+        v-if="columns.showColumn('inspectedBy')" />
+      <el-table-column prop="inspectTime" label="质检时间" align="center" :show-overflow-tooltip="true" width="160"
+        v-if="columns.showColumn('inspectTime')" />
+      <el-table-column prop="createBy" label="创建人" align="center" v-if="columns.showColumn('createBy')" width="80" />
+      <el-table-column prop="createTime" label="创建时间" align="center" width="160"
+        v-if="columns.showColumn('createTime')" />
+      <el-table-column prop="updateBy" label="更新人" align="center" v-if="columns.showColumn('updateBy')" />
+      <el-table-column prop="updateTime" label="更新时间" align="center" width="160"
+        v-if="columns.showColumn('updateTime')" />
+      <el-table-column prop="remark" label="备注" align="center" :show-overflow-tooltip="true"
+        v-if="columns.showColumn('remark')" />
+    </el-table>
+    <pagination class="mt10" background :total="total" v-model:page="queryParams.pageNum"
+      v-model:limit="queryParams.pageSize" @pagination="getList" />
+  </div>
+</template>
+
+<script setup>
+import { listQaInspectRecord } from '@/api/business/qainspectrecord.js';
+const { proxy } = getCurrentInstance()
+const props = defineProps({
+  tranceParams: {
+    type: Object
+  }
+})
+const queryParams = reactive({
+  pageNum: 1,
+  pageSize: 10,
+  sort: '',
+  sortType: 'asc',
+})
+const loading = ref(false)
+const total = ref(0)
+const dataList = ref([])
+
+const columns = ref([
+  { visible: false, prop: 'inspectId', label: 'ID' },
+  { visible: false, prop: 'inspectNo', label: '质检记录单号' },
+  { visible: true, prop: 'deliverNo', label: '交验单号' },
+  { visible: true, prop: 'bomNo', label: '生产令号' },
+  { visible: false, prop: 'rowNo', label: '交验单行项目' },
+  { visible: true, prop: 'category', label: '物料类型' },
+  { visible: true, prop: 'materialCode', label: '物料编码' },
+  { visible: false, prop: 'materialName', label: '物料名称' },
+  { visible: true, prop: 'materialSpec', label: '规格型号/图号' },
+  { visible: true, prop: 'keyFlag', label: '关键件' },
+  { visible: true, prop: 'bnSnCode', label: 'BN/SN码' },
+  { visible: false, prop: 'qty', label: '交验单数量' },
+  { visible: true, prop: 'checkQty', label: '合格数量' },
+  { visible: true, prop: 'result', label: '质检结果' },
+  { visible: true, prop: 'inspectedBy', label: '质检人' },
+  { visible: true, prop: 'inspectTime', label: '质检时间' },
+  { visible: false, prop: 'createBy', label: '创建人' },
+  { visible: false, prop: 'createTime', label: '创建时间' },
+  { visible: false, prop: 'updateBy', label: '更新人' },
+  { visible: false, prop: 'updateTime', label: '更新时间' },
+  { visible: false, prop: 'remark', label: '备注' },
+])
+const state = reactive({
+  form: {},
+  options: {
+    keyFlagOptions: [], // 关键件标识字典
+    operationResultOptions: [],// 操作结果字典
+    materialTypeOptions: [],// 物料类型字典
+    qaResultOptions: [],//质检结果字典
+  }
+})
+
+const { form, rules, options } = toRefs(state)
+
+var dictParams = [
+  { dictType: 'my_key_flag', columnName: 'keyFlagOptions' },
+  { dictType: 'my_operation_result', columnName: 'operationResultOptions' },
+  { dictType: 'my_material_type', columnName: 'materialTypeOptions' },
+  { dictType: 'my_qa_result', columnName: 'qaResultOptions' },
+]
+proxy.getDicts(dictParams).then((response) => {
+  response.data.forEach((element) => {
+    state.options[element.columnName] = element.list
+  })
+})
+function getList() {
+  loading.value = true
+  listQaInspectRecord(queryParams).then(res => {
+    const { code, data } = res
+    if (code == 200) {
+      dataList.value = data.result
+      total.value = data.totalNum
+      loading.value = false
+    }
+  })
+}
+function handleQuery() {
+  queryParams.pageNum = 1
+  queryParams.materialCode = props.tranceParams.materialCode
+  queryParams.bnSnCode = props.tranceParams.bnSnCode
+  getList()
+}
+handleQuery()
+</script>
+<style></style>