guoyujia 10 місяців тому
батько
коміт
49b3c2acea

+ 1 - 1
src/api/business/dayworkItemReject.js

@@ -42,7 +42,7 @@ export function printSortReject(data) {
 		{
 			...data,
 		},
-		`分选标准报表_${new Date().getTime()}.xlsx` 
+		`德迈仕质量检查不良原因数据查询报表_${new Date().getTime()}.xlsx` 
 	)
 }
 export function getSortRejectList(query) {

+ 45 - 0
src/api/business/takeStockPeriod.js

@@ -0,0 +1,45 @@
+import request from '@/utils/request'
+const baseUrl = import.meta.env.VITE_APP_PRODUCTION_API
+
+// 查询盘点时间列表
+export function listTakeStockPeriod(query) {
+  return request({
+    url:baseUrl + '/business/takeStockPeriod/list',
+    method: 'get',
+    params: query
+  })
+}
+
+// 查询盘点时间详细
+export function getTakeStockPeriod(id) {
+  return request({
+    url:baseUrl + '/business/takeStockPeriod/' + id,
+    method: 'get'
+  })
+}
+
+// 新增盘点时间
+export function addTakeStockPeriod(data) {
+  return request({
+    url:baseUrl + '/business/takeStockPeriod',
+    method: 'post',
+    data: data
+  })
+}
+
+// 修改盘点时间
+export function updateTakeStockPeriod(data) {
+  return request({
+    url: baseUrl +'/business/takeStockPeriod',
+    method: 'put',
+    data: data
+  })
+}
+
+// 删除盘点时间
+export function delTakeStockPeriod(id) {
+  return request({
+    url:baseUrl + '/business/takeStockPeriod/' + id,
+    method: 'delete'
+  })
+}

+ 45 - 0
src/api/business/taksStockLot.js

@@ -0,0 +1,45 @@
+import request from '@/utils/request'
+const baseUrl = import.meta.env.VITE_APP_PRODUCTION_API
+
+// 查询盘点批次信息列表
+export function listTaksStockLot(query) {
+  return request({
+    url:baseUrl + '/business/taksStockLot/list',
+    method: 'get',
+    params: query
+  })
+}
+
+// 查询盘点批次信息详细
+export function getTaksStockLot(id) {
+  return request({
+    url:baseUrl + '/business/taksStockLot/' + id,
+    method: 'get'
+  })
+}
+
+// 新增盘点批次信息
+export function addTaksStockLot(data) {
+  return request({
+    url:baseUrl + '/business/taksStockLot',
+    method: 'post',
+    data: data
+  })
+}
+
+// 修改盘点批次信息
+export function updateTaksStockLot(data) {
+  return request({
+    url:baseUrl + '/business/taksStockLot',
+    method: 'put',
+    data: data
+  })
+}
+
+// 删除盘点批次信息
+export function delTaksStockLot(id) {
+  return request({
+    url: baseUrl +'/business/taksStockLot/' + id,
+    method: 'delete'
+  })
+}

+ 284 - 0
src/views/business/inventoryCheck/form.vue

@@ -0,0 +1,284 @@
+<template>
+  <el-drawer title="外协单信息" :with-header="false" v-model="visible" direction="rtl" size="100%">
+    <div class="form-container column-container">
+      <div class="form-btns-container">
+        <span class="title-label">
+          <el-icon>
+            <Document />
+          </el-icon>
+          <span>盘点批次</span>
+        </span>
+
+        <div class="close-btn" @click="cancel">
+          <i class="fa fa-times" aria-hidden="true" />
+          <!-- <span>关闭</span> -->
+        </div>
+      </div>
+      <el-form class="list-search-container" :model="queryParams" 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="queryParams.lotCode" @keydown.enter.prevent clearable
+                        style="width: 130px" />
+                </el-form-item>
+                <el-form-item label="产品描述:">
+                    <el-input placeholder="请输入产品描述" v-model.trim="queryParams.productDescription" @keydown.enter.prevent
+                        clearable style="width: 130px" />
+                </el-form-item>
+                <el-form-item label="生产状态:">
+					<el-select v-model="queryParams.isProductStatus" clearable placeholder="请选择生产状态" style="width: 145px">
+						<el-option v-for="dict in inventory_production_status" :key="dict.value" :label="dict.label"
+							:value="dict.value"></el-option>
+					</el-select>
+				</el-form-item>
+                <el-form-item label="标识:">
+                  <el-select
+                    style="width: 160px"
+                    multiple
+                    v-model="queryParams.flags"
+                    collapse-tags
+                    collapse-tags-tooltip
+                    clearable
+                    placeholder="请选择标识"
+                  >
+                    <el-option
+                      v-for="item in is_identification"
+                      :key="item.value"
+                      :label="item.label"
+                      :value="item.value"
+                    ></el-option>
+                  </el-select>
+                </el-form-item>
+                <el-form-item class="section-title" label="请选择当前工段:">
+                    <el-select-v2 v-model="queryParams.deptId" :options="deptList" placeholder="请选择工段"
+                        style="width: 120px" />
+                </el-form-item>
+                <el-form-item label="盘点状态:">
+					<el-select v-model="queryParams.isTaksStock" clearable placeholder="请选择盘点状态" style="width: 145px">
+						<el-option v-for="dict in is_taks_stock" :key="dict.value" :label="dict.label"
+							:value="dict.value"></el-option>
+					</el-select>
+				</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 v-loading="loading" :data="dataList" size="small" border height="100%">
+            <el-table-column label="行号" type="index" align="center" width="48" />
+            <el-table-column label="计划单号" align="center" prop="productionPlanNo" width="104" />
+            <el-table-column label="批次号" align="center" prop="lotCode" width="104" />
+            <el-table-column label="产品描述" align="center" prop="productDescription"  />
+            <el-table-column label="生产状态" prop="isProductStatus" width="90" align="center" >
+                            <template #default="scope">
+                                <dict-tag :options="inventory_production_status" :value="scope.row.isProductStatus" />
+                            </template>
+                        </el-table-column>
+            <el-table-column label="工段" align="center" prop="deptName" width="100" />
+            <el-table-column label="投入数" align="center" prop="prodNum" width="96" />
+            <el-table-column label="盘点数量" align="center" prop="taksStockNum" width="96" >
+              <template #default="scope">
+                <el-input-number
+                  v-if="scope.row.editStatus"
+                  v-model="scope.row.taksStockNum"
+                  controls-position="right"
+                  style="width: 100px"
+                  :min="0"
+                  @input="(val) => {handleChangeTaksStockNum(val, scope.row,scope.$index)}"
+                />
+                <div v-else>{{ scope.row.taksStockNum }}</div>
+              </template>
+            </el-table-column>
+            <el-table-column label="标识" width="300" align="center">
+            <template #default="scope">
+              <el-tag
+                v-if="scope.row.isWaste == 1"
+                class="spacing"
+                type="danger"
+                >{{ "批废" }}</el-tag
+              >
+              <el-tag
+                v-if="scope.row.isAmend == 1"
+                class="spacing"
+                type="danger"
+                >{{ "工艺修改" }}</el-tag
+              >
+              <el-tag
+                v-if="scope.row.isWasteRecycling == 1"
+                class="spacing"
+                type="primary"
+                >{{ "废品回用" }}</el-tag
+              >
+            </template>
+          </el-table-column>
+          <el-table-column label="盘点状态" prop="isTaksStock" width="200" align="center" >
+            <template #default="scope">
+                <el-select
+                  v-model="scope.row.isTaksStock"
+                  placeholder="请选择盘点状态"
+                  style="width: 160px"
+                  v-if="scope.row.editStatus"
+                  @change="(val) => {handleChangeTaksStock(val, scope.row,scope.$index)}"
+                >
+                  <el-option
+                    v-for="dict in is_taks_stock"
+                    :key="dict.value"
+                    :label="dict.label"
+                    :value="dict.value"
+                  ></el-option>
+                </el-select>
+                <div v-else>
+                  <dict-tag :options="is_taks_stock" :value="scope.row.isTaksStock" />
+                </div>
+              </template>
+                        </el-table-column>
+                        <el-table-column label="操作" width="160" align="center" v-if="detailInfo.status !=2">
+              <template #default="scope">
+                <el-button
+                link
+                icon="Check"
+                  v-if="scope.row.editStatus"
+                  type="success"
+                  @click="handleSave(scope.row)"
+                  >保存</el-button
+                >
+                <el-button
+                link
+                icon="Edit"
+                  v-else
+                  type="warning"
+                  @click="() => (scope.row.editStatus = true)"
+                  v-hasPermi="['business:inventoryCheck:editDetail']"
+                  >编辑</el-button
+                >
+                <el-button
+                link
+                icon="Close"
+                  v-if="scope.row.editStatus"
+                  type="danger"
+                  @click="handleCancel(scope.row, scope.$index)"
+                  >取消</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="getList" />
+    </div>
+  </el-drawer>
+</template>
+<script setup>
+import {
+  listTaksStockLot,updateTaksStockLot
+} from "@/api/business/taksStockLot";
+import { getDeptList } from "@/api/business/planDetailSubDetail.js";
+import { ref } from "vue";
+const { proxy } = getCurrentInstance();
+/** 字典 */
+const { is_identification } = proxy.useDict("is_identification");
+const { is_taks_stock } = proxy.useDict("is_taks_stock");
+const { inventory_production_status } = proxy.useDict("inventory_production_status");
+
+/** 表单抽屉 页变量 */
+const loading = ref(false);
+const visible = ref(false);
+const detailInfo = ref({});
+const total = ref(0)
+const isDispatch = ref(false)
+const deptList = ref([])
+const dataList = ref([])
+/** 查询对象 */
+const queryParams = ref({
+  pageNum: 1,
+  pageSize: 10,
+  productDescription: "",
+  lotCode: "",
+  deptId: null,
+  flags: null,
+  isTaksStock:null
+});
+
+/****************************  方法区  ****************************/
+/** 打开抽屉 */
+const open = (row) => {
+  visible.value = true;
+  reset();
+  detailInfo.value = proxy.deepClone(row);
+  getDeptList().then((response) => {
+        deptList.value = response.data.rows;
+        isDispatch.value = response.data.others.isDispatch;
+        loading.value = false;
+        if (isDispatch.value) {
+            deptList.value.unshift({ label: "全部", value: "0" });
+        } 
+        queryParams.value.deptId = deptList.value[0].value;
+        queryParams.value.takeStockPeriodId = row.id
+        getList();
+    });
+}
+function getList() {
+  listTaksStockLot(queryParams.value).then(res =>{
+    res.rows.forEach(element => {
+      element.isTaksStock = element.isTaksStock +""
+      element.taksStockNum = Number(element.taksStockNum)
+    });
+    dataList.value = res.rows;
+    total.value = res.total;
+  })
+}
+function handleSave(row) {
+  updateTaksStockLot(row).then(res =>{
+    if(res.code == 200){
+      proxy.$modal.msgSuccess("保存成功");
+      getList()
+    }
+  })
+}
+function handleChangeTaksStock(value,row,index) {
+if(value == 0) {
+  dataList.value[index].taksStockNum = 0
+}
+}
+function handleChangeTaksStockNum(value,row,index) {
+  if(value != 0) {
+    dataList.value[index].isTaksStock = "1"
+  }
+}
+function handleCancel(row,index) {
+  dataList.value[index].editStatus = false
+  getList()
+}
+function handleQuery() {
+  getList();
+}
+/** 取消按钮 */
+const cancel = () => {
+  visible.value = false;
+  reset();
+};
+
+/** 表单重置 */
+const reset = () => {
+  queryParams.value = {
+  pageNum: 1,
+  pageSize: 10,
+  productDescription: "",
+  lotCode: "",
+  deptId: null,
+  flags: null,
+  isTaksStock:null
+  };
+  dataList.value = [];
+};
+
+/** 暴露给父组件的方法 */
+defineExpose({
+  open,
+});
+</script>

+ 240 - 0
src/views/business/inventoryCheck/index.vue

@@ -0,0 +1,240 @@
+<template>
+    <div class="page-container row-container">
+        <!-- 左侧区域 -->
+        <section class="list-part-container" style="flex: 3">
+            <!-- 搜索区 -->
+            <el-form class="list-search-container" :model="queryParams" ref="queryRef" :inline="true"
+                style="margin-right: 0px">
+                <el-form-item class="section-title" label="盘点" />
+                <el-form-item label="创建时间:">
+                    <el-date-picker v-model="queryParams.createStartTime" type="date" value-format="YYYY-MM-DD"
+                        :editable="false" clearable placeholder="请选择" style="width: 130px"  />
+                    <span>~</span>
+                    <el-date-picker v-model="queryParams.createEndTime" type="date" value-format="YYYY-MM-DD"
+                        :editable="false" clearable placeholder="请选择" style="width: 130px"  />
+                </el-form-item>
+                <el-form-item label="开始时间:">
+                    <el-date-picker v-model="queryParams.startStartTime" type="date" value-format="YYYY-MM-DD"
+                        :editable="false" clearable placeholder="请选择" style="width: 130px"  />
+                    <span>~</span>
+                    <el-date-picker v-model="queryParams.startEndTime" type="date" value-format="YYYY-MM-DD"
+                        :editable="false" clearable placeholder="请选择" style="width: 130px" />
+                </el-form-item>
+                <el-form-item label="结束时间:">
+                    <el-date-picker v-model="queryParams.endStartTime" type="date" value-format="YYYY-MM-DD"
+                        :editable="false" clearable placeholder="请选择" style="width: 130px"  />
+                    <span>~</span>
+                    <el-date-picker v-model="queryParams.endEndTime" type="date" value-format="YYYY-MM-DD"
+                        :editable="false" clearable placeholder="请选择" style="width: 130px"  />
+                </el-form-item>
+                <el-form-item label="状态:">
+					<el-select v-model="queryParams.status" clearable placeholder="请选择盘点状态" style="width: 145px">
+						<el-option v-for="dict in take_stock_status" :key="dict.value" :label="dict.label"
+							:value="dict.value"></el-option>
+					</el-select>
+				</el-form-item>
+                <el-form-item label="备注:">
+                    <el-input placeholder="请输入备注" v-model.trim="queryParams.remark" @keydown.enter.prevent clearable
+                        style="width: 120px" />
+                </el-form-item>
+                <el-form-item style="margin-left: 0">
+                    <el-button type="info" icon="Search" @click="handleQuery">搜索
+                    </el-button>
+                    <el-button v-show=" !hasAlreadyAddTakeStock && !hasAlreadyTakeStock" v-hasPermi="['business:inventoryCheck:add']"
+                     type="primary" icon="Plus" @click="handleAdd">新增</el-button>
+                </el-form-item>
+            </el-form>
+            <div class="el-table-container">
+                <div class="el-table-inner-container">
+                    <el-table ref="takeStockPeriodTable" :data="takeStockPeriodList" v-loading="loading"
+                        highlight-current-row height="100%">
+                        <el-table-column type="index" label="行号" width="50" align="center" />
+                        <el-table-column label="创建时间" prop="createTime" width="200" align="center" />
+                        <el-table-column label="开始时间" prop="startTime" width="200" align="center" />
+                        <el-table-column label="结束时间" prop="endTime" width="200" align="center" />
+                        <el-table-column label="盘点状态" prop="status" width="80" align="center" >
+                            <template #default="scope">
+                                <dict-tag :options="take_stock_status" :value="scope.row.status" />
+                            </template>
+                        </el-table-column>
+                        <el-table-column label="备注" prop="remark"  align="center" >
+                            <template #default="scope">
+									<div v-if="scope.row.editStatus">
+										<el-input v-model.trim="scope.row.remark" size="small"
+											placeholder="请输入备注" />
+									</div>
+									<div v-else>{{ scope.row.remark }}</div>
+                            </template>
+                            </el-table-column>
+                            <el-table-column label="操作" align="center"  width="250">
+                                    <template #default="scope">
+                                    <el-button v-show="!scope.row.editStatus" v-hasPermi="['business:inventoryCheck:edit']"
+                                      link type="warning" icon="Edit" @click="handleUpdate(scope.row)"
+                                      >
+                                        编辑
+                                    </el-button>
+                                    <el-button v-show="!scope.row.editStatus" v-hasPermi="['business:inventoryCheck:view']"
+                                     link type="primary" icon="View" @click="handleView(scope.row)"
+                                      >
+                                        查看
+                                    </el-button>
+                                    <el-button v-show="!scope.row.editStatus && scope.row.status == 0" v-hasPermi="['business:inventoryCheck:start']" 
+                                    link type="success" icon="Open" @click="handleStartTakeStock(scope.row)"
+                                       >
+                                        开始盘点
+                                    </el-button>
+                                    <el-button v-show="!scope.row.editStatus && scope.row.status ==1" link v-hasPermi="['business:inventoryCheck:end']"
+                                     type="danger" icon="TurnOff" @click="handleEndTakeStock(scope.row)"
+                                       >
+                                        结束盘点
+                                    </el-button>
+                                    <el-button
+                                    link
+                                        v-if="scope.row.editStatus"
+                                        icon="Close"
+                                        type="danger"
+                                        @click="handleCancel(scope.row, scope.$index)"
+                                        >取消</el-button
+                                        >
+                                    <el-button
+                                    link
+                                    icon="Check"
+                                    v-if="scope.row.editStatus"
+                                    type="success"
+                                    @click="handleSave(scope.row)"
+                                    >保存</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="getTakeStockPeriodList" />
+        </section>
+        <!-- 盘点详情 -->
+        <inventory-check-form ref="inventoryCheckFormRef" />
+
+    </div>
+</template>
+
+<script setup name="inventoryCheck">
+import { listTakeStockPeriod ,addTakeStockPeriod ,updateTakeStockPeriod} from "@/api/business/takeStockPeriod";
+
+import inventoryCheckForm from "./form.vue";
+import { ref } from "vue";
+const { proxy } = getCurrentInstance();
+/** 字典 */
+const { take_stock_status } = proxy.useDict("take_stock_status");
+
+/** 盘点 */
+const takeStockPeriodTable = ref(null);
+const takeStockPeriodList = ref([])
+//列表中是否已经存在开始盘点的数据
+const hasAlreadyTakeStock = ref(false);
+//列表中已经存在新增的盘点
+const hasAlreadyAddTakeStock = ref(false);
+const loading = ref(false);
+const total = ref(0);
+
+const queryParams = ref({
+   status:null,
+   createStartTime:null,
+   createEndTime:null,
+   startTimeStr:null,
+   startTimeEnd:null,
+   endTimeStr:null,
+   endTimeEnd:null,
+   remark:null,
+   pageNum: 1,
+   pageSize: 10,
+});
+
+/***********************  工段相关事件  ****************************/
+
+function getTakeStockPeriodList() {
+    loading.value = true;
+    listTakeStockPeriod(queryParams.value).then(res =>{
+        takeStockPeriodList.value = res.rows;
+        hasAlreadyTakeStock.value = res.others.hasAddTakeStockStatus
+        hasAlreadyAddTakeStock.value = res.others.hasTakeStockStatus
+        total.value = res.total;
+    })
+    loading.value = false
+}
+//新增
+function handleAdd() {
+    takeStockPeriodList.value.unshift({createTime:proxy.moment().format("YYYY-MM-DD HH:mm:ss"),startTime:null,endTime:null,status:"0",remark:null, editStatus: true })
+    hasAlreadyAddTakeStock.value = true
+}
+//保存按钮
+function handleSave(row) {
+    console.log(row)
+    addTakeStockPeriod(row).then(res => {
+        if(res.code === 200) {
+            getTakeStockPeriodList()
+        }
+    })
+}
+//查看按钮
+function handleView(row) {
+    proxy.$refs.inventoryCheckFormRef.open(row);
+}
+//结束盘点
+function handleEndTakeStock(row) {
+    proxy.$modal
+    .confirm("是否确认结束盘点?")
+    .then(function () {
+    row.endTime = proxy.moment().format("YYYY-MM-DD HH:mm:ss")
+    row.status = 2
+    updateTakeStockPeriod(row).then(res => {
+        if(res.code === 200) {
+            proxy.$modal.msgSuccess("已成功结束盘点");
+            getTakeStockPeriodList()
+        }
+    })
+    })
+}
+//编辑按钮
+function handleUpdate(row) {
+    row.editStatus = true
+}
+//开始盘点
+function handleStartTakeStock(row) {
+    proxy.$modal
+    .confirm("是否确认开始盘点?")
+    .then(function () {
+    row.startTime = proxy.moment().format("YYYY-MM-DD HH:mm:ss")
+    row.status = 1
+    updateTakeStockPeriod(row).then(res => {
+        if(res.code === 200) {
+            proxy.$modal.msgSuccess("已成功开始盘点");
+            getTakeStockPeriodList()
+        }
+    })
+    })
+ 
+}
+/** 搜索按钮操作 */
+function handleQuery() {
+    getTakeStockPeriodList();
+}
+function handleCancel(row,index) {
+    if(row.id) {
+        takeStockPeriodList.value[index].editStatus = false    
+    }else {
+        getTakeStockPeriodList()
+    }
+  
+ 
+}
+onMounted(() => {
+    getTakeStockPeriodList();
+});
+</script>
+<style scoped>
+.el-form--inline .el-form-item {
+    margin-right: 20px;
+}
+</style>