| | |
| | | import com.jcdm.common.annotation.Excel; |
| | | import com.jcdm.common.core.domain.BaseEntity; |
| | | |
| | | import java.util.Date; |
| | | |
| | | /** |
| | | * 配方配置子信息对象 bs_formula_child_info |
| | | * |
| | |
| | | |
| | | private String img; |
| | | |
| | | private String workOrderNo; |
| | | |
| | | private Date collectionTime; |
| | | |
| | | private String locationCode; |
| | | |
| | | private String paramValue; |
| | | |
| | | private String paramName; |
| | | |
| | | public String getParamName() { |
| | | return paramName; |
| | | } |
| | | |
| | | public void setParamName(String paramName) { |
| | | this.paramName = paramName; |
| | | } |
| | | |
| | | public String getParamValue() { |
| | | return paramValue; |
| | | } |
| | | |
| | | public void setParamValue(String paramValue) { |
| | | this.paramValue = paramValue; |
| | | } |
| | | |
| | | public String getWorkOrderNo() { |
| | | return workOrderNo; |
| | | } |
| | | |
| | | public void setWorkOrderNo(String workOrderNo) { |
| | | this.workOrderNo = workOrderNo; |
| | | } |
| | | |
| | | public Date getCollectionTime() { |
| | | return collectionTime; |
| | | } |
| | | |
| | | public void setCollectionTime(Date collectionTime) { |
| | | this.collectionTime = collectionTime; |
| | | } |
| | | |
| | | public String getLocationCode() { |
| | | return locationCode; |
| | | } |
| | | |
| | | public void setLocationCode(String locationCode) { |
| | | this.locationCode = locationCode; |
| | | } |
| | | |
| | | public String getCollectData() { |
| | | return collectData; |
| | | } |
| | |
| | | package com.jcdm.main.bs.formulaChild.service.impl; |
| | | |
| | | import java.util.Date; |
| | | import java.util.List; |
| | | |
| | | import com.jcdm.common.core.domain.AjaxResult; |
| | | import com.jcdm.common.utils.DateUtils; |
| | | import com.jcdm.main.da.paramCollection.domain.DaParamCollection; |
| | | import com.jcdm.main.da.paramCollection.mapper.DaParamCollectionMapper; |
| | | import org.springframework.beans.factory.annotation.Autowired; |
| | | import org.springframework.stereotype.Service; |
| | | import com.jcdm.main.bs.formulaChild.mapper.BsFormulaChildInfoMapper; |
| | |
| | | { |
| | | @Autowired |
| | | private BsFormulaChildInfoMapper bsFormulaChildInfoMapper; |
| | | |
| | | @Autowired |
| | | private DaParamCollectionMapper daParamCollectionMapper; |
| | | |
| | | /** |
| | | * 查询配方配置子信息 |
| | |
| | | if(bsFormulaChildInfos.size()>0){ |
| | | bsFormulaChildInfos.get(0).setResults("OK"); |
| | | bsFormulaChildInfoMapper.updateBsFormulaChildInfo(bsFormulaChildInfos.get(0)); |
| | | bsFormulaChildInfo.setParamValue(bsFormulaChildInfo.getMaterialCode()); |
| | | bsFormulaChildInfo.setParamCode(bsFormulaChildInfos.get(0).getParamCode()); |
| | | addParameterCollection(bsFormulaChildInfo); |
| | | }else { |
| | | return AjaxResult.error("非本工位物料,请重新扫描"); |
| | | } |
| | | return AjaxResult.success("成功"); |
| | | } |
| | | |
| | | public void addParameterCollection(BsFormulaChildInfo bsFormulaChildInfo){ |
| | | DaParamCollection daParamCollection = new DaParamCollection(); |
| | | daParamCollection.setParamCode(bsFormulaChildInfo.getParamCode()); |
| | | daParamCollection.setWorkOrderNo(bsFormulaChildInfo.getWorkOrderNo()); |
| | | daParamCollection.setLocationCode(bsFormulaChildInfo.getLocationCode()); |
| | | daParamCollection.setParamValue(bsFormulaChildInfo.getParamValue()); |
| | | daParamCollection.setProductCode(bsFormulaChildInfo.getProductCode()); |
| | | daParamCollection.setCollectionTime(new Date()); |
| | | daParamCollectionMapper.insertDaParamCollection(daParamCollection); |
| | | } |
| | | |
| | | @Override |
| | | public AjaxResult workpieceRelease(BsFormulaChildInfo bsFormulaChildInfo) { |
| | | bsFormulaChildInfoMapper.workpieceRelease(bsFormulaChildInfo); |
| | |
| | | } |
| | | |
| | | /** |
| | | * 基础参数增加 |
| | | */ |
| | | @PostMapping("/addBasicParameters") |
| | | public void addBasicParameters(@RequestBody DaParamCollection daParamCollection) |
| | | { |
| | | daParamCollectionService.addBasicParameters(daParamCollection); |
| | | } |
| | | |
| | | /** |
| | | * 修改设备产品过程参数采集 |
| | | */ |
| | | @PreAuthorize("@ss.hasPermi('main:paramCollection:edit')") |
| | |
| | | @Excel(name = "类型") |
| | | private String type; |
| | | |
| | | public void setId(Long id) |
| | | private String model; |
| | | |
| | | private String productBarcode; |
| | | |
| | | public String getProductBarcode() { |
| | | return productBarcode; |
| | | } |
| | | |
| | | public void setProductBarcode(String productBarcode) { |
| | | this.productBarcode = productBarcode; |
| | | } |
| | | |
| | | public String getModel() { |
| | | return model; |
| | | } |
| | | |
| | | public void setModel(String model) { |
| | | this.model = model; |
| | | } |
| | | |
| | | public void setId(Long id) |
| | | { |
| | | this.id = id; |
| | | } |
| | |
| | | * @return 结果 |
| | | */ |
| | | public int deleteDaParamCollectionById(Long id); |
| | | |
| | | void addBasicParameters(DaParamCollection daParamCollection); |
| | | } |
| | |
| | | package com.jcdm.main.da.paramCollection.service.impl; |
| | | |
| | | import cn.hutool.core.date.DateUtil; |
| | | import com.jcdm.common.utils.DateUtils; |
| | | import com.jcdm.main.da.collectionParamConf.domain.DaCollectionParamConf; |
| | | import com.jcdm.main.da.collectionParamConf.mapper.DaCollectionParamConfMapper; |
| | | import com.jcdm.main.da.paramCollection.domain.DaParamCollection; |
| | | import com.jcdm.main.da.paramCollection.mapper.DaParamCollectionMapper; |
| | | import com.jcdm.main.da.paramCollection.service.IDaParamCollectionService; |
| | | import org.springframework.beans.factory.annotation.Autowired; |
| | | import org.springframework.stereotype.Service; |
| | | |
| | | import java.util.List; |
| | | import java.util.*; |
| | | |
| | | /** |
| | | * 设备产品过程参数采集Service业务层处理 |
| | |
| | | { |
| | | @Autowired |
| | | private DaParamCollectionMapper daParamCollectionMapper; |
| | | |
| | | @Autowired |
| | | private DaCollectionParamConfMapper daCollectionParamConfMapper; |
| | | |
| | | /** |
| | | * 查询设备产品过程参数采集 |
| | |
| | | { |
| | | return daParamCollectionMapper.deleteDaParamCollectionById(id); |
| | | } |
| | | |
| | | @Override |
| | | public void addBasicParameters(DaParamCollection daParamCollection) { |
| | | // 假设这是从数据库或其他地方获取的参数数据 |
| | | Map<String, String> map = new HashMap<>(); |
| | | map.put("GC", "南浔工厂"); |
| | | map.put("CXBH", "Pack线"); |
| | | map.put("SBBH", "设备001"); |
| | | map.put("YGBH", "员工001"); |
| | | map.put("GDBH", daParamCollection.getWorkOrderNo()); |
| | | map.put("CPXH", daParamCollection.getModel()); |
| | | map.put("INT", DateUtil.formatDateTime(new Date())); |
| | | |
| | | map.forEach((key, value) -> { |
| | | DaCollectionParamConf daCollectionParamConf = new DaCollectionParamConf(); |
| | | daCollectionParamConf.setProcessesCode(daParamCollection.getLocationCode()); |
| | | daCollectionParamConf.setCollectParameterId(key); |
| | | List<DaCollectionParamConf> daCollectionParamConfs = daCollectionParamConfMapper.selectDaCollectionParamConfList(daCollectionParamConf); |
| | | |
| | | DaParamCollection saveData = new DaParamCollection(); |
| | | saveData.setWorkOrderNo(daParamCollection.getWorkOrderNo()); |
| | | saveData.setProductCode(daParamCollection.getProductCode()); |
| | | saveData.setLocationCode(daParamCollection.getLocationCode()); |
| | | saveData.setParamCode(daCollectionParamConfs.get(0).getCollectParameterId()); |
| | | saveData.setParamName(daCollectionParamConfs.get(0).getCollectParameterName()); |
| | | saveData.setCollectionTime(new Date()); |
| | | saveData.setParamValue(value); |
| | | daParamCollectionMapper.insertDaParamCollection(saveData); |
| | | }); |
| | | } |
| | | } |
| | |
| | | @Excel(name = "实际上线数量") |
| | | private Long actualOnlineQty; |
| | | |
| | | /** 产品型号 */ |
| | | @Excel(name = "产品型号") |
| | | private String productModel; |
| | | |
| | | |
| | | /** 上线完工标记 */ |
| | | private String onlineCompletionMark; |
| | | |
| | |
| | | private Long[] idNums; |
| | | |
| | | private String flag; |
| | | |
| | | public String getProductModel() { |
| | | return productModel; |
| | | } |
| | | |
| | | public void setProductModel(String productModel) { |
| | | this.productModel = productModel; |
| | | } |
| | | |
| | | public String getSfResult() { |
| | | return sfResult; |
| | | } |
| | |
| | | <result property="resultCode" column="result_code" /> |
| | | <result property="resultText" column="result_text" /> |
| | | <result property="sfResult" column="sf_result" /> |
| | | <result property="productModel" column="product_model" /> |
| | | |
| | | </resultMap> |
| | | |
| | | <sql id="selectOmProductionOrdeInfoVo"> |
| | | select id,site_code,product_num,station_code,result_code,result_text,sf_result ,work_order_no, sales_order_code, product_code, product_name, workshop_code, line_code, route_code, bom_code, recipe_code, plan_qty, actual_qty, bad_qty, scrap_qty, repair_qty, actual_online_qty, online_completion_mark, demand_date, plan_start_time, plan_end_time, actual_start_time, actual_end_time, serial_number, order_status, create_time, update_time, create_user, update_user, remarks, stream_number, custom, market_area_code, software_version_code, product_company_code, spare_field_1, spare_field_2, spare_field_3, spare_field_4 from om_production_orde_info |
| | | select id,site_code,product_num,station_code, product_model,result_code,result_text,sf_result ,work_order_no, sales_order_code, product_code, product_name, workshop_code, line_code, route_code, bom_code, recipe_code, plan_qty, actual_qty, bad_qty, scrap_qty, repair_qty, actual_online_qty, online_completion_mark, demand_date, plan_start_time, plan_end_time, actual_start_time, actual_end_time, serial_number, order_status, create_time, update_time, create_user, update_user, remarks, stream_number, custom, market_area_code, software_version_code, product_company_code, spare_field_1, spare_field_2, spare_field_3, spare_field_4 from om_production_orde_info |
| | | </sql> |
| | | |
| | | <select id="selectOmProductionOrdeInfoList" parameterType="OmProductionOrdeInfo" resultMap="OmProductionOrdeInfoResult"> |
| | |
| | | <if test="resultText != null">result_text,</if> |
| | | <if test="resultCode != null">result_code,</if> |
| | | <if test="sfResult != null">sf_result,</if> |
| | | </trim> |
| | | <if test="productModel != null">product_model,</if> |
| | | |
| | | </trim> |
| | | <trim prefix="values (" suffix=")" suffixOverrides=","> |
| | | <if test="id != null">#{id},</if> |
| | | <if test="workOrderNo != null">#{workOrderNo},</if> |
| | |
| | | <if test="resultText != null">#{resultText},</if> |
| | | <if test="resultCode != null">#{resultCode},</if> |
| | | <if test="sfResult != null">#{sfResult},</if> |
| | | </trim> |
| | | <if test="productModel != null">#{productModel},</if> |
| | | |
| | | </trim> |
| | | </insert> |
| | | |
| | | <update id="updateOmProductionOrdeInfo" parameterType="OmProductionOrdeInfo"> |
| | |
| | | <if test="resultText != null">result_text = #{resultText},</if> |
| | | <if test="resultCode != null">result_code = #{resultCode},</if> |
| | | <if test="sfResult != null">sf_result = #{sfResult},</if> |
| | | <if test="productModel != null">product_model = #{productModel},</if> |
| | | |
| | | </trim> |
| | | where id = #{id} |
| | | </update> |
| | |
| | | }) |
| | | } |
| | | |
| | | // 新增设备产品过程参数采集 |
| | | export function addBasicParameters(data) { |
| | | return request({ |
| | | url: '/main/paramCollection/addBasicParameters', |
| | | method: 'post', |
| | | data: data |
| | | }) |
| | | } |
| | | |
| | | // 修改设备产品过程参数采集 |
| | | export function updateParamCollection(data) { |
| | | return request({ |
| | |
| | | |
| | | <el-table v-loading="loading" border :data="paramCollectionList" @selection-change="handleSelectionChange" v-if="paramCollectionList.length > 0"> |
| | | <el-table-column type="selection" width="55" align="center" /> |
| | | <el-table-column label="工单编号" align="center" prop="workOrderNo"></el-table-column> |
| | | <el-table-column label="总成序列号" align="center" width="140" prop="sfcCode" ></el-table-column> |
| | | <el-table-column label="产品编号" align="center" prop="productCode"></el-table-column> |
| | | <el-table-column label="产线编号" align="center" prop="productionLine"></el-table-column> |
| | | <el-table-column label="工位编号" align="center" prop="locationCode"></el-table-column> |
| | | <el-table-column label="设备编号" align="center" prop="equipmentNo"></el-table-column> |
| | | <el-table-column label="参数编码" align="center" prop="paramCode"></el-table-column> |
| | | <el-table-column label="工单编号" width="150" align="center" prop="workOrderNo"></el-table-column> |
| | | <!-- <el-table-column label="总成序列号" align="center" width="140" prop="sfcCode" ></el-table-column>--> |
| | | <el-table-column label="产品序列号" align="center" width="150" prop="productCode"></el-table-column> |
| | | <!-- <el-table-column label="产线编号" align="center" prop="productionLine"></el-table-column>--> |
| | | <el-table-column label="工序编号" align="center" prop="locationCode"></el-table-column> |
| | | <!-- <el-table-column label="设备编号" align="center" prop="equipmentNo"></el-table-column>--> |
| | | <el-table-column label="参数编码" width="150" align="center" prop="paramCode"></el-table-column> |
| | | <el-table-column label="参数名称" width="150" align="center" prop="paramName"></el-table-column> |
| | | <el-table-column label="参数值" align="center" prop="paramValue"></el-table-column> |
| | | <el-table-column label="参数上限" align="center" prop="paramUpper"></el-table-column> |
| | | <el-table-column label="参数下限" align="center" prop="paramLower"></el-table-column> |
| | |
| | | <el-table-column type="selection" width="55" align="center" /> |
| | | <el-table-column label="工单编号" align="center" prop="workOrderNo"> |
| | | </el-table-column> |
| | | <el-table-column label="总成序列号" align="center" prop="sfcCode"> |
| | | <!-- <el-table-column label="总成序列号" align="center" prop="sfcCode">--> |
| | | <!-- </el-table-column>--> |
| | | <el-table-column label="产品序列号" align="center" prop="productCode"> |
| | | </el-table-column> |
| | | <el-table-column label="产品编号" align="center" prop="productCode"> |
| | | <!-- <el-table-column label="产线编号" align="center" prop="productionLine">--> |
| | | <!-- </el-table-column>--> |
| | | <el-table-column label="工序编号" align="center" prop="locationCode"> |
| | | </el-table-column> |
| | | <el-table-column label="产线编号" align="center" prop="productionLine"> |
| | | </el-table-column> |
| | | <el-table-column label="工位编号" align="center" prop="locationCode"> |
| | | </el-table-column> |
| | | <el-table-column label="入站时间" align="center" prop="inboundTime" width="100"> |
| | | <el-table-column label="入站时间" align="center" prop="inboundTime" width="160"> |
| | | <template slot-scope="scope"> |
| | | <span>{{ parseTime(scope.row.inboundTime, '{y}-{m}-{d} {h}:{i}:{s}') }}</span> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column label="出站时间" align="center" prop="outboundTime" width="100"> |
| | | <el-table-column label="出站时间" align="center" prop="outboundTime" width="160"> |
| | | <template slot-scope="scope"> |
| | | <span>{{ parseTime(scope.row.outboundTime, '{y}-{m}-{d} {h}:{i}:{s}') }}</span> |
| | | </template> |
| | |
| | | </el-table-column> |
| | | <el-table-column label="NG原因" align="center" prop="outMsgSign"> |
| | | </el-table-column> |
| | | <el-table-column label="采集时间" align="center" prop="collectionTime" width="180"> |
| | | <template slot-scope="scope"> |
| | | <span>{{ parseTime(scope.row.collectionTime, '{y}-{m}-{d} {h}:{i}:{s}') }}</span> |
| | | </template> |
| | | </el-table-column> |
| | | <!-- <el-table-column label="采集时间" align="center" prop="collectionTime" width="180">--> |
| | | <!-- <template slot-scope="scope">--> |
| | | <!-- <span>{{ parseTime(scope.row.collectionTime, '{y}-{m}-{d} {h}:{i}:{s}') }}</span>--> |
| | | <!-- </template>--> |
| | | <!-- </el-table-column>--> |
| | | <el-table-column label="节拍时间" align="center" prop="beatTime"> |
| | | </el-table-column> |
| | | <el-table-column fixed="right" label="操作" width="200" align="center" class-name="small-padding fixed-width"> |
| | |
| | | </el-col> |
| | | <el-col :span="10"> |
| | | <el-card shadow="never"> |
| | | <span class="head-font">总成编码 : {{headContent.sfcCode}}</span> |
| | | <span class="head-font">产品序列号 : {{headContent.sfcCode}}</span> |
| | | <!-- <el-input v-model="content" style="float: right;width: 150px;" placeholder="请输入内容"></el-input>--> |
| | | <!-- <el-button @click="scanCompleted" style="float: right" type="primary">扫码完成</el-button>--> |
| | | <el-button type="primary" style="float: right" icon="el-icon-search" size="mini" @click="serialLink">串口连接</el-button> |
| | |
| | | <el-descriptions :column="1" border :content-style="{'min-width': '140px'}"> |
| | | <!-- <el-descriptions :column="1" :label-style="{'font-size': '15px'}" border :content-style="{'min-width': '150px'}">--> |
| | | <el-descriptions-item label="工单编号"> |
| | | <span>{{workpieceInformation.workOrderCode}}</span> |
| | | <span>{{workpieceInformation.workOrderNo}}</span> |
| | | </el-descriptions-item> |
| | | <el-descriptions-item label="产品编号"> |
| | | <el-descriptions-item label="产品序列号"> |
| | | <span>{{workpieceInformation.productCode}}</span> |
| | | </el-descriptions-item> |
| | | <el-descriptions-item label="产品型号"> |
| | |
| | | <el-descriptions-item label="产品名称"> |
| | | <span>{{workpieceInformation.productName}}</span> |
| | | </el-descriptions-item> |
| | | <el-descriptions-item label="节拍"> |
| | | <span>{{workpieceInformation.beat}}</span> |
| | | </el-descriptions-item> |
| | | <!-- <el-descriptions-item label="节拍">--> |
| | | <!-- <span>{{workpieceInformation.beat}}</span>--> |
| | | <!-- </el-descriptions-item>--> |
| | | </el-descriptions> |
| | | <el-divider></el-divider> |
| | | <el-row> |
| | |
| | | import {listFormulaChild, releaseCheck, updateResults, workpieceRelease} from "@/api/main/bs/formulaChild/formulaChild"; |
| | | import MySerialPort from "@/utils/MySerialPort"; |
| | | import USBDevice from "@/utils/usb.json"; |
| | | import {listProductionOrde} from "@/api/main/om/productionOrde/productionOrde"; |
| | | import {addPassingStationCollection} from "@/api/main/da/passingStationCollection/passingStationCollection"; |
| | | import {addBasicParameters, addParamCollection} from "@/api/main/da/paramCollection/paramCollection"; |
| | | |
| | | export default { |
| | | name: "stationTerminal", |
| | |
| | | sfcCode: '10', |
| | | }, |
| | | workpieceInformation: { |
| | | workOrderCode: null, |
| | | workOrderNo: null, |
| | | productCode: null, |
| | | productModel: null, |
| | | productName: null, |
| | |
| | | isShowSendArea: false, |
| | | readType: 1, |
| | | title: "", |
| | | |
| | | passingStationForm: {}, |
| | | } |
| | | }, |
| | | beforeDestroy() { |
| | |
| | | }, |
| | | serialPortMethod(value){ |
| | | let formulaChildParams = { |
| | | materialCode: value |
| | | materialCode: value, |
| | | workOrderNo: this.workpieceInformation.workOrderNo, |
| | | productCode: this.workpieceInformation.productCode, |
| | | locationCode: this.headContent.processesCode, |
| | | collectionTime: new Date() |
| | | } |
| | | updateResults(formulaChildParams).then(response => { |
| | | this.getListFormulaChild() |
| | |
| | | this.cakeLamp.startWork = 1 |
| | | |
| | | }, |
| | | /** 查询报工记录 表列表 */ |
| | | /** 查询工单列表 */ |
| | | async getList() { |
| | | await listWorkReport(this.queryParams).then(response => { |
| | | await listProductionOrde(this.queryParams).then(response => { |
| | | let rowsData = response.rows[0]; |
| | | console.log(rowsData) |
| | | this.workpieceInformation.workOrderCode = rowsData.workOrderCode; |
| | | this.workpieceInformation.workOrderNo = rowsData.workOrderNo; |
| | | this.workpieceInformation.productCode = rowsData.productCode; |
| | | this.workpieceInformation.productModel = rowsData.productModel; |
| | | this.workpieceInformation.productName = rowsData.productName; |
| | |
| | | }, 1000); |
| | | }); |
| | | this.getListFormulaChild() |
| | | this.addOverStationCollection() |
| | | }, |
| | | |
| | | /** 入站增加过站采集记录 **/ |
| | | addOverStationCollection(){ |
| | | this.passingStationForm = { |
| | | id: null, |
| | | workOrderNo: this.workpieceInformation.workOrderNo, |
| | | productCode: this.workpieceInformation.productCode, |
| | | locationCode: this.headContent.processesCode, |
| | | model: this.workpieceInformation.productModel, |
| | | productBarcode: this.headContent.sfcCode, |
| | | inboundTime: new Date() |
| | | } |
| | | addPassingStationCollection(this.passingStationForm).then(response => { |
| | | }); |
| | | addBasicParameters(this.passingStationForm).then(response => { |
| | | }); |
| | | }, |
| | | allowRelease(){ |
| | | clearInterval(this.timer); |
| | |
| | | </el-table-column> |
| | | <el-table-column label="产品名称" width="120" align="center" prop="productName"> |
| | | </el-table-column> |
| | | <el-table-column label="产品型号" align="center" prop="productModel"> |
| | | </el-table-column> |
| | | <el-table-column label="工单状态" width="100" align="center" prop="orderStatus"> |
| | | <template slot-scope="scope"> |
| | | <dict-tag :options="dict.type.order_state" :value="scope.row.orderStatus"/> |
| | |
| | | <el-form-item label="产品名称" prop="productName"> |
| | | <el-input style="width: 265px" v-model="form.productName" disabled placeholder="请输入产品名称" /> |
| | | </el-form-item> |
| | | <el-form-item label="产品型号" prop="productModel"> |
| | | <el-input v-model="form.productModel" placeholder="请输入产品型号" /> |
| | | </el-form-item> |
| | | <el-form-item label="工厂编号" prop="siteCode"> |
| | | <el-input style="width: 265px" v-model="form.siteCode" placeholder="请输入工厂编号" /> |
| | | </el-form-item> |
| | |
| | | frontEndId: 0, |
| | | idNums: null, |
| | | flag: null, |
| | | siteCode: null, |
| | | productNum: null, |
| | | stationCode: null, |
| | | resultText: null, |
| | | resultCode: null, |
| | | sfResult: null |
| | | siteCode: null, |
| | | productNum: null, |
| | | stationCode: null, |
| | | resultText: null, |
| | | resultCode: null, |
| | | sfResult: null, |
| | | productModel: null |
| | | |
| | | }, |
| | | // 表单参数 |
| | | form: {}, |