Browse Source

1.解决冲突

jiaxiaoqiang 1 năm trước cách đây
mục cha
commit
6f9b691468

+ 3 - 3
.env.development

@@ -10,10 +10,10 @@ VITE_APP_BASE_API = '/dev-api'
 # 上传文件接口地址
 VITE_APP_UPLOAD_URL = 'http://192.168.101.4:9000'
 # 开发接口地址
-VITE_APP_API_URL = 'http://192.168.101.4:8078'
+# VITE_APP_API_URL = 'http://192.168.101.4:8078'
 #VITE_APP_API_URL = 'http://192.168.101.188:8078'
-#VITE_APP_API_URL = 'http://192.168.101.30:8078'  #lup
-#VITE_APP_API_URL = 'http://192.168.101.90:8078'  #hetao
+ VITE_APP_API_URL = 'http://192.168.101.188:8078'  #lup
+#VITE_APP_API_URL = 'http://192.168.101.64:8078'  #hetao
 
 # 是否启用 Mock 服务
 VITE_MOCK_DEV_SERVER = false

+ 34 - 0
src/api/order/index.ts

@@ -135,3 +135,37 @@ export function getStatistics(data: Object) {
     data: data,
   });
 }
+
+export function queryApplyInfoDetails(params: any) {
+  return request({
+    url: "/api/v1/plan/requisition/queryInfoDetails",
+    method: "post",
+    data: params,
+  });
+}
+
+export function saveApplyInfoDetails(params: any) {
+  return request({
+    url: "/api/v1/plan/requisition/add",
+    method: "post",
+    data: params,
+  });
+}
+
+export function auditApplyInfoDetails(params: any) {
+  return request({
+    url: "/api/v1/plan/requisition/audit",
+    method: "post",
+    data: params,
+  });
+}
+
+export function queryOrderList(
+  queryParams: object
+): AxiosPromise<PageResult<any[]>> {
+  return request({
+    url: "/api/v1/plan/order/list",
+    method: "post",
+    data: queryParams,
+  });
+}

+ 3 - 2
src/common/configs/dictDataUtil.ts

@@ -53,9 +53,10 @@ const DictDataUtil = {
     prepare_data_file: "prepare_data_file",
     //生产准备-工艺文件
     prepare_craft_file: "prepare_craft_file",
-    //   生产计划-工位任务状态
+ //   生产计划-工位任务状态
     station_task_state: "station_task_state",
-  },
+//领用申请状态
+    requisition_state:"requisition_state",  },
   EXPAND_FIELD_TABLE: {
     //字段类型
     expand_field_type: "expand_field_type",

+ 21 - 1
src/views/plan/order/index.vue

@@ -49,6 +49,23 @@
             @click="handleEdit(row,0)"
         ><i-ep-edit />编辑
         </el-button>
+        <el-button
+            v-if="row.nameplated === 1"
+            type="info"
+            link
+            size="small"
+            @click="handleNameplated(row)"
+        ><i-ep-edit />铭牌
+        </el-button>
+        <el-button
+            v-hasPerm="[buttonPermission.PLAN.BTNS.order_del]"
+            v-if="row.orderState === '0' ||  row.orderState === '1' ||  row.orderState === '2'"
+            type="danger"
+            link
+            size="small"
+            @click="rowDel(row,0)"
+        ><i-ep-edit />删除
+        </el-button>
       </template>
     </avue-crud>
     <el-dialog
@@ -165,7 +182,7 @@ option.value = {
   searchIndex: 3,
   searchIcon: true,
   editBtn: false,
-  //searchSpan: 4,
+  delBtn: false,
   searchMenuSpan: 8,
   align: "center",
   menuAlign: "center",
@@ -482,6 +499,9 @@ const rowUpdate = (form, index, done, loading) => {
     handleQuery(null, null);
   });
 };
+const handleNameplated = (row) =>{
+  ElMessage.warning("功能开发中")
+}
 const rowDel = (form: any, index) => {
   ElMessageBox.confirm("当前操作会删除数据,你确认要继续吗?")
     .then(() => {

+ 593 - 0
src/views/plan/requisition/index.vue

@@ -0,0 +1,593 @@
+<template>
+  <div class="mainContentBox">
+    <avue-crud
+        ref="crudRef"
+        v-model:search="search"
+        v-model="form"
+        :data="data"
+        :option="option"
+        v-model:page="page"
+        @row-save="createRow"
+        @row-update="updateRow"
+        @row-del="deleteRow"
+        @search-change="searchChange"
+        @search-reset="resetChange"
+        @size-change="dataList"
+        @current-change="dataList"
+        @selection-change="selectionChange"
+    >
+      <template #menu-left="{ size }">
+        <el-button
+            type="primary"
+            icon="el-icon-plus"
+            :size="size"
+            @click="openDialog(0,null)"
+        >新增</el-button>
+
+        <el-button
+          :disabled="toDeleteIds.length < 1"
+          type="danger"
+          icon="el-icon-delete"
+          :size="size"
+          @click="multipleDelete"
+          >删除</el-button
+        >
+      </template>
+      <template #menu="{size,row,index}">
+        <el-button
+            type="info"
+            link
+            size="small"
+            @click="openDialog(1,row)"
+        ><i-ep-edit />查看</el-button>
+        <el-button
+            type="primary"
+            link
+            size="small"
+            @click="openDialog(2,row)"
+        ><i-ep-edit />{{row.state === '0' ? '编辑' : '流程'}}</el-button>
+      </template>
+    </avue-crud>
+    <el-dialog
+        v-model="dialog.visible"
+        :title="dialog.title"
+        width="75%"
+        @close="dialog.visible = false"
+    >
+      <template #header="{ close, titleId, titleClass }">
+        <el-button v-if="dialogType === 1"  type="primary" @click="printPage" size="small">打印</el-button>
+      </template>
+      <div class="card-container" >
+        <el-card style="width: 70%" shadow="always">
+          <div ref="toPrintRef">
+            <el-row style="text-align: center;">
+              <el-col :span="24"><el-text tag="b">零、部(组)件领用单</el-text></el-col>
+            </el-row>
+          <el-row>
+            <el-col :span="14" ></el-col>
+            <el-col :span="5" ><el-text tag="p" v-if="form.applyCode">{{form.applyCode}}</el-text></el-col>
+            <el-col :span="5"></el-col>
+          </el-row>
+          <el-row style="width: 100%;height: 30px;"></el-row>
+          <el-row>
+            <el-col :span="2" ><el-text tag="p">领用单位:</el-text></el-col>
+            <el-col :span="6" ><el-text tag="p" >{{form.applyOrg}}</el-text></el-col>
+            <el-col :span="2" ><el-text tag="p">发件单位: </el-text></el-col>
+            <el-col :span="6" ><el-text tag="p" >{{form.sendOrg}} </el-text></el-col>
+            <el-col :span="2" ><el-text tag="p">计划编号:</el-text></el-col>
+            <el-col :span="6">
+              <el-text tag="p" v-if="dialogType === 1 || form.state > 0">{{form.orderCode}}</el-text>
+              <el-select
+                  v-else
+                  size="small"
+                  v-model="form.orderCode"
+                  placeholder="请选择计划单号"
+                  clearable
+                  @change="changeOrder"
+              >
+                <el-option
+                    v-for="option in orderList"
+                    :key="option.orderCode"
+                    :label="option.orderCode"
+                    :value="option.orderCode"
+                />
+              </el-select>
+            </el-col>
+          </el-row>
+          <el-table class="print-table"
+              v-loading="loading"
+              :data="tableDataList"
+              border
+          >
+            <el-table-column label="序号" type="index" width="60"/>
+            <el-table-column label="工作令号" prop="workCode">
+              <template v-slot="{row}">
+                <el-text v-if="dialogType === 1 || form.state > 0">{{row.workCode}}</el-text>
+                <el-input v-else v-model="row.workCode"/>
+              </template>
+            </el-table-column>
+            <el-table-column label="零、部(组)件图号" prop="materialCode" />
+            <el-table-column label="名称" prop="materialName" />
+            <el-table-column label="数量" align="num">
+              <template v-slot="{row}">
+                <el-text v-if="dialogType === 1 || form.state > 0">{{row.num}}</el-text>
+                <el-input v-else v-model="row.num" type="number"/>
+              </template>
+            </el-table-column>
+            <el-table-column label="备注" align="remark">
+              <template v-slot="{row}">
+                <el-text v-if="dialogType === 1 || form.state > 0">{{row.remark}}</el-text>
+                <el-input v-else v-model="row.remark"/>
+              </template>
+            </el-table-column>
+            <el-table-column label="操作" align="remark" v-if="form.state === '0'">
+              <template v-slot="{row,index}">
+                <el-button type="danger" @click="minusItem(row)" icon="el-icon-minus" style="margin-left:15px;width:25px;height:25px;" circle />
+              </template>
+            </el-table-column>
+          </el-table>
+          <el-row>
+            <el-col :span="2" ><el-text tag="p">领用人:</el-text></el-col>
+            <el-col :span="4" ><el-text tag="p" >{{form.applyUser}}</el-text></el-col>
+            <el-col :span="2" ><el-text tag="p">审核: </el-text></el-col>
+            <el-col :span="4" ><el-text tag="p" >{{form.auditUser}} </el-text></el-col>
+            <el-col :span="2" ><el-text tag="p">会签:</el-text></el-col>
+            <el-col :span="4" ><el-text tag="p" >{{form.countersignUser}}</el-text></el-col>
+            <el-col :span="2" ><el-text tag="p">批准:</el-text></el-col>
+            <el-col :span="4" ><el-text tag="p" >{{form.approveUser}}</el-text></el-col>
+          </el-row>
+          </div>
+        </el-card>
+
+        <el-card style="width: 28%" shadow="always">
+          <template #header>
+            <div class="card-header">
+              <span>领用流程</span>
+            </div>
+            <el-timeline style="max-width: 500px;">
+              <el-timeline-item center type="success" placement="top">
+                <el-card>
+                  <h4>申请</h4>
+                  <el-form ref="maintenanceInfoForm2" size="small" :model="form" label-width="auto" style="max-width: 400px">
+                    <el-form-item label="领用人员" prop="auditUser">
+                      <el-text tag="p" v-if="dialogType === 1 || form.state > 0">{{form.applyUser}}</el-text>
+                      <el-select
+                          v-else
+                          size="small"
+                          filterable
+                          v-model="form.applyUser"
+                          placeholder="请选择领用人员"
+                          clearable>
+                        <el-option
+                            v-for="option in userList"
+                            :key="option.userName"
+                            :label="option.nickName"
+                            :value="option.userName" />
+                      </el-select>
+                    </el-form-item>
+                    <el-form-item label="审核人员" v-if="form.state === '0'">
+                      <el-text tag="p" v-if="dialogType === 1 || form.state > 0">{{form.auditUser}}</el-text>
+                      <el-select
+                          v-else
+                          size="small"
+                          filterable
+                          v-model="form.auditUser"
+                          placeholder="请选择审核人员"
+                          clearable>
+                        <el-option
+                            v-for="option in userList"
+                            :key="option.userName"
+                            :label="option.nickName"
+                            :value="option.userName" />
+                      </el-select>
+                    </el-form-item>
+                    <el-form-item label="申请时间"  v-if="form.state > 0">
+                      <el-text tag="p">{{form.created}}</el-text>
+                    </el-form-item>
+                    <el-form-item style="margin-left: 28%" v-if="dialogType !==1">
+                      <el-button type="primary" @click="saveForm(1)" v-if="form.state === '0'">申 请</el-button>
+                      <el-button type="success" @click="saveForm(0)" v-if="form.state === '0'">保 存</el-button>
+                    </el-form-item>
+                  </el-form>
+                </el-card>
+              </el-timeline-item>
+              <el-timeline-item center placement="top"  :type="form.state > 1 ? 'success' : 'primary'">
+                <el-card>
+                  <h4>审核</h4>
+                  <el-form v-if="form.state >= 1"  size="small" :model="form" label-width="auto" style="max-width: 400px">
+                    <el-form-item label="审核人员" prop="auditUser">
+                      <el-text tag="p">{{form.auditUser}}</el-text>
+                    </el-form-item>
+                    <el-form-item label="处理结果">
+                      <el-text tag="p" v-if="dialogType === 1 || form.state !== '1'">{{form.state === '1' ? '待审核' : form.auditState === 0 ? "通过" : "未通过"}}</el-text>
+                      <el-text tag="p" v-else-if="form.auditUser !== username">{{form.auditState ? form.auditState === 0 ? "通过" : "未通过" : "待审核"}}</el-text>
+                      <el-radio-group v-else v-model="form.auditState">
+                        <el-radio :value=0>通过</el-radio>
+                        <el-radio :value=1>不通过</el-radio>
+                      </el-radio-group>
+                    </el-form-item>
+                    <el-form-item label="会签人员" v-if="dialogType !== 1 && form.state === '1' && form.auditUser === username">
+                      <el-select
+                          size="small"
+                          filterable
+                          multiple
+                          v-model="form.countersignUsers"
+                          placeholder="请选择会签人员"
+                          clearable>
+                        <el-option
+                            v-for="option in userList"
+                            :key="option.userName"
+                            :label="option.nickName"
+                            :value="option.userName" />
+                      </el-select>
+                    </el-form-item>
+                    <el-form-item label="审核时间" v-if="form.audit && form.audit.time">
+                      <el-text tag="p" >{{form.audit.time}}</el-text>
+                    </el-form-item>
+                    <el-form-item style="margin-left: 35%">
+                      <el-button type="primary" @click="saveForm(2)"  v-if="dialogType !== 1 && form.state === '1' && form.auditUser === username">审 核</el-button>
+                    </el-form-item>
+                  </el-form>
+                </el-card>
+              </el-timeline-item>
+              <el-timeline-item center placement="top" :type="form.state > 3 ? 'success' : 'primary'">
+                <el-card>
+                  <h4>会签</h4>
+                  <el-form v-if="form.state >= 3"  size="small" :model="form" label-width="auto" style="max-width: 400px">
+                    <el-form-item v-for="item of form.countersign" label="会签人员:">
+                      <el-text tag="p" >{{item.user}}--</el-text>
+                      <el-text tag="p" v-if="dialogType === 1  ||  item.user !== username">{{item.state === -1 ? '未审核' : item.state === 0 ? '通过' : '未通过'}}</el-text>
+                      <el-text tag="p" v-else-if="item.state !== -1 && item.user === username">{{item.state === 0 ? '通过' : '未通过'}}</el-text>
+                      <el-radio-group v-model="form.countersignState" v-if="dialogType !== 1  && item.state === -1 && item.user === username">
+                        <el-radio :value=0>通过</el-radio>
+                        <el-radio :value=1>不通过</el-radio>
+                      </el-radio-group>
+                    </el-form-item>
+                    <el-form-item label="批准人员" v-if="dialogType !== 1  && form.countersignOk && form.state === '3'">
+                      <el-select
+                          size="small"
+                          v-model="form.approveUser"
+                          placeholder="请选择批准人员"
+                          clearable >
+                        <el-option
+                            v-for="option in userList"
+                            :key="option.userName"
+                            :label="option.nickName"
+                            :value="option.userName" />
+                      </el-select>
+                    </el-form-item>
+                    <el-form-item label="通过时间" v-if="form.countersignInfo && form.countersignInfo.time">
+                      <el-text tag="p" >{{form.countersignInfo.time}}</el-text>
+                    </el-form-item>
+                    <el-form-item style="margin-left: 35%">
+                      <el-button type="primary" v-if="dialogType !== 1 && form.state === '3' && form.countersignUser.includes(username) && form.countersignBtn" @click="saveForm(3)">审 核</el-button>
+                    </el-form-item>
+                  </el-form>
+                </el-card>
+              </el-timeline-item>
+              <el-timeline-item center placement="top" :type="form.state > 5 ? 'success' : 'primary'">
+                <el-card>
+                  <h4>批准</h4>
+                  <el-form v-if="form.state >= 5" size="small" :model="form" label-width="auto" style="max-width: 400px">
+                    <el-form-item label="审批人" v-if="form.state > 5">
+                      <el-text tag="p">{{form.approve.user}}</el-text>
+                    </el-form-item>
+                    <el-form-item label="审批结果">
+                      <el-text tag="p" v-if="dialogType === 1 || form.state === '6' || form.state === '7'">{{form.state === '5' ?  '待审批' : form.state === '6' ? '通过' : '未通过'}}</el-text>
+                      <el-text tag="p" v-else-if="form.approveUser !== username">待审批</el-text>
+                      <el-radio-group v-else v-model="form.approveState">
+                        <el-radio :value=0>通过</el-radio>
+                        <el-radio :value=1>不通过</el-radio>
+                      </el-radio-group>
+                    </el-form-item>
+                    <el-form-item label="审批时间" v-if="form.state > 5">
+                      <el-text tag="p">{{form.approve.time}}</el-text>
+                    </el-form-item>
+                    <el-form-item style="margin-left: 35%">
+                      <el-button type="primary" @click="saveForm(4)" v-if="dialogType !== 1 && form.state === '5' && form.approveUser === username">审 核</el-button>
+                    </el-form-item>
+                  </el-form>
+                </el-card>
+              </el-timeline-item>
+            </el-timeline>
+          </template>
+        </el-card>
+      </div>
+    </el-dialog>
+  </div>
+</template>
+
+<script setup>
+import { useUserStoreHook } from "@/store/index";
+import { ref, getCurrentInstance } from "vue";
+import { html2CanvasPrint } from "@/utils/common";
+import { useCrud } from "@/hooks/userCrud";
+import dictDataUtil from "@/common/configs/dictDataUtil";
+import {queryApplyInfoDetails,queryOrderList,saveApplyInfoDetails,auditApplyInfoDetails} from "@/api/order"
+import {getUserList} from "@/api/system/user"
+import { useCommonStoreHook } from "@/store";
+const { isShowTable, tableType } = toRefs(useCommonStoreHook());
+const test = () => {
+  isShowTable.value = true;
+  tableType.value = tableType.value == 1 ? 2 : 1;
+};
+
+// 1.定义ref
+const toPrintRef = ref(null);
+// 传入一个url,后面不带/
+const { form, data, option, search, page, toDeleteIds, Methords, Utils } =
+  useCrud({
+    src: "/api/v1/plan/requisition",
+  });
+const { dataList, createRow, updateRow, deleteRow, searchChange, resetChange } = Methords; //增删改查
+const { selectionChange, multipleDelete } = Methords; //选中和批量删除事件
+const { checkBtnPerm, downloadTemplate, exportData } = Utils; //按钮权限等工具
+const { username } = useUserStoreHook().user;
+const minusItem =(row)=>{
+  tableDataList.value = tableDataList.value.filter(item=>item.id !== row.id)
+}
+const changeOrder =(val)=>{
+  queryApplyInfoDetails({orderCode: val}).then((data)=>{
+    tableDataList.value = data.data
+  })
+}
+const saveForm = (type) =>{
+  let state = type;
+  let step = null;
+  let nextUsers = ""
+  if(type === 1 || type === 0){
+    if(tableDataList.value.length === 0){
+      ElMessage.error("当前没有申请的物料信息")
+      return;
+    }
+    for(let item of tableDataList.value){
+      if(!item.workCode){
+        ElMessage.error("工作令号不能为空")
+        return;
+      }
+      if(!item.num || item.num <=0){
+        ElMessage.error("物料数量不正确")
+        return;
+      }
+    }
+    if(!form.value.applyUser){
+      ElMessage.error("领用人员不能为空")
+      return;
+    }
+    if(!form.value.auditUser){
+      ElMessage.error("审核人员不能为空")
+      return;
+    }
+    const params = {...form.value,'state': state,details: tableDataList.value}
+    saveApplyInfoDetails(params).then((data)=>{
+      if(data.code === '200'){
+        ElMessage.success(data.msg)
+        dialog.visible = false
+        dataList()
+      }else{
+        ElMessage.error(data.msg)
+      }
+    })
+    return;
+  }
+  step = "audit";
+  if(type === 2){
+    if(form.value.auditState != undefined){
+      if(form.value.auditState === 0 && form.value.countersignUsers.length === 0){
+        ElMessage.error("会签人员不能为空")
+        return;
+      }
+    }else{
+      if(!form.value.auditState){
+        ElMessage.error("请选择处理结果")
+        return;
+      }
+    }
+    nextUsers = form.value.countersignUsers.join(",")
+    state = form.value.auditState
+  }
+  if(type === 3){
+    step = "countersign";
+    if(!form.value.approveUser && form.value.countersignOk){
+      ElMessage.error("请选择审批人员")
+      return;
+    }
+    if(form.value.countersignState === undefined){
+      ElMessage.error("请选择处理结果")
+      return;
+    }
+    nextUsers = form.value.approveUser
+    state = form.value.countersignState
+  }
+  if(type === 4){
+    step = "approve";
+    if(form.value.approveState === undefined){
+      ElMessage.error("请选择处理结果")
+      return;
+    }
+    state = form.value.approveState
+  }
+  const params = {id: form.value.id,'state': state,currentStep: step,nextUser: nextUsers}
+  auditApplyInfoDetails(params).then((data)=>{
+    if(data.code === '200'){
+      ElMessage.success(data.msg)
+      dialog.visible = false
+      dataList()
+    }else{
+      ElMessage.error(data.msg)
+    }
+  })
+}
+const loading = ref(false)
+const crudRef = ref(null); //crudRef.value 获取avue-crud对象
+const userList = ref([])
+const orderList = ref([])
+const dialogType = ref(false)
+const dialog = reactive({
+  title: "领用单",
+  visible: false,
+});
+const tableDataList = ref([])
+const openDialog = (type,row)=>{
+  dialogType.value = type
+  tableDataList.value = []
+  form.value = {}
+  form.value.sendOrg = "周转库";
+  form.value.applyOrg = "制造中心"
+  form.value.state = "0"
+  if(type !== 0){
+    queryApplyInfoDetails({applyCode: row.applyCode}).then((data)=>{
+      tableDataList.value = data.data
+    })
+    form.value = row
+  }
+  form.value.countersign = []
+  if(row && row.flowInfo){
+    let json = JSON.parse(row.flowInfo)
+    let auditInfo = json.audit
+    if(auditInfo){
+      form.value.audit =auditInfo.info
+      form.value.auditState = form.value.audit.state
+    }
+    if(row.countersignUser){
+      form.value.countersignUsers = row.countersignUser.split(",")
+    }
+    form.value.countersignBtn = false
+    if(json.countersign){
+      form.value.countersign = json.countersign.list
+      form.value.countersignInfo = json.countersign.info
+      //当断当前是否最后一个
+      let isOk = true
+      for(let obj of form.value.countersign){
+        if(obj.state === -1 && obj.user === username){
+          form.value.countersignBtn = true
+        }
+        if(obj.user !== username && obj.state === -1){
+          isOk = false
+        }
+      }
+      form.value.countersignOk = isOk;
+    }
+    if(json.approve){
+      form.value.approve = json.approve.info
+    }
+    form.value.approveUser = row.approveUser
+  }
+  dialog.visible = true
+  getUserList({}).then((data)=>{
+    userList.value = data.data
+  })
+}
+const printPage = ()=>{
+  html2CanvasPrint(toPrintRef.value);
+}
+// 设置表格列或者其他自定义的option
+option.value = Object.assign(option.value, {
+  delBtn: false,
+  addBtn: false,
+  editBtn: false,
+  viewBtn: false,
+  selection: true,
+  column: [
+    {
+      label: "领用单号",
+      prop: "applyCode",
+      search: true,
+      width: 150,
+      overHidden: true,
+    },
+    {
+      label: "计划单号",
+      prop: "orderCode",
+      search: true,
+      width: 150,
+      overHidden: true,
+    },
+    {
+      label: "领用单位",
+      prop: "applyOrg",
+      width: 150,
+      overHidden: true,
+    },
+    {
+      label: "发件单位",
+      prop: "sendOrg",
+      width: 150,
+      overHidden: true,
+    },
+    {
+      label: "领用人员",
+      prop: "applyUser",
+      width: 150,
+      overHidden: true,
+      search: true,
+    },
+    {
+      label: "审核人员",
+      prop: "auditUser",
+      width: 150,
+      overHidden: true,
+    },
+    {
+      label: "会签人员",
+      width: 150,
+      overHidden: true,
+      prop: "countersignUser",
+    },
+    {
+      label: "审批人员",
+      width: 150,
+      overHidden: true,
+      prop: "approveUser",
+    },
+    {
+      label: "状态",
+      prop: "state",
+      width: 150,
+      type: 'select',
+      dicUrl: dictDataUtil.request_url + dictDataUtil.TYPE_CODE.requisition_state,
+      props: {
+        label: "dictLabel", // 下拉菜单显示的字段
+        value: "dictValue" // 下拉菜单值的字
+      },
+    },
+    {
+      label: "创建时间",
+      prop: "created",
+      width: 160,
+      display: false
+    },
+  ],
+});
+
+onMounted(() => {
+  queryOrderList({}).then((data)=>{
+    if(!data.data){
+      ElMessage.warning("请维护物料BOM")
+    }
+    orderList.value = data.data
+  })
+  // console.log("crudRef", crudRef)
+  dataList();
+});
+</script>
+
+
+
+<style scoped>
+:deep(.card-container .el-form-item) {
+  display: flex;
+  justify-content: center;
+  align-items: center;
+  height: 15px; /* 根据需要调整高度 */
+}
+
+:deep(.el-timeline-item){
+  padding-bottom: 0px;
+  position: relative;
+}
+.card-container {
+  display: flex;
+  justify-content: space-around;
+}
+</style>

+ 16 - 0
src/views/plan/workOrder/components/choice-line-page.vue

@@ -42,6 +42,22 @@ const props = defineProps({
     }
   }
 })
+watch(
+  () => props.parentCode,
+  () => {
+    search.value.parentCode = props.parentCode
+    search.value.materialCode = props.materialCode
+    dataList();
+  },
+);
+watch(
+  () => props.materialCode,
+  () => {
+    search.value.parentCode = props.parentCode
+    search.value.materialCode = props.materialCode
+    dataList();
+  },
+);
 // 传入一个url,后面不带/
 const { form, data, option, search, page, toDeleteIds, Methords, Utils } =
   useCrud({

+ 8 - 0
src/views/plan/workOrder/components/choice-route-page.vue

@@ -34,6 +34,14 @@ const props = defineProps({
     }
   }
 })
+watch(
+  () => props.materialCode,
+  () => {
+    search.value.prodtCode = props.materialCode
+    search.value.enabled = "0"
+    dataList();
+  }
+);
 // 传入一个url,后面不带/
 const { form, data, option, search, page, toDeleteIds, Methords, Utils } =
   useCrud({

+ 1 - 1
src/views/storage/stock/index.vue

@@ -66,7 +66,7 @@ const dialog1 = reactive({
   visible: false,
 });
 const materialInfo = (value) => {
-  form.value.materialCode = value.materialCode
+  form.value.materialNo = value.materialCode
   form.value.materialName = value.materialName
   form.value.materialModel = value.spec
   form.value.unit = value.unitDictValue

+ 12 - 0
src/views/system/logs/index.vue

@@ -228,6 +228,18 @@ optionLogin.value = {
       prop: "loginIp",
     },
     {
+      label: "登录系统",
+      prop: "operatorType",
+      html: true,
+      type: "select",
+      formatter: (val) => {
+        if (val.operatorType === 'aio') {
+          return '<b class="el-tag el-tag--info el-tag--light">一体机</b>';
+        }
+        return '<b class="el-tag el-tag--info el-tag--light">后台</b>';
+      }
+    },
+    {
       label: "浏览器",
       prop: "clientBrowser",
     },

+ 6 - 5
src/views/system/role/index.vue

@@ -41,7 +41,7 @@ const formData = ref({
   roleName: "",
 });
 
-const rules = reactive({
+const  rules = reactive({
   roleName: [{ required: true, message: "请输入角色名称", trigger: "blur" }],
   roleCode: [{ required: true, message: "请输入角色编码", trigger: "blur" }],
   scope: [{ required: true, message: "请选择数据权限", trigger: "blur" }],
@@ -90,6 +90,7 @@ function openDialog(row?: any) {
     Object.assign(formData.value, row);
   } else {
     dialog.title = "新增角色";
+    formData.value.id = undefined
     formData.value.scope = 0
     formData.value.state = 0
     formData.value.roleCode = ""
@@ -329,15 +330,15 @@ onMounted?.(() => {
         :rules="rules"
         label-width="100px"
       >
-        <el-form-item label="角色名称" prop="name">
+        <el-form-item label="角色名称" prop="roleName">
           <el-input v-model="formData.roleName" placeholder="请输入角色名称" />
         </el-form-item>
 
-        <el-form-item label="角色编码" prop="code">
+        <el-form-item label="角色编码" prop="roleCode">
           <el-input v-model="formData.roleCode" placeholder="请输入角色编码" />
         </el-form-item>
 
-        <el-form-item label="数据权限" prop="dataScope">
+        <el-form-item label="数据权限" prop="scope">
           <el-select v-model="formData.scope">
             <el-option :key="0" label="全部数据" :value="0" />
             <el-option :key="1" label="部门及子部门数据" :value="1" />
@@ -346,7 +347,7 @@ onMounted?.(() => {
           </el-select>
         </el-form-item>
 
-        <el-form-item label="状态" prop="status">
+        <el-form-item label="状态" prop="state">
           <el-radio-group v-model="formData.state">
             <el-radio :value="0">正常</el-radio>
             <el-radio :value="1">停用</el-radio>

+ 0 - 13
src/views/system/user/index.vue

@@ -32,19 +32,6 @@
                 <el-option label="禁用" value=1 />
               </el-select>
             </el-form-item>
-
-<!--            <el-form-item label="创建时间">
-              <el-date-picker
-                class="!w-[240px]"
-                v-model="dateTimeRange"
-                type="daterange"
-                range-separator="~"
-                start-placeholder="开始时间"
-                end-placeholder="截止时间"
-                value-format="YYYY-MM-DD"
-              />
-            </el-form-item>-->
-
             <el-form-item>
               <el-button type="primary" @click="handleQuery"
                 ><i-ep-search />搜索</el-button