若依前端-APP中使用数据字典

 

<template>
  <div class="app-container">
    <el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" label-width="100px">
      <el-form-item label="入库单编号" prop="recptCode">
        <el-input
          v-model="queryParams.recptCode"
          placeholder="请输入入库单编号"
          clearable
          @keyup.enter.native="handleQuery"
        />
      </el-form-item>
      <el-form-item label="入库单名称" prop="recptName">
        <el-input
          v-model="queryParams.recptName"
          placeholder="请输入入库单名称"
          clearable
          @keyup.enter.native="handleQuery"
        />
      </el-form-item>
      <el-form-item label="生产工单" prop="workorderCode">
        <el-input
          v-model="queryParams.workorderCode"
          placeholder="请输入生产工单编码"
          clearable
          @keyup.enter.native="handleQuery"
        />
      </el-form-item>
      <el-form-item label="仓库" prop="warehouseName">
        <el-input
          v-model="queryParams.warehouseName"
          placeholder="请输入仓库名称"
          clearable
          @keyup.enter.native="handleQuery"
        />
      </el-form-item>
      <el-form-item>
        <el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button>
        <el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button>
      </el-form-item>
    </el-form>

    <el-row :gutter="10" class="mb8">
      <el-col :span="1.5">
        <el-button
          type="primary"
          plain
          icon="el-icon-plus"
          size="mini"
          @click="handleAdd"
          v-hasPermi="['mes:wm:productrecpt:add']"
        >新增</el-button>
      </el-col>
      <el-col :span="1.5">
        <el-button
          type="success"
          plain
          icon="el-icon-edit"
          size="mini"
          :disabled="single"
          @click="handleUpdate"
          v-hasPermi="['mes:wm:productrecpt:edit']"
        >修改</el-button>
      </el-col>
      <el-col :span="1.5">
        <el-button
          type="danger"
          plain
          icon="el-icon-delete"
          size="mini"
          :disabled="multiple"
          @click="handleDelete"
          v-hasPermi="['mes:wm:productrecpt:remove']"
        >删除</el-button>
      </el-col>
      <el-col :span="1.5">
        <el-button
          type="warning"
          plain
          icon="el-icon-download"
          size="mini"
          @click="handleExport"
          v-hasPermi="['mes:wm:productrecpt:export']"
        >导出</el-button>
      </el-col>
      <right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
    </el-row>

    <el-table v-loading="loading" :data="productrecptList" @selection-change="handleSelectionChange">
      <el-table-column type="selection" width="55" align="center" />
      <el-table-column label="入库单编号" width="130px" align="center" prop="recptCode" >
        <template slot-scope="scope">
          <el-button
            type="text"
            @click="handleView(scope.row)"
            v-hasPermi="['mes:wm:productrecpt:query']"
          >{{scope.row.recptCode}}</el-button>
        </template>
      </el-table-column>
      <el-table-column label="入库单名称" width="150px" align="center" prop="recptName" :show-overflow-tooltip="true"/>
      <el-table-column label="生产工单编码" width="150px" align="center" prop="workorderCode" />
      <el-table-column label="产品编码" align="center" prop="itemCode" />
      <el-table-column label="产品名称" align="center" prop="itemName" />
      <el-table-column label="入库日期" align="center" prop="recptDate" width="120">
        <template slot-scope="scope">
          <span>{{ parseTime(scope.row.recptDate, '{y}-{m}-{d}') }}</span>
        </template>
      </el-table-column>
      <el-table-column label="单据状态" align="center" prop="status">
        <template slot-scope="scope">
          <dict-tag :options="dict.type.mes_order_status" :value="scope.row.status"/>
        </template>
      </el-table-column>
      <el-table-column label="操作" align="center" class-name="small-padding fixed-width">
        <template slot-scope="scope">
          <el-button
            size="mini"
            type="text"
            icon="el-icon-video-play"
            v-if="scope.row.status =='PREPARE'"
            @click="handleExecute(scope.row)"
            v-hasPermi="['mes:wm:productrecpt:edit']"
          >执行入库</el-button>
          <el-button
            size="mini"
            type="text"
            icon="el-icon-edit"
            @click="handleUpdate(scope.row)"
            v-if="scope.row.status =='PREPARE'"
            v-hasPermi="['mes:wm:productrecpt:edit']"
          >修改</el-button>
          <el-button
            size="mini"
            type="text"
            icon="el-icon-delete"
            @click="handleDelete(scope.row)"
            v-if="scope.row.status =='PREPARE'"
            v-hasPermi="['mes:wm:productrecpt:remove']"
          >删除</el-button>
        </template>
      </el-table-column>
    </el-table>
    
    <pagination
      v-show="total>0"
      :total="total"
      :page.sync="queryParams.pageNum"
      :limit.sync="queryParams.pageSize"
      @pagination="getList"
    />

    <!-- 添加或修改产品入库录对话框 -->
    <el-dialog :title="title" :visible.sync="open" width="960px" append-to-body>
      <el-form ref="form" :model="form" :rules="rules" label-width="100px">
        <el-row>
          <el-col :span="8">
            <el-form-item label="入库单编号" prop="recptCode">
              <el-input v-model="form.recptCode" placeholder="请输入入库单编号" />
            </el-form-item>
          </el-col>
          <el-col :span="4">
            <el-form-item  label-width="80">
              <el-switch v-model="autoGenFlag"
                  active-color="#13ce66"
                  active-text="自动生成"
                  @change="handleAutoGenChange(autoGenFlag)" v-if="optType != 'view' && form.status =='PREPARE'">               
              </el-switch>
            </el-form-item>
          </el-col>
          <el-col :span="12">
            <el-form-item label="入库单名称" prop="recptName">
              <el-input v-model="form.recptName" placeholder="请输入入库单名称" />
            </el-form-item>
          </el-col>
        </el-row>
        <el-row>
          <el-col :span="8">
            <el-form-item label="生产工单" prop="workorderCode">
              <el-input v-model="form.workorderCode" placeholder="请选择生产工单" >
                <el-button slot="append" icon="el-icon-search" @click="handleWorkorderSelect"></el-button>
              </el-input>
              <WorkorderSelect ref="woSelect" @onSelected="onWorkorderSelected"></WorkorderSelect>
            </el-form-item>
          </el-col>
          <el-col :span="8">
            <el-form-item label="生产工单名称" prop="workorderName">
              <el-input v-model="form.workorderName" readonly="readonly" />
            </el-form-item>
          </el-col>
          <el-col :span="8">
            <el-form-item label="入库日期" prop="recptDate">
              <el-date-picker clearable
                v-model="form.recptDate"
                type="date"
                value-format="yyyy-MM-dd"
                placeholder="请选择入库日期">
              </el-date-picker>
            </el-form-item>
          </el-col>
        </el-row>       
        <el-row>
          <el-col :span="24">
            <el-form-item label="备注" prop="remark">
              <el-input v-model="form.remark" type="textarea" placeholder="请输入内容" />
            </el-form-item>
          </el-col>
        </el-row>
      </el-form>
      <el-divider v-if="form.recptId !=null" content-position="center">物料信息</el-divider> 
      <el-card shadow="always" v-if="form.recptId !=null" class="box-card">
        <Productrecptline :recptId="form.recptId" :optType="optType" :workorderId="form.workorderId" :itemId="form.itemId"></Productrecptline>
      </el-card>
      <div slot="footer" class="dialog-footer">
        <el-button type="primary" @click="cancel" v-if="optType =='view' || form.status !='PREPARE' ">返回</el-button>
        <el-button type="primary" @click="submitForm" v-if="form.status =='PREPARE' && optType !='view' ">保 存</el-button>        
        <el-button @click="cancel">取 消</el-button>
      </div>
    </el-dialog>
  </div>
</template>

<script>
import { listProductrecpt, getProductrecpt, delProductrecpt, addProductrecpt, updateProductrecpt ,execute} from "@/api/mes/wm/productrecpt";
import WorkorderSelect from "@/components/workorderSelect/single.vue"
import Productrecptline from "./line.vue"
import {getTreeList} from "@/api/mes/wm/warehouse"
import {genCode} from "@/api/system/autocode/rule"
export default {
  name: "Productrecpt",
  dicts: ['mes_order_status'],
  components:{WorkorderSelect,Productrecptline},
  data() {
    return {
      //自动生成编码
      autoGenFlag:false,
      optType: undefined,
      warehouseInfo:[],
      warehouseOptions:[],
      warehouseProps:{
        multiple: false,
        value: 'pId',
        label: 'pName',
      },
      // 遮罩层
      loading: true,
      // 选中数组
      ids: [],
      // 非单个禁用
      single: true,
      // 非多个禁用
      multiple: true,
      // 显示搜索条件
      showSearch: true,
      // 总条数
      total: 0,
      // 产品入库录表格数据
      productrecptList: [],
      // 弹出层标题
      title: "",
      // 是否显示弹出层
      open: false,
      // 查询参数
      queryParams: {
        pageNum: 1,
        pageSize: 10,
        recptCode: null,
        recptName: null,
        workorderId: null,
        workorderCode: null,
        workorderName: null,
        warehouseId: null,
        warehouseCode: null,
        warehouseName: null,
        locationId: null,
        locationCode: null,
        locationName: null,
        areaId: null,
        areaCode: null,
        areaName: null,
        recptDate: null,
        status: null,
      },
      // 表单参数
      form: {},
      // 表单校验
      rules: {
        recptCode: [
          { required: true, message: "入库单编号不能为空", trigger: "blur" }
        ],
        recptDate: [
          { required: true, message: "请选择入库日期", trigger: "blur" }
        ],
        workorderCode: [
          { required: true, message: "请选择生产工单", trigger: "blur" }
        ],
      }
    };
  },
  created() {
    this.getList();
    this.getWarehouseList();
  },
  methods: {
    /** 查询产品入库录列表 */
    getList() {
      this.loading = true;
      listProductrecpt(this.queryParams).then(response => {
        this.productrecptList = response.rows;
        this.total = response.total;
        this.loading = false;
      });
    },
    getWarehouseList(){
      getTreeList().then( response =>{        
        this.warehouseOptions = response.data;
        this.warehouseOptions.map(w =>{
          w.children.map(l =>{
                  let lstr =JSON.stringify(l.children).replace(/locationId/g,'lId').replace(/areaId/g, 'pId').replace(/areaName/g,'pName');                  
                  l.children = JSON.parse(lstr);
          });
            
          let wstr = JSON.stringify(w.children).replace(/warehouseId/g,'wId').replace(/locationId/g, 'pId').replace(/locationName/g,'pName');  
          w.children =  JSON.parse(wstr); 

        });
        let ostr=JSON.stringify(this.warehouseOptions).replace(/warehouseId/g,'pId').replace(/warehouseName/g, 'pName');
        this.warehouseOptions = JSON.parse(ostr);
      });
    },
    // 取消按钮
    cancel() {
      this.open = false;
      this.reset();
    },
    // 表单重置
    reset() {
      this.form = {
        recptId: null,
        recptCode: null,
        recptName: null,
        workorderId: null,
        workorderCode: null,
        workorderName: null,
        warehouseId: null,
        warehouseCode: null,
        warehouseName: null,
        locationId: null,
        locationCode: null,
        locationName: null,
        itemId: null,
        itemCode: null,
        itemName: null,
        unitOfMeasure: null,
        clientCode: null,
        clientName: null,
        areaId: null,
        areaCode: null,
        areaName: null,
        recptDate: new Date(),
        status: "PREPARE",
        remark: null,
        attr1: null,
        attr2: null,
        attr3: null,
        attr4: null,
        createBy: null,
        createTime: null,
        updateBy: null,
        updateTime: null
      };
      this.autoGenFlag = false;
      this.resetForm("form");
    },
    /** 搜索按钮操作 */
    handleQuery() {
      this.queryParams.pageNum = 1;
      this.getList();
    },
    /** 重置按钮操作 */
    resetQuery() {
      this.resetForm("queryForm");
      this.handleQuery();
    },
    // 多选框选中数据
    handleSelectionChange(selection) {
      this.ids = selection.map(item => item.recptId)
      this.single = selection.length!==1
      this.multiple = !selection.length
    },
        // 查询明细按钮操作
    handleView(row){

      this.reset();
      const recptId = row.recptId || this.ids
      getProductrecpt(recptId).then(response => {
        this.form = response.data;
        this.open = true;
        this.title = "查看产品入库单";
        this.optType = "view";
      });


    },
    /** 新增按钮操作 */
    handleAdd() {
      this.reset();
      this.open = true;
      this.title = "添加产品入库单";
    },
    /** 修改按钮操作 */
    handleUpdate(row) {
      this.reset();
      const recptId = row.recptId || this.ids
      getProductrecpt(recptId).then(response => {
        this.form = response.data;
        this.open = true;
        this.title = "修改产品入库单";
      });
    },
    //执行入库
    handleExecute(row){
      const recptIds = row.recptId || this.ids;
      this.$modal.confirm('确认执行入库?').then(function() {
        return execute(recptIds)//执行入库
      }).then(() => {
        this.getList();
        this.$modal.msgSuccess("入库成功");
      }).catch(() => {});
    },
    /** 提交按钮 */
    submitForm() {
      this.$refs["form"].validate(valid => {
        if (valid) {
          if (this.form.recptId != null) {
            updateProductrecpt(this.form).then(response => {
              this.$modal.msgSuccess("修改成功");
              this.open = false;
              this.getList();
            });
          } else {
            addProductrecpt(this.form).then(response => {
              this.$modal.msgSuccess("新增成功");
              this.open = false;
              this.getList();
            });
          }
        }
      });
    },
    /** 删除按钮操作 */
    handleDelete(row) {
      const recptIds = row.recptId || this.ids;
      this.$modal.confirm('是否确认删除产品入库单编号为"' + recptIds + '"的数据项?').then(function() {
        return delProductrecpt(recptIds);
      }).then(() => {
        this.getList();
        this.$modal.msgSuccess("删除成功");
      }).catch(() => {});
    },
    /** 导出按钮操作 */
    handleExport() {
      this.download('wm/productrecpt/export', {
        ...this.queryParams
      }, `productrecpt_${new Date().getTime()}.xlsx`)
    },
    //选择生产工单
    handleWorkorderSelect(){
      this.$refs.woSelect.showFlag = true;
    },
    onWorkorderSelected(row){
      if(row != undefined && row != null){
        debugger;
        this.form.workorderId = row.workorderId;
        this.form.workorderCode = row.workorderCode;
        this.form.workorderName = row.workorderName;
        this.form.itemId = row.productId;
        this.form.itemCode = row.productCode;
        this.form.itemName = row.productName;
        this.form.unitOfMeasure = row.unitOfMeasure;
        this.form.clientCode = row.clientCode;
        this.form.clientName = row.clientName;
      }
    },
    //选择默认的仓库、库区、库位
    handleWarehouseChanged(obj){      
      if(obj !=null){
        this.form.warehouseId = obj[0];
        this.form.locationId = obj[1];
        this.form.areaId = obj[2];
      }
    },
    //自动生成编码
    handleAutoGenChange(autoGenFlag){
      if(autoGenFlag){
        genCode('PRODUCTRECPT_CODE').then(response =>{
          this.form.recptCode = response;
        });
      }else{
        this.form.recptCode = null;
      }
    }
  }
};
</script>

 

<template>
  <div class="app-container">
    <el-row :gutter="10" class="mb8">
      <el-col :span="1.5">
        <el-button
          type="primary"
          plain
          icon="el-icon-plus"
          size="mini"
          @click="handleAdd"
          v-hasPermi="['mes:wm:productrecpt:add']"
        >新增</el-button>
      </el-col>
      <el-col :span="1.5">
        <el-button
          type="success"
          plain
          icon="el-icon-edit"
          size="mini"
          :disabled="single"
          @click="handleUpdate"
          v-if="optType != 'view'"
          v-hasPermi="['mes:wm:productrecpt:edit']"
        >修改</el-button>
      </el-col>
      <el-col :span="1.5">
        <el-button
          type="danger"
          plain
          icon="el-icon-delete"
          size="mini"
          :disabled="multiple"
          @click="handleDelete"
          v-if="optType != 'view'"
          v-hasPermi="['mes:wm:productrecpt:remove']"
        >删除</el-button>
      </el-col>     
      <right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
    </el-row>

    <el-table v-loading="loading" :data="productrecptlineList" @selection-change="handleSelectionChange">
      <el-table-column type="selection" width="55" align="center" />
      <el-table-column label="产品物料编码" width="120px" align="center" prop="itemCode" />
      <el-table-column label="产品物料名称" width="150px" align="center" prop="itemName" :show-overflow-tooltip="true"/>
      <el-table-column label="规格型号" width="120px" align="center" prop="specification" :show-overflow-tooltip="true"/>
      <el-table-column label="单位" align="center" prop="unitOfMeasure" />
      <el-table-column label="入库数量" align="center" prop="quantityRecived" />
      <el-table-column label="良品数" align="center" prop="quantityQualified" />
      <el-table-column label="不良品数" align="center" prop="quantityUnqualified" />
      <el-table-column label="批次号" align="center" prop="batchCode" />
      <el-table-column label="仓库名称" align="center" prop="warehouseName" />
      <el-table-column label="库区名称" align="center" prop="locationName" />
      <el-table-column label="库位名称" align="center" prop="areaName" />
      <el-table-column label="操作" align="center"  class-name="small-padding fixed-width">
        <template slot-scope="scope">
          <el-button
            size="mini"
            type="text"
            icon="el-icon-edit"
            @click="handleUpdate(scope.row)"
            v-if="optType != 'view'"
            v-hasPermi="['mes:wm:productrecpt:edit']"
          >修改</el-button>
          <el-button
            size="mini"
            type="text"
            icon="el-icon-delete"
            @click="handleDelete(scope.row)"
            v-if="optType != 'view'"
            v-hasPermi="['mes:wm:productrecpt:remove']"
          >删除</el-button>
        </template>
      </el-table-column>
    </el-table>
    
    <pagination
      v-show="total>0"
      :total="total"
      :page.sync="queryParams.pageNum"
      :limit.sync="queryParams.pageSize"
      @pagination="getList"
    />

    <!-- 添加或修改产品入库记录行对话框 -->
    <el-dialog :title="title" :visible.sync="open" width="960px" append-to-body>
      <el-form ref="form" :model="form" :rules="rules" label-width="100px">
        <el-row>
          <el-col :span="8">
            <el-form-item label="产品物料编码" prop="itemCode">
              <el-input v-model="form.itemCode" placeholder="请输入产品物料编码" >
                <el-button slot="append" @click="handleSelectStock" icon="el-icon-search"></el-button>
              </el-input>
              <StockSelect ref="stockSelect" :workorderId="workorderId" :itemId="itemId" warehouseCode="XBK_VIRTUAL" @onSelected="onStockSelected"></StockSelect>
            </el-form-item>
          </el-col>
          <el-col :span="8">
            <el-form-item label="产品物料名称" prop="itemName">
              <el-input v-model="form.itemName" placeholder="请输入产品物料名称" />
            </el-form-item>
          </el-col>
          <el-col :span="8">
            <el-form-item label="单位" prop="unitOfMeasure">
              <el-input v-model="form.unitOfMeasure" placeholder="请输入单位" />
            </el-form-item>
          </el-col>
        </el-row>
        <el-row>
          <el-col :span="24">
            <el-form-item label="规格型号" prop="specification">
              <el-input v-model="form.specification" type="textarea" placeholder="请输入内容" />
            </el-form-item>
          </el-col>
        </el-row>
        <el-row>
          <el-col :span="8">
            <el-form-item label="入库数量" prop="quantityRecived">
              <el-input-number :min="0" :max="form.quantityMax" v-model="form.quantityRecived" placeholder="请输入入库数量" />
            </el-form-item>
          </el-col>
          <el-col :span="8">
            <el-form-item label="批次号" prop="batchCode">
              <el-input v-model="form.batchCode" placeholder="请输入批次号" />
            </el-form-item>
          </el-col>
          <el-col :span="8">
            <el-form-item label="入库仓库" prop="warehouseId">
              <el-cascader v-model="warehouseInfo"
                :options="warehouseOptions"
                :props="warehouseProps"
                @change="handleWarehouseChanged"
              >                  
              </el-cascader>
            </el-form-item>
          </el-col>
        </el-row>
        <el-row>
          <el-col :span="24">
            <el-form-item label="备注" prop="remark">
              <el-input v-model="form.remark" type="textarea" placeholder="请输入内容" />
            </el-form-item>
          </el-col>
        </el-row>
      </el-form>
      <div slot="footer" class="dialog-footer">
        <el-button type="primary" @click="submitForm">确 定</el-button>
        <el-button @click="cancel">取 消</el-button>
      </div>
    </el-dialog>
  </div>
</template>

<script>
import { listProductrecptline, getProductrecptline, delProductrecptline, addProductrecptline, updateProductrecptline } from "@/api/mes/wm/productrecptline";
import StockSelect from "@/components/stockSelect/single.vue"
import {getTreeList} from "@/api/mes/wm/warehouse"
export default {
  name: "Productrecptline",
  components:{
    StockSelect
  },
  props: {
    recptId: null,
    optType: null,
    workorderId:null,
    itemId: null
  },
  data() {
    return {
      warehouseInfo:[],
      warehouseOptions:[],
      warehouseProps:{
        multiple: false,
        value: 'pId',
        label: 'pName',
      },
      // 遮罩层
      loading: true,
      // 选中数组
      ids: [],
      // 非单个禁用
      single: true,
      // 非多个禁用
      multiple: true,
      // 显示搜索条件
      showSearch: true,
      // 总条数
      total: 0,
      // 产品入库记录行表格数据
      productrecptlineList: [],
      // 弹出层标题
      title: "",
      // 是否显示弹出层
      open: false,
      // 查询参数
      queryParams: {
        pageNum: 1,
        pageSize: 10,
        recptId: this.recptId,
        materialStockId: null,
        itemId: null,
        itemCode: null,
        itemName: null,
        specification: null,
        unitOfMeasure: null,
        quantityRecived: null,
        batchCode: null,
        warehouseId: null,
        warehouseCode: null,
        warehouseName: null,
        locationId: null,
        locationCode: null,
        locationName: null,
        areaId: null,
        areaCode: null,
        areaName: null,
      },
      // 表单参数
      form: {},
      // 表单校验
      rules: {
        itemId: [
          { required: true, message: "产品不能为空", trigger: "blur" }
        ],
        warehouseId: [
          { required: true, message: "入库仓库不能为空", trigger: "blur" }
        ],
        quantityRecived: [
          { required: true, message: "入库数量不能为空", trigger: "blur" }
        ],
      }
    };
  },
  created() {
    this.getList();
    this.getWarehouseList();
  },
  methods: {
    /** 查询产品入库记录行列表 */
    getList() {
      this.loading = true;
      listProductrecptline(this.queryParams).then(response => {
        this.productrecptlineList = response.rows;
        this.total = response.total;
        this.loading = false;
      });
    },
    getWarehouseList(){
      getTreeList().then( response =>{        
        this.warehouseOptions = response.data;
        this.warehouseOptions.map(w =>{
          w.children.map(l =>{
                  let lstr =JSON.stringify(l.children).replace(/locationId/g,'lId').replace(/areaId/g, 'pId').replace(/areaName/g,'pName');                  
                  l.children = JSON.parse(lstr);
          });
            
          let wstr = JSON.stringify(w.children).replace(/warehouseId/g,'wId').replace(/locationId/g, 'pId').replace(/locationName/g,'pName');  
          w.children =  JSON.parse(wstr); 

        });
        let ostr=JSON.stringify(this.warehouseOptions).replace(/warehouseId/g,'pId').replace(/warehouseName/g, 'pName');
        this.warehouseOptions = JSON.parse(ostr);
      });
    },
    // 取消按钮
    cancel() {
      this.open = false;
      this.reset();
    },
    // 表单重置
    reset() {
      this.form = {
        lineId: null,
        recptId: this.recptId,
        materialStockId: null,
        itemId: null,
        itemCode: null,
        itemName: null,
        specification: null,
        unitOfMeasure: null,
        quantityRecived: null,
        batchCode: null,
        warehouseId: null,
        warehouseCode: null,
        warehouseName: null,
        locationId: null,
        locationCode: null,
        locationName: null,
        areaId: null,
        areaCode: null,
        areaName: null,
        remark: null,
        attr1: null,
        attr2: null,
        attr3: null,
        attr4: null,
        createBy: null,
        createTime: null,
        updateBy: null,
        updateTime: null
      };
      this.resetForm("form");
    },
    /** 搜索按钮操作 */
    handleQuery() {
      this.queryParams.pageNum = 1;
      this.getList();
    },
    /** 重置按钮操作 */
    resetQuery() {
      this.resetForm("queryForm");
      this.handleQuery();
    },
    // 多选框选中数据
    handleSelectionChange(selection) {
      this.ids = selection.map(item => item.lineId)
      this.single = selection.length!==1
      this.multiple = !selection.length
    },
    /** 新增按钮操作 */
    handleAdd() {
      this.reset();
      this.open = true;
      this.title = "添加产品入库记录行";
    },
    /** 修改按钮操作 */
    handleUpdate(row) {
      this.reset();
      const lineId = row.lineId || this.ids
      getProductrecptline(lineId).then(response => {
        this.form = response.data;
        this.open = true;
        this.title = "修改产品入库记录行";
      });
    },
    /** 提交按钮 */
    submitForm() {
      this.$refs["form"].validate(valid => {
        if (valid) {
          if (this.form.lineId != null) {
            updateProductrecptline(this.form).then(response => {
              this.$modal.msgSuccess("修改成功");
              this.open = false;
              this.getList();
            });
          } else {
            addProductrecptline(this.form).then(response => {
              this.$modal.msgSuccess("新增成功");
              this.open = false;
              this.getList();
            });
          }
        }
      });
    },
    /** 删除按钮操作 */
    handleDelete(row) {
      const lineIds = row.lineId || this.ids;
      this.$modal.confirm('是否确认删除产品入库记录行编号为"' + lineIds + '"的数据项?').then(function() {
        return delProductrecptline(lineIds);
      }).then(() => {
        this.getList();
        this.$modal.msgSuccess("删除成功");
      }).catch(() => {});
    },
    /** 导出按钮操作 */
    handleExport() {
      this.download('wm/productrecptline/export', {
        ...this.queryParams
      }, `productrecptline_${new Date().getTime()}.xlsx`)
    },
    handleSelectStock(){
      this.$refs.stockSelect.showFlag = true;
      this.$refs.stockSelect.getList();
    },
    //物料选择弹出框
    onStockSelected(obj){
        if(obj != undefined && obj != null){
          this.form.materialStockId = obj.materialStockId;
          this.form.itemId = obj.itemId;
          this.form.itemCode = obj.itemCode;
          this.form.itemName = obj.itemName;
          this.form.specification = obj.specification;
          this.form.unitOfMeasure = obj.unitOfMeasure;  
          this.form.batchCode = obj.batchCode;
          this.form.quantityRecived = obj.quantityOnhand;
          this.form.quantityMax = obj.quantityOnhand;
        }
    },
    //选择默认的仓库、库区、库位
    handleWarehouseChanged(obj){      
      if(obj !=null){
        this.form.warehouseId = obj[0];
        this.form.locationId = obj[1];
        this.form.areaId = obj[2];
      }
    },
  }
};
</script>

<template>
	<view class="container">
		<!-- 显示收料单表头 -->
		<uni-section title="扫码委外收料表身" type="line" class="mb-10">
			<template v-slot:right>
				查询清单
			</template>

			<uni-collapse>
				<uni-collapse-item :title="'委外收料单:'+outreceive.receiveCode+'  状态:'+outreceive.status"
					thumb="/static/images/workorder.png">

					<view class="content">

						<view class="container">
							<uni-list>


								<uni-list-item showExtraIcon="true" :extraIcon="{type: 'location-filled'}" title="ID"
									:rightText="outreceive.receiveId" />


								<uni-list-item showExtraIcon="true" :extraIcon="{type: 'wallet-filled'}" title="类型"
									:rightText="outreceive.receiveType" />

								<uni-list-item showExtraIcon="true" :extraIcon="{type: 'wallet-filled'}" title="供应商"
									:rightText="outreceive.vendorCode" />
								<uni-list-item showExtraIcon="true" :extraIcon="{type: 'chat-filled'}" title="供应商名称"
									:rightText="outreceive.vendorName" />


								<uni-list-item showExtraIcon="true" :extraIcon="{type: 'calendar-filled'}" title="开单时间"
									:rightText="outreceive.createTime" />

							</uni-list>


						</view>

					</view>

				</uni-collapse-item>


				<view class="dist-flex">
					<button type="primary" class="uni-btn-small" size="mini"
						@click="openAddOutreceiveLine">增加收料数量</button>
					<button type="primary" class="uni-btn-small" size="mini" @click="openEditOutissueLine"
						v-show="false">修改收料数量</button>
					<button type="primary" class="uni-btn-small" size="mini"
						@click="openQueryOutreceiveLine">查询收料明细</button>
				</view>



			</uni-collapse>
		</uni-section>
		<!-- 显示收料单表头 -->

		<!-- 显示收料单明细 -->
		<uni-section title="查询收料单明细" type="line" class="mb-10" v-show="showQueryOutreceiveLine">
			<template v-slot:right>
			</template>

			<uni-collapse v-for="(value, key, index) in outrececLineList">
				<uni-collapse-item :title="'料号:'+value.productCode+' 良品数:'+value.quantityQualified"
					thumb="/static/images/workorder.png">


					<view class="container">
						<view class="container">
							<uni-list>

								<uni-list-item showExtraIcon="true" :extraIcon="{type: 'location-filled'}" title="ID"
									:rightText="value.receiveLineId" />


								<uni-list-item showExtraIcon="true" :extraIcon="{type: 'wallet-filled'}" title="委外工单号码"
									:rightText="value.outworkorderCode" />

								<uni-list-item showExtraIcon="true" :extraIcon="{type: 'wallet-filled'}" title="生产工单号码"
									:rightText="value.workorderCode" />

								<uni-list-item showExtraIcon="true" :extraIcon="{type: 'wallet-filled'}" title="委外工序"
									:rightText="value.productCode" />

								<uni-list-item showExtraIcon="true" :extraIcon="{type: 'wallet-filled'}" title="工序名称"
									:rightText="value.productName" />

								<uni-list-item showExtraIcon="true" :extraIcon="{type: 'wallet-filled'}" title="需求数量"
									:rightText="value.quantityScrot" />

								<uni-list-item showExtraIcon="true" :extraIcon="{type: 'wallet-filled'}" title="发料数量"
									:rightText="value.quantityIssue" />

								<uni-list-item showExtraIcon="true" :extraIcon="{type: 'wallet-filled'}" title="收料良品数"
									:rightText="value.quantityQualified" />

								<uni-list-item showExtraIcon="true" :extraIcon="{type: 'wallet-filled'}" title="收料不良品数"
									:rightText="value.quantityUnquanlified" />

								<uni-list-item showExtraIcon="true" :extraIcon="{type: 'wallet-filled'}" title="收料时间"
									:rightText="value.createTime" />

							</uni-list>
						</view>
					</view>


				</uni-collapse-item>

			</uni-collapse>
		</uni-section>
		<!-- 显示收料单明细 -->
		<!-- 编辑收料单明细 -->
		<view class="content example" v-show="showEditOutreceiveLine">

			<uni-forms ref="form" :model="outreceiveLine" labelWidth="100px">

				<uni-forms-item label="扫码委外发料行码" name="issueCode" label-width="100">

					<view class="dist-flex">
						<uni-easyinput v-model="outreceiveLine.issueCode" placeholder="委外工单号码"></uni-easyinput>
						<uni-icons type="camera-filled" size="30" @click="onH5Scan"></uni-icons>
					</view>

				</uni-forms-item>

				<uni-forms-item label="收料单ID" name="receiveId" labelWidth="100">
					<uni-easyinput disabled v-model="outreceiveLine.receiveId" placeholder="收料单" />
				</uni-forms-item>

				<uni-forms-item label="收料单号" name="receiveCode" labelWidth="100">
					<uni-easyinput disabled v-model="outreceiveLine.receiveCode" placeholder="收料单" />
				</uni-forms-item>

				<uni-forms-item label="发料行ID" name="issueLineId" labelWidth="100">
					<uni-easyinput disabled v-model="outreceiveLine.issueLineId" placeholder="系统自动生成" />
				</uni-forms-item>


				<uni-forms-item label="委外工单" name="outworkorderCode" label-width="100">
					<uni-easyinput disabled v-model="outreceiveLine.outworkorderCode" placeholder="收料数量" />
				</uni-forms-item>

				<uni-forms-item label="生厂工单" name="workorderCode" label-width="100">
					<uni-easyinput disabled v-model="outreceiveLine.workorderCode" placeholder="收料数量" />
				</uni-forms-item>

				<uni-forms-item label="需求数量" name="quantityScrot" labelWidth="100">
					<uni-easyinput disabled v-model="outreceiveLine.quantityScrot" placeholder="需求数量" />
				</uni-forms-item>

				<uni-forms-item label="发料数量" name="quantity" label-width="100">
					<uni-easyinput disabled v-model="outreceiveLine.quantity" placeholder="收料数量" />
				</uni-forms-item>


				<uni-forms-item label="收料良品数" name="quantityQualifiedReceive" label-width="100">
					<uni-easyinput v-model="outreceiveLine.quantityQualifiedReceive" placeholder="收料良品数" />
				</uni-forms-item>

				<uni-forms-item label="收料不良品数" name="quantityUnqualifiedReceive" label-width="100">
					<uni-easyinput v-model="outreceiveLine.quantityUnqualifiedReceive" placeholder="收料不良品数" />
				</uni-forms-item>




			</uni-forms>




			</uni-section>

			<view style="text-align: center;">

				<button type="primary" @click="submitForm" size="mini">保存委外收料单明细</button>

			</view>

		</view>
		<!-- 编辑收料单明细 -->



	</view>
</template>

<script>
	import {
		getUserProfile
	} from "@/api/system/user"
	import {
		updateUserProfile
	} from "@/api/system/user"
	import {
		listWorkorder
	} from "@/api/mes/pro/workorder"
	import {
		listOutworkorder
	} from "@/api/mes/pro/outworkorder"
	import {
		getOutissue,
		addOutissue,
		listOutissue,
		updateOutissue,
		getOutissueByIssueCode
	} from "@/api/mes/pro/outissue.js"
	import {
		getOutissueLine,
		addOutissueLine,
		listOutissueLine,
		updateOutissueLine
	} from "@/api/mes/pro/outissueLine.js"
	import {
		getOutrececive,
		addOutrececive,
		listOutrececive,
		updateOutrececive,
		getOutreceiveByReceiveCode
	} from "@/api/mes/pro/outreceive.js"
	import {
		getOutreceiveLine,
		addOutreceiveLine,
		listOutreceiveLine,
		updateOutreceiveLine
	} from "@/api/mes/pro/outreceiveLine.js"


	import {
		listUser,
		getUser,
		delUser,
		addUser,
		updateUser,
		resetUserPwd,
		changeUserStatus
	} from "@/api/system/user"
	import {
		getJsapiSignature
	} from "@/api/notice/qywx.js"
	import storage from '@/utils/storage'
	import {
		getDicts
	} from "@/api/system/dict/data"
	import {
		listVendor,
		getVendor,
		delVendor,
		addVendor,
		updateVendor
	} from "@/api/mes/md/vendor"
	import {
		genCode
	} from "@/api/system/autocode/rule"
	import {
		listOutworkorderline
	} from "../../../../api/mes/pro/outworkorderline"


	export default {
		dicts: ['mes_order_status'],
		data() {
			return {
				vendorList: [],
				selectVendorCode: null,
				rules: {
					nickName: {
						rules: [{
							required: true,
							errorMessage: '用户昵称不能为空'
						}]
					},
					phonenumber: {
						rules: [{
							required: true,
							errorMessage: '手机号码不能为空'
						}, {
							pattern: /^1[3|4|5|6|7|8|9][0-9]\d{8}$/,
							errorMessage: '请输入正确的手机号码'
						}]
					},
					email: {
						rules: [{
							required: true,
							errorMessage: '邮箱地址不能为空'
						}, {
							format: 'email',
							errorMessage: '请输入正确的邮箱地址'
						}]
					}
				},
				workorderCodeList: [],
				selectWorkorderCode: null,
				outworkorderCodeList: [],
				selectOutworkorderCode: null,
				outworkorderLineProductList: [],
				outworkorderLineWorkorderList: [],
				outissueCodeList: [],
				outissueLineList: [],
				selectOutissueCode: null,
				selectProductCode: null,
				workorderList: [],
				protaskList: [],
				receiveCode: null,
				outissue: {
					issueId: null,
					issueCode: null,
					issueName: null,
					issueType: null,
					orderSource: null,
					sourceCode: null,
					productId: null,
					productCode: null,
					productName: null,
					productSpc: null,
					unitOfMeasure: null,
					quantity: null,
					quantityProduced: null,
					quantityChanged: null,
					quantityScheduled: null,
					clientId: null,
					clientCode: null,
					clientName: null,
					vendorId: null,
					vendorCode: null,
					vendorName: null,
					requestDate: null,
					parentId: null,
					status: null,
					remark: null,
					createBy: null,
					createTime: null,
					updateBy: null,
					updateTime: null
				},
				outissueline: {
					issueLineId: null,
					issueId: null,
					issueCode: null,
					issueName: null,
					issueType: null,
					outworkorderId: null,
					outwrkorderCode: null,
					outworkorderLineId: null,
					workorderId: null,
					workorderCode: null,
					lineNo: null,
					routeId: null,
					routeCode: null,
					processId: null,
					processCode: null,
					processName: null,
					productId: null,
					productCode: null,
					productName: null,
					productSpc: null,
					unitOfMeasure: null,
					quantity: null,
					quantityProduced: null,
					quantityChanged: null,
					quantityScheduled: null,
					quantityScrot: null,
					clientId: null,
					clientCode: null,
					clientName: null,
					vendorId: null,
					vendorCode: null,
					vendorName: null,
					requestDate: null,
					parentId: null,
					status: null,
					remark: null,
					createBy: null,
					createTime: null,
					updateBy: null,
					updateTime: null
				},
				outissueLineList: [],
				outreceive: {
					receiveId: null,
					receiveCode: null,
					receiveName: null,
					receiveType: null,
					orderSource: null,
					sourceCode: null,
					productId: null,
					productCode: null,
					productName: null,
					productSpc: null,
					unitOfMeasure: null,
					quantity: null,
					quantityProduced: null,
					quantityChanged: null,
					quantityScheduled: null,
					clientId: null,
					clientCode: null,
					clientName: null,
					vendorId: null,
					vendorCode: null,
					vendorName: null,
					requestDate: null,
					parentId: null,
					status: null,
					remark: null,
					createBy: null,
					createTime: null,
					updateBy: null,
					updateTime: null
				},
				outreceiveLine: {
					receiveLineId: null,
					receiveId: null,
					receiveCode: null,
					receiveName: null,
					receiveType: null,
					issueId: null,
					issueCode: null,
					issueName: null,
					issueType: null,
					issueLineId: null,
					outworkorderId: null,
					outwrkorderCode: null,
					outworkorderLineId: null,
					workorderId: null,
					workorderCode: null,
					lineNo: null,
					routeId: null,
					routeCode: null,
					processId: null,
					processCode: null,
					processName: null,
					productId: null,
					productCode: null,
					productName: null,
					productSpc: null,
					unitOfMeasure: null,
					quantity: null,
					quantityProduced: null,
					quantityChanged: null,
					quantityScheduled: null,
					quantityScrot: null,
					quantityIssue: null,
					quantityUnquanlified: null,
					clientId: null,
					clientCode: null,
					clientName: null,
					vendorId: null,
					vendorCode: null,
					vendorName: null,
					requestDate: null,
					parentId: null,
					status: null,
					remark: null,
					createBy: null,
					createTime: null,
					updateBy: null,
					updateTime: null
				},
				outreceiveLineList: [],


				workorderStatus: [],
				// 遮罩层
				loading: true,
				showEditOutworkorderLine: false,
				showQueryOutworkorderLine: false,
				showOutissueLine: false,
				showQueryOutreceiveLine: false,
				showEditOutreceiveLine: false,
				// 查询参数
				queryOutissueParams: {
					issueCode: null,
				},
				queryOutissueLineParams: {
					issueCode: null,
				},
				queryOutreceiveParams: {
					receiveCode: null,
				},
				queryOutreceiveLineParams: {
					receiveCode: null,
				},

				queryOutworkorderLineParams: {
					outworkorderCode: null,
				},
				//卡片相关数据
				cover: 'https://qiniu-web-assets.dcloud.net.cn/unidoc/zh/shuijiao.jpg',
				avatar: 'https://qiniu-web-assets.dcloud.net.cn/unidoc/zh/unicloudlogo.png',
				extraIcon: {
					color: '#4cd964',
					size: '22',
					type: 'gear-filled'
				}

			}
		},
		created() {

		},
		onLoad: function(option) {

			this.receiveCode = JSON.parse(decodeURIComponent(option.item));
			console.log("receiveCode:" + this.receiveCode)
			this.outreceive.receiveCode = this.receiveCode
			this.queryOutreceiveParams.receiveCode = this.receiveCode
			this.queryOutreceiveLineParams.receiveCode = this.receiveCode
			this.queryOutreceive();
			this.queryOutreceiveLineList();
			this.queryListOutworkorder();

			//调用微信扫一扫的配置
			this.getCofig()
		},
		onReady() {
			//设定Form提交的规则
			this.$refs.form.setRules(this.rules)
		},
		methods: {
			/** 提交按钮 保存报工按钮 */
			submitForm() {
				console.log("保存委外收料单开始")
				console.log(this.outissueLineList)
				this.$refs.form.validate().then(res => {


					console.log("收料行数据");
					console.log(this.outreceiveLine);
					addOutreceiveLine(this.outreceiveLine).then(response => {

						//this.showEditOutworkorderLine=false						
						this.$modal.msgSuccess("新增成功:" + this.outreceiveLine.productName);
					});



				});

				console.log("保存委外收料单结束")
			},
			changeOutissue(e) {
				console.log("选择委外发料单号码")
				console.log(e)
				let row = JSON.parse(e)
				console.log(row.issueCode)
				this.showOutissueLine = true


				this.queryOutissueParams.issueCode = row.issueCode;
				this.outworkorderLineProductList = []
				this.outworkorderLineWorkorderList = []

				this.outissueline.productCode = null
				this.outissueline.productName = null
				this.outissueline.quantityScrot = null
				this.outissueline.quantity = null

				this.outworkorderCodeList = []

				listOutissueLine(this.queryOutissueParams).then(response => {

					this.loading = false;
					this.outissueLineList = response.rows;

					for (var i in response.rows) {

						this.outworkorderCodeList.push({
							value: JSON.stringify(response.rows[i]),
							text: response.rows[i].outworkorderCode
						});
					}

				})
				//委外工单发料列表
				console.log(row.outworkorderCodeList)


			},
			changeOutworkorder(e) {
				console.log("选择委外工单号码")
				console.log(e)
				let row = JSON.parse(e)
				console.log(row.outworkorderCode)
				this.queryOutworkorderLineParams.outworkorderCode = row.outworkorderCode;
				this.outworkorderLineProductList = []
				this.outworkorderLineWorkorderList = []

				this.outissueline.productCode = null
				this.outissueline.productName = null
				this.outissueline.quantityScrot = null
				this.outissueline.quantity = null


				listOutworkorderline(this.queryOutworkorderLineParams).then(response => {
					//this.protaskList = response.rows;
					this.loading = false;
					for (var i in response.rows) {
						this.outworkorderLineProductList.push({
							value: JSON.stringify(response.rows[i]),
							text: response.rows[i].productCode + "|" + response.rows[i].productName
						});
						this.outworkorderLineWorkorderList.push({
							value: JSON.stringify(response.rows[i]),
							text: response.rows[i].workorderCode
						});
					}

				})
				//委外工单发料列表
				console.log(row.outworkorderLineProductList)


			},
			changeOutworkorderLineWorkorder(e) {
				console.log("选择委外工单明细的生产工单")
				console.log(e)
				let row = JSON.parse(e)
				console.log(row)

				this.outissueline.processId = row.processId
				this.outissueline.productCode = row.productCode
				this.outissueline.productName = row.productName
				this.outissueline.quantityScrot = row.quantity

				this.outissueline.outworkorderId = row.outworkorderId
				this.outissueline.outworkorderCode = row.outworkorderCode
				this.outissueline.outworkorderLineId = row.outworkorderLineId

				this.outissueline.workorderId = row.workorderId
				this.outissueline.workorderCode = row.workorderCode

				this.outissueline.routeId = row.routeId
				this.outissueline.routeCode = row.routeCode
				this.outissueline.routeName = row.routeName

				this.outissueline.processId = row.processId
				this.outissueline.processCode = row.processCode
				this.outissueline.processName = row.processName


			},
			changeUser(e) {
				console.log("选择审核人")
				console.log(e)
				let row = JSON.parse(e)
				console.log(row.userName)
				this.feedback.recordUser = row.userName
				this.feedback.recordNick = row.nickNamethis.outissueline.outworkorderId = row.outworkorderId
				this.loading = true
				getOutissueByreceiveCode(this.receiveCode).then(response => {
					this.loading = false;
					console.log("委外收料单表头");
					console.log(response.data);
					this.outissue = response.data;
					this.outissueline.issueId = response.data.issueId;
					this.outissueline.receiveCode = response.data.receiveCode;

				});
			},
			queryOutreceive() {
				this.loading = true
				getOutreceiveByReceiveCode(this.receiveCode).then(response => {
					this.loading = false;
					console.log("委外收料单表头");
					console.log(response.data);
					this.outreceive = response.data;
				});
			},
			queryOutreceiveLineList() {
				this.loading = true
				listOutreceiveLine(this.queryOutreceiveLineParams).then(response => {
					this.loading = false;
					console.log("委外收料单明细");
					console.log(response.rows);
					this.outrececLineList = response.rows;

				});
			},
			queryListOutissue() {
				console.log("查询委外发料单-可发料范围")
				listOutissue().then(response => {
					this.loading = false;
					for (var i in response.rows) {
						this.outissueCodeList.push({
							value: JSON.stringify(response.rows[i]),
							text: response.rows[i].issueCode
						});
					}

				});
				console.log(this.outissueCodeList);
				console.log("查询委外发料单-可发料范围")
			},
			queryListOutworkorder() {
				console.log("查询委外工单清单-可发料范围")
				listOutworkorder().then(response => {
					this.loading = false;
					for (var i in response.rows) {
						this.outworkorderCodeList.push({
							value: JSON.stringify(response.rows[i]),
							text: response.rows[i].outworkorderCode
						});
					}

				});
				console.log(this.outworkorderCodeList);
				console.log("查询委外工单清单-可发料范围")
			},
			getListProTask() {
				console.log("查询排产任务开始")
				listProtask(this.queryProTaskParams).then(response => {
					//this.protaskList = response.rows;
					this.loading = false;
					for (var i in response.rows) {
						this.protaskList.push({
							value: JSON.stringify(response.rows[i]),
							text: response.rows[i].taskCode + "|" + response.rows[i].workstationName
						});
					}

				});

				console.log(this.protaskList);
				console.log("查询排产任务结束")
			},
			openAddOutreceiveLine() {
				//this.$refs.showRight.open();
				//this.$tab.navigateTo('/pages/mes/pro/workorder/saveowoissueline?item=' + encodeURIComponent(JSON.stringify(this
				//	.outissue)));
				this.showEditOutreceiveLine = true;
				this.showQueryOutreceiveLine = false;
				//查询发料单可发料列表
				//this.queryListOutissue();

			},
			openQueryOutreceiveLine() {
				console.log("查询委外工单收料明细")

				this.showQueryOutreceiveLine = true;
				this.showEditOutreceiveLine = false;

				this.queryOutreceiveLineList();
			},

			closeDrawer() {
				this.$refs.showRight.close();
			},

			//微信扫描save
			onH5Scan() {
				//如果有调用相关的内容,要使用that的这个常量
				const that = this;
				console.log('onH5Scan进来了');
				this.$wx.scanQRCode({
					needResult: 1, // 默认为0,扫描结果由微信处理,1则直接返回扫描结果,
					scanType: ['qrCode', 'barCode'], // 可以指定扫二维码还是一维码,默认二者都有
					success: function(res) {
						//alert(JSON.stringify(res))  //测试使用
						var result = res.resultStr; // 当 needResult 为 1 时,扫码返回的结果
						var resultArr = result.split(',') // 扫描结果以逗号分割数组
						var codeContent = resultArr[resultArr.length - 1] // 获取数组最后一个元素,也就是最终的内容
						扫描结果赋值
						console.log('onH5Scan——success');
						console.log("onH5Scan" + result + "===" + resultArr + "===" + codeContent);

						var str = codeContent.trim();

						var array = str.split('^');
						alert(array);
						
						that.outreceiveLine.receiveId=that.outreceive.receiveId
						that.outreceiveLine.receiveCode=that.outreceive.receiveCode

						that.outreceiveLine.issueLineId = parseInt(array[0])
						that.outreceiveLine.issueId = parseInt(array[1])
						that.outreceiveLine.issueCode = array[2]


						that.outreceiveLine.outworkorderLineId = parseInt(array[3])
						that.outreceiveLine.outworkorderId = parseInt(array[4])
						that.outreceiveLine.outworkorderCode = array[5]


						that.outreceiveLine.workorderId = parseInt(array[6])
						that.outreceiveLine.workorderCode = array[7]


						that.outreceiveLine.productId = parseInt(array[8])
						that.outreceiveLine.productCode = array[9]
						that.outreceiveLine.productName = array[10]


						that.outreceiveLine.routeId = parseInt(array[11])
						that.outreceiveLine.routeCode = array[12]
						//that.outissueline.routeName = array[13]

						that.outreceiveLine.processId = parseInt(array[14])
						that.outreceiveLine.processCode = array[15]
						that.outreceiveLine.processName = array[16]

						that.outreceiveLine.quantityScrot = parseFloat(array[17])
						that.outreceiveLine.quantity = array[18]




					},
					fail: function(response) {
						if (res.errMsg.indexOf('function_not_exist') > 0) {
							console.log('onH5Scan版本过低请升级');
						}
						uni.showToast({
							icon: "none",
							title: "onH5Scan——调用扫码失败" + response.errMsg
						})
					},
				});
			},
			// 配置信息
			getCofig() {

				const that = this;
				let url = window.location.href.split('#')[0];
				let params = {
					'url': url
				}
				getJsapiSignature(params).then(res => {
					const result = res;

					if (res) {
						that.wxConfig(
							result.appId,
							result.timestamp,
							result.nonceStr,
							result.signature
						);
					} else {
						alert('获取配置信息返回为空');
					}
				})
			},
			//wx.config的配置
			wxConfig(appId, timestamp, nonceStr, signature) {
				this.$wx.config({
					debug: false, // 开启调试模式,
					appId: appId, // 必填,企业号的唯一标识
					timestamp: timestamp, // 必填,生成签名的时间戳
					nonceStr: nonceStr, // 必填,生成签名的随机串
					signature: signature, // 必填,签名
					jsApiList: [
						'chooseImage',
						'previewImage',
						'uploadImage',
						'downloadImage',
						'scanQRCode',
						'checkJsApi'
					], // 必填,需要使用的JS接口列表
				});


				this.$wx.ready(() => {
					this.$wx.checkJsApi({ //判断当前客户端版本是否支持指定JS接口
						jsApiList: [
							'chooseImage',
							'previewImage',
							'uploadImage',
							'downloadImage',
							'scanQRCode',
						],
						success: function(
							res
						) { // 以键值对的形式返回,可用true,不可用false。如:{"checkResult":{"scanQRCode":true},"errMsg":"checkJsApi:ok"}
							//alert(res)
							//取消配置提示框
							this.$modal.msgSuccess(res.checkResult)
							if (res.checkResult.scanQRCode != true) {
								this.$modal.msgSuccess('抱歉,当前客户端版本不支持扫一扫')
							}

						},
						fail: function(res) { //检测getNetworkType该功能失败时处理
							this.$modal.msgSuccess(res)
							alert('checkJsApi error');
						}
					});

					console.log("wxConfig配置完成,扫码前准备完成");
					//this.$modal.msgSuccess("wxConfig配置完成,扫码前准备完成")
				})
				this.$wx.error(function(res) {
					this.$modal.msgSuccess('wxConfig出错了:' + res.errMsg)
					console.log('wxConfig出错了:' + res.errMsg);
					//wx.config配置错误,会弹出窗口哪里错误,然后根据微信文档查询即可。
				});
			},

		}
	}
</script>

<style lang="scss">
	page {
		background-color: #ffffff;
	}

	.example {
		padding: 15px;
		background-color: #ffffff;
	}

	.segmented-control {
		margin-bottom: 15px;
	}

	.button-group {
		margin-top: 15px;
		display: flex;
		justify-content: space-around;
	}

	.form-item {
		display: flex;
		align-items: center;
		flex: 1;
	}

	.button {
		display: flex;
		align-items: center;
		height: 35px;
		line-height: 35px;
		margin-left: 10px;
	}

	.dist-flex {
		display: flex !important;
	}

	/*卡片格式*/
	.container {
		overflow: hidden;
	}

	.custom-cover {
		flex: 1;
		flex-direction: row;
		position: relative;
	}

	.cover-content {
		position: absolute;
		bottom: 0;
		left: 0;
		right: 0;
		height: 40px;
		background-color: rgba($color: #000000, $alpha: 0.4);
		display: flex;
		flex-direction: row;
		align-items: center;
		padding-left: 15px;
		font-size: 14px;
		color: #fff;
	}

	.card-actions {
		display: flex;
		flex-direction: row;
		justify-content: space-around;
		align-items: center;
		height: 45px;
		border-top: 1px #eee solid;
	}

	.card-actions-item {
		display: flex;
		flex-direction: row;
		align-items: center;
	}

	.card-actions-item-text {
		font-size: 12px;
		color: #666;
		margin-left: 5px;
	}

	.cover-image {
		flex: 1;
		height: 150px;
	}

	.no-border {
		border-width: 0;
	}
</style>
ALTER TABLE ryvue_mes.pro_task ADD first_flag INT NULL COMMENT '首道工序(0否/1是)';
ALTER TABLE ryvue_mes.pro_task ADD last_flag INT NULL COMMENT '末道工序(0否/1是)';
ALTER TABLE ryvue_mes.pro_task ADD bf_flag INT NULL COMMENT 'BFFlag 倒冲工序(0否/1是)';
ALTER TABLE ryvue_mes.pro_task ADD report_flag INT NULL COMMENT 'ReportFlag 报告点 (0否/1是)';
ALTER TABLE ryvue_mes.pro_task ADD fee_flag INT NULL COMMENT 'FeeFlag 计费点(0否/1是)';
ALTER TABLE ryvue_mes.pro_task ADD delivery_days DECIMAL NULL COMMENT 'DeliveryDays 交货天数';
 1 在main.js文件中注册有关字典的组件和相关的属性等,如下所示,有添加字典注解的地方
import Vue from 'vue'
import App from './App'
import wx from 'weixin-js-sdk'
import store from './store' // store
import plugins from './plugins' // plugins
import './permission' // permission
//字典
import { getDicts } from "@/api/system/dict/data"
// 字典标签组件
import DictTag from '@/components/DictTag'
// 字典数据组件
import DictData from '@/components/DictData'

Vue.use(plugins)
//安装字典
DictData.install()

Vue.config.productionTip = false
Vue.prototype.$store = store
Vue.prototype.getDicts = getDicts
//全局注册字典
Vue.component('DictTag', DictTag)


App.mpType = 'app'

const app = new Vue({
  ...App
})

app.$mount()
2  在D:\ideaProject\RuoYi-App-master\components目录,添加从前端的项目复制DictData,DictTag两个目录的全部文件
3在D:\ideaProject\RuoYi-App-master\utils目录,添加从前端的项目复制utils的文件,存在的文件就跳过
4 在组件文件中直接使用<dict-tag :options="dict.type.mes_order_status" value="CONFIRMED" />来表示字典显示的内容

4.1 定义字典的内容

dicts: ['mes_order_status','mes_workorder_sourcetype','mes_workorder_type'],

 4.2 在要显示标签的地方,写下dict-tag标签的语法,vaule属性可以使用变量

<dict-tag :options="dict.type.mes_order_status" value="CONFIRMED" />
<template>
	<view class="normal-login-container">
		<view class="logo-content align-center justify-center flex">
			<image style="width: 100rpx;height: 100rpx;" :src="globalConfig.appInfo.logo" mode="widthFix">
			</image>
			<text class="title">若依移动端登录</text>
			<view>
				 
					<dict-tag :options="dict.type.mes_order_status" value="CONFIRMED" />
			 
			</view>
		</view>
		<view class="login-form-content">
			<view class="input-item flex align-center">
				<view class="iconfont icon-user icon"></view>
				<input v-model="loginForm.username" class="input" type="text" placeholder="请输入账号" maxlength="30" />
			</view>
			<view class="input-item flex align-center">
				<view class="iconfont icon-password icon"></view>
				<input v-model="loginForm.password" type="password" class="input" placeholder="请输入密码" maxlength="20" />
			</view>
			<view class="input-item flex align-center" style="width: 60%;margin: 0px;" v-if="captchaEnabled">
				<view class="iconfont icon-code icon"></view>
				<input v-model="loginForm.code" type="number" class="input" placeholder="请输入验证码" maxlength="4" />
				<view class="login-code">
					<image :src="codeUrl" @click="getCode" class="login-code-img"></image>
				</view>
			</view>
			<view class="action-btn">
				<button @click="handleLogin" class="login-btn cu-btn block bg-blue lg round">登录</button>
			</view>
			<view class="reg text-center" v-if="register">
				<text class="text-grey1">没有账号?</text>
				<text @click="handleUserRegister" class="text-blue">立即注册</text>
			</view>
			<view class="xieyi text-center">
				<text class="text-grey1">登录即代表同意</text>
				<text @click="handleUserAgrement" class="text-blue">《用户协议》</text>
				<text @click="handlePrivacy" class="text-blue">《隐私协议》</text>
			</view>

		</view>
	</view>
</template>

<script>
	import {
		getCodeImg
	} from '@/api/login'

	export default {
		dicts: ['mes_order_status','mes_workorder_sourcetype','mes_workorder_type'],
		data() {
			return {
				codeUrl: "",
				captchaEnabled: true,
				// 用户注册开关
				register: false,
				globalConfig: getApp().globalData.config,
				loginForm: {
					username: "admin",
					password: "admin123",
					code: "",
					uuid: ''
				}
			}
		},
		created() {
			this.getCode()
		},
		methods: {
			// 用户注册
			handleUserRegister() {
				this.$tab.redirectTo(`/pages/register`)
			},
			// 隐私协议
			handlePrivacy() {
				let site = this.globalConfig.appInfo.agreements[0]
				this.$tab.navigateTo(`/pages/common/webview/index?title=${site.title}&url=${site.url}`)
			},
			// 用户协议
			handleUserAgrement() {
				let site = this.globalConfig.appInfo.agreements[1]
				this.$tab.navigateTo(`/pages/common/webview/index?title=${site.title}&url=${site.url}`)
			},
			// 获取图形验证码
			getCode() {
				getCodeImg().then(res => {
					this.captchaEnabled = res.captchaEnabled === undefined ? true : res.captchaEnabled
					if (this.captchaEnabled) {
						this.codeUrl = 'data:image/gif;base64,' + res.img
						this.loginForm.uuid = res.uuid
					}
				})
			},
			// 登录方法
			async handleLogin() {
				if (this.loginForm.username === "") {
					this.$modal.msgError("请输入您的账号")
				} else if (this.loginForm.password === "") {
					this.$modal.msgError("请输入您的密码")
				} else if (this.loginForm.code === "" && this.captchaEnabled) {
					this.$modal.msgError("请输入验证码")
				} else {
					this.$modal.loading("登录中,请耐心等待...")
					this.pwdLogin()
				}
			},
			// 密码登录
			async pwdLogin() {
				this.$store.dispatch('Login', this.loginForm).then(() => {
					this.$modal.closeLoading()
					this.loginSuccess()
				}).catch(() => {
					if (this.captchaEnabled) {
						this.getCode()
					}
				})
			},
			// 登录成功后,处理函数
			loginSuccess(result) {
				// 设置用户信息
				this.$store.dispatch('GetInfo').then(res => {
					this.$tab.reLaunch('/pages/index')
				})
			}
		}
	}
</script>

<style lang="scss">
	page {
		background-color: #ffffff;
	}

	.normal-login-container {
		width: 100%;

		.logo-content {
			width: 100%;
			font-size: 21px;
			text-align: center;
			padding-top: 15%;

			image {
				border-radius: 4px;
			}

			.title {
				margin-left: 10px;
			}
		}

		.login-form-content {
			text-align: center;
			margin: 20px auto;
			margin-top: 15%;
			width: 80%;

			.input-item {
				margin: 20px auto;
				background-color: #f5f6f7;
				height: 45px;
				border-radius: 20px;

				.icon {
					font-size: 38rpx;
					margin-left: 10px;
					color: #999;
				}

				.input {
					width: 100%;
					font-size: 14px;
					line-height: 20px;
					text-align: left;
					padding-left: 15px;
				}

			}

			.login-btn {
				margin-top: 40px;
				height: 45px;
			}

			.reg {
				margin-top: 15px;
			}

			.xieyi {
				color: #333;
				margin-top: 20px;
			}

			.login-code {
				height: 38px;
				float: right;

				.login-code-img {
					height: 38px;
					position: absolute;
					margin-left: 10px;
					width: 200rpx;
				}
			}
		}
	}
</style>

1 为表添加数据同步相关的信息 

ALTER TABLE ryvue_mes.out_workorder ADD sync_id varchar(100) NULL COMMENT '同步ID(接名名称或AP名行或JOB名称等)';
ALTER TABLE ryvue_mes.out_workorder ADD sync_status INT NULL COMMENT '同步状态(0成功1失败2执行3重传)';
ALTER TABLE ryvue_mes.out_workorder ADD sync_time DATETIME NULL COMMENT '同步完成时间';
ALTER TABLE ryvue_mes.out_workorder ADD sync_qty INT NULL COMMENT '同步记录数';
ALTER TABLE ryvue_mes.out_workorder ADD sync_message varchar(100) NULL COMMENT '同步消息';
ALTER TABLE ryvue_mes.pro_route ADD run_card_flag INT NULL COMMENT '启用流转卡 (0否1是)';
ALTER TABLE ryvue_mes.pro_route ADD aux_unit_code varchar(100) NULL COMMENT '辅助计量单位';
ALTER TABLE ryvue_mes.pro_route ADD runcard_batch_qty DECIMAL NULL COMMENT '流转卡批量数据';
ALTER TABLE ryvue_mes.pro_route ADD route_tyype INT NULL COMMENT 'RountingType 类型(1-主要/2-替代)  ';
ALTER TABLE ryvue_mes.pro_route ADD route_version varchar(100) NULL COMMENT '版本';
ALTER TABLE ryvue_mes.pro_route ADD version_desc varchar(100) NULL COMMENT '版本说明';
ALTER TABLE ryvue_mes.pro_route ADD version_start_date DATE NULL COMMENT '版本生效日期';
ALTER TABLE ryvue_mes.pro_route ADD version_end_date DATE NULL COMMENT '版本结束日期';
ALTER TABLE ryvue_mes.pro_route ADD ident_code varchar(100) NULL COMMENT '替代标识';
ALTER TABLE ryvue_mes.pro_route ADD ident_desc varchar(100) NULL COMMENT '替代说明';
ALTER TABLE ryvue_mes.pro_route ADD auditor_user varchar(100) NULL COMMENT '审核人员';
ALTER TABLE ryvue_mes.pro_route ADD auditor_time DATETIME NULL;
ALTER TABLE ryvue_mes.pro_route ADD close_user varchar(100) NULL COMMENT '关闭人员';
ALTER TABLE ryvue_mes.pro_route ADD close_time varchar(100) NULL;
ALTER TABLE ryvue_mes.pro_route ADD change_rate DECIMAL NULL COMMENT '换算率';
ALTER TABLE ryvue_mes.pro_route ADD update_count varchar(100) NULL COMMENT '修改次数';
ALTER TABLE ryvue_mes.pro_route ADD print_count varchar(100) NULL COMMENT '打印次数';

    <select id="checkFirstProTask" parameterType="ProTask" resultMap="ProTaskResult">
        <include refid="selectProTaskVo"/>
        <where>
            <if test="workorderCode != null  and workorderCode != ''"> and t.workorder_code = #{workorderCode}</if>
            <if test="processCode != null"> and t.process_code = #{processCode} </if>
            <if test="workorderCode != null  and workorderCode != ''"> and (workorder_code,process_order_num)  in (select workorder_code,min(process_order_num) from  ryvue_mes.pro_task  where workorder_code =#{workorderCode} ) </if>

        </where>
    </select>

    <select id="checkLastProTask" parameterType="ProTask" resultMap="ProTaskResult">
        <include refid="selectProTaskVo"/>
        <where>
            <if test="workorderCode != null  and workorderCode != ''"> and t.workorder_code = #{workorderCode}</if>
            <if test="processCode != null"> and t.process_code = #{processCode} </if>
            <if test="workorderCode != null  and workorderCode != ''"> and (workorder_code,process_order_num)  in (select workorder_code,min(process_order_num) from  pro_task  where workorder_code =#{workorderCode} ) </if>
        </where>
    </select>


    <select id="queryPreviousProTask" parameterType="ProTask" resultMap="ProTaskResult">
        <include refid="selectProTaskVo"/>
        <where>
            <if test="workorderCode != null  and workorderCode != ''"> and t.workorder_code = #{workorderCode}</if>
            <if test="workorderCode != null  and workorderCode != '' and  processCode != null  "> and process_order_num  &lt; (select  min(process_order_num) from  pro_task  where workorder_code =#{workorderCode}  and process_code = #{processCode} ) </if>
        </where>
        order by process_order_num desc  limit 1
    </select>
    
    <select id="queryNextProTask" parameterType="ProTask" resultMap="ProTaskResult">
        <include refid="selectProTaskVo"/>
        <where>
            <if test="workorderCode != null  and workorderCode != ''"> and t.workorder_code = #{workorderCode}</if>
            <if test="workorderCode != null  and workorderCode != '' and  processCode != null  "> and process_order_num  &gt; (select  min(process_order_num) from  pro_task  where workorder_code =#{workorderCode}  and process_code = #{processCode} ) </if>
        </where>
        order by process_order_num    limit 1
    </select>
https://blog.csdn.net/hmmmmm/article/details/124625612

  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值