叶松
2023-11-29 8428bf7e11fe22cdccbe2c9ccf76cf090c05996c
钢筋笼材料标识牌书写
已修改2个文件
已添加3个文件
583 ■■■■■ 文件已修改
web/src/api/modules/materials.js 15 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
web/src/assets/work_shop.png 补丁 | 查看 | 原始文档 | blame | 历史
web/src/router/index.js 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
web/src/views/GoodManage/BearSignboard.vue 373 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
web/src/views/MixingInfo/workShop.vue 187 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
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}),
  
  /* 预埋件管理 */
web/src/assets/work_shop.png
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: {
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>
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>