From 8428bf7e11fe22cdccbe2c9ccf76cf090c05996c Mon Sep 17 00:00:00 2001
From: 叶松 <2217086471@qq.com>
Date: 星期三, 29 十一月 2023 15:41:58 +0800
Subject: [PATCH] 钢筋笼材料标识牌书写

---
 web/src/views/MixingInfo/workShop.vue      |  187 ++++++++++++++++++
 web/src/views/GoodManage/BearSignboard.vue |  373 +++++++++++++++++++++++++++++++++++++
 web/src/assets/work_shop.png               |    0 
 web/src/router/index.js                    |    8 
 web/src/api/modules/materials.js           |   15 +
 5 files changed, 583 insertions(+), 0 deletions(-)

diff --git a/web/src/api/modules/materials.js b/web/src/api/modules/materials.js
index fcf8f95..8fa250e 100644
--- a/web/src/api/modules/materials.js
+++ b/web/src/api/modules/materials.js
@@ -152,6 +152,21 @@
   detailStockInfos: params =>
     axios.get('/materials/suMaterialWarehouse/selectInfo', {params}),
 
+  /**
+   * 钢筋笼材料标识牌
+   */
+    //钢筋笼材料标识牌列表
+    searchSignBoardLists: (params) =>
+      axios.post('/materials/suSteelCageMaterialLabel/selectPageList', params),
+    //钢筋笼材料标识牌添加/修改
+    addSignBoardInfos: (params) =>
+      axios.post('/materials/suSteelCageMaterialLabel/insertAndUpdate', params),
+    // 删除钢筋笼材料标识牌信息
+    deleteSignBoardInfos: params =>
+        axios.get('/materials/suSteelCageMaterialLabel/delete', {params}),
+    // 钢筋笼材料标识牌信息
+    detailSignBoardInfos: params =>
+      axios.get('/materials/suSteelCageMaterialLabel/selectInfo', {params}),
 
   
   /* 预埋件管理 */
diff --git a/web/src/assets/work_shop.png b/web/src/assets/work_shop.png
new file mode 100644
index 0000000..b5104a2
--- /dev/null
+++ b/web/src/assets/work_shop.png
Binary files differ
diff --git a/web/src/router/index.js b/web/src/router/index.js
index 0488d44..7fdb36d 100644
--- a/web/src/router/index.js
+++ b/web/src/router/index.js
@@ -111,6 +111,14 @@
     component: () => import('../views/MixingInfo/messageInfo.vue'),
   },
   {
+    path: `/workShop/num=1`,
+    name: 'workShop',
+    meta: {
+      title: '钢筋材料标识牌'
+    },
+    component: () => import('../views/MixingInfo/workShop.vue'),
+  },
+  {
     path: '/ScanBear',
     name: 'ScanBear',
     meta: {
diff --git a/web/src/views/GoodManage/BearSignboard.vue b/web/src/views/GoodManage/BearSignboard.vue
new file mode 100644
index 0000000..45988f6
--- /dev/null
+++ b/web/src/views/GoodManage/BearSignboard.vue
@@ -0,0 +1,373 @@
+<template>
+  <div class="main">
+    <div class="main_header">
+      <div class="header_item">
+        <span class="header_label">区域:</span>
+        <el-select v-model="search.region" placeholder="请选择区域" clearable>
+            <el-option
+            v-for="item in 24"
+            :key="item"
+            :label="item"
+            :value="item">
+            </el-option>
+        </el-select>
+      </div>
+      <div class="header_item">
+        <span class="header_label">录入方式:</span>
+        <el-select v-model="search.type" placeholder="请选择录入方式" clearable>
+            <el-option
+            v-for="item in optionsIncome"
+            :key="item.value"
+            :label="item.label"
+            :value="item.value">
+            </el-option>
+        </el-select>
+      </div>
+      <div class="header_item">
+        <span class="header_label">创建时间:</span>
+        <el-date-picker
+            v-model="search.time"
+            type="daterange"
+            value-format="yyyy-MM-dd HH:mm:ss"
+            :default-time="['00:00:00','23:59:59']"
+            range-separator="-"
+            start-placeholder="起始时间"
+            end-placeholder="结束时间">
+        </el-date-picker>
+      </div>
+      <div class="header_item">
+        <el-button  icon="el-icon-search" v-if="showButton('search')" @click="searchButtonInfo(true)">查询</el-button>
+        <el-button class="search_btn" icon="el-icon-plus" v-if="showButton('insert')" @click="insertProp">新增</el-button>
+      </div>
+    </div>
+    <div class="main_content">
+      <el-table
+        v-loading="loading"
+        :data="dataList"
+        height="100%">
+        <el-table-column align="center" label="序号" width="60">
+          <template #default="scope">
+            <span>{{(pageNum - 1) * pageSize + scope.$index + 1}}</span>
+          </template>
+        </el-table-column>
+        <el-table-column prop="region" label="区域" align="center" width="120"></el-table-column>
+        <el-table-column prop="createTime" label="创建时间" align="center" width="150"></el-table-column>
+        <el-table-column prop="materialName" label="材料名称" align="center" width="120"></el-table-column>
+        <el-table-column prop="manufacturer" label="生产厂家" align="center" width="120"></el-table-column>
+        <el-table-column prop="specifications" label="规格型号" align="center" width="150"></el-table-column>
+        <el-table-column prop="heatNumber" label="炉(批)号" align="center" width="150" show-overflow-tooltip></el-table-column>
+        <el-table-column prop="inNumber" label="进场数量" align="center" width="120" show-overflow-tooltip></el-table-column>
+        <el-table-column prop="reportTime" label="报检日期" align="center" width="150" show-overflow-tooltip></el-table-column>
+        <el-table-column prop="reportNum" label="报告编号" align="center" width="150" show-overflow-tooltip></el-table-column>
+        <el-table-column prop="status" label="检验状态" align="center" width="150">
+            <template #default="{row}">
+                {{optionsCheckstatus&&optionsCheckstatus[row.status-1].label}}
+            </template>
+        </el-table-column>
+        <el-table-column prop="type" label="录入方式" align="center">
+            <template #default="{row}">
+                {{optionsIncome&&optionsIncome[row.type].label}}
+            </template>
+        </el-table-column>
+        <el-table-column label="操作" align="center" width="200">
+          <template #default="{ row }">
+            <el-button class="table_btn" size="mini" v-if="showButton('update')" @click="updateProp(row)">修改</el-button>
+            <el-button class="delete_btn" size="mini" v-if="showButton('delete')" @click="deleteInfo(row)">删除</el-button>
+          </template>
+        </el-table-column>
+      </el-table>
+    </div>
+    <div class="main_footer">
+      <el-pagination
+        background
+        @current-change="changePageNum"
+        @size-change="changePageSize"
+        :current-page="pageNum"
+        :page-sizes="[10, 20, 50, 100]"
+        :page-size="pageSize"
+        layout="total, sizes, prev, pager, next, jumper"
+        :total="total">
+      </el-pagination>
+    </div>
+    <el-dialog
+      class="prop_dialog"
+      :title="asyncTitle ? '添加' : '修改'"
+      :close-on-click-modal="false"
+      :visible.sync="asyncVisible"
+      width="35%">
+      <el-form ref="ruleForm" :model="ruleForm" :rules="rules" label-width="auto" class="rule_form">
+        <el-form-item label="区域:" prop="region">
+          <el-select v-model="ruleForm.region" placeholder="请选择区域">
+                <el-option
+                v-for="item in 24"
+                :key="item"
+                :label="item"
+                :value="item">
+                </el-option>
+            </el-select>
+        </el-form-item>
+        <el-form-item label="材料名称:" prop="materialName">
+          <el-input v-model="ruleForm.materialName" :size="size" clearable placeholder="请输入材料名称"></el-input>
+        </el-form-item>
+        <el-form-item label="生产厂家:" prop="manufacturer">
+          <el-input v-model="ruleForm.manufacturer" :size="size" clearable placeholder="请输入生产厂家"></el-input>
+        </el-form-item>
+        <el-form-item label="规格型号:" prop="specifications">
+          <el-input v-model="ruleForm.specifications" :size="size"  clearable placeholder="请输入规格型号"></el-input>
+        </el-form-item>
+        <el-form-item label="炉(批)号:" prop="heatNumber">
+          <el-input v-model="ruleForm.heatNumber" :size="size"  type="textarea" :rows="5" clearable placeholder="请输入炉(批)号"></el-input>
+        </el-form-item>
+        <el-form-item label="进场数量:" prop="inNumber">
+          <el-input v-model="ruleForm.inNumber" :size="size"  type="textarea" :rows="5" clearable placeholder="请输入进场数量"></el-input>
+        </el-form-item>
+        <el-form-item label="报检日期:" prop="reportTime">
+          <el-input v-model="ruleForm.reportTime" :size="size"  type="textarea" :rows="5" clearable placeholder="请输入报检日期"></el-input>
+        </el-form-item>
+        <el-form-item label="报告编号:" prop="reportNum">
+            <el-input v-model="ruleForm.reportNum" :size="size"  type="textarea" :rows="5" clearable placeholder="请输入报告编号"></el-input>
+        </el-form-item>
+        <el-form-item label="检验状态:" prop="status">
+          <el-select v-model="ruleForm.status" placeholder="请选择检验状态">
+                <el-option
+                v-for="item in optionsCheckstatus"
+                :key="item.value"
+                :label="item.label"
+                :value="item.value">
+                </el-option>
+            </el-select>
+        </el-form-item>
+      </el-form>
+      <div slot="footer">
+        <el-button @click="asyncVisible = false">取 消</el-button>
+        <el-button class="submit_btn" @click="asyncTitle ? submitInsert() : submitUpdate()">提 交</el-button>
+      </div>
+    </el-dialog>
+  </div>
+</template>
+
+<script>
+import { buttonPinia } from '../../pinia/index';
+import { throttle, changeSize } from '../../plugins/public'; // 导入节流、动态切换组件尺寸方法
+  export default {
+    data() {
+      return {
+        size: changeSize(), // 组件尺寸
+        pageNum: 1,
+        pageSize: 10,
+        search:{},//查询条件
+        total: 0,
+        loading: false,
+        dataList: [], //钢筋材料管理信息列表
+        asyncTitle: true, // 对话框title 新增:true  修改:false
+        asyncVisible: false, // 添加 修改对话框
+        ruleForm: {
+        }, // 按钮表单
+        rules: {
+          reportNum: [{
+            required: true,
+            message: '请输入报告编号',
+            trigger: 'blur'
+          }],
+          status: [{
+            required: true,
+            message: '请选择检验状态',
+            trigger: 'change'
+          }],
+          region: [{
+            required: true,
+            message: '请选择区域',
+            trigger: 'change'
+          }],
+          reportTime: [{
+            required: true,
+            message: '请输入检验日期',
+            trigger:  'blur'
+          }],
+          inNumber: [{
+            required: true,
+            message: '请输入进场数量',
+            trigger: 'blur'
+          }],
+          manufacturer: [{
+            required: true,
+            message: '请输入生产厂家',
+            trigger: 'blur'
+          }],
+          specifications: [{
+            required: true,
+            message: '请输入规格型号',
+            trigger: 'blur'
+          }],
+          heatNumber: [{
+            required: true,
+            message: '请输入炉(批)号',
+            trigger: 'blur'
+          }],
+          materialName: [{
+            required: true,
+            message: '请输入材料名称',
+            trigger: 'blur'
+          }],
+        },
+        optionsIncome:[
+            {
+                label:'自动',
+                value:"0"
+            },
+            {
+                label:'手动',
+                value:'1'
+            }
+        ],
+        optionsCheckstatus:[
+            {
+                label:'合格',
+                value:1
+            },
+            {
+                label:'待检',
+                value:2
+            }
+        ],
+      }
+    },
+    watch: {
+      asyncVisible(bol) {
+        if(!bol) {
+          this.ruleForm = {};
+          this.$refs.ruleForm.resetFields();
+        }
+      }
+    },
+    mounted() {
+      const that = this;
+      // 根据窗口大小动态修改组件尺寸
+      window.onresize = () => {
+        that.size = changeSize();
+      }
+      that.searchButtonInfo(true);
+    },
+    methods: {
+      // 查询按钮列表信息
+      searchButtonInfo(bol) {
+        if(bol) {
+          this.pageNum = 1;
+        }
+        let params = Object.assign({},this.search,{
+          pageNum: this.pageNum,
+          pageSize: this.pageSize
+        })
+        params.startTime=this.search.time&&this.search.time[0],
+        params.endTime=this.search.time&&this.search.time[1]
+        delete params.time
+        this.loading = true;
+        this.$api.Materials.searchSignBoardLists(params).then((res) => {
+          if(res.statusMsg === 'ok') {
+            this.total = res.data.total;
+            this.dataList = res.data.list;
+          }
+          this.loading = false;
+        })
+      },
+      // 新增按钮信息
+      insertProp() {
+        this.asyncTitle = true;
+        this.asyncVisible = true;
+      },
+      // 修改按钮信息
+      updateProp(row) {
+        this.asyncTitle = false;
+        this.asyncVisible = true;
+        this.$api.Materials.detailSignBoardInfos({id: row.id}).then(res=>{
+            if(res.statusMsg === 'ok'){
+                this.ruleForm = res.data
+                let projectArr = []
+                res.data.supplierPros.forEach(item=>{
+                    projectArr.push(item.proId)
+                })
+                this.$set(this.ruleForm,'proIds',projectArr)
+            }else{
+                this.$message.warning(res.statusMsg)
+            }
+        })
+      },
+      // 删除按钮信息
+      deleteInfo(row) {
+        this.$confirm("该操作将删除该信息,是否继续删除?", "提示", {
+          confirmButtonText: "确定",
+          cancelButtonText: "取消",
+          type: "warning"
+       })
+       .then(() => {
+         this.$api.Materials.deleteSignBoardInfos({id: row.id})
+        .then(res => {
+          if(res.statusMsg === 'ok') {
+            this.searchButtonInfo(true);
+            this.$message.success("删除成功!");
+          } else {
+            this.$message.warning(res.statusMsg);
+          }
+        })
+       })
+       .catch(() => {
+         this.$message.warning("您已取消");
+       })
+      },
+      // 提交添加按钮信息
+      submitInsert: throttle(function() {
+        this.$refs.ruleForm.validate((valid) => {
+          if(valid) {
+            const params = Object.assign({}, this.ruleForm);
+            params.type = 1
+            this.$api.Materials.addSignBoardInfos(params).then((res) => {
+              if(res.statusMsg === 'ok') {
+                this.asyncVisible = false;
+                this.searchButtonInfo(true);
+                this.$message.success('添加成功!');
+              } else {
+                this.$message.warning(res.statusMsg);
+              }
+            })
+          }
+        })
+      }, 3000),
+      // 提交修改按钮信息
+      submitUpdate: throttle(function() {
+        this.$refs.ruleForm.validate((valid) => {
+          if(valid) {
+            const params = Object.assign({}, this.ruleForm);
+            this.$api.Materials.addSignBoardInfos(params).then((res) => {
+              if(res.statusMsg === 'ok') {
+                this.asyncVisible = false;
+                this.searchButtonInfo(true);
+                this.$message.success('修改成功!');
+              } else {
+                this.$message.warning(res.statusMsg);
+              }
+            })
+          }
+        })
+      }, 3000),
+      // 判断按钮权限信息
+      showButton(str) {
+        const pinia = buttonPinia();
+        return pinia.$state.buttonInfo.includes(str);
+      },      
+      // 切换页数
+      changePageNum(page) {
+        this.pageNum = page;
+        this.searchButtonInfo();
+      },
+      // 切换每页条数
+      changePageSize(size) {
+        this.pageSize = size;
+        this.searchButtonInfo();
+      }
+    }
+  }
+</script>
+
+<style lang="sass" scoped>
+@import '../../style/layout-main.scss';
+</style>
\ No newline at end of file
diff --git a/web/src/views/MixingInfo/workShop.vue b/web/src/views/MixingInfo/workShop.vue
new file mode 100644
index 0000000..ca295cf
--- /dev/null
+++ b/web/src/views/MixingInfo/workShop.vue
@@ -0,0 +1,187 @@
+<template>
+    <div class="work_index">
+        <div class="work_headers">
+            <div class="header_title">材料标识牌</div>
+            <div class="header_area">
+                <div class="header_area_text">区域:</div>
+                <div class="header_area_data">{{workList&&workList.region}}号</div>
+            </div>
+        </div>
+        <div class="work_main">
+            <div class="work_rows">
+                <div class="work_items">
+                    <div class="work_items_text">材料名称</div>
+                    <div class="work_items_data" style="border-right: 3px solid #001982;">{{workList&&workList.materialName}}</div>
+                </div>
+                <div class="work_items">
+                    <div class="work_items_text">生产厂家</div>
+                    <div class="work_items_data" >{{workList&&workList.manufacturer}}</div>
+                </div>
+            </div>
+            <div class="work_rows">
+                <div class="work_items">
+                    <div class="work_items_text">规格型号</div>
+                    <div class="work_items_data" style="border-right: 3px solid #001982;">{{workList&&workList.specifications}}</div>
+                </div>
+                <div class="work_items">
+                    <div class="work_items_text">炉(批)号</div>
+                    <div class="work_items_data" style="font-size:1.2rem">{{workList&&workList.heatNumber}}</div>
+                </div>
+            </div>
+            <div class="work_rows">
+                <div class="work_items">
+                    <div class="work_items_text">进场数量</div>
+                    <div class="work_items_data" style="border-right: 3px solid #001982;">{{workList&&workList.inNumber}}</div>
+                </div>
+                <div class="work_items">
+                    <div class="work_items_text">报检日期</div>
+                    <div class="work_items_data" >{{workList&&workList.reportTime}}</div>
+                </div>
+            </div>
+            <div class="work_rows">
+                <div class="work_items">
+                    <div class="work_items_text">报告编号</div>
+                    <div class="work_items_data" style="border-right: 3px solid #001982;">{{workList&&workList.reportNum}}</div>
+                </div>
+                <div class="work_items">
+                    <div class="work_items_text">检验状态</div>
+                    <div class="work_items_data" >{{workList&&workList.status===1?'合格':workList&&workList.status===2?'待检':''}}</div>
+                </div>
+            </div>
+        </div>
+    </div>
+</template>
+<script>
+export default {
+    data(){
+        return{
+            timer:null,//定时器
+            workList:null,//展示数据
+        }
+    },
+    created(){
+        this.searchWorkInfos()
+    },
+    mounted(){
+        // const that = this;
+        // that.timer = setInterval(()=>{
+        //     that.searchWorkInfos()
+        // },300000)
+    },
+    beforeDestroy() {
+        // clearInterval(this.timer);
+        // this.timer = null;
+    },
+    methods:{
+        searchWorkInfos(){
+            let params={
+                region:window.location.href.split('/')[5].split('=')[1]
+            }
+            this.$api.Materials.detailSignBoardInfos(params).then(res=>{
+                if(res.statusMsg==='ok'){
+                    this.workList = res.data===null?[]:res.data
+                }else{
+                    this.$message.warning('请检查网络或联系管理员!!!')
+                }
+            })
+        },
+    }
+}
+</script>
+<style scoped lang="scss">
+.work_index{
+    width: 100%;
+    height: 100%;
+    background: url("../../assets/work_shop.png") no-repeat;
+    background-size: 100% 100%;
+    overflow: auto;
+
+    .work_headers{
+        height: 206px;
+        padding-top: 120px;
+        display: flex;
+        align-items: center;
+        justify-content: center;
+        position: relative;
+
+        .header_title{
+            font-size: 4.5rem;
+            font-weight: 600;
+            background: linear-gradient(to bottom,#24A5ED,#1976CE,#145DBE,#071C94);
+            background-clip: text;
+            -webkit-background-clip: text;
+            color: transparent;
+        }
+        .header_area{
+            display: flex;
+            position: absolute;
+            right: 100px;
+
+            .header_area_text{
+                font-size: 3.2rem;
+                font-weight: 600;
+                background: linear-gradient(to bottom,#24A5ED,#1976CE,#145DBE,#071C94);
+                background-clip: text;
+                -webkit-background-clip: text;
+                color: transparent;
+            }
+            .header_area_data{
+                font-size: 3.2rem;
+                font-weight: 600;
+                background: linear-gradient(to bottom,#24A5ED,#1976CE,#145DBE,#071C94);
+                background-clip: text;
+                -webkit-background-clip: text;
+                color: transparent;
+            }
+        }
+    }
+    .work_main{
+        // height: calc(100% - 200px);
+        border: 3px solid #001982;
+        margin: 20px 100px;
+        display: flex;
+        flex-direction: column;
+        justify-content: space-between;
+        .work_rows{
+            width: 100%;
+            line-height: 60px;
+            display: flex;
+
+            .work_items{
+                width: 50%;
+                display: flex;
+
+                .work_items_text{
+                    font-size: 3rem;
+                    font-weight: 500;
+                    padding: 30px;
+                    display: flex;
+                    justify-content: center;
+                    align-items: center;
+                    flex: none;
+                    width: 240px;
+                    border-bottom: 1px solid #001982;
+                    border-right: 1px solid #001982;
+                    background: linear-gradient(to bottom,#AEDEF9,#1E87D9,#1D87D9,#2265C0,#145DBE,#082296);
+                    background-clip: text;
+                    -webkit-background-clip: text;
+                    color: transparent;
+                }
+                .work_items_data{
+                    color: #11299F;
+                    padding: 10px;
+                    font-size: 2rem;
+                    display: flex;
+                    justify-content: center;
+                    align-items: center;
+                    flex: 1;
+                    width: calc(50% - 200px);
+                    border-bottom: 1px solid #001982;
+                    word-break: break-all;
+                    // word-wrap: break-word;
+                }
+            }
+        }
+    }
+}
+</style>
\ No newline at end of file

--
Gitblit v1.9.3