瀏覽代碼

Merge remote-tracking branch 'origin/master'

guoyujia 9 月之前
父節點
當前提交
02d1f169e9

+ 5 - 1
.env.development

@@ -19,4 +19,8 @@ VITE_APP_PRODUCTION_API = '/ezhizao-dms-production'
 VITE_PREVIEW_API = 'http://120.46.159.163:8012/onlinePreview?url='
 
 # 服务器地址
-VITE_HOST_URL = 'http://120.46.159.163:401'
+VITE_HOST_URL = 'http://120.46.159.163:401'
+
+VITE_HOST_INNET = 'http://localhost:81'
+
+VITE_HOST_OUTNET = 'http://localhost:81'

+ 51 - 0
src/api/business/auxiliaryProcess.js

@@ -0,0 +1,51 @@
+import request from '@/utils/request'
+
+const baseUrl = import.meta.env.VITE_APP_BASE_API
+// 查询辅助工序列表
+export function listProcess(query) {
+  return request({
+    url: baseUrl + '/business/auxiliaryProcess/list',
+    method: 'get',
+    params: query
+  })
+}
+
+// 查询辅助工序详细
+export function getProcess(id) {
+  return request({
+    url: baseUrl + '/business/auxiliaryProcess/' + id,
+    method: 'get'
+  })
+}
+
+// 新增辅助工序
+export function addProcess(data) {
+  return request({
+    url: baseUrl + '/business/auxiliaryProcess',
+    method: 'post',
+    data: data
+  })
+}
+
+// 修改辅助工序
+export function updateProcess(data) {
+  return request({
+    url: baseUrl + '/business/auxiliaryProcess',
+    method: 'put',
+    data: data
+  })
+}
+
+// 删除辅助工序
+export function delProcess(id) {
+  return request({
+    url: baseUrl + '/business/auxiliaryProcess/' + id,
+    method: 'delete'
+  })
+}
+export function allListProcess() {
+  return request({
+    url: baseUrl + '/business/auxiliaryProcess/all',
+    method: 'get'
+  })
+}

+ 31 - 0
src/api/business/dayworkAuxiliaryItem.js

@@ -0,0 +1,31 @@
+import request from '@/utils/request'
+
+const baseUrl = import.meta.env.VITE_APP_PRODUCTION_API
+
+/**
+ * 获取 生产批次报工 列表
+ * @param {*} data
+ * @returns
+ */
+export function listDayworkItem(query) {
+  return request({
+    url: baseUrl + '/business/auxiliaryDaywork/list',
+    method: 'get',
+    params: query
+  })
+}
+
+export function getDayworkItemInfo(id) {
+  return request({
+    url: baseUrl + '/business/auxiliaryDaywork/getInfo/' + id,
+    method: 'get'
+  })
+}
+
+export function updateDayworkItemInfo(data) {
+  return request({
+    url: baseUrl + '/business/auxiliaryDaywork/update',
+    method: 'post',
+    data: data
+  })
+}

+ 421 - 0
src/views/business/auxiliaryDaywork/form.vue

@@ -0,0 +1,421 @@
+<template>
+  <!-- 添加或修改项目信息对话框 -->
+  <el-drawer v-model="visible" size="80%" direction="rtl" :close-on-press-escape="false">
+    <div class="page-container form-container">
+      <div class="form-btns-container">
+        <span class="title-label"><el-icon>
+            <Document />
+          </el-icon>
+          报工详情</span>
+        <el-button type="primary" icon="Check" style="margin-right: 10px" @click="handleSave">保 存
+        </el-button>
+        <el-button icon="Close" @click="handleCancel">取 消
+        </el-button>
+      </div>
+      <!-- 主表 -->
+      <el-form ref="dayworkItemRef" class="master-container" :model="form" :rules="rules" :show-message="true">
+        <el-row :gutter="20">
+          <el-col :span="7">
+            <el-form-item label="开始时间:" prop="startTime">
+              <el-date-picker v-model="form.startTime" :disabled="!editStatus" type="datetime"
+                value-format="YYYY-MM-DD HH:mm:ss" :clearable="false" :editable="false" placeholder="请选择开始时间"
+                @change="handleTotalTime" />
+            </el-form-item>
+          </el-col>
+          <el-col :span="8">
+            <el-form-item label="生产工序:" prop="processId" label-width="90px">
+              {{ form.processAlias }}
+            </el-form-item>
+          </el-col>
+          <el-col :span="8">
+            <el-form-item label="辅助工序:" prop="processId" label-width="90px">
+              {{ form.auxiliaryProcessAlias }}
+            </el-form-item>
+          </el-col>
+        </el-row>
+        <el-row :gutter="20">
+          <el-col :span="7">
+            <el-form-item label="生产状态:" prop="status" align="center">
+              <el-select v-model="form.status" placeholder="请选择生产状态" :disabled="true" style="width: 220px"
+                @change="handleChangeStatus">
+                <el-option v-for="dict in dynamicOptions" :key="dict.value" :label="dict.label"
+                  :value="dict.value"></el-option>
+              </el-select>
+            </el-form-item>
+          </el-col>
+          <el-col :span="8">
+            <el-form-item label="结束时间:" prop="endTime" label-width="90px">
+              <el-date-picker v-model="form.endTime" :disabled="!editStatus" type="datetime"
+                value-format="YYYY-MM-DD HH:mm:ss" :editable="false" :clearable="false" placeholder="请选择结束时间"
+                @change="handleTotalTime" />
+            </el-form-item>
+          </el-col>
+          <el-col :span="8">
+            <el-form-item label="操作者:" prop="nickName" label-width="82px">
+              <el-input v-model.trim="form.nickName" placeholder="请输入操作者" readonly :clearable="true"
+                style="width: 220px; margin-left: 8px">
+                <template #append>
+                  <el-button icon="Search" @click="handleSelectUserSingle" />
+                </template></el-input>
+            </el-form-item>
+          </el-col>
+          <el-col :span="7">
+            <el-form-item label="总工时:" prop="workingHoursTime" label-width="82px">
+              <el-input v-model.trim="workingHoursTime" :disabled="true" style="width: 220px; margin-left: 0px" />
+            </el-form-item>
+          </el-col>
+        </el-row>
+      </el-form>
+      <!-- 搜索区域 -->
+      <el-form class="list-search-container" :inline="true">
+        <el-form-item class="section-title" label="废品信息" />
+      </el-form>
+      <!-- 列表区 -->
+      <div class="el-table-container">
+        <el-table ref="dayworkItemRejectTable" v-loading="loading" row-key="id" :data="form.groupRejectList"
+          height="100%">
+          <el-table-column type="index" label="行号" width="60" align="center">
+            <template #default="scope">
+              {{ scope.$index + 1 }}
+            </template>
+          </el-table-column>
+          <el-table-column prop="dayworkItem.nickName" label="生产工序加工人" align="center"></el-table-column>
+          <el-table-column prop="dayworkItem.startTime" label="开始时间" align="center"></el-table-column>
+          <el-table-column prop="dayworkItem.endTime" label="结束时间" align="center"></el-table-column>
+          <el-table-column prop="prodNum" label="投产数量" align="center"></el-table-column>
+          <el-table-column prop="rejectNum" label="废品数量" align="center">
+            <template #default="scope">
+              <div v-if="!editStatus"> {{ scope.row.rejectNum }}</div>
+              <el-input-number v-else v-model="scope.row.rejectNum" style="width: 100px" :step="1" step-strictly
+                :controls="false" />
+            </template>
+          </el-table-column>
+          <el-table-column prop="qualifiedNum" label="合格数量" align="center"></el-table-column>
+          <!-- <el-table-column fixed="right" label="操作" align="center">
+            <template #default="scope">
+              <el-button link type="danger" icon="Delete" :disabled="!editStatus"
+                @click="handleDeleteReject(scope.row)">删除
+              </el-button>
+            </template>
+          </el-table-column> -->
+        </el-table>
+      </div>
+      <!-- 搜索人员弹窗 -->
+      <dialog-person ref="dialogPersonRef" :single-selected="handleGetUser" />
+    </div>
+  </el-drawer>
+</template>
+<script setup>
+import {
+  getDayworkItemInfo,
+  updateDayworkItemInfo
+} from "@/api/business/dayworkAuxiliaryItem.js";
+import { ref } from "vue";
+import dialogPerson from "./person.vue"
+
+const { proxy } = getCurrentInstance();
+const emit = defineEmits(["handleSaveSuccess"]);
+/** 字典 */
+const { daywork_status_edit } = proxy.useDict("daywork_status_edit");
+const { daywork_status_first } = proxy.useDict("daywork_status_first");
+const { daywork_status_second } = proxy.useDict("daywork_status_second");
+const { waste_causes } = proxy.useDict("waste_causes");
+const detailInfo = ref({});
+const loading = ref(false);
+const processList = ref([]);
+const lotId = ref(null);
+const equipmentList = ref([]);
+const visible = ref(false);
+const isFirst = ref(true); //是否为首序
+const editStatus = ref(false);
+const currentDept = ref(false);
+const rejectAmount = ref(0);
+const dynamicOptions = ref([]);
+const workingHoursTime = ref("");
+const maxQuailifiedNum = ref(0);
+const detailsRow = {
+  id: null,
+  rejectNum: "",
+  reason: "",
+};
+// const validateprodNum = (rule, value, callback) => {
+//   if (value <= 0) {
+//     callback(new Error("投产量应大于0"));
+//   } else {
+//     callback();
+//   }
+// };
+const validateWorkingHours = (rule, value, callback) => {
+  if (form.value.workHoursTimestamp < 0) {
+    callback(new Error("结束时间应晚于开始时间"));
+  } else {
+    callback();
+  }
+};
+const validateQualifiedNum = (rule, value, callback) => {
+  const max = maxQuailifiedNum.value;
+  if (value < 0) {
+    callback(new Error("合格数量应大于/等于0"));
+  } else {
+    callback();
+  }
+
+  // else if (
+  //   value > max &&
+  //   detailInfo.value.firstProcessId != form.value.processId
+  // ) {
+  //   callback(new Error("合格数量不应大于投产量的103%,即" + max));
+  // }
+};
+const validateEndTime = (rule, value, callback) => {
+  if (form.value.status > 1) {
+    if (form.value.endTime == null) {
+      callback(new Error("结束时间不能为空"));
+    } else {
+      callback();
+    }
+  } else {
+    if (form.value.endTime != null) {
+      callback(new Error("该状态结束时间应为空"));
+    } else {
+      callback();
+    }
+  }
+};
+const validateStartTime = (rule, value, callback) => {
+  if (form.value.status > 1) {
+    if (form.value.startTime == null) {
+      callback(new Error("开始时间不能为空"));
+    } else {
+      callback();
+    }
+  } else {
+    callback();
+  }
+};
+const data = reactive({
+  form: {
+    groupRejectList: [],
+    nickName: "",
+    processId: "",
+    processAlias: "",
+    prodNum: 0,
+    qualifiedNum: 0,
+    rejectNum: 0,
+    startTime: "",
+    endTime: "",
+    workingHours: 0,
+    status: "",
+    workHoursTimestamp: 0,
+  },
+  rules: {
+    // prodNum: [
+    //   { required: true, message: "投产量不能为空", trigger: "blur" },
+    //   { validator: validateprodNum, trigger: "blur" },
+    // ],
+    startTime: [{ validator: validateStartTime, trigger: "blur" }],
+    endTime: [{ validator: validateEndTime, trigger: "blur" }],
+    workingHoursTime: [{ validator: validateWorkingHours, trigger: "change" }],
+    qualifiedNum: [
+      { required: true, message: "合格数量不能为空", trigger: "blur" },
+      { validator: validateQualifiedNum, trigger: "blur" },
+    ],
+  },
+});
+
+const { form, rules } = toRefs(data);
+
+/***********************  方法区  ****************************/
+/** 打开抽屉 */
+const open = (row) => {
+  reset();
+  loading.value = true;
+  dynamicOptions.value = daywork_status_first.value;
+  console.log(daywork_status_first)
+  console.log(daywork_status_second)
+  console.log(daywork_status_edit)
+  if (row.id) {
+    getDayworkItemInfo(row.id).then(
+      (response) => {
+        if (response.code == 200) {
+          // for (let i = 0; i < response.data.length; i++) {
+          //   response.data[i].rejectNum = parseInt(response.data[i].rejectNum);
+          // }
+          form.value = response.data
+          form.value.groupRejectList = response.data.rejectList
+          console.log(form.value)
+          if (form.value.status == '3') {
+            editStatus.value = true
+          } else {
+            editStatus.value = false
+          }
+        }
+      }
+    );
+    loading.value = false;
+    visible.value = true;
+  }
+};
+//操作者人员带回
+function handleGetUser(selection) {
+  form.value.nickName = selection.nickName;
+  form.value.userId = selection.userId;
+  form.value.userName = selection.userName;
+}
+function handleSelectUserSingle() {
+  proxy.$refs.dialogPersonRef.open()
+}
+/**
+ * 对话框关闭 事件
+ */
+function close() {
+  reset();
+  visible.value = false;
+}
+
+/** 表单重置 */
+function reset() {
+  form.value = {
+    groupRejectList: [],
+    nickName: "",
+    processId: null,
+    processAlias: "",
+    prodNum: 0,
+    qualifiedNum: 0,
+    rejectNum: 0,
+    startTime: "",
+    endTime: "",
+    workingHours: 0,
+  };
+  proxy.resetForm("dayworkItemRef");
+}
+
+/** 提交按钮 */
+const handleSave = () => {
+  proxy.$refs["dayworkItemRef"].validate((valid) => {
+    if (valid) {
+      rejectAmount.value = 0;
+      var reasonList = [];
+      var flag = true;
+
+      form.value.workingHours = form.value.workHoursTimestamp;
+      //设备id和code
+      for (let i = 0; i < equipmentList.value.length; i++) {
+        if (form.value.equipmentDetailId == equipmentList.value[i].value) {
+          form.value.equipmentDetailCode = equipmentList.value[i].label;
+        }
+      }
+      if (flag) {
+        if (form.value.groupRejectList.length > 0) {
+          form.value.groupRejectList.forEach(item => {
+            item.deptId = detailInfo.value.deptId
+            item.processId = detailInfo.value.processId
+          });
+        }
+        form.value.dayworkId = detailInfo.value.dayworkId;
+        //同工序的所有合格数
+        form.value.temporaryProcessQualifiedNum =
+          detailInfo.value.totalQuailifiedNum + form.value.qualifiedNum;
+        //如果状态从工序已完成改成结束报工,传给后端一个标记,如果为true,则删除中间表对应的数据
+        if (detailInfo.value.status == 3 && form.value.status == 2) {
+          form.value.dayworkId = detailInfo.value.dayworkId;
+          form.value.flag = true;
+        }
+        let data = form.value;
+        data.lotId = lotId.value;
+
+        const max = maxQuailifiedNum.value;
+        let sunm =
+          detailInfo.value.totalQuailifiedNum + form.value.qualifiedNum; //计算总合格数
+        let num = sunm - form.value.prodNum; //多出来的数量
+        let percent = (sunm / form.value.prodNum) * 100; //合格率
+        percent = Math.ceil(percent * 100) / 100; //只入不舍
+        updateDayworkItem();
+      }
+    }
+  });
+};
+
+//页面提交方法
+function updateDayworkItem() {
+  updateDayworkItemInfo(form.value).then((res) => {
+    if (res.code == 200) {
+      proxy.$modal.msgSuccess("保存成功!");
+      visible.value = false;
+      emit("handleSaveSuccess");
+    } else {
+      proxy.$modal.msgError("保存失败!");
+    }
+  });
+}
+
+//删除废弃信息
+function handleDeleteReject(row) {
+  form.value.groupRejectList.splice(form.value.groupRejectList.indexOf(row), 1);
+}
+
+//添加废弃信息
+function handleAddReject() {
+  const newDetail = JSON.parse(JSON.stringify(detailsRow));
+  newDetail.rejectNum = 0;
+  newDetail.dayworkId = detailInfo.value.dayworkId;
+  newDetail.dayworkItemId = detailInfo.value.id;
+  newDetail.lotId = detailInfo.value.lotId;
+  form.value.groupRejectList.push(newDetail);
+}
+
+//计算总工时
+function handleTotalTime() {
+  if (form.value.endTime == null) {
+    workingHoursTime.value = "0小时0分钟0秒";
+    form.value.workHoursTimestamp = 0;
+  } else {
+    form.value.workHoursTimestamp =
+      new Date(form.value.endTime) - new Date(form.value.startTime);
+    let seconds = Math.floor((form.value.workHoursTimestamp / 1000) % 60);
+    let minutes = Math.floor(
+      (form.value.workHoursTimestamp / (1000 * 60)) % 60
+    );
+    let hours = Math.floor(form.value.workHoursTimestamp / (1000 * 60 * 60));
+    let time = `${hours}小时${minutes}分钟${seconds}秒`;
+    workingHoursTime.value = time;
+  }
+}
+
+//当生产状态为未开始、生产中时,结束时间为空,合格数为0,废弃信息为空
+function handleChangeStatus() {
+  if (form.value.status == 1) {
+    form.value.endTime = null;
+    workingHoursTime.value = "0小时0分钟0秒";
+    form.value.workingHours = 0;
+    form.value.groupRejectList = [];
+    form.value.qualifiedNum = 0;
+  }
+  if (form.value.status == 0) {
+    form.value.endTime = null;
+    form.value.startTime = null;
+    workingHoursTime.value = "0小时0分钟0秒";
+    form.value.workingHours = 0;
+    form.value.groupRejectList = [];
+    form.value.qualifiedNum = 0;
+    form.value.equipmentDetailId = null;
+    form.value.equipmentDetailCode = null;
+  }
+}
+
+/** 取消按钮 */
+const handleCancel = () => {
+  visible.value = false;
+  reset();
+}
+
+/** 暴露给父组件的方法 */
+defineExpose({
+  open,
+})
+</script>
+<style scoped>
+.el-select-v2__placeholder {
+  display: flex !important;
+}
+</style>

+ 418 - 0
src/views/business/auxiliaryDaywork/index.vue

@@ -0,0 +1,418 @@
+<template>
+  <div class="page-container row-container">
+    <!-- 左侧区域 -->
+    <section class="list-part-container" style="flex: 3">
+      <!-- 搜索区 -->
+      <el-form class="list-search-container" :model="queryDayworkParams" ref="queryRef" :inline="true"
+        style="margin-right: 0px">
+        <el-form-item class="section-title" label="生产批次" />
+        <el-form-item label="生产计划单号:">
+          <el-input placeholder="请输入生产计划单号/批次号" v-model.trim="queryDayworkParams.productionPlanNo"
+            @keydown.enter.prevent clearable style="width: 200px" />
+        </el-form-item>
+        <el-form-item label="产品描述:">
+          <el-input placeholder="请输入产品描述" v-model.trim="queryDayworkParams.productDescription" @keydown.enter.prevent
+            clearable style="width: 130px" />
+        </el-form-item>
+        <el-form-item style="margin-left: 0">
+          <el-button type="info" icon="Search" @click="handleQuery">搜索
+          </el-button>
+        </el-form-item>
+      </el-form>
+      <div class="el-table-container">
+        <div class="el-table-inner-container">
+          <el-table ref="dayworkTable" :data="dayworkList" v-loading="dayworkLoading" highlight-current-row
+            height="100%" @current-change="handleDayworkCurrentChange">
+            <el-table-column label="客户简称" prop="companyAlias" width="120" align="center" />
+            <el-table-column label="生产计划单号" prop="productionPlanNo" width="100" align="center" />
+            <el-table-column label="批次号" min-width="120" prop="lotCode" align="center">
+              <template #default="scope">
+                <el-button v-if="permissionFlag || useUserStore().user.userId == 1" link type="primary"
+                  @click="handleColumnClick(scope.row)"><span>{{ scope.row.lotCode }}</span></el-button>
+                <span v-else>{{ scope.row.lotCode }}</span>
+              </template>
+            </el-table-column>
+            <el-table-column label="产品描述" prop="productDescription" align="center" />
+            <el-table-column label="图纸版本" prop="technologyVersion" width="60" align="center" />
+            <el-table-column label="投产量" prop="productionQuantity" width="60" align="center" />
+            <el-table-column label="下达日期" prop="createTime" width="100" align="center">
+              <template #default="scope">
+                <span>{{
+        proxy.moment(scope.row.createTime).format("YYYY-MM-DD")
+      }}</span>
+              </template>
+            </el-table-column>
+            <el-table-column label="报工总时长" prop="totalWorkingHours" width="150" align="center" />
+          </el-table>
+        </div>
+      </div>
+      <!-- 分页 -->
+      <pagination v-show="total > 0" :total="total" v-model:page="queryDayworkParams.pageNum"
+        v-model:limit="queryDayworkParams.pageSize" @pagination="getDayworks" />
+    </section>
+    <!-- 右侧区域 -->
+    <section class="list-part-container" style="flex: 2">
+      <el-form class="list-search-container" :inline="true">
+        <el-form-item class="section-title" label="辅助报工信息" />
+        <el-form-item class="section-title" label="请选择工序:" prop="processId">
+          <el-select-v2 v-model="queryItemParams.auxiliaryProcessId" clearable :options="processList"
+            placeholder="请选择工序" style="width: 100%" @change="handleProcessChange" />
+        </el-form-item>
+        <el-form-item style="margin-left: 0">
+          <el-button type="info" @click="handleOpenHistory">历史记录
+          </el-button>
+        </el-form-item>
+      </el-form>
+
+      <div class="el-table-container">
+        <div class="el-table-inner-container">
+          <el-table :data="dayworkItemList" v-loading="dayworkItemLoading" height="100%">
+            <el-table-column label="操作者" prop="nickName" width="60" align="center" />
+            <el-table-column label="生产工序" prop="processAlias" align="center" />
+            <el-table-column label="辅助工序" prop="auxiliaryProcessAlias" align="center" />
+            <el-table-column label="开始时间" prop="startTime" width="160" align="center" />
+            <el-table-column label="结束时间" prop="endTime" width="160" align="center" />
+            <el-table-column label="总工时" prop="workingHours" width="160" align="center" />
+            <el-table-column label="生产状态" prop="status" width="100" align="center">
+              <template #default="scope">
+                <dict-tag :options="daywork_status" :value="scope.row.status" />
+              </template>
+            </el-table-column>
+            <el-table-column fixed="right" label="操作" align="center" width="200px">
+              <template #default="scope">
+                <el-button link type="warning" icon="Edit" @click="handleUpdateDayworkItem(scope.row)">编辑
+                </el-button>
+              </template>
+            </el-table-column>
+          </el-table>
+        </div>
+      </div>
+      <!-- 分页 -->
+      <pagination v-show="itemTotal > 0" :total="itemTotal" v-model:page="queryItemParams.pageNum"
+        v-model:limit="queryItemParams.pageSize" @pagination="getDayworkItems" />
+    </section>
+    <!-- 报工信息表单 -->
+    <daywork-item-form ref="dayworkItemRef" @handleSaveSuccess="handleGetDayworkItems" />
+    <!-- 分选报工信息表单 -->
+    <sort-item-form ref="sortItemRef" @handleSaveSuccess="handleGetDayworkItems" />
+    <!-- 报工历史修改表单 -->
+    <dialog-daywork-item-history ref="dialogDayworkItemHistoryRef" />
+  </div>
+</template>
+
+<script setup>
+import {
+  listDaywork,
+  getProcessList,
+  delDayworkItem
+} from "@/api/business/daywork.js";
+import { listDeptProcess } from "@/api/business/deptProcess";
+import { listDayworkItem } from '@/api/business/dayworkAuxiliaryItem'
+import { selectUserPermissionList } from "@/api/system/user.js";
+import router from "@/router";
+import useUserStore from '@/store/modules/user'
+import { allListProcess } from '@/api/business/auxiliaryProcess'
+import dayworkItemForm from "./form";
+// import sortItemForm from "./sortForm"
+// import DialogDayworkItemHistory from "./DialogDayworkItemHistory.vue";
+
+const { proxy } = getCurrentInstance();
+
+/** 字典 */
+const { daywork_status } = proxy.useDict("daywork_status");
+
+/** 生产批次 */
+const dayworkList = ref([]);
+const dayworkTable = ref(null);
+const currentDaywork = ref({});
+const dayworkLoading = ref(false);
+const total = ref(0);
+/**工段 */
+const permissionFlag = ref(false);
+const loading = ref(false);
+/** 报工信息 */
+const dayworkItemList = ref([]);
+const dayworkItemLoading = ref(false);
+const itemTotal = ref(0);
+const lastStatus = ref(null)
+const latestProcessId = ref(null);
+const latestDeptId = ref(null)
+const permissionList = ref(null)
+const deptProcessList = ref([]);
+/**工序 */
+const processList = ref([]);
+/** 查询对象 */
+const queryDayworkParams = ref({
+  productDescription: "",
+  deptId: "",
+  lotCode: "",
+  pageNum: 1,
+  pageSize: 10,
+});
+const queryItemParams = ref({
+  dayworkId: "0",
+  isAmend: 0,
+  isWasteRecycling: 0,
+  pageNum: 1,
+  pageSize: 10,
+  technologicalProcessDetailId: null,
+});
+
+/***********************  工段相关事件  ****************************/
+function getList() {
+  loading.value = true;
+  getPremission();
+  getDayworks()
+}
+
+//切换工段
+function handleDeptChange() {
+  getDayworks();
+}
+
+/***********************  生产批次相关事件  ****************************/
+
+/** 查询计划明细 */
+function getDayworks() {
+  dayworkLoading.value = true;
+  listDaywork(queryDayworkParams.value).then((res) => {
+    dayworkList.value = res.rows;
+    for (var i = 0; i < dayworkList.value.length; i++) {
+      let timeStamp = dayworkList.value[i].totalWorkingHours;
+      let seconds = Math.floor((timeStamp / 1000) % 60);
+      let minutes = Math.floor((timeStamp / (1000 * 60)) % 60);
+      let hours = Math.floor(timeStamp / (1000 * 60 * 60));
+      let time = `${hours}小时${minutes}分钟${seconds}秒`;
+      dayworkList.value[i].totalWorkingHours = time;
+    }
+    total.value = res.total;
+    dayworkLoading.value = false;
+    // 批次
+    if (dayworkList.value.length > 0) {
+      proxy.$refs.dayworkTable.setCurrentRow(dayworkList.value[0]);
+      console.log(dayworkList.value[0])
+    } else {
+      dayworkItemList.value = [];
+      itemTotal.value = 0;
+    }
+  });
+}
+function getPremission() {
+  selectUserPermissionList({ userId: useUserStore().user.userId }).then(res => {
+    permissionList.value = res.data
+    console.log(permissionList.value)
+    if (permissionList.value.indexOf("business:productionPlan:query") != -1) {
+      permissionFlag.value = true
+    } else {
+      permissionFlag.value = false
+    }
+  })
+}
+
+/** 打开批次详情页 */
+function handleColumnClick(row) {
+  router.push({ path: "/reviseBath/lotFormParticulars/" + row.lotCode });
+}
+// 打开历史修改弹窗
+function handleOpenHistory() {
+  proxy.$refs.dialogDayworkItemHistoryRef.open(currentDaywork.value.id);
+}
+
+/** 生产计划明细 current-change 事件 */
+function handleDayworkCurrentChange(row) {
+  if (row) {
+    queryItemParams.value.processId = null;
+    currentDaywork.value = row;
+    queryItemParams.value.dayworkId = currentDaywork.value.id;
+    queryItemParams.value.isAmend = row.isAmend;
+    queryItemParams.value.isWasteRecycling = row.isWasteRecycling;
+    queryItemParams.value.technologicalProcessDetailId = null;
+    queryItemParams.value.technologicalProcessId = row.technologicalProcessId;
+    getDayworkItems();
+  } else {
+    dayworkItemList.value = [];
+    itemTotal.value = 0;
+  }
+}
+
+/***********************  报工信息相关事件  ****************************/
+//查询报工信息数据
+function handleGetDayworkItems() {
+  dayworkLoading.value = true;
+  listDaywork(queryDayworkParams.value).then((res) => {
+    dayworkList.value = res.rows;
+    for (var i = 0; i < dayworkList.value.length; i++) {
+      let timeStamp = dayworkList.value[i].totalWorkingHours;
+      let seconds = Math.floor((timeStamp / 1000) % 60);
+      let minutes = Math.floor((timeStamp / (1000 * 60)) % 60);
+      let hours = Math.floor(timeStamp / (1000 * 60 * 60));
+      let time = `${hours}小时${minutes}分钟${seconds}秒`;
+      dayworkList.value[i].totalWorkingHours = time;
+    }
+    total.value = res.total;
+    dayworkLoading.value = false;
+    if (dayworkList.value.length > 0) {
+      for (var i = 0; i < dayworkList.value.length; i++) {
+        if (dayworkList.value[i].id == currentDaywork.value.id) {
+          var index = i;
+          break;
+        }
+      }
+    }
+    proxy.$refs.dayworkTable.setCurrentRow(dayworkList.value[index]);
+  });
+}
+//删除报工信息
+function handleDeletedItem(id) {
+  proxy.$modal
+    .confirm("是否确认删除选中的数据项?")
+    .then(function () {
+      delDayworkItem(id).then(res => {
+        if (res.code == 200) {
+          proxy.$modal.msgSuccess("删除成功")
+          listDaywork(queryDayworkParams.value).then((res) => {
+            dayworkList.value = res.rows;
+            for (var i = 0; i < dayworkList.value.length; i++) {
+              let timeStamp = dayworkList.value[i].totalWorkingHours;
+              let seconds = Math.floor((timeStamp / 1000) % 60);
+              let minutes = Math.floor((timeStamp / (1000 * 60)) % 60);
+              let hours = Math.floor(timeStamp / (1000 * 60 * 60));
+              let time = `${hours}小时${minutes}分钟${seconds}秒`;
+              dayworkList.value[i].totalWorkingHours = time;
+            }
+            total.value = res.total;
+            // 批次
+            proxy.$refs.dayworkTable.setCurrentRow(dayworkList.value[dayworkList.value.findIndex(daywork => daywork.id == currentDaywork.value.id)]);
+          });
+        }
+      })
+    })
+}
+//修改报工信息
+function handleUpdateDayworkItem(row) {
+  //同工序下状态是否有工序已完成
+  let processFinish = false;
+  //除了编辑此条以外的同工序合格数
+  let totalQuailifiedNum = 0;
+  for (let i = 0; i < dayworkItemList.value.length; i++) {
+    if (
+      row.processId == dayworkItemList.value[i].processId &&
+      (dayworkItemList.value[i].status == 2 ||
+        dayworkItemList.value[i].status == 3) &&
+      row.id != dayworkItemList.value[i].id
+    ) {
+      totalQuailifiedNum += dayworkItemList.value[i].qualifiedNum;
+    }
+    if (
+      row.processId == dayworkItemList.value[i].processId &&
+      dayworkItemList.value[i].status == 3 &&
+      row.id != dayworkItemList.value[i].id
+    ) {
+      processFinish = true;
+    }
+  }
+  let maxQuailifiedNum =
+    Math.floor(row.prodNum * 1.03 - totalQuailifiedNum) > 0
+      ? Math.floor(row.prodNum * 1.03 - totalQuailifiedNum)
+      : 0;
+  //该daywork合格数总数不能超过投产数的103%
+  row.technologicalProcessId = queryItemParams.value.technologicalProcessId;
+  row.deptId = queryDayworkParams.value.deptId;
+  row.productionPlanNo = currentDaywork.value.productionPlanNo;
+  row.productDescription = currentDaywork.value.productDescription;
+  row.productionPlanDetailId = currentDaywork.value.productionPlanDetailId;
+  row.dayworkId = currentDaywork.value.id;
+  row.lotId = currentDaywork.value.lotId;
+  row.isAmend = currentDaywork.value.isAmend;
+  row.isWasteRecycling = currentDaywork.value.isWasteRecycling;
+  row.maxQuailifiedNum = maxQuailifiedNum;
+  row.technologyVersion = currentDaywork.value.technologyVersion
+  row.lotCode = currentDaywork.value.lotCode;
+  row.totalQuailifiedNum = totalQuailifiedNum;
+  // console.log(row, currentDaywork)
+  row.productId = currentDaywork.value.productId
+  //判断是否是当前工段
+  if (row.deptId == currentDaywork.value.deptId) {
+    row.currentDept = true;
+  } else {
+    row.currentDept = false;
+  }
+  //如果为true,则同工序已有工序已完成
+  row.processFinish = processFinish;
+  // if (row.isSort == 0) {
+  //   proxy.$refs.dayworkItemRef.open(row);
+  // } else {
+  //   proxy.$refs.sortItemRef.open(row);
+  // }
+  proxy.$refs.dayworkItemRef.open(row);
+}
+
+//查看报工信息
+function handleCheckDayworkItem(row) {
+  row.technologicalProcessId = queryItemParams.value.technologicalProcessId;
+  row.deptId = queryDayworkParams.value.deptId;
+  row.productionPlanDetailId = currentDaywork.value.productionPlanDetailId;
+  row.isAmend = currentDaywork.value.isAmend;
+  row.isWasteRecycling = currentDaywork.value.isWasteRecycling;
+  row.dayworkId = currentDaywork.value.id;
+  row.lotId = currentDaywork.value.lotId;
+  //判断是否是当前工段
+  if (row.deptId == currentDaywork.value.deptId) {
+    row.currentDept = true;
+  } else {
+    row.currentDept = false;
+  }
+  //修改向form表单传一个状态值
+  row.editStatus = false;
+  // row.returnFlag = false;
+  // //如果是最新工序的已接收,则传一个状态值,给form表单一个退回按钮
+  // if (row.processId == latestProcessId.value && row.status == 7) {
+  //   row.returnFlag = true;
+  // }
+  if (row.isSort == 0) {
+    proxy.$refs.dayworkItemRef.open(row);
+  } else {
+    proxy.$refs.sortItemRef.open(row);
+  }
+}
+
+/**切换工序 */
+function handleProcessChange() {
+  getDayworkItems();
+}
+
+/** 报工详情列表 */
+function getDayworkItems() {
+  dayworkItemLoading.value = true;
+  listDayworkItem(queryItemParams.value).then((res) => {
+    dayworkItemList.value = res.rows;
+    itemTotal.value = res.total;
+    dayworkItemLoading.value = false;
+  });
+
+}
+//工序信息
+function getProcess() {
+  //工序下拉框
+  allListProcess({
+  }).then((res) => {
+    processList.value = res.rows.map(v => ({ label: v.name, value: v.id, ...v }))
+  });
+}
+
+/** 搜索按钮操作 */
+function handleQuery() {
+  getDayworks();
+}
+
+onMounted(() => {
+  getList();
+});
+
+getProcess();
+</script>
+<style scoped>
+.el-form--inline .el-form-item {
+  margin-right: 20px;
+}
+</style>

+ 134 - 0
src/views/business/auxiliaryDaywork/person.vue

@@ -0,0 +1,134 @@
+<template>
+  <el-dialog title="员工选择" v-model="visible" :width="width" @close="close" append-to-body draggable>
+    <el-form ref="dialogForm" class="list-search-container" :inline="true" :model="queryParams">
+      <el-form-item label="员工编码:" prop="userName">
+        <el-input v-model.trim="queryParams.userName" type="text" placeholder="请输入员工编码" @keydown.enter.prevent
+          @keyup.enter="handleSearch" style="width: 180px" clearable />
+      </el-form-item>
+      <el-form-item label="员工姓名:" prop="nickName">
+        <el-input v-model.trim="queryParams.nickName" type="text" placeholder="请输入员工姓名" @keydown.enter.prevent
+          @keyup.enter="handleSearch" style="width: 180px" clearable />
+      </el-form-item>
+      <el-form-item>
+        <el-button type="info" icon="Search" @click="handleSearch">搜索</el-button>
+      </el-form-item>
+    </el-form>
+    <el-table ref="dialogTable" :data="list" :row-key="getRowKey" v-loading="personLoading" height="440px"
+      align="center">
+      <el-table-column v-if="multiple" type="selection" width="40" align="center" />
+      <el-table-column type="index" label="行号" width="50" align="center" />
+      <el-table-column label="员工编码" prop="userName" width="100" align="center" />
+      <el-table-column label="员工姓名" prop="nickName" width="100" align="center" />
+      <el-table-column label="手机号码" prop="phoneNumber" width="150" align="center" />
+      <el-table-column label="性别" prop="sex" width="60" align="center" />
+      <el-table-column label="使用单位" prop="usageCompanyName" width="220" align="center" />
+      <el-table-column label="备注" prop="remark" align="center" />
+      <el-table-column v-if="!multiple" label="操作" width="50" align="center">
+        <template #default="scope">
+          <el-button type="success" icon="finished" circle @click="handleSingleSelected(scope.row)" />
+        </template>
+      </el-table-column>
+    </el-table>
+    <pagination v-show="total > 0" :total="total" v-model:page="queryParams.pageNum"
+      v-model:limit="queryParams.pageSize" @pagination="getList" />
+    <template #footer>
+      <div class="dialog-footer">
+        <el-button v-if="multiple" type="primary" :disabled="selections.length === 0" icon="Check"
+          @click="handleMultipleSelected">
+          确定
+        </el-button>
+        <el-button icon="Close" @click="close">取 消</el-button>
+      </div>
+    </template>
+  </el-dialog>
+</template>
+<script setup>
+import { ref } from '@vue/reactivity'
+import { getUserList } from '@/api/system/user'
+
+
+const { proxy } = getCurrentInstance()
+const total = ref(0)
+const props = defineProps({
+  width: {
+    type: String,
+    default: '1000px'
+  },
+  multiple: {
+    type: Boolean,
+    default: false
+  },
+  singleSelected: {
+    type: Function,
+    default: null
+  }
+})
+const { singleSelected } = toRefs(props)
+const list = ref([])
+const personLoading = ref(false)
+const visible = ref(false)
+const data = reactive({
+  queryParams: {
+    nickName: '',
+    userName: '',
+    pageSize: 10,
+    pageNum: 1
+  }
+})
+const { queryParams } = toRefs(data)
+/**
+ * 对话框打开 事件
+ */
+function open() {
+  visible.value = true
+  getList()
+}
+/** 获取行 id */
+function getRowKey(row) {
+  return row.userId
+}
+
+/**
+ * 对话框关闭 事件
+ */
+function close() {
+  proxy.$refs.dialogForm.resetFields()
+  proxy.$refs.dialogTable.clearSelection()
+  queryParams.value.pageNum = 1
+  visible.value = false
+}
+
+/**
+ * 加载数据
+ */
+function getList() {
+  personLoading.value = true
+  getUserList(queryParams.value).then(res => {
+    if (res.code == 200) {
+      list.value = res.rows
+      total.value = res.total
+    }
+  })
+  personLoading.value = false
+}
+
+
+/**  搜索 事件 */
+function handleSearch() {
+  queryParams.value.pageNum = 1
+  getList()
+
+}
+
+/** 单选事件 */
+function handleSingleSelected(row) {
+  if (singleSelected.value) {
+    singleSelected.value(row)
+  }
+  close()
+}
+
+defineExpose({
+  open
+})
+</script>

+ 177 - 0
src/views/business/auxiliaryProcess/index.vue

@@ -0,0 +1,177 @@
+<template>
+  <div class="page-container row-container">
+
+    <section class="list-part-container" style="flex: 2">
+      <!-- 搜索区域 -->
+      <el-form class="list-search-container" :model="queryParams" ref="queryRef" :inline="true">
+        <el-form-item class="section-title" label="辅助工序管理" />
+
+        <el-form-item label="辅助工序名称:" prop="code">
+          <el-input v-model="queryParams.name" placeholder="请输入辅助工序名称" clearable @keyup.enter="handleQuery"
+            style="width: 160px;" />
+        </el-form-item>
+        <el-form-item>
+          <el-button type="info" icon="Search" @click="handleQuery">搜索</el-button>
+        </el-form-item>
+        <el-form-item>
+          <el-button type="primary" icon="Plus" @click="handleAdd(null)"
+            v-hasPermi="['business:auxiliaryProcess:add']">新增</el-button>
+        </el-form-item>
+
+      </el-form>
+      <!-- 列表区域 -->
+      <div class="el-table-container">
+        <div class="el-table-inner-container">
+          <el-table v-loading="loading" :data="processList" border height="100%"
+            @selection-change="handleSelectionChange">
+            <!-- <el-table-column type="selection" width="55" align="center" /> -->
+            <el-table-column type="index" label="行号" width="50" align="center" />
+            <el-table-column label="辅助工序名称" align="center" prop="name">
+              <template #default="scope">
+                <el-input v-if="scope.row.editStatus" placeholder="辅助工序名称" v-model="scope.row.name"
+                  style="width: 100%;" />
+                <div v-else>{{ scope.row.name }}</div>
+              </template>
+            </el-table-column>
+            <el-table-column label="备注" align="center" prop="remark">
+              <template #default="scope">
+                <el-input v-if="scope.row.editStatus" placeholder="备注" v-model="scope.row.remark"
+                  style="width: 100%;" />
+                <div v-else>{{ scope.row.remark }}</div>
+              </template>
+            </el-table-column>
+            <el-table-column label="操作" align="center" class-name="small-padding fixed-width">
+              <template #default="scope">
+                <el-button v-if="!scope.row.editStatus" link type="warning" size="small" icon="Edit"
+                  @click="handleUpdate(scope.row)" v-hasPermi="['business:auxiliaryProcess:edit']">修改</el-button>
+                <el-button v-else link type="success" size="small" icon="Check"
+                  @click="handleSave(scope.row)">保存</el-button>
+                <el-button v-if="!scope.row.editStatus" link type="danger" size="small" icon="Delete"
+                  @click="handleDelete(scope.row, scope.$index)"
+                  v-hasPermi="['business:auxiliaryProcess:remove']">删除</el-button>
+                <el-button v-else link type="info" size="small" icon="Close" @click="handleCancel(scope.row)"
+                  v-hasPermi="['business:auxiliaryProcess:remove']">取消</el-button>
+              </template>
+            </el-table-column>
+          </el-table>
+        </div>
+      </div>
+      <pagination :total="total" v-model:page="queryParams.pageNum" v-model:limit="queryParams.pageSize"
+        @pagination="getList" />
+    </section>
+  </div>
+</template>
+
+<script setup name="Equipment">
+import { listProcess, delProcess, addProcess, updateProcess } from "@/api/business/auxiliaryProcess";
+const { proxy } = getCurrentInstance();
+const processList = ref([]);
+const loading = ref(true);
+const ids = ref([])
+const single = ref(true);
+const multiple = ref(true);
+const total = ref(0);
+/** 查询对象 */
+const queryParams = ref({
+  pageNum: 1,
+  pageSize: 10,
+  code: null,
+  name: null,
+  status: null,
+})
+
+/***********************  方法区  ****************************/
+
+/** 查询检查类别列表 */
+function getList() {
+  loading.value = true;
+  listProcess(queryParams.value).then(response => {
+    processList.value = response.rows;
+    total.value = response.total;
+    loading.value = false;
+  });
+}
+
+/** 搜索按钮操作 */
+function handleQuery() {
+  queryParams.value.pageNum = 1;
+  getList();
+}
+
+
+// 多选框选中数据
+function handleSelectionChange(selection) {
+  ids.value = selection.map(item => item.id);
+  single.value = selection.length != 1;
+  multiple.value = !selection.length;
+}
+
+/** 新增按钮操作 */
+function handleAdd() {
+  processList.value.push({ editStatus: true })
+}
+
+/** 修改按钮操作 */
+function handleUpdate(row) {
+  row.editStatus = true
+}
+
+
+/** 删除按钮操作 */
+function handleDelete(row, index) {
+  const _ids = row.id || ids.value;
+  if (row.id == null) {
+    console.log(index)
+    processList.value.splice(index, 1)
+    return
+  }
+  proxy.$modal.confirm('是否确认删除选中的数据项?').then(function () {
+    return delProcess(_ids);
+  }).then(() => {
+    getList();
+    proxy.$modal.msgSuccess("删除成功!");
+  }).catch(() => { });
+}
+
+function handleSave(row) {
+  if (row.id == null) {
+    addProcess(row).then(afterSave)
+  } else {
+    updateProcess(row).then(afterSave)
+  }
+}
+
+function afterSave(res) {
+  if (res.code === 200) {
+    getList()
+    proxy.$modal.msgSuccess("保存成功!")
+  } else {
+    proxy.$modal.msgError("保存失败!")
+  }
+}
+
+function handleCancel(row) {
+  row.editStatus = false
+}
+
+getList();
+</script>
+<style scoped>
+:deep(.el-tree-node__label) {
+  font-size: 14px !important;
+  display: inline-block;
+  width: 100%;
+}
+
+:deep(.el-tree-node__content) {
+  height: 40px;
+  border-bottom: 1px solid #ebeef5;
+  padding: 8px 0;
+  line-height: 23px;
+}
+
+.move-handle {
+  cursor: move;
+  background-color: #eee;
+}
+</style>

+ 65 - 51
src/views/business/conversion/index.vue

@@ -53,28 +53,48 @@ const data = reactive({
 
 const { queryParams } = toRefs(data)
 
+// function processChartData(rawData, selectedYear) {
+//     const monthlyData = new Array(12).fill(0); // 初始化每月数据为0
+//     console.log(rawData,542)
+//     rawData.forEach(record => {
+//         const recordDate = new Date(record.date);
+//         const recordYear = recordDate.getFullYear();
+//         const monthIndex = recordDate.getMonth();
+
+//         // 根据年份和月份设置itemNum的值
+//         if (recordYear === selectedYear) {
+//             // 这里可以根据实际情况调整逻辑
+//             itemNum.value = record.quantity; // 使用quantity作为分子
+//         }
+//     });
+
+//     // 计算每个月的电子化率
+//     for (let i = 0; i < 12; i++) {
+//         // 假设每个月的基数(分母)存储在procuctDrawing中
+//         // 这里需要根据实际情况调整逻辑来获取每个月的基数
+//         const denominator = (selectedYear === 2024 && i >= 2) ? procuctDrawing.value : 0; // 示例逻辑
+//         if (denominator > 0) {
+//             monthlyData[i] = (itemNum.value / denominator * 100).toFixed(2);
+//         }
+//     }
+
+//     return monthlyData;
+// }
+
 function processChartData(rawData, selectedYear) {
     const monthlyData = new Array(12).fill(null);
-
+    const currentYear = new Date().getFullYear();
+    const currentMonthIndex = new Date().getMonth();
     rawData.forEach(record => {
         const recordDate = new Date(record.date);
         const recordYear = recordDate.getFullYear();
         const monthIndex = recordDate.getMonth();
-        if (selectedYear < 2024) {
-            itemNum.value = 0
-        } else if (selectedYear === 2024 && monthIndex == 2) {
-            itemNum.value = 78
-        } else if (selectedYear === 2024 && monthIndex == 3) {
-            itemNum.value = 82
-        } else if (selectedYear === 2024 && monthIndex == 4) {
-            itemNum.value = 85
-        } else if (selectedYear === 2024 && monthIndex == 5) {
-            itemNum.value = 88
-        }else if (selectedYear === 2024 && monthIndex == 6) {
-            itemNum.value = 108
-        }   else if (selectedYear <= 2024 && monthIndex <= 1) {
+        if (!record.quantity) {
             itemNum.value = 0
         }
+        else if (recordYear !== currentYear || monthIndex !== currentMonthIndex) {
+            itemNum.value = record.quantity
+        }
         else {
             itemNum.value = procuctDrawing.value;
         }
@@ -94,7 +114,6 @@ function processChartData(rawData, selectedYear) {
         // 转换为百分比形式
         monthlyData[i] = parseInt(monthlyData[i]);
     }
-    console.log(monthlyData)
     return monthlyData;
 }
 
@@ -108,7 +127,6 @@ function handleCancel() {
 }
 
 function handleSave() {
-    console.log(number.value);
     addConversion({ number: number.value }).then(res => {
         if (res.code == 200) {
             proxy.$modal.msgSuccess("操作成功");
@@ -121,6 +139,7 @@ function sortDataByDateAsc(rawData) {
     return rawData.slice().sort((a, b) => new Date(a.date) - new Date(b.date));
 }
 function updateChart(monthlyData, displayMonths, selectedYear, currentYear) {
+
     echartInstance.value.setOption({
         title: { text: '工艺图纸上线率' },
         tooltip: {
@@ -132,49 +151,45 @@ function updateChart(monthlyData, displayMonths, selectedYear, currentYear) {
                 const param = params[0];
                 const monthIndex = param.dataIndex;
                 const month = displayMonths[monthIndex];
-                let requiredDocumentsThisMonth = 0;
-                var uploadedProducts = 0;
-                const sortedData = sortDataByDateAsc(rawData.value);
-                if (selectedYear < 2024) {
-                    requiredDocumentsThisMonth = 0
-                } else if (sortedData[(monthIndex - 2)]) {
-
-                    requiredDocumentsThisMonth = sortedData[(monthIndex - 2)].number;
-                } else if ((selectedYear > 2023 || (selectedYear === 2024 && monthIndex >= 2)) && !sortedData[monthIndex]) {
-                    requiredDocumentsThisMonth = 100; // 2024年3月及以后默认值为100
-                }
+                const currentYear = new Date().getFullYear();
+                const currentMonthIndex = new Date().getMonth();
+                const rawDataAsc = sortDataByDateAsc(rawData.value);
 
-                if (selectedYear < 2024) {
-                    uploadedProducts = 0
-                } else if (selectedYear === 2024 && monthIndex == 2) {
-                    uploadedProducts = 78
-                } else if (selectedYear === 2024 && monthIndex == 3) {
-                    uploadedProducts = 82
-                } else if (selectedYear === 2024 && monthIndex == 4) {
-                    uploadedProducts = 85
-                } else if (selectedYear === 2024 && monthIndex == 5) {
-                    uploadedProducts = 81
-                } else if (selectedYear === 2024 && monthIndex == 6) {
-                    uploadedProducts = 108
-                } else if (selectedYear <= 2024 && monthIndex <= 1) {
-                    uploadedProducts = 0
-                }
-                else {
+                // 初始化值
+                let rawDataItem, requiredDocumentsThisMonth = 0;
+                let uploadedProducts = 0;
+                let rate = 0;
+
+                // 遍历 rawDataAsc 来找到当前月份的数据项
+                rawDataAsc.forEach(item => {
+                    const itemDate = new Date(item.date); // 确保 item.date 是一个日期字符串或 Date 对象
+                    if (itemDate.getFullYear() === currentYear && itemDate.getMonth() === monthIndex) {
+                        rawDataItem = item;
+                    }
+                });
+
+                if (rawDataItem) {
+                    requiredDocumentsThisMonth = rawDataItem.number;
+                    uploadedProducts = rawDataItem.quantity;
+                } else if (selectedYear === currentYear && monthIndex === currentMonthIndex) {
+                    // 如果当前月份,使用 procuctDrawing.value
                     uploadedProducts = procuctDrawing.value;
                 }
 
+                // 计算上线率
                 if (requiredDocumentsThisMonth > 0) {
-                    var rate = (uploadedProducts / requiredDocumentsThisMonth * 100).toFixed(2)
-                } else {
-                    var rate = 0
+                    rate = (uploadedProducts / requiredDocumentsThisMonth * 100).toFixed(2);
                 }
+
+                // 根据业务逻辑设置 conversion_mes
                 const mes1 = conversion_mes.value[0].label;
                 const mes2 = conversion_mes.value[1].label;
+
                 return `
-                ${month}:<br/>
-                ${mes2}${uploadedProducts},<br/>
-                上线率:${rate}%
-                `;
+        ${month}:<br/>
+        ${mes2}${uploadedProducts},<br/>
+        上线率:${rate}%
+    `;
             }
         },
         xAxis: {
@@ -229,7 +244,6 @@ function getList() {
     listConversion(selectedYear).then(res => {
 
         rawData.value = sortDataByDateDesc(res.data);
-        console.log(rawData.value)
         number.value = rawData.value[0].number;
         getProcuctDrawing().then(res => {
             procuctDrawing.value = res.data;

+ 655 - 495
src/views/business/drawing/drawingDetail.vue

@@ -1,82 +1,149 @@
 <template>
-    <div class="page-container column-container">
-        <section class="list-part-container">
-            <!-- 搜索区域 -->
-            <el-form class="list-search-container" :inline="true">
-                <el-form-item label="客户:">
-                    {{ currentProduct.companyAlias }}
-                </el-form-item>
-                <el-form-item label="图号:">
-                    {{ currentProduct.drawingNumber }}
-                </el-form-item>
-                <el-form-item label="规格:">
-                    {{ currentProduct.specification }}
-                </el-form-item>
-                <el-form-item label="产品描述:">
-                    {{ currentProduct.description }}
-                </el-form-item>
-                <el-form-item>
-
-                </el-form-item>
-                <el-form-item class="section-title" label="工艺版本:">
-                    <el-select-v2 v-model="currentTechnological.productVersion" :options="technologicalProcessList"
-                        placeholder="请选择版本" @change="handelTechnological" style="width: 70px" />
-                </el-form-item>
-                <el-form-item class="section-title" label="当前工序:">
-                    <el-select-v2 v-model="technologicalDetailId" clearable :options="technologicalProcessDetailsList"
-                        placeholder="请选择工序" style="width: 160px" @change="handleDetailsChange" />
-
-
-                </el-form-item>
-            </el-form>
-
-        </section>
-        <div class="page-container row-container">
-            <section class="list-part-container" style="flex: 4">
-                <div class="list-btns-container">
-                    <el-button type="primary" icon="Plus" v-hasPermi="['business:electronicDrawings:add']"
-                        @click="handelUpload()">上传
-                    </el-button>
-                </div>
-                <div class="page-container form-container">
-
-
-                    <!-- 列表区 -->
-                    <div class="el-table-container">
-                        <el-table ref="drawingTable" v-loading="loading" row-key="id" highlight-current-row
-                            @current-change="handleSelectionChange" :data="drawingList" height="600px">
-                            <!-- <el-table-column type="selection" width="40" align="center" /> -->
-                            <el-table-column type="index" label="行号" width="50" align="center" />
-
-                            <el-table-column label="图纸" prop="drawingName" align="center" />
-                            <el-table-column label="类型" prop="pattern" align="center" width="80" />
-                            <el-table-column label="状态" width="80px" prop="recordsType" align="center">
-                                <template #default="scope">
-                                    <dict-tag :options="drawing_status" :value="scope.row.recordsType" />
-                                </template>
-                            </el-table-column>
-                            <!-- <el-table-column label="是否废弃" width="80px" prop="abandoned" align="center">
+  <div class="page-container column-container">
+    <section class="list-part-container">
+      <!-- 搜索区域 -->
+      <el-form class="list-search-container" :inline="true">
+        <el-form-item label="客户:">
+          {{ currentProduct.companyAlias }}
+        </el-form-item>
+        <el-form-item label="图号:">
+          {{ currentProduct.drawingNumber }}
+        </el-form-item>
+        <el-form-item label="规格:">
+          {{ currentProduct.specification }}
+        </el-form-item>
+        <el-form-item label="产品描述:">
+          {{ currentProduct.description }}
+        </el-form-item>
+        <el-form-item> </el-form-item>
+        <el-form-item class="section-title" label="工艺版本:">
+          <el-select-v2
+            v-model="currentTechnological.productVersion"
+            :options="technologicalProcessList"
+            placeholder="请选择版本"
+            @change="handelTechnological"
+            style="width: 70px"
+          />
+        </el-form-item>
+        <el-form-item class="section-title" label="当前工序:">
+          <el-select-v2
+            v-model="technologicalDetailId"
+            clearable
+            :options="technologicalProcessDetailsList"
+            placeholder="请选择工序"
+            style="width: 160px"
+            @change="handleDetailsChange"
+          />
+        </el-form-item>
+      </el-form>
+    </section>
+    <div class="page-container row-container">
+      <section class="list-part-container" style="flex: 4">
+        <div class="list-btns-container">
+          <el-button
+            type="primary"
+            icon="Plus"
+            v-hasPermi="['business:electronicDrawings:add']"
+            @click="handelUpload()"
+            >上传
+          </el-button>
+        </div>
+        <div class="page-container form-container">
+          <!-- 列表区 -->
+          <div class="el-table-container">
+            <el-table
+              ref="drawingTable"
+              v-loading="loading"
+              row-key="id"
+              highlight-current-row
+              @current-change="handleSelectionChange"
+              :data="drawingList"
+              height="600px"
+            >
+              <!-- <el-table-column type="selection" width="40" align="center" /> -->
+              <el-table-column
+                type="index"
+                label="行号"
+                width="50"
+                align="center"
+              />
+
+              <el-table-column label="图纸" prop="drawingName" align="center" />
+              <el-table-column
+                label="类型"
+                prop="pattern"
+                align="center"
+                width="80"
+              />
+              <el-table-column
+                label="状态"
+                width="80px"
+                prop="recordsType"
+                align="center"
+              >
+                <template #default="scope">
+                  <dict-tag
+                    :options="drawing_status"
+                    :value="scope.row.recordsType"
+                  />
+                </template>
+              </el-table-column>
+              <!-- <el-table-column label="是否废弃" width="80px" prop="abandoned" align="center">
                                 <template #default="scope">
                                     <dict-tag :options="drawing_type" :value="scope.row.abandoned" />
                                 </template>
                             </el-table-column> -->
-                            <el-table-column label="制作人" width="100px" prop="producer" align="center" />
-                            <el-table-column label="审核人" width="100px" prop="reviewer" align="center" />
-                            <el-table-column label="批准人" width="100px" prop="issuer" align="center" />
-                            <el-table-column fixed="right" label="操作" align="center">
-                                <template #default="scope">
-                                    <el-button-group
-                                        style="display: flex;align-items: center; justify-content: center;  flex-wrap: nowrap;">
-                                        <el-button
-                                            v-if="scope.row.status == 0 && scope.row.abandoned == 0 && scope.row.producerId != 0"
-                                            link type="primary" v-hasPermi="['business:electronicDrawings:examine']"
-                                            @click="handlePreview(scope.row)">审核
-                                        </el-button>
-                                        <el-button v-if="scope.row.status == 1" link type="success" plain
-                                            v-hasPermi="['business:electronicDrawings:raift']"
-                                            @click="handlePreview(scope.row)">批准</el-button>
-
-                                        <!-- <el-upload style="display: flex;align-items: center; justify-content: center;"
+              <el-table-column
+                label="制作人"
+                width="100px"
+                prop="producer"
+                align="center"
+              />
+              <el-table-column
+                label="审核人"
+                width="100px"
+                prop="reviewer"
+                align="center"
+              />
+              <el-table-column
+                label="批准人"
+                width="100px"
+                prop="issuer"
+                align="center"
+              />
+              <el-table-column fixed="right" label="操作" align="center">
+                <template #default="scope">
+                  <el-button-group
+                    style="
+                      display: flex;
+                      align-items: center;
+                      justify-content: center;
+                      flex-wrap: nowrap;
+                    "
+                  >
+                    <el-button
+                      v-if="
+                        scope.row.status == 0 &&
+                        scope.row.abandoned == 0 &&
+                        scope.row.producerId != 0
+                      "
+                      link
+                      type="primary"
+                      v-hasPermi="['business:electronicDrawings:examine']"
+                      @click="handlePreview(scope.row)"
+                      >审核
+                    </el-button>
+                    <el-button
+                      v-if="scope.row.status == 1"
+                      link
+                      type="success"
+                      plain
+                      v-hasPermi="['business:electronicDrawings:raift']"
+                      @click="handlePreview(scope.row)"
+                      >批准</el-button
+                    >
+
+                    <!-- <el-upload style="display: flex;align-items: center; justify-content: center;"
                                             :action="webHost + '/common/upload'" :headers="headers" :limit="1"
                                             :on-success="handleReplaceSuccess" :on-exceed="handleReplaceExceed"
                                             :before-upload="beforeUpload" :show-file-list="false">
@@ -85,522 +152,615 @@
                                                 v-hasPermi="['business:electronicDrawings:replace']">替换</el-button>
                                         </el-upload> -->
 
-                                        <el-button v-if="scope.row.status == 2 && scope.row.abandoned == 0" link
-                                            type="warning" v-hasPermi="['business:electronicDrawings:replace']"
-                                            @click="replaceClick(scope.row)">替换
-                                        </el-button>
-
-                                        <el-button
-                                            v-if="(scope.row.status == 0 || scope.row.status == 1) && scope.row.abandoned == 0 && scope.row.producerId != 0"
-                                            link type="danger" v-hasPermi="['business:electronicDrawings:NG']"
-                                            @click="handleDrawingNG(scope.row)">NG
-                                        </el-button>
-                                        <el-button v-if="scope.row.status == 2 && scope.row.abandoned == 0" link
-                                            type="danger" v-hasPermi="['business:electronicDrawings:remove']"
-                                            @click="handleDrawingRemove(scope.row)">作废
-                                        </el-button>
-                                    </el-button-group>
-                                </template>
-                            </el-table-column>
-                        </el-table>
-                    </div>
-                    <!-- 分页 -->
-                    <pagination v-show="total > 0" :total="total" v-model:page="queryparams.pageNum"
-                        v-model:limit="queryparams.pageSize" @pagination="getDrawing" />
-                </div>
-            </section>
-
-            <section class="list-part-container" style="flex: 3">
-                <el-form class="list-search-container" :model="draform" ref="queryRef" :inline="true"
-                    style="margin-right: 0px">
-                    <el-form-item class="section-title" label="预览" />
-                    <el-form-item style="float: inline-end;margin-top: 8px;">
-                        <el-button :disabled="!drawingUrl" link type="primary" v-hasPermi="['business:product:remove']"
-                            @click="openDrawing">全屏预览</el-button>
-                    </el-form-item>
-                </el-form>
-                <iframe :src="drawingUrl" frameborder="no" style="width: 100%; height: 100%" scrolling="auto" />
-            </section>
+                    <el-button
+                      v-if="scope.row.status == 2 && scope.row.abandoned == 0"
+                      link
+                      type="warning"
+                      v-hasPermi="['business:electronicDrawings:replace']"
+                      @click="replaceClick(scope.row)"
+                      >替换
+                    </el-button>
 
+                    <el-button
+                      v-if="
+                        scope.row.status == 0 &&
+                        scope.row.abandoned == 0 &&
+                        scope.row.producerId != 0
+                      "
+                      link
+                      type="danger"
+                      v-hasPermi="['business:electronicDrawings:raiftNG']"
+                      @click="handleDrawingNG(scope.row)"
+                      >NG
+                    </el-button>
+                    <el-button
+                      v-if="scope.row.status == 1"
+                      link
+                      type="danger"
+                      v-hasPermi="['business:electronicDrawings:examineNG']"
+                      @click="handleDrawingNG(scope.row)"
+                      >NG
+                    </el-button>
+                    <el-button
+                      v-if="scope.row.status == 2 && scope.row.abandoned == 0"
+                      link
+                      type="danger"
+                      v-hasPermi="['business:electronicDrawings:remove']"
+                      @click="handleDrawingRemove(scope.row)"
+                      >作废
+                    </el-button>
+                  </el-button-group>
+                </template>
+              </el-table-column>
+            </el-table>
+          </div>
+          <!-- 分页 -->
+          <pagination
+            v-show="total > 0"
+            :total="total"
+            v-model:page="queryparams.pageNum"
+            v-model:limit="queryparams.pageSize"
+            @pagination="getDrawing"
+          />
         </div>
+      </section>
+
+      <section class="list-part-container" style="flex: 3">
+        <el-form
+          class="list-search-container"
+          :model="draform"
+          ref="queryRef"
+          :inline="true"
+          style="margin-right: 0px"
+        >
+          <el-form-item class="section-title" label="预览" />
+          <el-form-item style="float: inline-end; margin-top: 8px">
+            <el-button
+              :disabled="!drawingUrl"
+              link
+              type="primary"
+              @click="openDrawing"
+              >全屏预览</el-button
+            >
+          </el-form-item>
+        </el-form>
+        <iframe
+          :src="drawingUrl"
+          frameborder="no"
+          style="width: 100%; height: 100%"
+          scrolling="auto"
+        />
+      </section>
+    </div>
 
-        <!-- 添加图纸对话框 -->
-        <el-dialog title="上传文件" v-model="open" width="500px" @close="cancel" append-to-body>
-            <el-form ref="drawingRef" :model="form" :rules="rules" label-width="120px" v-loading="formLoading">
-
-
-                <el-form-item label="工序:" prop="technologicalProcessDetailId" style="margin-top: 20px;">
-                    <el-select-v2 v-model="form.technologicalProcessDetailId" clearable
-                        :options="technologicalProcessDetailsList" placeholder="请选择工序:" @change="handleDetailsFormChange"
-                        style="width: 200px" />
-                </el-form-item>
-
-                <el-form-item label="标识:" prop="identification">
-                    <el-checkbox v-model="form.identification" label="重" size="large" />
-                    <el-checkbox v-model="form.markD" label="D标识" size="large" />
-                </el-form-item>
-
-                <el-form-item label="上传文件:" prop="url">
-                    <el-input disabled v-model="form.url" placeholder="上传文件">
-                        <template #append>
-                            <el-upload :disabled="!form.technologicalProcessDetailId" :action="webHost + '/common/upload'"
-                                :headers="headers" :limit="1" :on-success="handleSuccess" :on-exceed="handleExceed"
-                                :before-upload="beforeUpload" :show-file-list="false" ref="uploadrefss">
-                                <el-button icon="Upload"></el-button>
-                            </el-upload>
-                        </template>
-                    </el-input>
-                </el-form-item>
-
-
-
-            </el-form>
-            <template #footer>
-                <div class="dialog-footer">
-                    <el-button :disabled="!form.url" type="primary" @click="submitForm">确 定</el-button>
-                    <el-button @click="cancel">取 消</el-button>
-                </div>
+    <!-- 添加图纸对话框 -->
+    <el-dialog
+      title="上传文件"
+      v-model="open"
+      width="500px"
+      @close="cancel"
+      append-to-body
+    >
+      <el-form
+        ref="drawingRef"
+        :model="form"
+        :rules="rules"
+        label-width="120px"
+        v-loading="formLoading"
+      >
+        <el-form-item
+          label="工序:"
+          prop="technologicalProcessDetailId"
+          style="margin-top: 20px"
+        >
+          <el-select-v2
+            v-model="form.technologicalProcessDetailId"
+            clearable
+            :options="technologicalProcessDetailsList"
+            placeholder="请选择工序:"
+            @change="handleDetailsFormChange"
+            style="width: 200px"
+          />
+        </el-form-item>
+
+        <el-form-item label="标识:" prop="identification">
+          <el-checkbox v-model="form.identification" label="重" size="large" />
+          <el-checkbox v-model="form.markD" label="D标识" size="large" />
+        </el-form-item>
+
+        <el-form-item label="上传文件:" prop="url">
+          <el-input disabled v-model="form.url" placeholder="上传文件">
+            <template #append>
+              <el-upload
+                :disabled="!form.technologicalProcessDetailId"
+                :action="webHost + '/common/upload'"
+                :headers="headers"
+                :limit="1"
+                :on-success="handleSuccess"
+                :on-exceed="handleExceed"
+                :before-upload="beforeUpload"
+                :show-file-list="false"
+                ref="uploadrefss"
+              >
+                <el-button icon="Upload"></el-button>
+              </el-upload>
             </template>
-        </el-dialog>
-
-    </div>
+          </el-input>
+        </el-form-item>
+      </el-form>
+      <template #footer>
+        <div class="dialog-footer">
+          <el-button :disabled="!form.url" type="primary" @click="submitForm"
+            >确 定</el-button
+          >
+          <el-button @click="cancel">取 消</el-button>
+        </div>
+      </template>
+    </el-dialog>
+  </div>
 </template>
 <script setup name="drawingDetails">
 import { ref } from "vue";
-import { getToken } from '@/utils/auth'
-import { getNormalDrawing, getListByName, saveDrawing, drawingNG, replace, drawingRemove } from "@/api/business/drawing";
-import useUserStore from '@/store/modules/user'
-import { getTechnological, getById } from '@/api/business/product'
-import { getTechnologicalProcessDetails } from '@/api/business/technologicalProcessDetail'
-
-const drawingUrl = ref('')
-const webHost = import.meta.env.VITE_APP_BASE_API
-const fileUrl = import.meta.env.VITE_PREVIEW_API
-const hostUrl = import.meta.env.VITE_HOST_URL
-
-const inNet = import.meta.env.VITE_HOST_INNET
-const outNet = import.meta.env.VITE_HOST_OUTNET
-const hostIp = import.meta.env.VITE_HOST_IP
+import { getToken } from "@/utils/auth";
+import {
+  getNormalDrawing,
+  getListByName,
+  saveDrawing,
+  drawingNG,
+  replace,
+  drawingRemove,
+} from "@/api/business/drawing";
+import useUserStore from "@/store/modules/user";
+import { getTechnological, getById } from "@/api/business/product";
+import { getTechnologicalProcessDetails } from "@/api/business/technologicalProcessDetail";
+
+const drawingUrl = ref("");
+const webHost = import.meta.env.VITE_APP_BASE_API;
+const fileUrl = import.meta.env.VITE_PREVIEW_API;
+const hostUrl = import.meta.env.VITE_HOST_URL;
+
+const inNet = import.meta.env.VITE_HOST_INNET;
+const outNet = import.meta.env.VITE_HOST_OUTNET;
+const hostIp = import.meta.env.VITE_HOST_IP;
 const { proxy } = getCurrentInstance();
 const { drawing_status } = proxy.useDict("drawing_status");
 const { drawing_type } = proxy.useDict("drawing_type");
-const uploadrefss = ref()
-const parentName = ref("")
-const total = ref(0)
+const uploadrefss = ref();
+const parentName = ref("");
+const total = ref(0);
 const route = useRoute();
-const coverName = ref("")
-const currentProduct = ref({})
-const currentTechnological = ref({})
-const formLoading = ref(false)
-const currentTechnologicalDetail = ref({})
-const technologicalProcessList = ref([])
-const technologicalProcessDetailsList = ref([])
-const technologicalDetailId = ref(null)
-const open = ref(false)
-const draform = ref({})
-const currentDrawing = ref({})
-const replaceForm = ref({})
-const repeatingDrawings = ref([])
-const drawingTable = ref(null)
+const coverName = ref("");
+const currentProduct = ref({});
+const currentTechnological = ref({});
+const formLoading = ref(false);
+const currentTechnologicalDetail = ref({});
+const technologicalProcessList = ref([]);
+const technologicalProcessDetailsList = ref([]);
+const technologicalDetailId = ref(null);
+const open = ref(false);
+const draform = ref({});
+const currentDrawing = ref({});
+const replaceForm = ref({});
+const repeatingDrawings = ref([]);
+const drawingTable = ref(null);
 const loading = ref(false);
-const drawingList = ref([])
-const headers = { Authorization: getToken() }
-const productId = ref(null)
-const technologicalprocessDetailId = ref(null)
-const processCode = ref(null)
-const productVersion = ref(null)
+const drawingList = ref([]);
+const headers = { Authorization: getToken() };
+const productId = ref(null);
+const technologicalprocessDetailId = ref(null);
+const processCode = ref(null);
+const productVersion = ref(null);
 /** 查询对象 */
 const data = reactive({
-    queryparams: {
-        pageNum: 1,
-        pageSize: 10,
-        technologicalProcessDetailId: null
-    },
-    form: {
-        pageNum: 1,
-        pageSize: 10,
-        parentId: null,
-        technologicalProcessDetailId: null,
-        groupDetailList: [],
-        code: "",
-        remark: "",
-        type: false
-    },
-    rules: {
-        technologicalProcessDetailId: [{ required: true, message: "工序不能为空", trigger: "blur" }],
-    },
+  queryparams: {
+    pageNum: 1,
+    pageSize: 10,
+    technologicalProcessDetailId: null,
+  },
+  form: {
+    pageNum: 1,
+    pageSize: 10,
+    parentId: null,
+    technologicalProcessDetailId: null,
+    groupDetailList: [],
+    code: "",
+    remark: "",
+    type: false,
+  },
+  rules: {
+    technologicalProcessDetailId: [
+      { required: true, message: "工序不能为空", trigger: "blur" },
+    ],
+  },
 });
 const { form, rules, queryparams } = toRefs(data);
 
 function getList() {
-    // 解析查询字符串
-    // var urlSearchParams = new URLSearchParams(route.params.currentProduct);
-
-    // 将 URLSearchParams 对象转换为普通对象
-    // var paramsObject = Object.fromEntries(urlSearchParams);
-
-    // currentProduct.value = paramsObject
-
-
-
-    productId.value = route.params.productId
-    productVersion.value = route.params.productVersion
-
-    if (route.params.processCode) {
-        processCode.value = route.params.processCode
-    } else {
-        technologicalDetailId.value = null
+  // 解析查询字符串
+  // var urlSearchParams = new URLSearchParams(route.params.currentProduct);
+
+  // 将 URLSearchParams 对象转换为普通对象
+  // var paramsObject = Object.fromEntries(urlSearchParams);
+
+  // currentProduct.value = paramsObject
+
+  productId.value = route.params.productId;
+  productVersion.value = route.params.productVersion;
+
+  if (route.params.processCode && !processCode.value) {
+    processCode.value = route.params.processCode;
+  } else {
+    technologicalDetailId.value = null;
+  }
+  //查询产品
+  getById(productId.value).then((resMsg) => {
+    if (resMsg.code == 200) {
+      currentProduct.value = resMsg.data;
     }
-    //查询产品
-    getById(productId.value).then(resMsg => {
-        if (resMsg.code == 200) {
-            currentProduct.value = resMsg.data
-        }
-    })
-
-    //查询工艺版本
-    getTechnological({ productId: productId.value }).then(res => {
-        if (res.code == 200) {
-            technologicalProcessList.value = res.data
-            //版本下拉框默认值
-            currentTechnological.value.productVersion = productVersion.value
-
-            //查询工艺工序
-            getTechnologicalProcessDetails({ technologyVersion: currentTechnological.value.productVersion, productId: productId.value ,isHistory:0}).then(response => {
-                if (response.code == 200) {
-                    technologicalProcessDetailsList.value = response.data
-                    if (processCode.value !== undefined && processCode.value !== null && processCode.value !== 'undefined') {
-                        technologicalDetailId.value = response.data.find(detail => detail.code == processCode.value).value;
-                        currentTechnologicalDetail.value.id = response.data.find(detail => detail.code === processCode.value).value;
-                    } else {
-                        technologicalDetailId.value = null
-                    }
-                    getDrawing()
-                }
-            })
+  });
+
+  //查询工艺版本
+  getTechnological({ productId: productId.value }).then((res) => {
+    if (res.code == 200) {
+      technologicalProcessList.value = res.data;
+      //版本下拉框默认值
+      currentTechnological.value.productVersion = productVersion.value;
+
+      //查询工艺工序
+      getTechnologicalProcessDetails({
+        technologyVersion: currentTechnological.value.productVersion,
+        productId: productId.value,
+        isHistory: 0,
+      }).then((response) => {
+        if (response.code == 200) {
+          technologicalProcessDetailsList.value = response.data;
+          if (
+            processCode.value !== undefined &&
+            processCode.value !== null &&
+            processCode.value !== "undefined"
+          ) {
+            if (!technologicalDetailId.value) {
+              technologicalDetailId.value = response.data.find(
+                (detail) => detail.code == processCode.value
+              ).value;
+              currentTechnologicalDetail.value.id = response.data.find(
+                (detail) => detail.code === processCode.value
+              ).value;
+            }
+          } else {
+            technologicalDetailId.value = null;
+          }
+          getDrawing();
         }
-    })
-
+      });
+    }
+  });
 }
 function handleDetailsFormChange(row) {
-    if (row) {
-        technologicalDetailId.value = form.value.technologicalProcessDetailId
-        var matchingDetail = technologicalProcessDetailsList.value.find(detail => detail.value === technologicalDetailId.value);
-        processCode.value = matchingDetail.code
-    } else {
-        processCode.value = null
-        drawingUrl.value = null
-    }
-
+  if (row) {
+    technologicalDetailId.value = form.value.technologicalProcessDetailId;
+    var matchingDetail = technologicalProcessDetailsList.value.find(
+      (detail) => detail.value === technologicalDetailId.value
+    );
+    processCode.value = matchingDetail.code;
+  } else {
+    processCode.value = null;
+    drawingUrl.value = null;
+  }
 }
 
 function openDrawing() {
-    window.open(drawingUrl.value)
-
+  window.open(drawingUrl.value);
 }
 
 function handleSelectionChange(row) {
-    console.log(123123)
-    if (row) {
-        loading.value = true
-        currentDrawing.value = row
-        // drawingUrl.value = fileUrl + encodeURIComponent(Base64.encode(document.location.origin + webHost + row.url))
-
-        var itemUrl = document.location.origin
-        var fUrl = ''
-        if (itemUrl.includes(hostIp)) {
-            fUrl = inNet
-        } else {
-            fUrl = outNet
-        }
-        console.log(fUrl + encodeURIComponent(Base64.encode(hostUrl + webHost + row.url)))
-        drawingUrl.value = (fUrl + encodeURIComponent(Base64.encode(hostUrl + webHost + row.url)))
-        loading.value = false
+  console.log(123123);
+  if (row) {
+    loading.value = true;
+    currentDrawing.value = row;
+    // drawingUrl.value = fileUrl + encodeURIComponent(Base64.encode(document.location.origin + webHost + row.url))
+
+    var itemUrl = document.location.origin;
+    var fUrl = "";
+    if (itemUrl.includes(hostIp)) {
+      fUrl = inNet;
+    } else {
+      fUrl = outNet;
     }
-
+    console.log(
+      fUrl + encodeURIComponent(Base64.encode(hostUrl + webHost + row.url))
+    );
+    drawingUrl.value =
+      fUrl + encodeURIComponent(Base64.encode(hostUrl + webHost + row.url));
+    loading.value = false;
+  }
 }
 
-
 /**文件数量超出的回调 */
 function handleExceed(files) {
-    form.value.url = files[0].url
+  form.value.url = files[0].url;
 }
 /** 文件上传前的 回调事件 */
 function beforeUpload(file) {
-    formLoading.value = true
-    const allowedTypes = ['application/pdf'];
-    const isAllowed = allowedTypes.includes(file.type);
-    if (!isAllowed) {
-        proxy.$modal.msgError('只能上传 PDF 格式的文件!')
-        formLoading.value = false
-        return false
-    }
-
+  formLoading.value = true;
+  const allowedTypes = ["application/pdf"];
+  const isAllowed = allowedTypes.includes(file.type);
+  if (!isAllowed) {
+    proxy.$modal.msgError("只能上传 PDF 格式的文件!");
+    formLoading.value = false;
+    return false;
+  }
 }
 function handelUpload() {
-    open.value = true
-    form.value.identification = 0
-    form.value.markD = 0
-    form.value.productId = productId.value
-    form.value.productVersion = currentTechnological.value.productVersion
-    form.value.processCode = processCode.value
-    form.value.technologicalProcessDetailId = currentTechnologicalDetail.value.id
+  open.value = true;
+  form.value.identification = 0;
+  form.value.markD = 0;
+  form.value.productId = productId.value;
+  form.value.productVersion = currentTechnological.value.productVersion;
+  form.value.processCode = processCode.value;
+  form.value.technologicalProcessDetailId = currentTechnologicalDetail.value.id;
 }
 /**获取图纸列表 */
 function getDrawing() {
-
-    queryparams.value.productId = productId.value
-    queryparams.value.productVersion = currentTechnological.value.productVersion
-    queryparams.value.processCode = processCode.value
-    // if (currentTechnologicalDetail.value.id !== undefined && currentTechnologicalDetail.value.id !== 'undefined') {
-    //     queryparams.value.technologicalProcessDetailId = currentTechnologicalDetail.value.id
-
-    // }
-    getNormalDrawing(queryparams.value).then(res => {
-        if (res.code == 200) {
-            drawingList.value = res.rows
-            console.log(1225, res.rows)
-            if (res.rows.length > 0) {
-                proxy.$refs.drawingTable.setCurrentRow(res.rows[0])
-            } else {
-                drawingUrl.value = null
-            }
-            total.value = res.total
-        }
-    })
+  queryparams.value.productId = productId.value;
+  queryparams.value.productVersion = currentTechnological.value.productVersion;
+
+  queryparams.value.processCode = processCode.value;
+  // if (currentTechnologicalDetail.value.id !== undefined && currentTechnologicalDetail.value.id !== 'undefined') {
+  //     queryparams.value.technologicalProcessDetailId = currentTechnologicalDetail.value.id
+
+  // }
+  getNormalDrawing(queryparams.value).then((res) => {
+    if (res.code == 200) {
+      drawingList.value = res.rows;
+      console.log(1225, res.rows);
+      if (res.rows.length > 0) {
+        proxy.$refs.drawingTable.setCurrentRow(res.rows[0]);
+      } else {
+        drawingUrl.value = null;
+      }
+      total.value = res.total;
+    }
+  });
 }
 /**上传成功回调 */
 function handleSuccess(row) {
-    form.value.url = row.fileName
-
-    var fileDrawing = {}
-    fileDrawing.drawingName = row.originalFilename
-    fileDrawing.productId = productId.value
-    fileDrawing.processCode = processCode.value
-    getListByName(fileDrawing).then(res => {
-        // debugger;
-        if (res.code == 200) {
-            repeatingDrawings.value = res.data
-            if (repeatingDrawings.value.length == 0) {
-
-                coverName.value = row.originalFilename
-                formLoading.value = false
-            } else {
-                //判断重名文件状态是否已发行需要替换
-                if (repeatingDrawings.value[0].status == 2) {
-                    proxy.$modal.msgWarning("待审核中已有相同文件");
-                    var item = {}
-                    item = repeatingDrawings.value[0]
-                    item.parentId = currentDrawing.value.id
-                    item.id = null
-                    item.url = replaceForm.value.url
-                    item.drawingName = fileDrawing.drawingName
-                    item.technologicalProcessDetailId = fileDrawing.technologicalProcessDetailId
-                    handleReplace(item)
-                } else {
-                    proxy.$modal.msgError("已有相同文件,请修改后重新上传");
-                    open.value = false
-                }
-            }
+  form.value.url = row.fileName;
+
+  var fileDrawing = {};
+  fileDrawing.drawingName = row.originalFilename;
+  fileDrawing.productId = productId.value;
+  fileDrawing.processCode = processCode.value;
+  getListByName(fileDrawing).then((res) => {
+    // debugger;
+    if (res.code == 200) {
+      repeatingDrawings.value = res.data;
+      if (repeatingDrawings.value.length == 0) {
+        coverName.value = row.originalFilename;
+        formLoading.value = false;
+      } else {
+        //判断重名文件状态是否已发行需要替换
+        if (repeatingDrawings.value[0].status == 2) {
+          proxy.$modal.msgWarning("待审核中已有相同文件");
+          var item = {};
+          item = repeatingDrawings.value[0];
+          item.parentId = currentDrawing.value.id;
+          item.id = null;
+          item.url = replaceForm.value.url;
+          item.drawingName = fileDrawing.drawingName;
+          item.technologicalProcessDetailId =
+            fileDrawing.technologicalProcessDetailId;
+          handleReplace(item);
+        } else {
+          proxy.$modal.msgError("已有相同文件,请修改后重新上传");
+          open.value = false;
         }
-    })
+      }
+    }
+  });
 }
 
-
 /**文件数量超出的回调 */
 function handleReplaceExceed(files) {
-    replaceForm.value.url = files[0].url
+  replaceForm.value.url = files[0].url;
 }
 /**上传成功回调 */
 function handleReplaceSuccess(row) {
-    replaceForm.value.url = row.fileName
-    var fileDrawing = {}
-    fileDrawing.drawingName = row.originalFilename
-    fileDrawing.technologicalProcessDetailId = currentTechnologicalDetail.value.id
-    var item = {}
-    item.parentId = currentDrawing.value.id
-    item.id = null
-    item.url = replaceForm.value.url
-    item.drawingName = fileDrawing.drawingName
-    item.technologicalProcessDetailId = fileDrawing.technologicalProcessDetailId
-    handleReplace(item)
-
+  replaceForm.value.url = row.fileName;
+  var fileDrawing = {};
+  fileDrawing.drawingName = row.originalFilename;
+  fileDrawing.technologicalProcessDetailId =
+    currentTechnologicalDetail.value.id;
+  var item = {};
+  item.parentId = currentDrawing.value.id;
+  item.id = null;
+  item.url = replaceForm.value.url;
+  item.drawingName = fileDrawing.drawingName;
+  item.technologicalProcessDetailId = fileDrawing.technologicalProcessDetailId;
+  handleReplace(item);
 }
 
 function replaceClick(row) {
-    console.log(form.value.identification, 453)
-    form.value.parentId = row.id
-    form.value.technologicalProcessDetailId = row.technologicalProcessDetailId
-    form.value.identification = 0
-    form.value.markD = 0
-    open.value = true
+  console.log(form.value.identification, 453);
+  form.value.parentId = row.id;
+  form.value.technologicalProcessDetailId = row.technologicalProcessDetailId;
+  form.value.identification = 0;
+  form.value.markD = 0;
+  open.value = true;
 }
 function submitForm() {
-    proxy.$refs["drawingRef"].validate((valid) => {
-        if (valid) {
-
-            if (form.value.parentId) {
-                proxy.$modal
-                    .confirm("是否确认替换图纸?")
-                    .then(function () {
-                        if (currentTechnologicalDetail.value.id !== undefined && currentTechnologicalDetail.value.id !== null && currentTechnologicalDetail.value.id !== 'undefined') {
-                            form.value.technologicalProcessDetailId = currentTechnologicalDetail.value.id
-                        }
-                        return replace(form.value);
-                    })
-                    .then(() => {
-                        reset()
-                        handleDetailsChange();
-                        open.value = false
-                        proxy.$modal.msgSuccess("替换成功");
-                    })
-                    .catch(() => { });
-            } else {
-                saveDrawingDetail()
+  proxy.$refs["drawingRef"].validate((valid) => {
+    if (valid) {
+      if (form.value.parentId) {
+        proxy.$modal
+          .confirm("是否确认替换图纸?")
+          .then(function () {
+            if (
+              currentTechnologicalDetail.value.id !== undefined &&
+              currentTechnologicalDetail.value.id !== null &&
+              currentTechnologicalDetail.value.id !== "undefined"
+            ) {
+              form.value.technologicalProcessDetailId =
+                currentTechnologicalDetail.value.id;
             }
-
-        }
-    });
+            return replace(form.value);
+          })
+          .then(() => {
+            reset();
+            handleDetailsChange();
+            open.value = false;
+            proxy.$modal.msgSuccess("替换成功");
+          })
+          .catch(() => {});
+      } else {
+        saveDrawingDetail();
+      }
+    }
+  });
 }
 /**保存方法 */
 function saveDrawingDetail() {
-    // if (currentTechnologicalDetail.value.id !== undefined && currentTechnologicalDetail.value.id !== null && currentTechnologicalDetail.value.id !== 'undefined') {
-    //     form.value.technologicalProcessDetailId = currentTechnologicalDetail.value.id
-    // }
-
-    form.value.drawingName = coverName.value
-    form.value.processCode = processCode.value
-    form.value.productId = productId.value
-    form.value.productVersion = productVersion.value
-    var itemList = []
-    itemList.push(form.value)
-    saveDrawing(itemList).then(res => {
-        if (res.code == 200) {
-            reset();
-            getList();
-            formLoading.value = false
-            open.value = false
-        }
-    })
+  // if (currentTechnologicalDetail.value.id !== undefined && currentTechnologicalDetail.value.id !== null && currentTechnologicalDetail.value.id !== 'undefined') {
+  //     form.value.technologicalProcessDetailId = currentTechnologicalDetail.value.id
+  // }
+
+  form.value.drawingName = coverName.value;
+  form.value.processCode = processCode.value;
+  form.value.productId = productId.value;
+  form.value.productVersion = productVersion.value;
+  var itemList = [];
+  itemList.push(form.value);
+  saveDrawing(itemList).then((res) => {
+    if (res.code == 200) {
+      reset();
+      getList();
+      formLoading.value = false;
+      open.value = false;
+    }
+  });
 }
 /**审核 */
 function handlePreview(row) {
-    var drawing = []
-    drawing.push(row)
-    saveDrawing(drawing).then(res => {
-        if (res.code == 200) {
-            proxy.$modal.msgSuccess("审核通过");
-            reset()
-            getList();
-        }
-    })
+  var drawing = [];
+  drawing.push(row);
+  saveDrawing(drawing).then((res) => {
+    if (res.code == 200) {
+      proxy.$modal.msgSuccess("审核通过");
+      reset();
+      getList();
+    }
+  });
 }
 function reset() {
-    form.value = {
-        pageNum: 1,
-        pageSize: 10,
-        code: null,
-        remark: null,
-        groupDetailList: [],
-        url: null,
-        drawingName: null,
-        identification: 0,
-        markD: 0,
-        type: false
-    };
-    currentTechnologicalDetail.value = {}
-    coverName.value = ''
-    repeatingDrawings.value = []
-    proxy.resetForm("drawingRef");
+  form.value = {
+    pageNum: 1,
+    pageSize: 10,
+    code: null,
+    remark: null,
+    groupDetailList: [],
+    url: null,
+    drawingName: null,
+    identification: 0,
+    markD: 0,
+    type: false,
+  };
+  currentTechnologicalDetail.value = {};
+  coverName.value = "";
+  repeatingDrawings.value = [];
+  proxy.resetForm("drawingRef");
 }
 // 取消按钮
 function cancel() {
+  uploadrefss.value.clearFiles();
+  handleDetailsChange();
 
-    uploadrefss.value.clearFiles()
-    handleDetailsChange();
-
-    open.value = false
+  open.value = false;
 
-    reset()
+  reset();
 }
 /**版本change事件 */
 function handelTechnological(row) {
-    getDrawing()
+  getDrawing();
 }
 /**工序选择change事件 */
 function handleDetailsChange() {
-    if (technologicalDetailId.value) {
-        var matchingDetail = technologicalProcessDetailsList.value.find(detail => detail.value === technologicalDetailId.value);
-        currentTechnologicalDetail.value.id = technologicalDetailId.value == undefined ? null : technologicalDetailId.value
-        processCode.value = matchingDetail.code
-    } else {
-        processCode.value = null
-        drawingUrl.value = null
-    }
-    getDrawing()
+  if (technologicalDetailId.value) {
+    var matchingDetail = technologicalProcessDetailsList.value.find(
+      (detail) => detail.value === technologicalDetailId.value
+    );
+    currentTechnologicalDetail.value.id =
+      technologicalDetailId.value == undefined
+        ? null
+        : technologicalDetailId.value;
+    processCode.value = matchingDetail.code;
+  } else {
+    processCode.value = null;
+    drawingUrl.value = null;
+  }
+  getDrawing();
 }
 /**NG电子图纸 */
 function handleDrawingNG(row) {
-    proxy.$modal
-        .confirm("是否确认NG?")
-        .then(function () {
-            var itemList = []
-            itemList.push(row)
-            return drawingNG(itemList);
-        })
-        .then(() => {
-            reset()
-            getList();
-            open.value = false
-            proxy.$modal.msgSuccess("操作成功");
-        })
-        .catch(() => { });
+  proxy.$modal
+    .confirm("是否确认NG?")
+    .then(function () {
+      var itemList = [];
+      itemList.push(row);
+      return drawingNG(itemList);
+    })
+    .then(() => {
+      reset();
+      getList();
+      open.value = false;
+      proxy.$modal.msgSuccess("操作成功");
+    })
+    .catch(() => {});
 }
 /**废弃电子图纸 */
 
 function handleDrawingRemove(row) {
-    proxy.$modal
-        .confirm("是否确认作废?")
-        .then(function () {
-            var itemList = []
-            itemList.push(row)
-            return drawingRemove(itemList);
-        })
-        .then(() => {
-            reset()
-            getList();
-            open.value = false
-            proxy.$modal.msgSuccess("操作成功");
-        })
-        .catch(() => { });
+  proxy.$modal
+    .confirm("是否确认作废?")
+    .then(function () {
+      var itemList = [];
+      itemList.push(row);
+      return drawingRemove(itemList);
+    })
+    .then(() => {
+      reset();
+      getList();
+      open.value = false;
+      proxy.$modal.msgSuccess("操作成功");
+    })
+    .catch(() => {});
 }
 
 function handleReplace(row) {
-    proxy.$modal
-        .confirm("是否确认替换图纸?")
-        .then(function () {
-            return replace(row);
-        })
-        .then(() => {
-            reset()
-            getList();
-            open.value = false
-            proxy.$modal.msgSuccess("替换成功");
-        })
-        .catch(() => { });
+  proxy.$modal
+    .confirm("是否确认替换图纸?")
+    .then(function () {
+      return replace(row);
+    })
+    .then(() => {
+      reset();
+      getList();
+      open.value = false;
+      proxy.$modal.msgSuccess("替换成功");
+    })
+    .catch(() => {});
 }
 
-getList()
+getList();
 </script>
 
 <style scoped>
 :deep(.el-form-item .el-form-item__label) {
-    font-size: 14px !important;
-    padding-right: 0 !important;
+  font-size: 14px !important;
+  padding-right: 0 !important;
 }
 
 :deep(#list-search-container .el-form-item--default .el-form-item__content) {
-    line-height: 32px;
-    font-size: 18px;
+  line-height: 32px;
+  font-size: 18px;
 }
 </style>

+ 331 - 198
src/views/business/drawingAuditing/index.vue

@@ -1,107 +1,203 @@
 <template>
-    <div class="page-container row-container">
-
-        <section class="list-part-container" style="flex: 2">
-            <!-- 搜索区域 -->
-            <el-form class="list-search-container" :model="queryParams" ref="queryRef" :inline="true">
-                <el-form-item label="类型:" prop="pattern">
-                    <el-select-v2 v-model="queryParams.pattern" clearable filterable :options="patternLabels"
-                        placeholder="类型" @change="handleRefreshDrawing" style="width: 120px;" />
-                </el-form-item>
-                <el-form-item label="客户名称:">
-                    <el-input placeholder="请输入客户名称" v-model.trim="queryParams.companyAlias" @keydown.enter.prevent clearable
-                        style="width: 120px" />
-                </el-form-item>
-                <el-form-item label="图号:">
-                    <el-input placeholder="请输入图号" v-model.trim="queryParams.drawingNumber" @keydown.enter.prevent clearable
-                        style="width: 120px" />
-                </el-form-item>
-                <el-form-item label="规格:">
-                    <el-input placeholder="请输入规格" v-model.trim="queryParams.specification" @keydown.enter.prevent clearable
-                        style="width: 120px" />
-                </el-form-item>
-                <el-form-item label="产品描述:">
-                    <el-input placeholder="请输入产品描述" v-model.trim="queryParams.description" @keydown.enter.prevent clearable
-                        style="width: 120px" />
-                </el-form-item>
-                <el-form-item label="工艺版本:" prop="technologyVersion">
-                    <el-input placeholder="请输入工艺版本" v-model.trim="queryParams.technologyVersion" @keydown.enter.prevent
-                        clearable style="width: 120px" />
-                </el-form-item>
-                <el-form-item label="工序:" prop="processAlias">
-                    <el-input placeholder="请输入工序" v-model.trim="queryParams.processAlias" @keydown.enter.prevent clearable
-                        style="width: 120px" />
-                </el-form-item>
-                <el-form-item>
-                    <el-button type="info" icon="Search" @click="handleRefreshDrawing">搜索</el-button>
-                </el-form-item>
-            </el-form>
-            <div class="list-btns-container">
-                <el-button :disabled="selections.length == 0" type="success" v-hasPermi="['business:electronicDrawings:examine']"
-                    @click="handleSaveBacth()">批量通过
+  <div class="page-container row-container">
+    <section class="list-part-container" style="flex: 2">
+      <!-- 搜索区域 -->
+      <el-form
+        class="list-search-container"
+        :model="queryParams"
+        ref="queryRef"
+        :inline="true"
+      >
+        <el-form-item label="类型:" prop="pattern">
+          <el-select-v2
+            v-model="queryParams.pattern"
+            clearable
+            filterable
+            :options="patternLabels"
+            placeholder="类型"
+            @change="handleRefreshDrawing"
+            style="width: 120px"
+          />
+        </el-form-item>
+        <el-form-item label="客户名称:">
+          <el-input
+            placeholder="请输入客户名称"
+            v-model.trim="queryParams.companyAlias"
+            @keydown.enter.prevent
+            clearable
+            style="width: 120px"
+          />
+        </el-form-item>
+        <el-form-item label="图号:">
+          <el-input
+            placeholder="请输入图号"
+            v-model.trim="queryParams.drawingNumber"
+            @keydown.enter.prevent
+            clearable
+            style="width: 120px"
+          />
+        </el-form-item>
+        <el-form-item label="规格:">
+          <el-input
+            placeholder="请输入规格"
+            v-model.trim="queryParams.specification"
+            @keydown.enter.prevent
+            clearable
+            style="width: 120px"
+          />
+        </el-form-item>
+        <el-form-item label="产品描述:">
+          <el-input
+            placeholder="请输入产品描述"
+            v-model.trim="queryParams.description"
+            @keydown.enter.prevent
+            clearable
+            style="width: 120px"
+          />
+        </el-form-item>
+        <el-form-item label="工艺版本:" prop="technologyVersion">
+          <el-input
+            placeholder="请输入工艺版本"
+            v-model.trim="queryParams.technologyVersion"
+            @keydown.enter.prevent
+            clearable
+            style="width: 120px"
+          />
+        </el-form-item>
+        <el-form-item label="工序:" prop="processAlias">
+          <el-input
+            placeholder="请输入工序"
+            v-model.trim="queryParams.processAlias"
+            @keydown.enter.prevent
+            clearable
+            style="width: 120px"
+          />
+        </el-form-item>
+        <el-form-item>
+          <el-button type="info" icon="Search" @click="handleRefreshDrawing"
+            >搜索</el-button
+          >
+        </el-form-item>
+      </el-form>
+      <div class="list-btns-container">
+        <el-button
+          :disabled="selections.length == 0"
+          type="success"
+          v-hasPermi="['business:electronicDrawings:examine']"
+          @click="handleSaveBacth()"
+          >批量通过
+        </el-button>
+        <el-button
+          :disabled="selections.length == 0"
+          type="danger"
+          v-hasPermi="['business:electronicDrawings:examineNG']"
+          @click="handleNGBacth()"
+          >批量NG
+        </el-button>
+      </div>
+      <!-- 列表区域 -->
+      <div class="el-table-container">
+        <div class="el-table-inner-container">
+          <el-table
+            ref="drawingTabel"
+            v-loading="loading"
+            :row-key="getRowKey"
+            @selection-change="handleSelectionChange"
+            :data="drawingList"
+            height="100%"
+          >
+            <el-table-column
+              type="selection"
+              width="40"
+              align="center"
+              :reserve-selection="true"
+            />
+            <el-table-column
+              label="行号"
+              type="index"
+              width="50"
+              align="center"
+            />
+            <el-table-column label="客户" width="120" align="center">
+              <template #default="scope">
+                <span>{{ scope.row.product.companyAlias }}</span>
+              </template>
+            </el-table-column>
+            <el-table-column label="图号" width="120" align="center">
+              <template #default="scope">
+                <span>{{ scope.row.product.drawingNumber }}</span>
+              </template>
+            </el-table-column>
+            <el-table-column label="规格" width="250" align="center">
+              <template #default="scope">
+                <span>{{ scope.row.product.specification }}</span>
+              </template>
+            </el-table-column>
+            <el-table-column label="产品描述" width="100" align="center">
+              <template #default="scope">
+                <span>{{ scope.row.product.description }}</span>
+              </template>
+            </el-table-column>
+            <el-table-column
+              label="工艺版本"
+              prop="productVersion"
+              width="100"
+              align="center"
+            />
+            <el-table-column label="工序" prop="processAlias" align="center" />
+            <el-table-column label="图纸" prop="drawingName" align="center">
+            </el-table-column>
+            <el-table-column label="类型" prop="pattern" align="center" />
+            <el-table-column
+              label="状态"
+              width="80px"
+              prop="status"
+              align="center"
+            >
+              <template #default="scope">
+                <dict-tag :options="drawing_status" :value="scope.row.status" />
+              </template>
+            </el-table-column>
+            <el-table-column label="制作人" prop="producer" align="center" />
+            <el-table-column label="操作" width="150" align="center">
+              <template #default="scope">
+                <el-button
+                  link
+                  type="primary"
+                  @click="handlePreview(scope.row)"
+                >
+                  预览
                 </el-button>
-                <el-button :disabled="selections.length == 0" type="danger" v-hasPermi="['business:electronicDrawings:NG']"
-                    @click="handleNGBacth()">批量NG
+                <el-button
+                  v-hasPermi="['business:electronicDrawings:examine']"
+                  link
+                  type="success"
+                  @click="saveDrawingDetail(scope.row)"
+                >
+                  通过
                 </el-button>
-            </div>
-            <!-- 列表区域 -->
-            <div class="el-table-container">
-
-
-                <div class="el-table-inner-container">
-                    <el-table ref="drawingTabel" v-loading="loading" :row-key="getRowKey"  @selection-change="handleSelectionChange"
-                        :data="drawingList" height="100%">
-                        <el-table-column type="selection" width="40" align="center" :reserve-selection="true" />
-                        <el-table-column label="行号" type="index" width="50" align="center" />
-                        <el-table-column label="客户" width="120" align="center">
-                            <template #default="scope">
-                                <span>{{ scope.row.product.companyAlias }}</span>
-                            </template>
-                        </el-table-column>
-                        <el-table-column label="图号" width="120" align="center">
-                            <template #default="scope">
-                                <span>{{ scope.row.product.drawingNumber }}</span>
-                            </template>
-                        </el-table-column>
-                        <el-table-column label="规格" width="250" align="center">
-                            <template #default="scope">
-                                <span>{{ scope.row.product.specification }}</span>
-                            </template>
-                        </el-table-column>
-                        <el-table-column label="产品描述" width="100" align="center">
-                            <template #default="scope">
-                                <span>{{ scope.row.product.description }}</span>
-                            </template>
-                        </el-table-column>
-                        <el-table-column label="工艺版本" prop="technologyVersion" width="100" align="center" />
-                        <el-table-column label="工序" prop="processAlias" align="center" />
-                        <el-table-column label="图纸" prop="drawingName" align="center" />
-                        <el-table-column label="类型" prop="pattern" align="center" />
-                        <el-table-column label="状态" width="80px" prop="status" align="center">
-                                <template #default="scope">
-                                    <dict-tag :options="drawing_status" :value="scope.row.status" />
-                                </template>
-                            </el-table-column>
-                        <el-table-column label="制作人" prop="producer" align="center" />
-                        <el-table-column label="操作" width="150" align="center">
-                            <template #default="scope">
-                                <el-button v-hasPermi="['business:electronicDrawings:examine']" link type="success"
-                                    @click="saveDrawingDetail(scope.row)">
-                                    通过
-                                </el-button>
-                                <el-button v-hasPermi="['business:electronicDrawings:NG']" link type="danger"
-                                    @click="handleNGdrawingDetail(scope.row.id)">
-                                    NG
-                                </el-button>
-                            </template>
-                        </el-table-column>
-                    </el-table>
-                </div>
-            </div>
-            <pagination v-show="total > 0" :total="total" v-model:page="queryParams.pageNum"
-                v-model:limit="queryParams.pageSize" @pagination="getDrawingList" />
-        </section>
-    </div>
+                <el-button
+                  v-hasPermi="['business:electronicDrawings:examineNG']"
+                  link
+                  type="danger"
+                  @click="handleNGdrawingDetail(scope.row.id)"
+                >
+                  NG
+                </el-button>
+              </template>
+            </el-table-column>
+          </el-table>
+        </div>
+      </div>
+      <pagination
+        v-show="total > 0"
+        :total="total"
+        v-model:page="queryParams.pageNum"
+        v-model:limit="queryParams.pageSize"
+        @pagination="getDrawingList"
+      />
+    </section>
+  </div>
 </template>
   
 <script setup name="drawingAuditing">
@@ -110,136 +206,173 @@
 //     detailList,
 //     delDetails,
 //   } from "@/api/business/equipment";
-import { getNormalDrawing, getListByName, saveDrawing, drawingNG, replace } from "@/api/business/drawing";
-import { getTechnological } from '@/api/business/product'
-import { getTechnologicalProcessDetails } from '@/api/business/technologicalProcessDetail'
+import {
+  getNormalDrawing,
+  getListByName,
+  saveDrawing,
+  drawingNG,
+  replace,
+} from "@/api/business/drawing";
+import { getTechnological } from "@/api/business/product";
+import { getTechnologicalProcessDetails } from "@/api/business/technologicalProcessDetail";
 const { proxy } = getCurrentInstance();
 const webHost = import.meta.env.VITE_APP_PRODUCTION_API;
+const hostIp = import.meta.env.VITE_HOST_IP;
+const hostUrl = import.meta.env.VITE_HOST_URL;
+const inNet = import.meta.env.VITE_HOST_INNET;
+const outNet = import.meta.env.VITE_HOST_OUTNET;
 /**字典数组 */
 const { equipment_status } = proxy.useDict("equipment_status");
 const { yes_no } = proxy.useDict("yes_no");
-const drawingTabel = ref(null)
+const drawingTabel = ref(null);
 const selections = ref([]);
 const total = ref(0);
 const { drawing_status } = proxy.useDict("drawing_status");
 
 const drawingList = ref([]);
 const loading = ref(false);
-const patternLabels = ref([{
-    value: '新产品',
-    label: '新产品'
-}, {
-    value: '替换',
-    label: '替换'
-}])
+const patternLabels = ref([
+  {
+    value: "新产品",
+    label: "新产品",
+  },
+  {
+    value: "替换",
+    label: "替换",
+  },
+]);
 const data = reactive({
-    queryParams: {
-        status: 0,
-        abandoned:0,
-        pageNum: 1,
-        pageSize: 10,
-    },
-    form: {
-        pageNum: 1,
-        pageSize: 10,
-        technologicalProcessDetailId: null,
-        groupDetailList: [],
-        code: "",
-        remark: "",
-        type: false
-    }
-
+  queryParams: {
+    status: 0,
+    abandoned: 0,
+    pageNum: 1,
+    pageSize: 10,
+  },
+  form: {
+    pageNum: 1,
+    pageSize: 10,
+    technologicalProcessDetailId: null,
+    groupDetailList: [],
+    code: "",
+    remark: "",
+    type: false,
+  },
 });
 const { form, queryParams } = toRefs(data);
 
-
 /****************************************************  生命周期函数区  ****************************************************/
 onMounted(() => {
-    getDrawingList();
+  getDrawingList();
 });
 /****************************************************  方法区  ****************************************************/
 
-
 /**删除设备明细 */
 function handleNGdrawingDetail(row) {
-    proxy.$modal
-        .confirm("是否确认废弃图纸?")
-        .then(function () {
-            var itemList = []
-            itemList.push(row)
-            return drawingNG(itemList);
-        })
-        .then(() => {
-            reset()
-            getDrawingList();
-            open.value = false
-            proxy.$modal.msgSuccess("废弃成功");
-        })
-        .catch(() => { });
-};
+  proxy.$modal
+    .confirm("是否确认废弃图纸?")
+    .then(function () {
+      var itemList = [];
+      itemList.push(row);
+      return drawingNG(itemList);
+    })
+    .then(() => {
+      reset();
+      getDrawingList();
+      open.value = false;
+      proxy.$modal.msgSuccess("废弃成功");
+    })
+    .catch(() => {});
+}
 
 /**通过按钮 */
 function saveDrawingDetail(row) {
-    var itemList = []
-    itemList.push(row)
-    saveDrawing(itemList).then(res => {
-        if (res.code == 200) {
-            getDrawingList();
-            loading.value = false
-        }
-    })
+  var itemList = [];
+  itemList.push(row);
+  saveDrawing(itemList).then((res) => {
+    if (res.code == 200) {
+      getDrawingList();
+      loading.value = false;
+    }
+  });
+}
+
+/**预览 */
+function handlePreview(row) {
+  //0617预览不需要内嵌,新开一个标签页
+  // hostUrl+webHost+row.url 必须时文件全路径 不能转
+  // window.open(fileUrl + encodeURIComponent(Base64.encode(document.location.origin  + webHost + row.url)))
+  // // window.open(fileUrl+ encodeURIComponent(Base64.encode(document.location.host +webHost+row.url)))
+  // console.log('全路径:'+hostUrl+webHost+row.url)
+
+  console.log(document.location);
+  //0617预览不需要内嵌,新开一个标签页
+  // hostUrl+webHost+row.url 必须时文件全路径 不能转
+  var itemUrl = document.location.origin;
+  var fUrl = "";
+  var webUrl = "";
+  console.log(hostIp, itemUrl, 215);
+  console.log(document.location.origin + webHost + row.url);
+  if (itemUrl.includes(hostIp)) {
+    fUrl = inNet;
+    // webUrl = "http://192.168.10.41"
+  } else {
+    fUrl = outNet;
+    // webUrl = "http://36.129.132.128:401"
+  }
+  window.open(
+    fUrl + encodeURIComponent(Base64.encode(hostUrl + webHost + row.url))
+  );
 }
 
 /** 搜索按钮操作 */
 function handleRefreshDrawing() {
-    getDrawingList();
+  getDrawingList();
 }
 /** 获取设备档案列表 */
-function getDrawingList (){
-    console.log(selections.value)
-    loading.value = true;
-    getNormalDrawing(queryParams.value).then((res) => {
-        drawingList.value = res.rows;
-        loading.value = false;
-        total.value = res.total;
-    });
-
-};
+function getDrawingList() {
+  console.log(selections.value);
+  loading.value = true;
+  getNormalDrawing(queryParams.value).then((res) => {
+    drawingList.value = res.rows;
+    loading.value = false;
+    total.value = res.total;
+  });
+}
 //刷新设备档案管理
 function handleRefreshDetail() {
-    getDrawingList();
+  getDrawingList();
 }
 /**
  * 列表checkbox列选择 事件
  */
 function handleSelectionChange(selection) {
-    selections.value = selection;
+  selections.value = selection;
 }
 /**批量通过 */
-function handleSaveBacth(){
-    if(selections.value.length>0){
-        saveDrawing(selections.value).then(res =>{
-            if(res.code ==200){
-                proxy.$modal.msgSuccess("操作成功");
-                selections.value = []
-                drawingTabel.value.clearSelection()
-                getDrawingList()
-            }
-        })
-    }
+function handleSaveBacth() {
+  if (selections.value.length > 0) {
+    saveDrawing(selections.value).then((res) => {
+      if (res.code == 200) {
+        proxy.$modal.msgSuccess("操作成功");
+        selections.value = [];
+        drawingTabel.value.clearSelection();
+        getDrawingList();
+      }
+    });
+  }
 }
 /**批量废弃 */
-function handleNGBacth(){
-    if(selections.value.length>0){
-        drawingNG(selections.value).then(res =>{
-            if(res.code ==200){
-                proxy.$modal.msgSuccess("操作成功");
-                selections.value = []
-                drawingTabel.value.clearSelection()
-                getDrawingList()
-            }
-        })
-    }
+function handleNGBacth() {
+  if (selections.value.length > 0) {
+    drawingNG(selections.value).then((res) => {
+      if (res.code == 200) {
+        proxy.$modal.msgSuccess("操作成功");
+        selections.value = [];
+        drawingTabel.value.clearSelection();
+        getDrawingList();
+      }
+    });
+  }
 }
 function getRowKey(row) {
   return row.id;
@@ -247,21 +380,21 @@ function getRowKey(row) {
 </script>
 <style scoped>
 :deep(.el-tree-node__label) {
-    font-size: 14px !important;
-    display: inline-block;
-    width: 100%;
+  font-size: 14px !important;
+  display: inline-block;
+  width: 100%;
 }
 
 :deep(.el-tree-node__content) {
-    height: 40px;
-    border-bottom: 1px solid #ebeef5;
-    padding: 8px 0;
-    line-height: 23px;
+  height: 40px;
+  border-bottom: 1px solid #ebeef5;
+  padding: 8px 0;
+  line-height: 23px;
 }
 
 .move-handle {
-    cursor: move;
-    background-color: #eee;
+  cursor: move;
+  background-color: #eee;
 }
 </style>
   

+ 345 - 198
src/views/business/drawingRatify/index.vue

@@ -1,108 +1,218 @@
 <template>
-    <div class="page-container row-container">
-
-        <section class="list-part-container" style="flex: 2">
-            <!-- 搜索区域 -->
-            <el-form class="list-search-container" :model="queryParams" ref="queryRef" :inline="true">
-                <el-form-item label="类型:" prop="pattern">
-                    <el-select-v2 v-model="queryParams.pattern" clearable filterable :options="patternLabels"
-                        placeholder="类型" @change="handleRefreshDrawing" style="width: 120px;" />
-                </el-form-item>
-                <el-form-item label="客户名称:">
-                    <el-input placeholder="请输入客户名称" v-model.trim="queryParams.companyAlias" @keydown.enter.prevent clearable
-                        style="width: 120px" />
-                </el-form-item>
-                <el-form-item label="图号:">
-                    <el-input placeholder="请输入图号" v-model.trim="queryParams.drawingNumber" @keydown.enter.prevent clearable
-                        style="width: 120px" />
-                </el-form-item>
-                <el-form-item label="规格:">
-                    <el-input placeholder="请输入规格" v-model.trim="queryParams.specification" @keydown.enter.prevent clearable
-                        style="width: 120px" />
-                </el-form-item>
-                <el-form-item label="产品描述:">
-                    <el-input placeholder="请输入产品描述" v-model.trim="queryParams.description" @keydown.enter.prevent clearable
-                        style="width: 120px" />
-                </el-form-item>
-                <el-form-item label="工艺版本:" prop="technologyVersion">
-                    <el-input placeholder="请输入工艺版本" v-model.trim="queryParams.technologyVersion" @keydown.enter.prevent
-                        clearable style="width: 120px" />
-                </el-form-item>
-                <el-form-item label="工序:" prop="processAlias">
-                    <el-input placeholder="请输入工序" v-model.trim="queryParams.processAlias" @keydown.enter.prevent clearable
-                        style="width: 120px" />
-                </el-form-item>
-                <el-form-item>
-                    <el-button type="info" icon="Search" @click="handleRefreshDrawing">搜索</el-button>
-                </el-form-item>
-            </el-form>
-            <div class="list-btns-container">
-                <el-button :disabled="selections.length == 0" type="success" v-hasPermi="['business:electronicDrawings:raift']"
-                    @click="handleSaveBacth()">批量批准
+  <div class="page-container row-container">
+    <section class="list-part-container" style="flex: 2">
+      <!-- 搜索区域 -->
+      <el-form
+        class="list-search-container"
+        :model="queryParams"
+        ref="queryRef"
+        :inline="true"
+      >
+        <el-form-item label="类型:" prop="pattern">
+          <el-select-v2
+            v-model="queryParams.pattern"
+            clearable
+            filterable
+            :options="patternLabels"
+            placeholder="类型"
+            @change="handleRefreshDrawing"
+            style="width: 120px"
+          />
+        </el-form-item>
+        <el-form-item label="客户名称:">
+          <el-input
+            placeholder="请输入客户名称"
+            v-model.trim="queryParams.companyAlias"
+            @keydown.enter.prevent
+            clearable
+            style="width: 120px"
+          />
+        </el-form-item>
+        <el-form-item label="图号:">
+          <el-input
+            placeholder="请输入图号"
+            v-model.trim="queryParams.drawingNumber"
+            @keydown.enter.prevent
+            clearable
+            style="width: 120px"
+          />
+        </el-form-item>
+        <el-form-item label="规格:">
+          <el-input
+            placeholder="请输入规格"
+            v-model.trim="queryParams.specification"
+            @keydown.enter.prevent
+            clearable
+            style="width: 120px"
+          />
+        </el-form-item>
+        <el-form-item label="产品描述:">
+          <el-input
+            placeholder="请输入产品描述"
+            v-model.trim="queryParams.description"
+            @keydown.enter.prevent
+            clearable
+            style="width: 120px"
+          />
+        </el-form-item>
+        <el-form-item label="工艺版本:" prop="technologyVersion">
+          <el-input
+            placeholder="请输入工艺版本"
+            v-model.trim="queryParams.technologyVersion"
+            @keydown.enter.prevent
+            clearable
+            style="width: 120px"
+          />
+        </el-form-item>
+        <el-form-item label="工序:" prop="processAlias">
+          <el-input
+            placeholder="请输入工序"
+            v-model.trim="queryParams.processAlias"
+            @keydown.enter.prevent
+            clearable
+            style="width: 120px"
+          />
+        </el-form-item>
+        <el-form-item>
+          <el-button type="info" icon="Search" @click="handleRefreshDrawing"
+            >搜索</el-button
+          >
+        </el-form-item>
+      </el-form>
+      <div class="list-btns-container">
+        <el-button
+          :disabled="selections.length == 0"
+          type="success"
+          v-hasPermi="['business:electronicDrawings:raift']"
+          @click="handleSaveBacth()"
+          >批量批准
+        </el-button>
+        <el-button
+          :disabled="selections.length == 0"
+          type="danger"
+          v-hasPermi="['business:electronicDrawings:raiftNG']"
+          @click="handleNGBacth()"
+          >批量NG
+        </el-button>
+      </div>
+      <!-- 列表区域 -->
+      <div class="el-table-container">
+        <div class="el-table-inner-container">
+          <el-table
+            ref="drawingTabel"
+            v-loading="loading"
+            :row-key="getRowKey"
+            @selection-change="handleSelectionChange"
+            :data="drawingList"
+            height="100%"
+          >
+            <el-table-column
+              type="selection"
+              width="40"
+              align="center"
+              :reserve-selection="true"
+            />
+            <el-table-column
+              label="行号"
+              type="index"
+              width="50"
+              align="center"
+            />
+            <el-table-column label="客户" width="120" align="center">
+              <template #default="scope">
+                <span>{{ scope.row.product.companyAlias }}</span>
+              </template>
+            </el-table-column>
+            <el-table-column label="图号" width="120" align="center">
+              <template #default="scope">
+                <span>{{ scope.row.product.drawingNumber }}</span>
+              </template>
+            </el-table-column>
+            <el-table-column label="规格" width="250" align="center">
+              <template #default="scope">
+                <span>{{ scope.row.product.specification }}</span>
+              </template>
+            </el-table-column>
+            <el-table-column label="产品描述" align="center">
+              <template #default="scope">
+                <span>{{ scope.row.product.description }}</span>
+              </template>
+            </el-table-column>
+            <el-table-column
+              label="工艺版本"
+              prop="productVersion"
+              width="60"
+              align="center"
+            />
+            <el-table-column label="工序" prop="processAlias" align="center" />
+            <el-table-column label="图纸" prop="drawingName" align="center" />
+            <el-table-column
+              label="类型"
+              prop="pattern"
+              align="center"
+              width="60"
+            />
+            <el-table-column
+              label="状态"
+              width="80px"
+              prop="status"
+              align="center"
+            >
+              <template #default="scope">
+                <dict-tag :options="drawing_status" :value="scope.row.status" />
+              </template>
+            </el-table-column>
+            <el-table-column
+              label="制作人"
+              prop="producer"
+              align="center"
+              width="100"
+            />
+            <el-table-column
+              label="审核人"
+              prop="reviewer"
+              align="center"
+              width="100"
+            />
+            <el-table-column label="操作" width="150" align="center">
+              <template #default="scope">
+                <el-button
+                  link
+                  type="primary"
+                  @click="handlePreview(scope.row)"
+                >
+                  预览
                 </el-button>
-                <el-button :disabled="selections.length == 0" type="danger" v-hasPermi="['business:electronicDrawings:NG']"
-                    @click="handleNGBacth()">批量NG
+                <el-button
+                  v-hasPermi="['business:electronicDrawings:raift']"
+                  link
+                  type="success"
+                  @click="saveDrawingDetail(scope.row)"
+                >
+                  通过
                 </el-button>
-            </div>
-            <!-- 列表区域 -->
-            <div class="el-table-container">
-
-
-                <div class="el-table-inner-container">
-                    <el-table ref="drawingTabel" v-loading="loading" :row-key="getRowKey"  @selection-change="handleSelectionChange"
-                        :data="drawingList" height="100%">
-                        <el-table-column type="selection" width="40" align="center" :reserve-selection="true" />
-                        <el-table-column label="行号" type="index" width="50" align="center" />
-                        <el-table-column label="客户" width="120" align="center">
-                            <template #default="scope">
-                                <span>{{ scope.row.product.companyAlias }}</span>
-                            </template>
-                        </el-table-column>
-                        <el-table-column label="图号" width="120" align="center">
-                            <template #default="scope">
-                                <span>{{ scope.row.product.drawingNumber }}</span>
-                            </template>
-                        </el-table-column>
-                        <el-table-column label="规格" width="250" align="center">
-                            <template #default="scope">
-                                <span>{{ scope.row.product.specification }}</span>
-                            </template>
-                        </el-table-column>
-                        <el-table-column label="产品描述"  align="center">
-                            <template #default="scope">
-                                <span>{{ scope.row.product.description }}</span>
-                            </template>
-                        </el-table-column>
-                        <el-table-column label="工艺版本" prop="technologyVersion" width="60" align="center" />
-                        <el-table-column label="工序" prop="processAlias" align="center" />
-                        <el-table-column label="图纸" prop="drawingName" align="center" />
-                        <el-table-column label="类型" prop="pattern" align="center" width="60"/>
-                        <el-table-column label="状态" width="80px" prop="status" align="center">
-                                <template #default="scope">
-                                    <dict-tag :options="drawing_status" :value="scope.row.status" />
-                                </template>
-                            </el-table-column>
-                        <el-table-column label="制作人" prop="producer" align="center" width="100"/>
-                        <el-table-column label="审核人" prop="reviewer" align="center" width="100"/>
-                        <el-table-column label="操作" width="150" align="center">
-                            <template #default="scope">
-                                <el-button v-hasPermi="['business:electronicDrawings:raift']" link type="success"
-                                    @click="saveDrawingDetail(scope.row)">
-                                    通过
-                                </el-button>
-                                <el-button v-hasPermi="['business:electronicDrawings:NG']" link type="danger"
-                                    @click="handleNGdrawingDetail(scope.row.id)">
-                                    NG
-                                </el-button>
-                            </template>
-                        </el-table-column>
-                    </el-table>
-                </div>
-            </div>
-            <pagination v-show="total > 0" :total="total" v-model:page="queryParams.pageNum"
-                v-model:limit="queryParams.pageSize" @pagination="getDrawingList" />
-        </section>
-    </div>
+                <el-button
+                  v-hasPermi="['business:electronicDrawings:raiftNG']"
+                  link
+                  type="danger"
+                  @click="handleNGdrawingDetail(scope.row.id)"
+                >
+                  NG
+                </el-button>
+              </template>
+            </el-table-column>
+          </el-table>
+        </div>
+      </div>
+      <pagination
+        v-show="total > 0"
+        :total="total"
+        v-model:page="queryParams.pageNum"
+        v-model:limit="queryParams.pageSize"
+        @pagination="getDrawingList"
+      />
+    </section>
+  </div>
 </template>
   
 <script setup name="drawingAuditing">
@@ -111,135 +221,172 @@
 //     detailList,
 //     delDetails,
 //   } from "@/api/business/equipment";
-import { getNormalDrawing, getListByName, saveDrawing, drawingNG, replace } from "@/api/business/drawing";
-import { getTechnological } from '@/api/business/product'
-import { getTechnologicalProcessDetails } from '@/api/business/technologicalProcessDetail'
+import {
+  getNormalDrawing,
+  getListByName,
+  saveDrawing,
+  drawingNG,
+  replace,
+} from "@/api/business/drawing";
+import { getTechnological } from "@/api/business/product";
+import { getTechnologicalProcessDetails } from "@/api/business/technologicalProcessDetail";
 const { proxy } = getCurrentInstance();
 const webHost = import.meta.env.VITE_APP_PRODUCTION_API;
+const hostIp = import.meta.env.VITE_HOST_IP;
+const hostUrl = import.meta.env.VITE_HOST_URL;
+const inNet = import.meta.env.VITE_HOST_INNET;
+const outNet = import.meta.env.VITE_HOST_OUTNET;
 /**字典数组 */
 const { equipment_status } = proxy.useDict("equipment_status");
 const { drawing_status } = proxy.useDict("drawing_status");
 
 const { yes_no } = proxy.useDict("yes_no");
-const drawingTabel = ref(null)
+const drawingTabel = ref(null);
 const selections = ref([]);
 const total = ref(0);
 const drawingList = ref([]);
 const loading = ref(false);
-const patternLabels = ref([{
-    value: '新产品',
-    label: '新产品'
-}, {
-    value: '替换',
-    label: '替换'
-}])
+const patternLabels = ref([
+  {
+    value: "新产品",
+    label: "新产品",
+  },
+  {
+    value: "替换",
+    label: "替换",
+  },
+]);
 const data = reactive({
-    queryParams: {
-        status: 1,
-        abandoned:0,
-        pageNum: 1,
-        pageSize: 10,
-    },
-    form: {
-        pageNum: 1,
-        pageSize: 10,
-        technologicalProcessDetailId: null,
-        groupDetailList: [],
-        code: "",
-        remark: "",
-        type: false
-    }
-
+  queryParams: {
+    status: 1,
+    abandoned: 0,
+    pageNum: 1,
+    pageSize: 10,
+  },
+  form: {
+    pageNum: 1,
+    pageSize: 10,
+    technologicalProcessDetailId: null,
+    groupDetailList: [],
+    code: "",
+    remark: "",
+    type: false,
+  },
 });
 const { form, queryParams } = toRefs(data);
 
-
 /****************************************************  生命周期函数区  ****************************************************/
 onMounted(() => {
-    getDrawingList();
+  getDrawingList();
 });
 /****************************************************  方法区  ****************************************************/
 
-
 /**删除设备明细 */
 function handleNGdrawingDetail(row) {
-    proxy.$modal
-        .confirm("是否确认废弃图纸?")
-        .then(function () {
-            var itemList = []
-            itemList.push(row)
-            return drawingNG(itemList);
-        })
-        .then(() => {
-            reset()
-            open.value = false
-            proxy.$modal.msgSuccess("废弃成功");
-        })
-        .catch(() => { });
-};
+  proxy.$modal
+    .confirm("是否确认废弃图纸?")
+    .then(function () {
+      var itemList = [];
+      itemList.push(row);
+      return drawingNG(itemList);
+    })
+    .then(() => {
+      reset();
+      open.value = false;
+      proxy.$modal.msgSuccess("废弃成功");
+    })
+    .catch(() => {});
+}
+
+/**预览 */
+function handlePreview(row) {
+  //0617预览不需要内嵌,新开一个标签页
+  // hostUrl+webHost+row.url 必须时文件全路径 不能转
+  // window.open(fileUrl + encodeURIComponent(Base64.encode(document.location.origin  + webHost + row.url)))
+  // // window.open(fileUrl+ encodeURIComponent(Base64.encode(document.location.host +webHost+row.url)))
+  // console.log('全路径:'+hostUrl+webHost+row.url)
+
+  console.log(document.location);
+  //0617预览不需要内嵌,新开一个标签页
+  // hostUrl+webHost+row.url 必须时文件全路径 不能转
+  var itemUrl = document.location.origin;
+  var fUrl = "";
+  var webUrl = "";
+  console.log(hostIp, itemUrl, 215);
+  console.log(document.location.origin + webHost + row.url);
+  if (itemUrl.includes(hostIp)) {
+    fUrl = inNet;
+    // webUrl = "http://192.168.10.41"
+  } else {
+    fUrl = outNet;
+    // webUrl = "http://36.129.132.128:401"
+  }
+  window.open(
+    fUrl + encodeURIComponent(Base64.encode(hostUrl + webHost + row.url))
+  );
+}
 
 /**通过按钮 */
 function saveDrawingDetail(row) {
-    var itemList = []
-    itemList.push(row)
-    saveDrawing(itemList).then(res => {
-        if (res.code == 200) {
-            getDrawingList();
-            loading.value = false
-        }
-    })
+  var itemList = [];
+  itemList.push(row);
+  saveDrawing(itemList).then((res) => {
+    if (res.code == 200) {
+      getDrawingList();
+      loading.value = false;
+    }
+  });
 }
 
 /** 搜索按钮操作 */
 function handleRefreshDrawing() {
-    getDrawingList();
+  getDrawingList();
 }
 /** 获取设备档案列表 */
-function getDrawingList (){
-    console.log(selections.value)
-    loading.value = true;
-    getNormalDrawing(queryParams.value).then((res) => {
-        drawingList.value = res.rows;
-        loading.value = false;
-        total.value = res.total;
-    });
-
-};
+function getDrawingList() {
+  console.log(selections.value);
+  loading.value = true;
+  getNormalDrawing(queryParams.value).then((res) => {
+    drawingList.value = res.rows;
+    loading.value = false;
+    total.value = res.total;
+  });
+}
 //刷新设备档案管理
 function handleRefreshDetail() {
-    getDrawingList();
+  getDrawingList();
 }
 /**
  * 列表checkbox列选择 事件
  */
 function handleSelectionChange(selection) {
-    selections.value = selection;
+  selections.value = selection;
 }
 /**批量通过 */
-function handleSaveBacth(){
-    if(selections.value.length>0){
-        saveDrawing(selections.value).then(res =>{
-            if(res.code ==200){
-                proxy.$modal.msgSuccess("操作成功");
-                selections.value = []
-                drawingTabel.value.clearSelection()
-                getDrawingList()
-            }
-        })
-    }
+function handleSaveBacth() {
+  if (selections.value.length > 0) {
+    saveDrawing(selections.value).then((res) => {
+      if (res.code == 200) {
+        proxy.$modal.msgSuccess("操作成功");
+        selections.value = [];
+        drawingTabel.value.clearSelection();
+        getDrawingList();
+      }
+    });
+  }
 }
 /**批量废弃 */
-function handleNGBacth(){
-    if(selections.value.length>0){
-        drawingNG(selections.value).then(res =>{
-            if(res.code ==200){
-                proxy.$modal.msgSuccess("操作成功");
-                selections.value = []
-                drawingTabel.value.clearSelection()
-                getDrawingList()
-            }
-        })
-    }
+function handleNGBacth() {
+  if (selections.value.length > 0) {
+    drawingNG(selections.value).then((res) => {
+      if (res.code == 200) {
+        proxy.$modal.msgSuccess("操作成功");
+        selections.value = [];
+        drawingTabel.value.clearSelection();
+        getDrawingList();
+      }
+    });
+  }
 }
 function getRowKey(row) {
   return row.id;
@@ -247,21 +394,21 @@ function getRowKey(row) {
 </script>
 <style scoped>
 :deep(.el-tree-node__label) {
-    font-size: 14px !important;
-    display: inline-block;
-    width: 100%;
+  font-size: 14px !important;
+  display: inline-block;
+  width: 100%;
 }
 
 :deep(.el-tree-node__content) {
-    height: 40px;
-    border-bottom: 1px solid #ebeef5;
-    padding: 8px 0;
-    line-height: 23px;
+  height: 40px;
+  border-bottom: 1px solid #ebeef5;
+  padding: 8px 0;
+  line-height: 23px;
 }
 
 .move-handle {
-    cursor: move;
-    background-color: #eee;
+  cursor: move;
+  background-color: #eee;
 }
 </style>
   

+ 10 - 0
src/views/business/outsourceBalanceAccounts/index.vue

@@ -320,6 +320,15 @@ const changeCellEvent = (params) => {
 }
 
 const handleBalance = () => {
+  selected.value = tableRef.value.getCheckboxRecords(true)
+  if (proxy.moment(queryParams.value.checkoutDate).isBefore(balanceMonth.value.startDate)) {
+    proxy.$modal.msgError('结算日期不能小于结算期间')
+    return
+  }
+  if (proxy.moment(queryParams.value.checkoutDate).isAfter(balanceMonth.value.endDate)) {
+    proxy.$modal.msgError('结算日期不能大于结算期间')
+    return
+  }
   if (selected.value.length == 0) {
     proxy.$modal.msgError('请选择结算单')
     return
@@ -345,6 +354,7 @@ const handleBalance = () => {
 }
 
 const handleDisbalance = () => {
+  selected.value = tableRef.value.getCheckboxRecords(true)
   if (selected.value.length == 0) {
     proxy.$modal.msgError('请选择要取消的结算单')
     return

+ 224 - 72
src/views/business/outsourceInspectionVerify/index.vue

@@ -2,33 +2,71 @@
 <template>
   <div class="page-container column-container">
     <!-- 搜索区 -->
-    <el-form class="list-search-container" :model="queryParams" ref="queryRef" :inline="true">
+    <el-form
+      class="list-search-container"
+      :model="queryParams"
+      ref="queryRef"
+      :inline="true"
+    >
       <el-form-item label="单据号:" prop="outsourcedInspectionNo">
-        <el-input v-model="queryParams.outsourcedInspectionNo" placeholder="请输入单据号" style="width: 144px" clearable
-          @keyup.enter="handleQuery" />
+        <el-input
+          v-model="queryParams.outsourcedInspectionNo"
+          placeholder="请输入单据号"
+          style="width: 144px"
+          clearable
+          @keyup.enter="handleQuery"
+        />
       </el-form-item>
       <el-form-item label="检查日期:" prop="startTime">
         <!-- <el-input v-model="queryParams.startTime" placeholder="" style="width: 144px" clearable
           @keyup.enter="handleQuery" /> -->
-        <el-date-picker v-model="queryParams.startTime" type="date" placeholder="选择日期" style="width: 144px" clearable
-          @keyup.enter="handleQuery" />
+        <el-date-picker
+          v-model="queryParams.startTime"
+          type="date"
+          placeholder="选择日期"
+          style="width: 144px"
+          clearable
+          @keyup.enter="handleQuery"
+          value-format="YYYY-MM-DD"
+        />
       </el-form-item>
       <el-form-item label="外协商名称:" prop="supplierName">
-        <el-input v-model="queryParams.supplierName" placeholder="请输入外协商名称" style="width: 144px" clearable
-          @keyup.enter="handleQuery" />
+        <el-input
+          v-model="queryParams.supplierName"
+          placeholder="请输入外协商名称"
+          style="width: 144px"
+          clearable
+          @keyup.enter="handleQuery"
+        />
       </el-form-item>
       <el-form-item label="批次号:" prop="lotCode">
-        <el-input v-model="queryParams.lotCode" placeholder="请输入批次号" style="width: 144px" clearable
-          @keyup.enter="handleQuery" />
+        <el-input
+          v-model="queryParams.lotCode"
+          placeholder="请输入批次号"
+          style="width: 144px"
+          clearable
+          @keyup.enter="handleQuery"
+        />
       </el-form-item>
       <el-form-item label="状态:" prop="auditStatus">
-        <el-select v-model="queryParams.auditStatus" style="width: 144px" clearable placeholder="请选择">
-          <el-option v-for="dict in outsource_before_checkout_verify_status" :key="dict.value" :label="dict.label"
-            :value="dict.value" />
+        <el-select
+          v-model="queryParams.auditStatus"
+          style="width: 144px"
+          clearable
+          placeholder="请选择"
+        >
+          <el-option
+            v-for="dict in outsource_before_checkout_verify_status"
+            :key="dict.value"
+            :label="dict.label"
+            :value="dict.value"
+          />
         </el-select>
       </el-form-item>
       <el-form-item>
-        <el-button type="primary" icon="Search" @click="handleQuery">搜索</el-button>
+        <el-button type="primary" icon="Search" @click="handleQuery"
+          >搜索</el-button
+        >
         <el-button icon="Refresh" @click="resetQuery">重置</el-button>
       </el-form-item>
     </el-form>
@@ -40,41 +78,140 @@
     <!-- 渲染数据区 -->
     <div class="el-table-container">
       <div class="el-table-inner-container">
-        <el-table v-loading="loading" :data="orderList" size="small" border height="100%"
-          @selection-change="handleSelectionChange">
+        <el-table
+          v-loading="loading"
+          :data="orderList"
+          size="small"
+          border
+          height="100%"
+          @selection-change="handleSelectionChange"
+        >
           <el-table-column type="selection" width="48" align="center" />
-          <el-table-column label="外协单位" align="center" prop="outsourcedOrderDetail.supplierName" width="320" />
-          <el-table-column label="批次号" align="center" prop="lotCode" width="100" />
-          <el-table-column label="产品描述" align="center" prop="productDescription" width="320" />
-          <el-table-column label="质检单号" align="center" prop="outsourcedInspectionNo" width="120" />
-          <el-table-column label="检查状态" align="center" prop="status" width="120">
+          <el-table-column
+            label="外协单位"
+            align="center"
+            prop="outsourcedOrderDetail.supplierName"
+            width="150"
+          />
+          <el-table-column
+            label="批次号"
+            align="center"
+            prop="lotCode"
+            width="100"
+          />
+          <el-table-column
+            label="产品描述"
+            align="center"
+            prop="productDescription"
+            width="320"
+          />
+          <el-table-column
+            label="检查单号"
+            align="center"
+            prop="outsourcedInspectionNo"
+            width="120"
+          />
+          <el-table-column
+            label="检查状态"
+            align="center"
+            prop="status"
+            width="120"
+          >
             <template #default="scope">
-              <dict-tag :options="process_inspection_status" :value="scope.row.status" />
+              <dict-tag
+                :options="process_inspection_status"
+                :value="scope.row.status"
+              />
             </template>
           </el-table-column>
-          <el-table-column label="外协工序" align="center" prop="processNames" width="120" />
-          <el-table-column label="外协日期" align="center" prop="outsourcedOrderDetail.formDate" width="120">
+          <el-table-column
+            label="外协工序"
+            align="center"
+            prop="processNames"
+            width="120"
+          />
+          <el-table-column
+            label="外协日期"
+            align="center"
+            prop="outsourcedOrderDetail.formDate"
+            width="120"
+          >
             <template #default="scope">
-              {{ parseTime(scope.row.outsourcedOrderDetail.formDate, "{y}-{m}-{d}") }}
+              {{
+                parseTime(
+                  scope.row.outsourcedOrderDetail.formDate,
+                  "{y}-{m}-{d}"
+                )
+              }}
             </template>
           </el-table-column>
-          <el-table-column label="发出量" align="center" prop="outsourcedOrderDetail.productNum" width="120" />
-          <el-table-column label="收回日期" align="center" prop="returnReceiptDetail.formDate" width="120" />
-          <el-table-column label="收回量" align="center" prop="returnReceiptDetail.auditNum" width="120" />
-          <el-table-column label="状态" align="center" prop="auditStatus" width="120">
+          <el-table-column
+            label="发出量"
+            align="center"
+            prop="outsourcedOrderDetail.productNum"
+            width="120"
+          />
+          <el-table-column
+            label="收回日期"
+            align="center"
+            prop="returnReceiptDetail.formDate"
+            width="120"
+          />
+          <el-table-column
+            label="收回量"
+            align="center"
+            prop="returnReceiptDetail.auditNum"
+            width="120"
+          />
+          <el-table-column
+            label="状态"
+            align="center"
+            prop="auditStatus"
+            width="120"
+          >
             <template #default="scope">
-              <dict-tag :options="outsource_before_checkout_verify_status" :value="scope.row.auditStatus" />
+              <dict-tag
+                :options="outsource_before_checkout_verify_status"
+                :value="scope.row.auditStatus"
+              />
+            </template>
+          </el-table-column>
+          <el-table-column
+            label="检查日期"
+            align="center"
+            prop="startTime"
+            width="120"
+          >
+            <template #default="scope">
+              {{ parseTime(scope.row.startTime, "{y}-{m}-{d}") }}
             </template>
           </el-table-column>
           <el-table-column label="备注" align="center" prop="remark" />
-          <el-table-column label="操作" align="center" class-name="small-padding fixed-width" width="200">
+          <el-table-column
+            label="操作"
+            align="center"
+            class-name="small-padding fixed-width"
+            width="200"
+          >
             <template #default="scope">
-              <el-button v-if="scope.row.auditStatus == 0 || scope.row.auditStatus == 2" link type="warning"
-                icon="Check" @click="handleConfirm(scope.row)" v-hasPermi="['business:beforeCheckoutVerify:edit']">
+              <el-button
+                v-if="scope.row.auditStatus == 0 || scope.row.auditStatus == 2"
+                link
+                type="warning"
+                icon="Check"
+                @click="handleConfirm(scope.row)"
+                v-hasPermi="['business:beforeCheckoutVerify:edit']"
+              >
                 通过
               </el-button>
-              <el-button v-if="scope.row.auditStatus == 0 || scope.row.auditStatus == 1" link type="primary"
-                icon="Close" @click="handleReject(scope.row)" v-hasPermi="['business:beforeCheckoutVerify:edit']">
+              <el-button
+                v-if="scope.row.auditStatus == 0 || scope.row.auditStatus == 1"
+                link
+                type="primary"
+                icon="Close"
+                @click="handleReject(scope.row)"
+                v-hasPermi="['business:beforeCheckoutVerify:edit']"
+              >
                 不通过
               </el-button>
             </template>
@@ -84,8 +221,13 @@
     </div>
 
     <!-- 分页 -->
-    <pagination v-show="total > 0" :total="total" v-model:page="queryParams.pageNum"
-      v-model:limit="queryParams.pageSize" @pagination="getList" />
+    <pagination
+      v-show="total > 0"
+      :total="total"
+      v-model:page="queryParams.pageNum"
+      v-model:limit="queryParams.pageSize"
+      @pagination="getList"
+    />
   </div>
 </template>
 
@@ -94,14 +236,18 @@ import {
   listCheckoutInspection,
   rejectInspection,
   confirmInspection,
-  checkFurnace
-} from '@/api/business/beforeCheckoutVerify'
+  checkFurnace,
+} from "@/api/business/beforeCheckoutVerify";
 import { nextTick } from "vue";
 const { proxy } = getCurrentInstance();
 /** 字典数组区 */
-const { outsource_before_checkout_verify_status } = proxy.useDict("outsource_before_checkout_verify_status");
+const { outsource_before_checkout_verify_status } = proxy.useDict(
+  "outsource_before_checkout_verify_status"
+);
 
-const { process_inspection_status } = proxy.useDict("process_inspection_status");
+const { process_inspection_status } = proxy.useDict(
+  "process_inspection_status"
+);
 
 const orderList = ref([]);
 const loading = ref(true);
@@ -109,7 +255,7 @@ const ids = ref([]);
 const single = ref(true);
 const multiple = ref(true);
 const total = ref(0);
-const printCarriers = ref([])
+const printCarriers = ref([]);
 const webHost = import.meta.env.VITE_APP_PRODUCTION_API;
 /** 查询对象 */
 const queryParams = ref({
@@ -124,7 +270,7 @@ const queryParams = ref({
   packagingMethod: null,
   freightPrice: null,
   freightAmount: null,
-  isFirstProcess: 0
+  isFirstProcess: 0,
 });
 
 /***********************  方法区  ****************************/
@@ -141,6 +287,7 @@ function getList() {
 
 /** 搜索按钮操作 */
 function handleQuery() {
+  console.log(queryParams.value);
   queryParams.value.pageNum = 1;
   getList();
 }
@@ -159,51 +306,56 @@ function handleSelectionChange(selection) {
 }
 
 function handleConfirm(row) {
-  checkFurnace(row).then(res => {
+  checkFurnace(row).then((res) => {
     if (res.code === 200) {
       if (res.data.length === 1) {
-        proxy.$confirm('是否确认通过?', '提示', {
-          confirmButtonText: '确定',
-          cancelButtonText: '取消',
-          type: 'warning'
-        }).then(() => {
-          confirmInspection(res.data).then(res => {
-            getList()
+        proxy
+          .$confirm("是否确认通过?", "提示", {
+            confirmButtonText: "确定",
+            cancelButtonText: "取消",
+            type: "warning",
           })
-        });
+          .then(() => {
+            confirmInspection(res.data).then((res) => {
+              getList();
+            });
+          });
       } else {
-        proxy.$confirm('该炉已全部质检,是否全部确认通过?', '提示', {
-          confirmButtonText: '确定',
-          cancelButtonText: '取消',
-          type: 'warning'
-        }).then(() => {
-          confirmInspection(res.data).then(res => {
-            getList()
+        proxy
+          .$confirm("该炉已全部质检,是否全部确认通过?", "提示", {
+            confirmButtonText: "确定",
+            cancelButtonText: "取消",
+            type: "warning",
           })
-        });
+          .then(() => {
+            confirmInspection(res.data).then((res) => {
+              getList();
+            });
+          });
       }
     } else {
-      proxy.$msgError(res.msg)
+      proxy.$msgError(res.msg);
     }
-  })
+  });
 }
 
 function handleReject(row) {
-  checkFurnace(row).then(res => {
+  checkFurnace(row).then((res) => {
     if (res.code === 200) {
-      proxy.$confirm('是否确认不通过?', '提示', {
-        confirmButtonText: '确定',
-        cancelButtonText: '取消',
-        type: 'warning'
-      }).then(() => {
-        rejectInspection(res.data).then(res => {
-          getList();
+      proxy
+        .$confirm("是否确认不通过?", "提示", {
+          confirmButtonText: "确定",
+          cancelButtonText: "取消",
+          type: "warning",
         })
-      });
+        .then(() => {
+          rejectInspection(res.data).then((res) => {
+            getList();
+          });
+        });
     }
-  })
+  });
 }
 
-
 getList();
 </script>

文件差異過大導致無法顯示
+ 673 - 309
src/views/business/product/index.vue


部分文件因文件數量過多而無法顯示