su 1 年間 前
コミット
6aa6f0d5aa

+ 433 - 0
src/view/job/job/job.vue

@@ -0,0 +1,433 @@
+<template>
+  <div>
+    <el-container>
+      <el-aside width="200px">
+        <div class="JKWTree-tree">
+          <h3>工种定额及比例管理</h3>
+          <el-tree :data="treeData" :props="defaultProps" @node-click="handleNodeClick"></el-tree>
+        </div>
+      </el-aside>
+      <el-container>
+        <el-main>
+          <div class="gva-search-box">
+            <el-form ref="elSearchFormRef" :inline="true" :model="searchInfo" class="demo-form-inline" :rules="searchRule" @keyup.enter="onSubmit">
+              <el-form-item label="创建日期" prop="createdAt">
+                <template #label>
+        <span>
+          创建日期
+          <el-tooltip content="搜索范围是开始日期(包含)至结束日期(不包含)">
+            <el-icon><QuestionFilled /></el-icon>
+          </el-tooltip>
+        </span>
+                </template>
+                <el-date-picker v-model="searchInfo.startCreatedAt" type="datetime" placeholder="开始日期" :disabled-date="time=> searchInfo.endCreatedAt ? time.getTime() > searchInfo.endCreatedAt.getTime() : false"></el-date-picker>
+                —
+                <el-date-picker v-model="searchInfo.endCreatedAt" type="datetime" placeholder="结束日期" :disabled-date="time=> searchInfo.startCreatedAt ? time.getTime() < searchInfo.startCreatedAt.getTime() : false"></el-date-picker>
+              </el-form-item>
+              <el-form-item>
+                <el-button type="primary" icon="search" @click="onSubmit">查询</el-button>
+                <el-button icon="refresh" @click="onReset">重置</el-button>
+              </el-form-item>
+            </el-form>
+          </div>
+          <div class="gva-table-box">
+            <div class="gva-btn-list">
+			  <el-button type="primary" icon="plus" @click="">导出到excel</el-button>
+            </div>
+            <el-table
+                ref="multipleTable"
+                style="width: 100%"
+                tooltip-effect="dark"
+                :data="tableData"
+                row-key="ID"
+                @selection-change="handleSelectionChange"
+            >
+              <el-table-column align="left" label="设备编号" prop="address" width="120" />
+              <el-table-column align="left" label="设备名称" prop="image" width="120" />
+              <el-table-column align="left" label="生产工序" prop="name" width="120" />
+			  <el-table-column align="left" label="日定额" prop="address" width="120" />
+			  <el-table-column align="left" label="千件工价" prop="image" width="120" />
+			  <el-table-column align="left" label="机长" prop="name" width="120" />
+			  <el-table-column align="left" label="副机" prop="address" width="120" />
+			  <el-table-column align="left" label="调墨" prop="image" width="120" />
+			  <el-table-column align="left" label="二手" prop="name" width="120" />
+			  <el-table-column align="left" label="飞达" prop="address" width="120" />
+			  <el-table-column align="left" label="辅助" prop="image" width="120" />
+			  <el-table-column align="left" label="放卷" prop="name" width="120" />
+			  <el-table-column align="left" label="分切1" prop="address" width="120" />
+			  <el-table-column align="left" label="分切2" prop="image" width="120" />
+			  <el-table-column align="left" label="检验" prop="name" width="120" />
+			  <el-table-column align="left" label="使用部门" prop="address" width="120" />
+			  <el-table-column align="left" label="设备编组" prop="image" width="120" />
+			  <el-table-column align="left" label="创建用户" prop="name" width="120" />
+			  <el-table-column align="left" label="创建时间" prop="address" width="120" />
+			  <el-table-column align="left" label="修改时间" prop="image" width="120" />
+			  <el-table-column align="left" label="UNIQID" prop="name" width="120" >
+              </el-table-column>
+            </el-table>
+            <div class="gva-pagination">
+              <el-pagination
+                  layout="total, sizes, prev, pager, next, jumper"
+                  :current-page="page"
+                  :page-size="pageSize"
+                  :page-sizes="[10, 30, 50, 100]"
+                  :total="total"
+                  @current-change="handleCurrentChange"
+                  @size-change="handleSizeChange"
+              />
+            </div>
+          </div>
+          <el-dialog v-model="dialogFormVisible" :before-close="closeDialog" :title="type==='create'?'添加':'修改'" destroy-on-close>
+            <el-scrollbar height="500px">
+              <el-form :model="formData" label-position="right" ref="elFormRef" :rules="rule" label-width="80px">
+                <el-form-item label="address字段:"  prop="address" >
+                  <el-input v-model="formData.address" :clearable="true"  placeholder="请输入address字段" />
+                </el-form-item>
+                <el-form-item label="image字段:"  prop="image" >
+                  <el-input v-model="formData.image" :clearable="true"  placeholder="请输入image字段" />
+                </el-form-item>
+                <el-form-item label="name字段:"  prop="name" >
+                  <el-input v-model="formData.name" :clearable="true"  placeholder="请输入name字段" />
+                </el-form-item>
+              </el-form>
+            </el-scrollbar>
+            <template #footer>
+              <div class="dialog-footer">
+                <el-button @click="closeDialog">取 消</el-button>
+                <el-button type="primary" @click="enterDialog">确 定</el-button>
+              </div>
+            </template>
+          </el-dialog>
+
+          <el-dialog v-model="detailShow" style="width: 800px" lock-scroll :before-close="closeDetailShow" title="查看详情" destroy-on-close>
+            <el-scrollbar height="550px">
+              <el-descriptions column="1" border>
+                <el-descriptions-item label="address字段">
+                  {{ formData.address }}
+                </el-descriptions-item>
+                <el-descriptions-item label="image字段">
+                  {{ formData.image }}
+                </el-descriptions-item>
+                <el-descriptions-item label="name字段">
+                  {{ formData.name }}
+                </el-descriptions-item>
+              </el-descriptions>
+            </el-scrollbar>
+          </el-dialog>
+        </el-main>
+      </el-container>
+    </el-container>
+  </div>
+</template>
+
+<script setup>
+import {
+  createCompany,
+  deleteCompany,
+  deleteCompanyByIds,
+  updateCompany,
+  findCompany,
+  getCompanyList
+} from '@/api/company'
+
+// 全量引入格式化工具 请按需保留
+import { getDictFunc, formatDate, formatBoolean, filterDict, ReturnArrImg, onDownloadFile } from '@/utils/format'
+import { ElMessage, ElMessageBox } from 'element-plus'
+import { ref, reactive } from 'vue'
+
+defineOptions({
+    name: 'Company'
+})
+
+const treeData=ref([{
+  label: '设备定额及分配参数设置',
+  children: [{
+    label: '胶印车间'
+  },{
+    label: '凹印车间'
+  },{
+    label: '丝印车间'
+  },{
+    label: '烫模车间'
+  },{
+    label: '检验车间'
+  },{
+    label: '研发中心'
+  }]
+}])
+const handleNodeClick = (node,check) => {
+  //存放当前节点的nodeId
+  console.log(node,check);
+
+}
+// 自动化生成的字典(可能为空)以及字段
+const formData = ref({
+        address: '',
+        image: '',
+        name: '',
+        })
+
+
+// 验证规则
+const rule = reactive({
+})
+
+const searchRule = reactive({
+  createdAt: [
+    { validator: (rule, value, callback) => {
+      if (searchInfo.value.startCreatedAt && !searchInfo.value.endCreatedAt) {
+        callback(new Error('请填写结束日期'))
+      } else if (!searchInfo.value.startCreatedAt && searchInfo.value.endCreatedAt) {
+        callback(new Error('请填写开始日期'))
+      } else if (searchInfo.value.startCreatedAt && searchInfo.value.endCreatedAt && (searchInfo.value.startCreatedAt.getTime() === searchInfo.value.endCreatedAt.getTime() || searchInfo.value.startCreatedAt.getTime() > searchInfo.value.endCreatedAt.getTime())) {
+        callback(new Error('开始日期应当早于结束日期'))
+      } else {
+        callback()
+      }
+    }, trigger: 'change' }
+  ],
+})
+
+const elFormRef = ref()
+const elSearchFormRef = ref()
+
+// =========== 表格控制部分 ===========
+const page = ref(1)
+const total = ref(0)
+const pageSize = ref(10)
+const tableData = ref([])
+const searchInfo = ref({})
+
+// 重置
+const onReset = () => {
+  searchInfo.value = {}
+  getTableData()
+}
+
+// 搜索
+const onSubmit = () => {
+  elSearchFormRef.value?.validate(async(valid) => {
+    if (!valid) return
+    page.value = 1
+    pageSize.value = 10
+    getTableData()
+  })
+}
+
+// 分页
+const handleSizeChange = (val) => {
+  pageSize.value = val
+  getTableData()
+}
+
+// 修改页面容量
+const handleCurrentChange = (val) => {
+  page.value = val
+  getTableData()
+}
+
+// 查询
+const getTableData = async() => {
+  const table = await getCompanyList({ page: page.value, pageSize: pageSize.value, ...searchInfo.value })
+  if (table.code === 0) {
+    tableData.value = table.data.list
+    total.value = table.data.total
+    page.value = table.data.page
+    pageSize.value = table.data.pageSize
+  }
+}
+
+getTableData()
+
+// ============== 表格控制部分结束 ===============
+
+// 获取需要的字典 可能为空 按需保留
+const setOptions = async () =>{
+}
+
+// 获取需要的字典 可能为空 按需保留
+setOptions()
+
+
+// 多选数据
+const multipleSelection = ref([])
+// 多选
+const handleSelectionChange = (val) => {
+    multipleSelection.value = val
+}
+
+// 删除行
+const deleteRow = (row) => {
+    ElMessageBox.confirm('确定要删除吗?', '提示', {
+        confirmButtonText: '确定',
+        cancelButtonText: '取消',
+        type: 'warning'
+    }).then(() => {
+            deleteCompanyFunc(row)
+        })
+    }
+
+
+// 批量删除控制标记
+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 deleteCompanyFunc = async (row) => {
+    const res = await deleteCompany({ ID: row.ID })
+    if (res.code === 0) {
+        ElMessage({
+                type: 'success',
+                message: '删除成功'
+            })
+            if (tableData.value.length === 1 && page.value > 1) {
+            page.value--
+        }
+        getTableData()
+    }
+}
+
+// 弹窗控制标记
+const dialogFormVisible = ref(false)
+
+
+// 查看详情控制标记
+const detailShow = ref(false)
+
+
+// 打开详情弹窗
+const openDetailShow = () => {
+  detailShow.value = true
+}
+
+
+// 打开详情
+const getDetails = async (row) => {
+	openDetailShow()
+  // 打开弹窗
+  // const res = await findCompany({ ID: row.ID })
+  // if (res.code === 0) {
+  //   formData.value = res.data.recompany
+  //   openDetailShow()
+  // }
+}
+
+
+// 关闭详情弹窗
+const closeDetailShow = () => {
+  detailShow.value = false
+  formData.value = {
+          address: '',
+          image: '',
+          name: '',
+          }
+}
+
+
+// 打开弹窗
+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()
+              }
+      })
+}
+
+</script>
+
+<style>
+.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;
+}
+</style>

+ 583 - 0
src/view/job/piece/piece.vue

@@ -0,0 +1,583 @@
+<template>
+  <div>
+    <el-container>
+      <el-aside width="200px">
+        <div class="JKWTree-tree">
+          <h3>计件定额管理</h3>
+          <el-tree :data="treeData" :props="defaultProps" @node-click="handleNodeClick"></el-tree>
+        </div>
+      </el-aside>
+      <el-container>
+        <el-main>
+          <div class="gva-search-box">
+            <el-form ref="elSearchFormRef" :inline="true" :model="searchInfo" class="demo-form-inline" :rules="searchRule" @keyup.enter="onSubmit">
+              <el-form-item label="创建日期" prop="createdAt">
+                <template #label>
+        <span>
+          创建日期
+          <el-tooltip content="搜索范围是开始日期(包含)至结束日期(不包含)">
+            <el-icon><QuestionFilled /></el-icon>
+          </el-tooltip>
+        </span>
+                </template>
+                <el-date-picker v-model="searchInfo.startCreatedAt" type="datetime" placeholder="开始日期" :disabled-date="time=> searchInfo.endCreatedAt ? time.getTime() > searchInfo.endCreatedAt.getTime() : false"></el-date-picker>
+                —
+                <el-date-picker v-model="searchInfo.endCreatedAt" type="datetime" placeholder="结束日期" :disabled-date="time=> searchInfo.startCreatedAt ? time.getTime() < searchInfo.startCreatedAt.getTime() : false"></el-date-picker>
+              </el-form-item>
+              <el-form-item>
+                <el-button type="primary" icon="search" @click="onSubmit">查询</el-button>
+                <el-button icon="refresh" @click="onReset">重置</el-button>
+              </el-form-item>
+            </el-form>
+          </div>
+          <div class="gva-table-box">
+            <div class="gva-btn-list">
+			  <el-button type="primary" icon="upload" @click="">导出到excel</el-button>
+			  <el-button type="primary" icon="plus" @click="getDetails(2)">详情</el-button>
+            </div>
+            <el-table
+                ref="multipleTable"
+                style="width: 100%"
+                tooltip-effect="dark"
+                :data="tableData"
+                row-key="ID"
+                @selection-change="handleSelectionChange"
+            >
+              <el-table-column align="left" label="设备编号" prop="address" width="120" />
+              <el-table-column align="left" label="设备名称" prop="image" width="120" />
+              <el-table-column align="left" label="生产工序" prop="name" width="120" />
+			  <el-table-column align="left" label="日定额" prop="address" width="120" />
+			  <el-table-column align="left" label="千件工价" prop="image" width="120" />
+			  <el-table-column align="left" label="机长" prop="name" width="120" />
+			  <el-table-column align="left" label="副机" prop="address" width="120" />
+			  <el-table-column align="left" label="调墨" prop="image" width="120" />
+			  <el-table-column align="left" label="二手" prop="name" width="120" />
+			  <el-table-column align="left" label="飞达" prop="address" width="120" />
+			  <el-table-column align="left" label="辅助" prop="image" width="120" />
+			  <el-table-column align="left" label="放卷" prop="name" width="120" />
+			  <el-table-column align="left" label="分切1" prop="address" width="120" />
+			  <el-table-column align="left" label="分切2" prop="image" width="120" />
+			  <el-table-column align="left" label="检验" prop="name" width="120" />
+			  <el-table-column align="left" label="使用部门" prop="address" width="120" />
+			  <el-table-column align="left" label="设备编组" prop="image" width="120" />
+			  <el-table-column align="left" label="创建用户" prop="name" width="120" />
+			  <el-table-column align="left" label="创建时间" prop="address" width="120" />
+			  <el-table-column align="left" label="修改时间" prop="image" width="120" />
+			  <el-table-column align="left" label="UNIQID" prop="name" width="120" >
+              </el-table-column>
+            </el-table>
+            <div class="gva-pagination">
+              <el-pagination
+                  layout="total, sizes, prev, pager, next, jumper"
+                  :current-page="page"
+                  :page-size="pageSize"
+                  :page-sizes="[10, 30, 50, 100]"
+                  :total="total"
+                  @current-change="handleCurrentChange"
+                  @size-change="handleSizeChange"
+              />
+            </div>
+          </div>
+          <el-dialog v-model="dialogFormVisible" :before-close="closeDialog" :title="type==='create'?'添加':'修改'" destroy-on-close>
+            <el-scrollbar height="500px">
+              <el-form :model="formData" label-position="right" ref="elFormRef" :rules="rule" label-width="80px">
+                <el-form-item label="address字段:"  prop="address" >
+                  <el-input v-model="formData.address" :clearable="true"  placeholder="请输入address字段" />
+                </el-form-item>
+                <el-form-item label="image字段:"  prop="image" >
+                  <el-input v-model="formData.image" :clearable="true"  placeholder="请输入image字段" />
+                </el-form-item>
+                <el-form-item label="name字段:"  prop="name" >
+                  <el-input v-model="formData.name" :clearable="true"  placeholder="请输入name字段" />
+                </el-form-item>
+              </el-form>
+            </el-scrollbar>
+            <template #footer>
+              <div class="dialog-footer">
+                <el-button @click="closeDialog">取 消</el-button>
+                <el-button type="primary" @click="enterDialog">确 定</el-button>
+              </div>
+            </template>
+          </el-dialog>
+
+          <el-dialog v-model="detailShow" style="width: 800px" lock-scroll :before-close="closeDetailShow" title="当前编码:" destroy-on-close>
+            <el-scrollbar height="550px">
+              <el-descriptions column="1" border>
+                <el-descriptions-item label="编号">
+                  {{ formData.address }}
+                </el-descriptions-item>
+                <el-descriptions-item label="名称">
+                  {{ formData.image }}
+                </el-descriptions-item>
+                <el-descriptions-item label="适用工序">
+                  {{ formData.name }}
+                </el-descriptions-item>
+				<el-descriptions-item label="适用机型">
+				  {{ formData.name }}
+				</el-descriptions-item>
+              </el-descriptions>
+			  <el-descriptions column="3" border>
+			  	<el-descriptions-item label="日定额">
+			  	  {{ formData.name }}
+			  	</el-descriptions-item>
+				<el-descriptions-item label="千件工价">
+				  {{ formData.address }}
+				</el-descriptions-item>
+				<el-descriptions-item label="小时补产标准">
+				  {{ formData.image }}
+				</el-descriptions-item>
+			  </el-descriptions>
+			  <el-descriptions column="10" direction="vertical" border>
+			    <el-descriptions-item label="机长">
+			      {{ formData.address }}
+			    </el-descriptions-item>
+			    <el-descriptions-item label="副机">
+			      {{ formData.image }}
+			    </el-descriptions-item>
+			    <el-descriptions-item label="调墨">
+			      {{ formData.name }}
+			    </el-descriptions-item>
+			  	<el-descriptions-item label="二手">
+			  	  {{ formData.name }}
+			  	</el-descriptions-item>
+			  	<el-descriptions-item label="飞达">
+			  	  {{ formData.name }}
+			  	</el-descriptions-item>
+				<el-descriptions-item label="辅助">
+				  {{ formData.address }}
+				</el-descriptions-item>
+				<el-descriptions-item label="放卷">
+				  {{ formData.image }}
+				</el-descriptions-item>
+				<el-descriptions-item label="分切1">
+				  {{ formData.name }}
+				</el-descriptions-item>
+				<el-descriptions-item label="分切2">
+				  {{ formData.name }}
+				</el-descriptions-item>
+				<el-descriptions-item label="检验">
+				  {{ formData.name }}
+				</el-descriptions-item>
+			  </el-descriptions>
+            </el-scrollbar>
+          </el-dialog>
+        </el-main>
+      </el-container>
+    </el-container>
+  </div>
+</template>
+
+<script setup>
+import {
+  createCompany,
+  deleteCompany,
+  deleteCompanyByIds,
+  updateCompany,
+  findCompany,
+  getCompanyList
+} from '@/api/company'
+
+// 全量引入格式化工具 请按需保留
+import { getDictFunc, formatDate, formatBoolean, filterDict, ReturnArrImg, onDownloadFile } from '@/utils/format'
+import { ElMessage, ElMessageBox } from 'element-plus'
+import { ref, reactive } from 'vue'
+
+defineOptions({
+    name: 'Company'
+})
+
+const treeData=ref([{
+  label: '机器作业计件定额',
+  children: [{
+    label: '胶印车间【020001】',
+	children:[{
+		label:'胶印 JY01#【020001001】'
+	},{
+		label:'胶印 JY02#【020001002】'
+	},{
+		label:'胶印 JY03#【020001003】'
+	},{
+		label:'胶印 JY04#【020001004】'
+	},{
+		label:'胶印 JY05#【020001005】'
+	},{
+		label:'胶印 JY06#【020001006】'
+	},{
+		label:'胶印 JY07#【020001007】'
+	},{
+		label:'胶印 JY08#【020001008】'
+	},{
+		label:'胶印 JY09#【020001009】'
+	}]
+  },{
+    label: '凹印车间【020002】',
+	children:[{
+		label:'卷凹 WY01#【020002001】'
+	},{
+		label:'卷凹 WY02#【020002002】'
+	},{
+		label:'卷凹 WY03#【020002003】'
+	},{
+		label:'圆烫 WY04#【020002004】'
+	},{
+		label:'圆烫 WY05#【020002005】'
+	},{
+		label:'圆切 WY06#【020002006】'
+	},{
+		label:'圆切 WY07#【020002007】'
+	},{
+		label:'单凹 DY01#【020002008】'
+	},{
+		label:'单凹 DY02#【020002009】'
+	},{
+		label:'单凹 DY03#【020002010】'
+	}]
+  }]
+},{
+  label: '凹印车间',
+  children: [{
+    label: '卷凹【002001】'
+  },{
+    label: '单凹【002002】'
+  },{
+    label: '额【002003】'
+  }]
+},{
+  label: '丝印',
+  children: [{
+    label: '精细线条、精准套印、低于140g软包纸张【003001】'
+  },{
+    label: '实地、非精细线条、粗套印【003002】'
+  },{
+    label: '喷码【003003】'
+  }]
+},{
+  label: '烫模车间',
+  children: [{
+    label: '烫金【004001】',
+	children: [{
+		label: '先烫后印【004001001】',
+		children: [{
+			label:'80-140g薄纸【004001001001】'
+		},{
+			label:'150-145g厚纸【004001001002】'
+		}]
+	},{
+		label: '后烫【004001002】',
+		children: [{
+			label:'薄纸(80-140g)【004002001001】'
+		},{
+			label:'厚纸(140-450g)【004002001002】'
+		}]
+	}]
+  },{
+    label: '凹凸/压纹/立体凹凸【004002】',
+	children:[{
+		label:'薄纸(80-140g)凹凸/压纹/立体凹凸【004002001】'
+	},{
+		label:'厚纸(140-450g)凹凸【004002002】'
+	},{
+		label:'厚纸(140-450g)压纹【004002003】'
+	}]
+  },{
+    label: '模切【004003】',
+	children: [{
+		label:'薄纸(80-140g)【004003001】'
+	},{
+		label:'厚纸(140-450g)【004003002】'
+	}]
+  },{
+    label: '薄纸(80-140g)裁切【004004】'
+  },{
+    label: '凹凸+模切【004008】'
+  },{
+    label: '圆压圆凹凸压纹模切检验【004009】'
+  },{
+    label: '圆压圆凹凸模切检验【004010】'
+  },{
+    label: '拆片(清废)【004011】'
+  }]
+},{
+  label: '检验车间',
+  children: [{
+    label: '机检【005001】'
+  },{
+    label: '人工检【005002】'
+  }]
+}])
+const handleNodeClick = (node,check) => {
+  //存放当前节点的nodeId
+  console.log(node,check);
+
+}
+// 自动化生成的字典(可能为空)以及字段
+const formData = ref({
+        address: '',
+        image: '',
+        name: '',
+        })
+
+
+// 验证规则
+const rule = reactive({
+})
+
+const searchRule = reactive({
+  createdAt: [
+    { validator: (rule, value, callback) => {
+      if (searchInfo.value.startCreatedAt && !searchInfo.value.endCreatedAt) {
+        callback(new Error('请填写结束日期'))
+      } else if (!searchInfo.value.startCreatedAt && searchInfo.value.endCreatedAt) {
+        callback(new Error('请填写开始日期'))
+      } else if (searchInfo.value.startCreatedAt && searchInfo.value.endCreatedAt && (searchInfo.value.startCreatedAt.getTime() === searchInfo.value.endCreatedAt.getTime() || searchInfo.value.startCreatedAt.getTime() > searchInfo.value.endCreatedAt.getTime())) {
+        callback(new Error('开始日期应当早于结束日期'))
+      } else {
+        callback()
+      }
+    }, trigger: 'change' }
+  ],
+})
+
+const elFormRef = ref()
+const elSearchFormRef = ref()
+
+// =========== 表格控制部分 ===========
+const page = ref(1)
+const total = ref(0)
+const pageSize = ref(10)
+const tableData = ref([])
+const searchInfo = ref({})
+
+// 重置
+const onReset = () => {
+  searchInfo.value = {}
+  getTableData()
+}
+
+// 搜索
+const onSubmit = () => {
+  elSearchFormRef.value?.validate(async(valid) => {
+    if (!valid) return
+    page.value = 1
+    pageSize.value = 10
+    getTableData()
+  })
+}
+
+// 分页
+const handleSizeChange = (val) => {
+  pageSize.value = val
+  getTableData()
+}
+
+// 修改页面容量
+const handleCurrentChange = (val) => {
+  page.value = val
+  getTableData()
+}
+
+// 查询
+const getTableData = async() => {
+  const table = await getCompanyList({ page: page.value, pageSize: pageSize.value, ...searchInfo.value })
+  if (table.code === 0) {
+    tableData.value = table.data.list
+    total.value = table.data.total
+    page.value = table.data.page
+    pageSize.value = table.data.pageSize
+  }
+}
+
+getTableData()
+
+// ============== 表格控制部分结束 ===============
+
+// 获取需要的字典 可能为空 按需保留
+const setOptions = async () =>{
+}
+
+// 获取需要的字典 可能为空 按需保留
+setOptions()
+
+
+// 多选数据
+const multipleSelection = ref([])
+// 多选
+const handleSelectionChange = (val) => {
+    multipleSelection.value = val
+}
+
+// 删除行
+const deleteRow = (row) => {
+    ElMessageBox.confirm('确定要删除吗?', '提示', {
+        confirmButtonText: '确定',
+        cancelButtonText: '取消',
+        type: 'warning'
+    }).then(() => {
+            deleteCompanyFunc(row)
+        })
+    }
+
+
+// 批量删除控制标记
+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 deleteCompanyFunc = async (row) => {
+    const res = await deleteCompany({ ID: row.ID })
+    if (res.code === 0) {
+        ElMessage({
+                type: 'success',
+                message: '删除成功'
+            })
+            if (tableData.value.length === 1 && page.value > 1) {
+            page.value--
+        }
+        getTableData()
+    }
+}
+
+// 弹窗控制标记
+const dialogFormVisible = ref(false)
+
+
+// 查看详情控制标记
+const detailShow = ref(false)
+
+
+// 打开详情弹窗
+const openDetailShow = () => {
+  detailShow.value = true
+}
+
+
+// 打开详情
+const getDetails = async (row) => {
+	openDetailShow()
+  // 打开弹窗
+  // const res = await findCompany({ ID: row })
+  // if (res.code === 0) {
+  //   formData.value = res.data.recompany
+  //   openDetailShow()
+  // }
+}
+
+
+// 关闭详情弹窗
+const closeDetailShow = () => {
+  detailShow.value = false
+  formData.value = {
+          address: '',
+          image: '',
+          name: '',
+          }
+}
+
+
+// 打开弹窗
+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()
+              }
+      })
+}
+
+</script>
+
+<style>
+.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;
+}
+</style>

+ 507 - 0
src/view/job/process/process.vue

@@ -0,0 +1,507 @@
+<template>
+  <div>
+    <el-container>
+      <el-aside width="200px">
+        <div class="JKWTree-tree">
+          <h3>工序损耗管理</h3>
+          <el-tree :data="treeData" :props="defaultProps" @node-click="handleNodeClick"></el-tree>
+        </div>
+      </el-aside>
+      <el-container>
+        <el-main>
+          <div class="gva-search-box">
+            <el-form ref="elSearchFormRef" :inline="true" :model="searchInfo" class="demo-form-inline" :rules="searchRule" @keyup.enter="onSubmit">
+              <el-form-item label="创建日期" prop="createdAt">
+                <template #label>
+        <span>
+          创建日期
+          <el-tooltip content="搜索范围是开始日期(包含)至结束日期(不包含)">
+            <el-icon><QuestionFilled /></el-icon>
+          </el-tooltip>
+        </span>
+                </template>
+                <el-date-picker v-model="searchInfo.startCreatedAt" type="datetime" placeholder="开始日期" :disabled-date="time=> searchInfo.endCreatedAt ? time.getTime() > searchInfo.endCreatedAt.getTime() : false"></el-date-picker>
+                —
+                <el-date-picker v-model="searchInfo.endCreatedAt" type="datetime" placeholder="结束日期" :disabled-date="time=> searchInfo.startCreatedAt ? time.getTime() < searchInfo.startCreatedAt.getTime() : false"></el-date-picker>
+              </el-form-item>
+              <el-form-item>
+                <el-button type="primary" icon="search" @click="onSubmit">查询</el-button>
+                <el-button icon="refresh" @click="onReset">重置</el-button>
+              </el-form-item>
+            </el-form>
+          </div>
+          <div class="gva-table-box">
+            <div class="gva-btn-list">
+			  <el-button type="primary" icon="upload" @click="">导出到excel</el-button>
+			  <el-button type="primary" icon="plus" @click="getDetails(2)">详情</el-button>
+            </div>
+            <el-table
+                ref="multipleTable"
+                style="width: 100%"
+                tooltip-effect="dark"
+                :data="tableData"
+                row-key="ID"
+                @selection-change="handleSelectionChange"
+            >
+              <el-table-column align="left" label="设备编号" prop="address" width="120" />
+              <el-table-column align="left" label="设备名称" prop="image" width="120" />
+              <el-table-column align="left" label="生产工序" prop="name" width="120" />
+			  <el-table-column align="left" label="日定额" prop="address" width="120" />
+			  <el-table-column align="left" label="千件工价" prop="image" width="120" />
+			  <el-table-column align="left" label="机长" prop="name" width="120" />
+			  <el-table-column align="left" label="副机" prop="address" width="120" />
+			  <el-table-column align="left" label="调墨" prop="image" width="120" />
+			  <el-table-column align="left" label="二手" prop="name" width="120" />
+			  <el-table-column align="left" label="飞达" prop="address" width="120" />
+			  <el-table-column align="left" label="辅助" prop="image" width="120" />
+			  <el-table-column align="left" label="放卷" prop="name" width="120" />
+			  <el-table-column align="left" label="分切1" prop="address" width="120" />
+			  <el-table-column align="left" label="分切2" prop="image" width="120" />
+			  <el-table-column align="left" label="检验" prop="name" width="120" />
+			  <el-table-column align="left" label="使用部门" prop="address" width="120" />
+			  <el-table-column align="left" label="设备编组" prop="image" width="120" />
+			  <el-table-column align="left" label="创建用户" prop="name" width="120" />
+			  <el-table-column align="left" label="创建时间" prop="address" width="120" />
+			  <el-table-column align="left" label="修改时间" prop="image" width="120" />
+			  <el-table-column align="left" label="UNIQID" prop="name" width="120" >
+              </el-table-column>
+            </el-table>
+            <div class="gva-pagination">
+              <el-pagination
+                  layout="total, sizes, prev, pager, next, jumper"
+                  :current-page="page"
+                  :page-size="pageSize"
+                  :page-sizes="[10, 30, 50, 100]"
+                  :total="total"
+                  @current-change="handleCurrentChange"
+                  @size-change="handleSizeChange"
+              />
+            </div>
+          </div>
+          <el-dialog v-model="dialogFormVisible" :before-close="closeDialog" :title="type==='create'?'添加':'修改'" destroy-on-close>
+            <el-scrollbar height="500px">
+              <el-form :model="formData" label-position="right" ref="elFormRef" :rules="rule" label-width="80px">
+                <el-form-item label="address字段:"  prop="address" >
+                  <el-input v-model="formData.address" :clearable="true"  placeholder="请输入address字段" />
+                </el-form-item>
+                <el-form-item label="image字段:"  prop="image" >
+                  <el-input v-model="formData.image" :clearable="true"  placeholder="请输入image字段" />
+                </el-form-item>
+                <el-form-item label="name字段:"  prop="name" >
+                  <el-input v-model="formData.name" :clearable="true"  placeholder="请输入name字段" />
+                </el-form-item>
+              </el-form>
+            </el-scrollbar>
+            <template #footer>
+              <div class="dialog-footer">
+                <el-button @click="closeDialog">取 消</el-button>
+                <el-button type="primary" @click="enterDialog">确 定</el-button>
+              </div>
+            </template>
+          </el-dialog>
+
+          <el-dialog v-model="detailShow" style="width: 800px" lock-scroll :before-close="closeDetailShow" title="当前编码:" destroy-on-close>
+            <el-scrollbar height="550px">
+              <el-descriptions column="1" border>
+                <el-descriptions-item label="编号">
+                  {{ formData.address }}
+                </el-descriptions-item>
+                <el-descriptions-item label="名称">
+                  {{ formData.image }}
+                </el-descriptions-item>
+              </el-descriptions>
+			  <el-descriptions column="2" border>
+			    <el-descriptions-item label="基本损耗">
+			      {{ formData.name }}
+			    </el-descriptions-item>
+			    <el-descriptions-item label="损耗率">
+			      {{ formData.name }}
+			    </el-descriptions-item>
+			  </el-descriptions>
+			  <el-descriptions column="1" border>
+			  <el-descriptions-item label="备注(机型)">
+			    {{ formData.name }}
+			  </el-descriptions-item>
+			  </el-descriptions>
+            </el-scrollbar>
+          </el-dialog>
+        </el-main>
+      </el-container>
+    </el-container>
+  </div>
+</template>
+
+<script setup>
+import {
+  createCompany,
+  deleteCompany,
+  deleteCompanyByIds,
+  updateCompany,
+  findCompany,
+  getCompanyList
+} from '@/api/company'
+
+// 全量引入格式化工具 请按需保留
+import { getDictFunc, formatDate, formatBoolean, filterDict, ReturnArrImg, onDownloadFile } from '@/utils/format'
+import { ElMessage, ElMessageBox } from 'element-plus'
+import { ref, reactive } from 'vue'
+
+defineOptions({
+    name: 'Company'
+})
+
+const treeData=ref([{
+  label: '胶印车间',
+  children: [{
+    label: '胶印【001001】'
+  },{
+    label: '光边【001002】'
+  }]
+},{
+  label: '凹印车间',
+  children: [{
+    label: '卷凹【002001】'
+  },{
+    label: '单凹【002002】'
+  },{
+    label: '额【002003】'
+  }]
+},{
+  label: '丝印',
+  children: [{
+    label: '精细线条、精准套印、低于140g软包纸张【003001】'
+  },{
+    label: '实地、非精细线条、粗套印【003002】'
+  },{
+    label: '喷码【003003】'
+  }]
+},{
+  label: '烫模车间',
+  children: [{
+    label: '烫金【004001】',
+	children: [{
+		label: '先烫后印【004001001】',
+		children: [{
+			label:'80-140g薄纸【004001001001】'
+		},{
+			label:'150-145g厚纸【004001001002】'
+		}]
+	},{
+		label: '后烫【004001002】',
+		children: [{
+			label:'薄纸(80-140g)【004002001001】'
+		},{
+			label:'厚纸(140-450g)【004002001002】'
+		}]
+	}]
+  },{
+    label: '凹凸/压纹/立体凹凸【004002】',
+	children:[{
+		label:'薄纸(80-140g)凹凸/压纹/立体凹凸【004002001】'
+	},{
+		label:'厚纸(140-450g)凹凸【004002002】'
+	},{
+		label:'厚纸(140-450g)压纹【004002003】'
+	}]
+  },{
+    label: '模切【004003】',
+	children: [{
+		label:'薄纸(80-140g)【004003001】'
+	},{
+		label:'厚纸(140-450g)【004003002】'
+	}]
+  },{
+    label: '薄纸(80-140g)裁切【004004】'
+  },{
+    label: '凹凸+模切【004008】'
+  },{
+    label: '圆压圆凹凸压纹模切检验【004009】'
+  },{
+    label: '圆压圆凹凸模切检验【004010】'
+  },{
+    label: '拆片(清废)【004011】'
+  }]
+},{
+  label: '检验车间',
+  children: [{
+    label: '机检【005001】'
+  },{
+    label: '人工检【005002】'
+  }]
+}])
+const handleNodeClick = (node,check) => {
+  //存放当前节点的nodeId
+  console.log(node,check);
+
+}
+// 自动化生成的字典(可能为空)以及字段
+const formData = ref({
+        address: '',
+        image: '',
+        name: '',
+        })
+
+
+// 验证规则
+const rule = reactive({
+})
+
+const searchRule = reactive({
+  createdAt: [
+    { validator: (rule, value, callback) => {
+      if (searchInfo.value.startCreatedAt && !searchInfo.value.endCreatedAt) {
+        callback(new Error('请填写结束日期'))
+      } else if (!searchInfo.value.startCreatedAt && searchInfo.value.endCreatedAt) {
+        callback(new Error('请填写开始日期'))
+      } else if (searchInfo.value.startCreatedAt && searchInfo.value.endCreatedAt && (searchInfo.value.startCreatedAt.getTime() === searchInfo.value.endCreatedAt.getTime() || searchInfo.value.startCreatedAt.getTime() > searchInfo.value.endCreatedAt.getTime())) {
+        callback(new Error('开始日期应当早于结束日期'))
+      } else {
+        callback()
+      }
+    }, trigger: 'change' }
+  ],
+})
+
+const elFormRef = ref()
+const elSearchFormRef = ref()
+
+// =========== 表格控制部分 ===========
+const page = ref(1)
+const total = ref(0)
+const pageSize = ref(10)
+const tableData = ref([])
+const searchInfo = ref({})
+
+// 重置
+const onReset = () => {
+  searchInfo.value = {}
+  getTableData()
+}
+
+// 搜索
+const onSubmit = () => {
+  elSearchFormRef.value?.validate(async(valid) => {
+    if (!valid) return
+    page.value = 1
+    pageSize.value = 10
+    getTableData()
+  })
+}
+
+// 分页
+const handleSizeChange = (val) => {
+  pageSize.value = val
+  getTableData()
+}
+
+// 修改页面容量
+const handleCurrentChange = (val) => {
+  page.value = val
+  getTableData()
+}
+
+// 查询
+const getTableData = async() => {
+  const table = await getCompanyList({ page: page.value, pageSize: pageSize.value, ...searchInfo.value })
+  if (table.code === 0) {
+    tableData.value = table.data.list
+    total.value = table.data.total
+    page.value = table.data.page
+    pageSize.value = table.data.pageSize
+  }
+}
+
+getTableData()
+
+// ============== 表格控制部分结束 ===============
+
+// 获取需要的字典 可能为空 按需保留
+const setOptions = async () =>{
+}
+
+// 获取需要的字典 可能为空 按需保留
+setOptions()
+
+
+// 多选数据
+const multipleSelection = ref([])
+// 多选
+const handleSelectionChange = (val) => {
+    multipleSelection.value = val
+}
+
+// 删除行
+const deleteRow = (row) => {
+    ElMessageBox.confirm('确定要删除吗?', '提示', {
+        confirmButtonText: '确定',
+        cancelButtonText: '取消',
+        type: 'warning'
+    }).then(() => {
+            deleteCompanyFunc(row)
+        })
+    }
+
+
+// 批量删除控制标记
+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 deleteCompanyFunc = async (row) => {
+    const res = await deleteCompany({ ID: row.ID })
+    if (res.code === 0) {
+        ElMessage({
+                type: 'success',
+                message: '删除成功'
+            })
+            if (tableData.value.length === 1 && page.value > 1) {
+            page.value--
+        }
+        getTableData()
+    }
+}
+
+// 弹窗控制标记
+const dialogFormVisible = ref(false)
+
+
+// 查看详情控制标记
+const detailShow = ref(false)
+
+
+// 打开详情弹窗
+const openDetailShow = () => {
+  detailShow.value = true
+}
+
+
+// 打开详情
+const getDetails = async (row) => {
+  // 打开弹窗
+  // const res = await findCompany({ ID: row })
+  // if (res.code === 0) {
+  //   formData.value = res.data.recompany
+  //   openDetailShow()
+  // }
+  openDetailShow()
+}
+
+
+// 关闭详情弹窗
+const closeDetailShow = () => {
+  detailShow.value = false
+  formData.value = {
+          address: '',
+          image: '',
+          name: '',
+          }
+}
+
+
+// 打开弹窗
+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()
+              }
+      })
+}
+
+</script>
+
+<style>
+.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;
+}
+</style>

+ 636 - 0
src/view/job/rewards/rewards.vue

@@ -0,0 +1,636 @@
+<template>
+  <div>
+
+    <el-container>
+      <el-aside width="200px">
+        <div class="JKWTree-tree">
+
+          <h3  > 组织列表</h3>
+          <el-tree :data="treeData" :props="defaultProps" @node-click="handleNodeClick"></el-tree>
+        </div>
+
+      </el-aside>
+      <el-container>
+<!--        <el-header>dd</el-header>-->
+        <el-main>
+
+          <div class="gva-search-box">
+            <el-form ref="elSearchFormRef" :inline="true" :model="searchInfo" class="demo-form-inline" :rules="searchRule" @keyup.enter="onSubmit">
+              <!-- <el-form-item label="创建日期" prop="createdAt">
+                <template #label>
+        <span>
+          创建日期
+          <el-tooltip content="搜索范围是开始日期(包含)至结束日期(不包含)">
+            <el-icon><QuestionFilled /></el-icon>
+          </el-tooltip>
+        </span>
+                </template>
+                <el-date-picker v-model="searchInfo.startCreatedAt" type="datetime" placeholder="开始日期" :disabled-date="time=> searchInfo.endCreatedAt ? time.getTime() > searchInfo.endCreatedAt.getTime() : false"></el-date-picker>
+                —
+                <el-date-picker v-model="searchInfo.endCreatedAt" type="datetime" placeholder="结束日期" :disabled-date="time=> searchInfo.startCreatedAt ? time.getTime() < searchInfo.startCreatedAt.getTime() : false"></el-date-picker>
+              </el-form-item> -->
+			  <el-form-item>
+			    <el-input v-model="formData.image" :clearable="true"  placeholder="输入工单编号或产品名称"/>
+			  </el-form-item>
+              <el-form-item>
+                <el-button type="primary" icon="search" @click="onSubmit">查询</el-button>
+                <el-button icon="refresh" @click="onReset">重置</el-button>
+              </el-form-item>
+            </el-form>
+          </div>
+          <div class="gva-table-box">
+            <div class="gva-btn-list">
+              <el-button type="primary" icon="plus" @click="openDialog">新增</el-button>
+              <el-popover v-model:visible="deleteVisible" :disabled="!multipleSelection.length" placement="top" width="160">
+                <p>确定要删除吗?</p>
+                <div style="text-align: right; margin-top: 8px;">
+                  <el-button type="primary" link @click="deleteVisible = false">取消</el-button>
+                  <el-button type="primary" @click="onDelete">确定</el-button>
+                </div>
+                <template #reference>
+                  <el-button icon="delete" style="margin-left: 10px;" :disabled="!multipleSelection.length" @click="deleteVisible = true">删除</el-button>
+                </template>
+              </el-popover>
+            </div>
+            <el-table
+                ref="multipleTable"
+                style="width: 100%"
+                tooltip-effect="dark"
+                :data="tableData"
+                row-key="ID"
+                @selection-change="handleSelectionChange"
+            >
+              <el-table-column type="selection" width="55" />
+              <el-table-column align="left" label="工单编号" prop="address" width="120" />
+              <el-table-column align="left" label="印件名称" prop="image" width="120" />
+			  <el-table-column align="left" label="日期" prop="address" width="120" />
+			  <el-table-column align="left" label="流程单备注" prop="image" width="120" />
+			  <el-table-column align="left" label="联数" prop="name" width="120" />
+			  <el-table-column align="left" label="责任部门" prop="address" width="120" />
+			  <el-table-column align="left" label="大废品数" prop="image" width="120" />
+			  <el-table-column align="left" label="废品类型" prop="name" width="120" />
+			  <el-table-column align="left" label="废品来源" prop="address" width="120" />
+			  <el-table-column align="left" label="奖励班组" prop="image" width="120" />
+              <el-table-column align="left" label="检验员工" prop="name" width="120" />
+			  <el-table-column align="left" label="责任班组" prop="address" width="120" />
+			  <el-table-column align="left" label="责任员工1" prop="image" width="120" />
+			  <el-table-column align="left" label="责任员工2" prop="name" width="120" />
+			  <el-table-column align="left" label="创建用户" prop="address" width="120" />
+			  <el-table-column align="left" label="创建时间" prop="image" width="120" />
+			  <el-table-column align="left" label="UNIQID" prop="name" width="120" />
+              <el-table-column align="left" label="操作" min-width="250">
+                <template #default="scope">
+                  <el-button type="primary" link class="table-button" @click="getDetails(scope.row)">
+                    <el-icon style="margin-right: 5px"><InfoFilled /></el-icon>
+                    查看详情
+                  </el-button>
+                  <el-button type="primary" link icon="edit" class="table-button" @click="updateCompanyFunc(scope.row)">变更</el-button>
+                  <el-button type="primary" link icon="delete" @click="deleteRow(scope.row)">删除</el-button>
+                </template>
+              </el-table-column>
+            </el-table>
+            <div class="gva-pagination">
+              <el-pagination
+                  layout="total, sizes, prev, pager, next, jumper"
+                  :current-page="page"
+                  :page-size="pageSize"
+                  :page-sizes="[10, 30, 50, 100]"
+                  :total="total"
+                  @current-change="handleCurrentChange"
+                  @size-change="handleSizeChange"
+              />
+            </div>
+          </div>
+          <el-dialog v-model="dialogFormVisible" style="width: 1020px;" :before-close="closeDialog" :title="type==='create'?'添加':'修改'" destroy-on-close>
+            <el-scrollbar height="500px">
+              <el-form :model="formData" :inline="true" style="margin-bottom: 0px;" label-position="right" ref="elFormRef" :rules="rule" label-width="80px">
+                <el-form-item label="工单编号:"  prop="address" style="margin-right: 120px;">
+                  <el-input v-model="formData.address" :clearable="true"  placeholder="请输入工单标号" style="width: 120px;" />
+                </el-form-item>
+                <el-form-item label="产品名称:"  prop="image" >
+                  <el-input v-model="formData.image" :clearable="true"  placeholder="请输入产品名称" style="width: 450px;"/>
+                </el-form-item>
+              </el-form>
+			  <el-form :model="formData" :inline="true" label-position="right" ref="elFormRef" :rules="rule" label-width="80px">
+			    <el-form-item label="印件号:"  prop="address"  style="margin-right: 120px;">
+			      <el-input v-model="formData.address" :clearable="true"  placeholder="请输入印件号" style="width: 120px;" />
+			    </el-form-item>
+			    <el-form-item label="印件名称:"  prop="image">
+			      <el-input v-model="formData.image" :clearable="true"  placeholder="请输入印件名称" style="width: 450px;"/>
+			    </el-form-item>
+			  </el-form>
+			  <el-form :model="formData" :inline="true" label-position="right" ref="elFormRef" :rules="rule" label-width="90px">
+			    <el-form-item label="工序名称:"  prop="address" >
+			      <el-input v-model="formData.address" :clearable="true"  placeholder="请输入工序名称" style="width: 300px;"/>
+			    </el-form-item>
+			    <el-form-item prop="image" >
+			      <el-input v-model="formData.image" :clearable="true" style="width: 50px;" />
+			    </el-form-item>
+				<el-form-item label="流程单备注:"  prop="image" >
+				  <el-input v-model="formData.image" :clearable="true"  placeholder="请输入流程单备注" />
+				</el-form-item>
+			  </el-form>
+			  <el-form :model="formData" :inline="true" label-position="right" ref="elFormRef" :rules="rule" label-width="80px">
+			    <el-form-item label="日期:" prop="address" style="margin-right: 120px;">
+			      <el-input v-model="formData.address" :clearable="true"  placeholder="2023.12.30" style="width: 120px;"/>
+			    </el-form-item>
+			    <el-form-item label="废品数量:"  prop="image" >
+			      <el-input v-model="formData.image" :clearable="true"  placeholder="请输入废品数量" style="width: 120px;"/>
+			    </el-form-item>
+			    <el-form-item label="联数:"  prop="image" >
+			      <el-input v-model="formData.image" :clearable="true"  placeholder="请输入联数" style="width: 120px;"/>
+			    </el-form-item>
+			  </el-form>
+			  <el-form :model="formData" :inline="true" label-position="right" ref="elFormRef" :rules="rule" label-width="90px">
+			    <el-form-item label="废品备注:"  prop="address" >
+			      <el-input v-model="formData.address" :clearable="true"  placeholder="请输入废品备注" style="width: 300px;"/>
+			    </el-form-item>
+			    <el-form-item>
+				  <el-checkbox v-model="checked" style="width: 30px;">制程废</el-checkbox>
+			    </el-form-item>
+			    <el-form-item label="责任部门:"  prop="image" >
+			      <el-input v-model="formData.image" :clearable="true"  placeholder="请输入责任部门" style="width: 250px;"/>
+			    </el-form-item>
+			  </el-form>
+			  <el-form :model="formData" :inline="true" label-position="right" ref="elFormRef" :rules="rule">
+			    <el-form-item>
+			  	  <div class="sub-title" style="width: 193px; height: 10px;"></div>
+				  <div class="sub-title" style="width: 83.5px; height: 10px;">组员1</div>
+	  			  <div class="sub-title"style="width: 83.5px; height: 10px;">组员2</div>
+			  	  <div class="sub-title"style="width: 83.5px; height: 10px;">组员3</div>
+			  	  <div class="sub-title"style="width: 83.5px; height: 10px;">组员4</div>
+			  	  <div class="sub-title"style="width: 83.5px; height: 10px;">组员5</div>
+			  	  <div class="sub-title"style="width: 83.5px; height: 10px;">组员6</div>
+			  	  <div class="sub-title"style="width: 83.5px; height: 10px;">组员7</div>
+			  	  <div class="sub-title"style="width: 83.5px; height: 10px;">组员8</div>
+			  	  <div class="sub-title"style="width: 83.5px; height: 10px;">组员9</div>
+			    </el-form-item>
+			  </el-form>
+			  <el-form :model="formData" :inline="true" label-position="right" ref="elFormRef" :rules="rule">
+			    <el-form-item>
+				  <div class="sub-title">奖励班组:</div>
+		 	   	  <el-input v-model="formData.image" :clearable="true"  placeholder="B班" style="width: 45px;"/>
+				  <el-input v-model="formData.image" :clearable="true" placeholder="JY07#" style="width: 65px;" />
+			      <el-input v-model="formData.address" :clearable="true"  placeholder="ZW00568" style="width: 85px;" />
+				  <el-input v-model="formData.image" :clearable="true"  placeholder="组员2" style="width: 85px;"/>
+				  <el-input v-model="formData.address" :clearable="true"  placeholder="组员3" style="width: 85px;" />
+				  <el-input v-model="formData.image" :clearable="true"  placeholder="组员4" style="width: 85px;"/>
+				  <el-input v-model="formData.address" :clearable="true"  placeholder="组员5" style="width: 85px;" />
+				  <el-input v-model="formData.image" :clearable="true"  placeholder="组员6" style="width: 85px;"/>
+				  <el-input v-model="formData.address" :clearable="true"  placeholder="组员7" style="width: 85px;" />
+				  <el-input v-model="formData.image" :clearable="true"  placeholder="组员8" style="width: 85px;"/>
+				  <el-input v-model="formData.address" :clearable="true"  placeholder="组员9" style="width: 85px;" />
+			    </el-form-item>
+			  </el-form>
+			  <el-form :model="formData" :inline="true" label-position="right" ref="elFormRef" :rules="rule">
+			    <el-form-item>
+				  <div class="sub-title" style="width: 182px;"></div>
+			      <el-input v-model="formData.address" :clearable="true"  placeholder="ZW00568" style="width: 85px;" />
+			  	  <el-input v-model="formData.image" :clearable="true"  placeholder="组员2" style="width: 85px;"/>
+			  	  <el-input v-model="formData.address" :clearable="true"  placeholder="组员3" style="width: 85px;" />
+			  	  <el-input v-model="formData.image" :clearable="true"  placeholder="组员4" style="width: 85px;"/>
+			  	  <el-input v-model="formData.address" :clearable="true"  placeholder="组员5" style="width: 85px;" />
+			  	  <el-input v-model="formData.image" :clearable="true"  placeholder="组员6" style="width: 85px;"/>
+			  	  <el-input v-model="formData.address" :clearable="true"  placeholder="组员7" style="width: 85px;" />
+			  	  <el-input v-model="formData.image" :clearable="true"  placeholder="组员8" style="width: 85px;"/>
+			  	  <el-input v-model="formData.address" :clearable="true"  placeholder="组员9" style="width: 85px;" />
+			    </el-form-item>
+			  </el-form>
+			  <el-form :model="formData" :inline="true" label-position="right" ref="elFormRef" :rules="rule">
+			    <el-form-item>
+			  	  <div class="sub-title" style="width: 182px;">奖励金额:</div>
+			      <el-input v-model="formData.address" :clearable="true"  placeholder="ZW00568" style="width: 85px;" />
+			  	  <el-input v-model="formData.image" :clearable="true"  placeholder="组员2" style="width: 85px;"/>
+			  	  <el-input v-model="formData.address" :clearable="true"  placeholder="组员3" style="width: 85px;" />
+			  	  <el-input v-model="formData.image" :clearable="true"  placeholder="组员4" style="width: 85px;"/>
+			  	  <el-input v-model="formData.address" :clearable="true"  placeholder="组员5" style="width: 85px;" />
+			  	  <el-input v-model="formData.image" :clearable="true"  placeholder="组员6" style="width: 85px;"/>
+			  	  <el-input v-model="formData.address" :clearable="true"  placeholder="组员7" style="width: 85px;" />
+			  	  <el-input v-model="formData.image" :clearable="true"  placeholder="组员8" style="width: 85px;"/>
+			  	  <el-input v-model="formData.address" :clearable="true"  placeholder="组员9" style="width: 85px;" />
+			    </el-form-item>
+			  </el-form>
+			  <el-form :model="formData" :inline="true" label-position="right" ref="elFormRef" :rules="rule">
+			    <el-form-item>
+			  	  <div class="sub-title" style="width: 193px; height: 10px;"></div>
+			  	  <div class="sub-title" style="width: 83.5px; height: 10px;">组员1</div>
+			  	  <div class="sub-title"style="width: 83.5px; height: 10px;">组员2</div>
+			  	  <div class="sub-title"style="width: 83.5px; height: 10px;">组员3</div>
+			  	  <div class="sub-title"style="width: 83.5px; height: 10px;">组员4</div>
+			  	  <div class="sub-title"style="width: 83.5px; height: 10px;">组员5</div>
+			  	  <div class="sub-title"style="width: 83.5px; height: 10px;">组员6</div>
+			  	  <div class="sub-title"style="width: 83.5px; height: 10px;">组员7</div>
+			  	  <div class="sub-title"style="width: 83.5px; height: 10px;">组员8</div>
+			  	  <div class="sub-title"style="width: 83.5px; height: 10px;">组员9</div>
+			    </el-form-item>
+			  </el-form>
+			  <el-form :model="formData" :inline="true" label-position="right" ref="elFormRef" :rules="rule">
+			    <el-form-item>
+				  <div class="sub-title">责任班组:</div>
+			   	  <el-input v-model="formData.image" :clearable="true"  placeholder="B班" style="width: 45px;"/>
+	 			  <el-input v-model="formData.image" :clearable="true" placeholder="JY07#" style="width: 65px;" />
+			      <el-input v-model="formData.address" :clearable="true"  placeholder="ZW00568" style="width: 85px;" />
+			  	  <el-input v-model="formData.image" :clearable="true"  placeholder="组员2" style="width: 85px;"/>
+				  <el-input v-model="formData.address" :clearable="true"  placeholder="组员3" style="width: 85px;" />
+			  	  <el-input v-model="formData.image" :clearable="true"  placeholder="组员4" style="width: 85px;"/>
+			  	  <el-input v-model="formData.address" :clearable="true"  placeholder="组员5" style="width: 85px;" />
+				  <el-input v-model="formData.image" :clearable="true"  placeholder="组员6" style="width: 85px;"/>
+			  	  <el-input v-model="formData.address" :clearable="true"  placeholder="组员7" style="width: 85px;" />
+			  	  <el-input v-model="formData.image" :clearable="true"  placeholder="组员8" style="width: 85px;"/>
+			  	  <el-input v-model="formData.address" :clearable="true"  placeholder="组员9" style="width: 85px;" />
+			    </el-form-item>
+			  </el-form>
+			  <el-form :model="formData" :inline="true" label-position="right" ref="elFormRef" :rules="rule">
+			    <el-form-item>
+			  				  <div class="sub-title" style="width: 182px;"></div>
+			      <el-input v-model="formData.address" :clearable="true"  placeholder="ZW00568" style="width: 85px;" />
+			  	  <el-input v-model="formData.image" :clearable="true"  placeholder="组员2" style="width: 85px;"/>
+			  	  <el-input v-model="formData.address" :clearable="true"  placeholder="组员3" style="width: 85px;" />
+			  	  <el-input v-model="formData.image" :clearable="true"  placeholder="组员4" style="width: 85px;"/>
+			  	  <el-input v-model="formData.address" :clearable="true"  placeholder="组员5" style="width: 85px;" />
+			  	  <el-input v-model="formData.image" :clearable="true"  placeholder="组员6" style="width: 85px;"/>
+			  	  <el-input v-model="formData.address" :clearable="true"  placeholder="组员7" style="width: 85px;" />
+			  	  <el-input v-model="formData.image" :clearable="true"  placeholder="组员8" style="width: 85px;"/>
+			  	  <el-input v-model="formData.address" :clearable="true"  placeholder="组员9" style="width: 85px;" />
+			    </el-form-item>
+			  </el-form>
+			  <el-form :model="formData" :inline="true" label-position="right" ref="elFormRef" :rules="rule">
+			    <el-form-item>
+			  	  <div class="sub-title" style="width: 182px;">处罚金额:</div>
+			      <el-input v-model="formData.address" :clearable="true"  placeholder="ZW00568" style="width: 85px;" />
+			  	  <el-input v-model="formData.image" :clearable="true"  placeholder="组员2" style="width: 85px;"/>
+			  	  <el-input v-model="formData.address" :clearable="true"  placeholder="组员3" style="width: 85px;" />
+			  	  <el-input v-model="formData.image" :clearable="true"  placeholder="组员4" style="width: 85px;"/>
+			  	  <el-input v-model="formData.address" :clearable="true"  placeholder="组员5" style="width: 85px;" />
+			  	  <el-input v-model="formData.image" :clearable="true"  placeholder="组员6" style="width: 85px;"/>
+			  	  <el-input v-model="formData.address" :clearable="true"  placeholder="组员7" style="width: 85px;" />
+			  	  <el-input v-model="formData.image" :clearable="true"  placeholder="组员8" style="width: 85px;"/>
+			  	  <el-input v-model="formData.address" :clearable="true"  placeholder="组员9" style="width: 85px;" />
+			    </el-form-item>
+			  </el-form>
+            </el-scrollbar>
+            <template #footer>
+              <div class="dialog-footer">
+                <el-button @click="closeDialog">取 消</el-button>
+                <el-button type="primary" @click="enterDialog">确 定</el-button>
+              </div>
+            </template>
+          </el-dialog>
+
+          <el-dialog v-model="detailShow" style="width: 800px" lock-scroll :before-close="closeDetailShow" title="查看详情" destroy-on-close>
+            <el-scrollbar height="550px">
+              <el-descriptions column="1" border>
+                <el-descriptions-item label="address字段">
+                  {{ formData.address }}
+                </el-descriptions-item>
+                <el-descriptions-item label="image字段">
+                  {{ formData.image }}
+                </el-descriptions-item>
+                <el-descriptions-item label="name字段">
+                  {{ formData.name }}
+                </el-descriptions-item>
+              </el-descriptions>
+            </el-scrollbar>
+          </el-dialog>
+
+        </el-main>
+
+      </el-container>
+    </el-container>
+
+
+
+
+
+  </div>
+</template>
+
+<script setup>
+import {
+  createCompany,
+  deleteCompany,
+  deleteCompanyByIds,
+  updateCompany,
+  findCompany,
+  getCompanyList
+} from '@/api/company'
+
+// 全量引入格式化工具 请按需保留
+import { getDictFunc, formatDate, formatBoolean, filterDict, ReturnArrImg, onDownloadFile } from '@/utils/format'
+import { ElMessage, ElMessageBox } from 'element-plus'
+import { ref, reactive } from 'vue'
+
+defineOptions({
+    name: 'Company'
+})
+
+const treeData=ref([{
+  label: '一级 1',
+  children: [{
+    label: '二级 1-1',
+    children: [{
+      label: '三级 1-1-1'
+    }]
+  }]
+}, {
+  label: '一级 2',
+  children: [{
+    label: '二级 2-1',
+    children: [{
+      label: '三级 2-1-1'
+    }]
+  }, {
+    label: '二级 2-2',
+    children: [{
+      label: '三级 2-2-1'
+    }]
+  }]
+}, {
+  label: '一级 3',
+  children: [{
+    label: '二级 3-1',
+    children: [{
+      label: '三级 3-1-1'
+    }]
+  }, {
+    label: '二级 3-2',
+    children: [{
+      label: '三级 3-2-1'
+    }]
+  }]
+}])
+const handleNodeClick = (node,check) => {
+  //存放当前节点的nodeId
+  console.log(node,check);
+
+}
+// 自动化生成的字典(可能为空)以及字段
+const formData = ref({
+        address: '',
+        image: '',
+        name: '',
+        })
+
+
+// 验证规则
+const rule = reactive({
+})
+
+const searchRule = reactive({
+  createdAt: [
+    { validator: (rule, value, callback) => {
+      if (searchInfo.value.startCreatedAt && !searchInfo.value.endCreatedAt) {
+        callback(new Error('请填写结束日期'))
+      } else if (!searchInfo.value.startCreatedAt && searchInfo.value.endCreatedAt) {
+        callback(new Error('请填写开始日期'))
+      } else if (searchInfo.value.startCreatedAt && searchInfo.value.endCreatedAt && (searchInfo.value.startCreatedAt.getTime() === searchInfo.value.endCreatedAt.getTime() || searchInfo.value.startCreatedAt.getTime() > searchInfo.value.endCreatedAt.getTime())) {
+        callback(new Error('开始日期应当早于结束日期'))
+      } else {
+        callback()
+      }
+    }, trigger: 'change' }
+  ],
+})
+
+const elFormRef = ref()
+const elSearchFormRef = ref()
+
+// =========== 表格控制部分 ===========
+const page = ref(1)
+const total = ref(0)
+const pageSize = ref(10)
+const tableData = ref([])
+const searchInfo = ref({})
+
+// 重置
+const onReset = () => {
+  searchInfo.value = {}
+  getTableData()
+}
+
+// 搜索
+const onSubmit = () => {
+  elSearchFormRef.value?.validate(async(valid) => {
+    if (!valid) return
+    page.value = 1
+    pageSize.value = 10
+    getTableData()
+  })
+}
+
+// 分页
+const handleSizeChange = (val) => {
+  pageSize.value = val
+  getTableData()
+}
+
+// 修改页面容量
+const handleCurrentChange = (val) => {
+  page.value = val
+  getTableData()
+}
+
+// 查询
+const getTableData = async() => {
+  const table = await getCompanyList({ page: page.value, pageSize: pageSize.value, ...searchInfo.value })
+  if (table.code === 0) {
+    tableData.value = table.data.list
+    total.value = table.data.total
+    page.value = table.data.page
+    pageSize.value = table.data.pageSize
+  }
+}
+
+getTableData()
+
+// ============== 表格控制部分结束 ===============
+
+// 获取需要的字典 可能为空 按需保留
+const setOptions = async () =>{
+}
+
+// 获取需要的字典 可能为空 按需保留
+setOptions()
+
+
+// 多选数据
+const multipleSelection = ref([])
+// 多选
+const handleSelectionChange = (val) => {
+    multipleSelection.value = val
+}
+
+// 删除行
+const deleteRow = (row) => {
+    ElMessageBox.confirm('确定要删除吗?', '提示', {
+        confirmButtonText: '确定',
+        cancelButtonText: '取消',
+        type: 'warning'
+    }).then(() => {
+            deleteCompanyFunc(row)
+        })
+    }
+
+
+// 批量删除控制标记
+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 deleteCompanyFunc = async (row) => {
+    const res = await deleteCompany({ ID: row.ID })
+    if (res.code === 0) {
+        ElMessage({
+                type: 'success',
+                message: '删除成功'
+            })
+            if (tableData.value.length === 1 && page.value > 1) {
+            page.value--
+        }
+        getTableData()
+    }
+}
+
+// 弹窗控制标记
+const dialogFormVisible = ref(false)
+
+
+// 查看详情控制标记
+const detailShow = ref(false)
+
+
+// 打开详情弹窗
+const openDetailShow = () => {
+  detailShow.value = true
+}
+
+
+// 打开详情
+const getDetails = async (row) => {
+  // 打开弹窗
+  const res = await findCompany({ ID: row.ID })
+  if (res.code === 0) {
+    formData.value = res.data.recompany
+    openDetailShow()
+  }
+}
+
+
+// 关闭详情弹窗
+const closeDetailShow = () => {
+  detailShow.value = false
+  formData.value = {
+          address: '',
+          image: '',
+          name: '',
+          }
+}
+
+
+// 打开弹窗
+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()
+              }
+      })
+}
+
+</script>
+
+<style>
+.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;
+}
+</style>

+ 525 - 0
src/view/job/sampling/sampling.vue

@@ -0,0 +1,525 @@
+<template>
+  <div>
+
+    <el-container>
+      <el-aside width="200px">
+        <div class="JKWTree-tree">
+
+          <h3  > 组织列表</h3>
+          <el-tree :data="treeData" :props="defaultProps" @node-click="handleNodeClick"></el-tree>
+        </div>
+
+      </el-aside>
+      <el-container>
+<!--        <el-header>dd</el-header>-->
+        <el-main>
+
+          <div class="gva-search-box">
+            <el-form ref="elSearchFormRef" :inline="true" :model="searchInfo" class="demo-form-inline" :rules="searchRule" @keyup.enter="onSubmit">
+              <!-- <el-form-item label="创建日期" prop="createdAt">
+                <template #label>
+        <span>
+          创建日期
+          <el-tooltip content="搜索范围是开始日期(包含)至结束日期(不包含)">
+            <el-icon><QuestionFilled /></el-icon>
+          </el-tooltip>
+        </span>
+                </template>
+                <el-date-picker v-model="searchInfo.startCreatedAt" type="datetime" placeholder="开始日期" :disabled-date="time=> searchInfo.endCreatedAt ? time.getTime() > searchInfo.endCreatedAt.getTime() : false"></el-date-picker>
+                —
+                <el-date-picker v-model="searchInfo.endCreatedAt" type="datetime" placeholder="结束日期" :disabled-date="time=> searchInfo.startCreatedAt ? time.getTime() < searchInfo.startCreatedAt.getTime() : false"></el-date-picker>
+              </el-form-item> -->
+			  <el-form-item>
+			    <el-input v-model="searchInfo.search" :clearable="true"  placeholder="输入工单编号或产品名称"/>
+				<div>{{searchInfo.search}}</div>
+			  </el-form-item>
+              <el-form-item>
+                <el-button type="primary" icon="search" @click="onSubmit">查询</el-button>
+                <el-button icon="refresh" @click="onReset">重置</el-button>
+              </el-form-item>
+            </el-form>
+          </div>
+          <div class="gva-table-box">
+            <div class="gva-btn-list">
+              <el-button type="primary" icon="plus" @click="openDialog">新增</el-button>
+              <el-popover v-model:visible="deleteVisible" :disabled="!multipleSelection.length" placement="top" width="160">
+                <p>确定要删除吗?</p>
+                <div style="text-align: right; margin-top: 8px;">
+                  <el-button type="primary" link @click="deleteVisible = false">取消</el-button>
+                  <el-button type="primary" @click="onDelete">确定</el-button>
+                </div>
+                <template #reference>
+                  <el-button icon="delete" style="margin-left: 10px;" :disabled="!multipleSelection.length" @click="deleteVisible = true">删除</el-button>
+                </template>
+              </el-popover>
+            </div>
+            <el-table
+                ref="multipleTable"
+                style="width: 100%"
+                tooltip-effect="dark"
+                :data="tableData"
+                row-key="ID"
+                @selection-change="handleSelectionChange"
+            >
+              <el-table-column type="selection" width="55" />
+              <el-table-column align="left" label="日期" prop="address" width="120" />
+              <el-table-column align="left" label="员工编号" prop="image" width="120" />
+              <el-table-column align="left" label="印件号" prop="name" width="120" />
+			  <el-table-column align="left" label="工序号" prop="address" width="120" />
+			  <el-table-column align="left" label="流程单号" prop="image" width="120" />
+			  <el-table-column align="left" label="抽检数" prop="name" width="120" />
+			  <el-table-column align="left" label="A类度" prop="address" width="120" />
+			  <el-table-column align="left" label="B类度" prop="image" width="120" />
+			  <el-table-column align="left" label="C类度" prop="name" width="120" />
+			  <el-table-column align="left" label="备注" prop="address" width="120" />
+			  <el-table-column align="left" label="创建用户" prop="image" width="120" />
+			  <el-table-column align="left" label="创建时间" prop="name" width="120" />
+			  <el-table-column align="left" label="修改时间" prop="address" width="120" />
+			  <el-table-column align="left" label="UNIQID" prop="image" width="120" />
+              <el-table-column align="center" fixed="right" label="操作"  min-width="250">
+                <template #default="scope">
+                  <el-button type="primary" link class="table-button" @click="getDetails(scope.row)">
+                    <el-icon style="margin-right: 5px"><InfoFilled /></el-icon>
+                    查看详情
+                  </el-button>
+                  <el-button type="primary" link icon="edit" class="table-button" @click="updateCompanyFunc(scope.row)">变更</el-button>
+                  <el-button type="primary" link icon="delete" @click="deleteRow(scope.row)">删除</el-button>
+                </template>
+              </el-table-column>
+            </el-table>
+            <div class="gva-pagination">
+              <el-pagination
+                  layout="total, sizes, prev, pager, next, jumper"
+                  :current-page="page"
+                  :page-size="pageSize"
+                  :page-sizes="[10, 30, 50, 100]"
+                  :total="total"
+                  @current-change="handleCurrentChange"
+                  @size-change="handleSizeChange"
+              />
+            </div>
+          </div>
+          <el-dialog v-model="dialogFormVisible" :before-close="closeDialog" :title="type==='create'?'添加':'修改'" destroy-on-close>
+            <el-scrollbar height="340px">
+              <el-form :model="formData" :inline="true" label-position="right" ref="elFormRef" :rules="rule" label-width="75px">
+                <el-form-item label="员工编号:"  prop="address" >
+                  <el-input v-model="formData.address" :clearable="true"  placeholder="请输入员工编号" />
+                </el-form-item>
+                <el-form-item prop="image" >
+                  <el-input v-model="formData.image" :clearable="true"  placeholder="请输入员工姓名" />
+                </el-form-item>
+              </el-form>
+			  <el-form :model="formData" :inline="true" label-position="right" ref="elFormRef" :rules="rule" label-width="75px">
+			    <el-form-item label="班组:"  prop="address" >
+			      <el-input v-model="formData.address" :clearable="true"  placeholder="请输入班组" />
+			    </el-form-item>
+			    <el-form-item label="日期:" prop="image" >
+			      <el-input v-model="formData.image" :clearable="true"  placeholder="请输入日期" />
+			    </el-form-item>
+			  </el-form>
+			  <el-form :model="formData" :inline="true" label-position="right" ref="elFormRef" :rules="rule" label-width="75px">
+			    <el-form-item label="工单编号:"  prop="address" >
+			      <el-input v-model="formData.address" :clearable="true"  placeholder="请输入工单编号" />
+			    </el-form-item>
+			    <el-form-item prop="image" >
+			      <el-input v-model="formData.image" :clearable="true"  placeholder="请输入产品名称" />
+			    </el-form-item>
+			  </el-form>
+			  <el-form :model="formData" :inline="true" label-position="right" ref="elFormRef" :rules="rule" label-width="75px">
+			    <el-form-item label="工序名称:"  prop="address" >
+			      <el-input v-model="formData.address" :clearable="true"  placeholder="请输入工序名称" style="width: 140px;" />
+			    </el-form-item>
+			    <el-form-item prop="image" >
+			      <el-input v-model="formData.image" :clearable="true"  placeholder="请输入工序号" style="width: 140px;" />
+			    </el-form-item>
+			  	<el-form-item label="流程单号:"  prop="address" >
+			  	  <el-input v-model="formData.address" :clearable="true"  placeholder="请输入流程单号" style="width: 140px;" />
+			  	</el-form-item>			
+			  </el-form>
+			  <el-form :model="formData" :inline="true" label-position="right" ref="elFormRef" :rules="rule" label-width="75px">
+			    <el-form-item label="抽检数量:"  prop="address" >
+			      <el-input v-model="formData.address" :clearable="true"  placeholder="请输入抽检数量" style="width: 123px;" />
+			    </el-form-item>			
+			  </el-form>
+			  <el-form :model="formData" :inline="true" label-position="right" ref="elFormRef" :rules="rule" label-width="75px">
+			    <el-form-item label="A类废品:"  prop="address" >
+			      <el-input v-model="formData.address" :clearable="true"  placeholder="请输入A类废品" style="width: 123px;" />
+			    </el-form-item>
+			    <el-form-item label="B类废品:"  prop="image" >
+			      <el-input v-model="formData.image" :clearable="true"  placeholder="请输入B类废品" style="width: 123px;" />
+			    </el-form-item>
+			  	<el-form-item label="C类废品:"  prop="address" >
+			  	  <el-input v-model="formData.address" :clearable="true"  placeholder="请输入C类废品" style="width: 123px;" />
+			  	</el-form-item>			
+			  </el-form>
+			  <el-form :model="formData" label-position="right" ref="elFormRef" :rules="rule" label-width="80px">
+			    <el-form-item label="其他备注:"  prop="address" >
+			      <el-input v-model="formData.address" :clearable="true"  placeholder="请输入其他备注" />
+			    </el-form-item>
+			  </el-form>
+            </el-scrollbar>
+            <template #footer>
+              <div class="dialog-footer">
+                <el-button @click="closeDialog">取 消</el-button>
+                <el-button type="primary" @click="enterDialog">确 定</el-button>
+              </div>
+            </template>
+          </el-dialog>
+
+          <el-dialog v-model="detailShow" style="width: 800px" lock-scroll :before-close="closeDetailShow" title="查看详情" destroy-on-close>
+            <el-scrollbar height="550px">
+              <el-descriptions column="1" border>
+                <el-descriptions-item label="address字段">
+                  {{ formData.address }}
+                </el-descriptions-item>
+                <el-descriptions-item label="image字段">
+                  {{ formData.image }}
+                </el-descriptions-item>
+                <el-descriptions-item label="name字段">
+                  {{ formData.name }}
+                </el-descriptions-item>
+              </el-descriptions>
+            </el-scrollbar>
+          </el-dialog>
+
+        </el-main>
+
+      </el-container>
+    </el-container>
+
+
+
+
+
+  </div>
+</template>
+
+<script setup>
+import {
+  createCompany,
+  deleteCompany,
+  deleteCompanyByIds,
+  updateCompany,
+  findCompany,
+  getCompanyList
+} from '@/api/company'
+
+// 全量引入格式化工具 请按需保留
+import { getDictFunc, formatDate, formatBoolean, filterDict, ReturnArrImg, onDownloadFile } from '@/utils/format'
+import { ElMessage, ElMessageBox } from 'element-plus'
+import { ref, reactive } from 'vue'
+
+defineOptions({
+    name: 'Company'
+})
+
+const treeData=ref([{
+  label: '一级 1',
+  children: [{
+    label: '二级 1-1',
+    children: [{
+      label: '三级 1-1-1'
+    }]
+  }]
+}, {
+  label: '一级 2',
+  children: [{
+    label: '二级 2-1',
+    children: [{
+      label: '三级 2-1-1'
+    }]
+  }, {
+    label: '二级 2-2',
+    children: [{
+      label: '三级 2-2-1'
+    }]
+  }]
+}, {
+  label: '一级 3',
+  children: [{
+    label: '二级 3-1',
+    children: [{
+      label: '三级 3-1-1'
+    }]
+  }, {
+    label: '二级 3-2',
+    children: [{
+      label: '三级 3-2-1'
+    }]
+  }]
+}])
+const handleNodeClick = (node,check) => {
+  //存放当前节点的nodeId
+  console.log(node,check);
+
+}
+// 自动化生成的字典(可能为空)以及字段
+const formData = ref({
+        address: '',
+        image: '',
+        name: '',
+        })
+
+
+// 验证规则
+const rule = reactive({
+})
+
+const searchRule = reactive({
+  createdAt: [
+    { validator: (rule, value, callback) => {
+      if (searchInfo.value.startCreatedAt && !searchInfo.value.endCreatedAt) {
+        callback(new Error('请填写结束日期'))
+      } else if (!searchInfo.value.startCreatedAt && searchInfo.value.endCreatedAt) {
+        callback(new Error('请填写开始日期'))
+      } else if (searchInfo.value.startCreatedAt && searchInfo.value.endCreatedAt && (searchInfo.value.startCreatedAt.getTime() === searchInfo.value.endCreatedAt.getTime() || searchInfo.value.startCreatedAt.getTime() > searchInfo.value.endCreatedAt.getTime())) {
+        callback(new Error('开始日期应当早于结束日期'))
+      } else {
+        callback()
+      }
+    }, trigger: 'change' }
+  ],
+})
+
+const elFormRef = ref()
+const elSearchFormRef = ref()
+
+// =========== 表格控制部分 ===========
+const page = ref(1)
+const total = ref(0)
+const pageSize = ref(10)
+const tableData = ref([])
+const searchInfo = ref({})
+
+// 重置
+const onReset = () => {
+  searchInfo.value = {}
+  getTableData()
+}
+
+// 搜索
+const onSubmit = () => {
+  elSearchFormRef.value?.validate(async(valid) => {
+    if (!valid) return
+    page.value = 1
+    pageSize.value = 10
+    getTableData()
+  })
+}
+
+// 分页
+const handleSizeChange = (val) => {
+  pageSize.value = val
+  getTableData()
+}
+
+// 修改页面容量
+const handleCurrentChange = (val) => {
+  page.value = val
+  getTableData()
+}
+
+// 查询
+const getTableData = async() => {
+  const table = await getCompanyList({ page: page.value, pageSize: pageSize.value, ...searchInfo.value })
+  if (table.code === 0) {
+    tableData.value = table.data.list
+    total.value = table.data.total
+    page.value = table.data.page
+    pageSize.value = table.data.pageSize
+  }
+}
+
+getTableData()
+
+// ============== 表格控制部分结束 ===============
+
+// 获取需要的字典 可能为空 按需保留
+const setOptions = async () =>{
+}
+
+// 获取需要的字典 可能为空 按需保留
+setOptions()
+
+
+// 多选数据
+const multipleSelection = ref([])
+// 多选
+const handleSelectionChange = (val) => {
+    multipleSelection.value = val
+}
+
+// 删除行
+const deleteRow = (row) => {
+    ElMessageBox.confirm('确定要删除吗?', '提示', {
+        confirmButtonText: '确定',
+        cancelButtonText: '取消',
+        type: 'warning'
+    }).then(() => {
+            deleteCompanyFunc(row)
+        })
+    }
+
+
+// 批量删除控制标记
+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 deleteCompanyFunc = async (row) => {
+    const res = await deleteCompany({ ID: row.ID })
+    if (res.code === 0) {
+        ElMessage({
+                type: 'success',
+                message: '删除成功'
+            })
+            if (tableData.value.length === 1 && page.value > 1) {
+            page.value--
+        }
+        getTableData()
+    }
+}
+
+// 弹窗控制标记
+const dialogFormVisible = ref(false)
+
+
+// 查看详情控制标记
+const detailShow = ref(false)
+
+
+// 打开详情弹窗
+const openDetailShow = () => {
+  detailShow.value = true
+}
+
+
+// 打开详情
+const getDetails = async (row) => {
+  // 打开弹窗
+  const res = await findCompany({ ID: row.ID })
+  if (res.code === 0) {
+    formData.value = res.data.recompany
+    openDetailShow()
+  }
+}
+
+
+// 关闭详情弹窗
+const closeDetailShow = () => {
+  detailShow.value = false
+  formData.value = {
+          address: '',
+          image: '',
+          name: '',
+          }
+}
+
+
+// 打开弹窗
+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()
+              }
+      })
+}
+
+</script>
+
+<style>
+.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;
+}
+</style>