增加产品模块

ccongli-dev-0823
杨世强 1 year ago
parent cf2d151bb1
commit 16ddbe7ac0

@ -1,5 +1,6 @@
package com.yunxi.scm.module.xxjj.controller.admin.material.vo;
import com.baomidou.mybatisplus.annotation.TableField;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.*;
import java.util.*;
@ -26,8 +27,7 @@ public class MaterialBaseVO {
@NotNull(message = "物料图片不能为空")
private String materialPictures;
@Schema(description = "物料类型id", requiredMode = Schema.RequiredMode.REQUIRED, example = "15479")
@NotNull(message = "物料分类id不能为空")
@Schema(description = "物料类型id", example = "15479")
private Long materialTypeId;
@Schema(description = "行业id", requiredMode = Schema.RequiredMode.REQUIRED, example = "3303")
@ -72,4 +72,13 @@ public class MaterialBaseVO {
@NotNull(message = "物料分类不能为空")
private Long materialCategoryId;
@Schema(description = "产地")
private String materialAddress;
@Schema(description = "物料产品区分")
private String distinct;
@TableField(exist = false)
private String materialCategoryName;
}

@ -90,5 +90,22 @@ public class MaterialDO extends BaseDO {
* id
*/
private Long materialCategoryId;
/**
*
*/
private String materialAddress;
/**
*
*/
private String distinct;
/**
*
*/
@TableField(exist = false)
private String materialCategoryName;
}

@ -1,14 +1,19 @@
package com.yunxi.scm.module.xxjj.service.material;
import cn.hutool.core.util.ObjectUtil;
import com.yunxi.scm.framework.common.pojo.PageResult;
import com.yunxi.scm.module.xxjj.controller.admin.material.vo.MaterialCreateReqVO;
import com.yunxi.scm.module.xxjj.controller.admin.material.vo.MaterialExportReqVO;
import com.yunxi.scm.module.xxjj.controller.admin.material.vo.MaterialPageReqVO;
import com.yunxi.scm.module.xxjj.controller.admin.material.vo.MaterialUpdateReqVO;
import com.yunxi.scm.module.xxjj.dal.dataobject.materialcategory.MaterialCategoryDO;
import com.yunxi.scm.module.xxjj.dal.mysql.materialcategory.MaterialCategoryMapper;
import org.apache.commons.lang3.StringUtils;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import org.springframework.validation.annotation.Validated;
import java.math.BigDecimal;
import java.util.*;
import com.yunxi.scm.module.xxjj.dal.dataobject.material.MaterialDO;
import com.yunxi.scm.module.xxjj.convert.material.MaterialConvert;
@ -29,6 +34,8 @@ public class MaterialServiceImpl implements MaterialService {
@Resource
private MaterialMapper materialMapper;
@Resource
private MaterialCategoryMapper materialCategoryMapper;
@Override
public Long createMaterial(MaterialCreateReqVO createReqVO) {
@ -74,7 +81,35 @@ public class MaterialServiceImpl implements MaterialService {
@Override
public PageResult<MaterialDO> getMaterialPage(MaterialPageReqVO pageReqVO) {
return materialMapper.selectPage(pageReqVO);
PageResult<MaterialDO> material = materialMapper.selectPage(pageReqVO);
List<MaterialDO> materialList = material.getList();
MaterialCategoryDO MCD = new MaterialCategoryDO();
if (materialList != null && materialList.size() > 0){
for (MaterialDO entity : materialList){
String materialCategoryName = "";
MaterialCategoryDO materialCategoryDO = materialCategoryMapper.selectById(entity.getMaterialCategoryId());
MCD = materialCategoryDO;
if (ObjectUtil.isNotEmpty(MCD)){
while (MCD.getParentId() != 0 ) {
materialCategoryName = MCD.getName() + ">" + materialCategoryName;
MCD = materialCategoryMapper.selectById(MCD.getParentId());
if (ObjectUtil.isEmpty(MCD)){
MCD.setParentId((long) 0);
}
}
}
if (StringUtils.isNotEmpty(materialCategoryName)){
materialCategoryName = MCD.getName() + ">" + materialCategoryName;
materialCategoryName = materialCategoryName.substring(0,materialCategoryName.length()-1);
entity.setMaterialCategoryName(materialCategoryName);
}else{
if (ObjectUtil.isNotEmpty(materialCategoryDO)) {
entity.setMaterialCategoryName(materialCategoryDO.getName());
}
}
}
}
return material;
}
@Override

@ -45,24 +45,24 @@ spring:
datasource:
master:
name: yxscm
url: jdbc:mysql://127.0.0.1:3306/${spring.datasource.dynamic.datasource.master.name}?useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true&nullCatalogMeansCurrent=true # MySQL Connector/J 8.X 连接的示例
url: jdbc:mysql://222.71.165.188:3309/${spring.datasource.dynamic.datasource.master.name}?useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true&nullCatalogMeansCurrent=true # MySQL Connector/J 8.X 连接的示例
# url: jdbc:mysql://127.0.0.1:3306/${spring.datasource.dynamic.datasource.master.name}?useSSL=false&allowPublicKeyRetrieval=true&useUnicode=true&characterEncoding=UTF-8&serverTimezone=CTT # MySQL Connector/J 5.X 连接的示例
# url: jdbc:postgresql://127.0.0.1:5432/${spring.datasource.dynamic.datasource.master.name} # PostgreSQL 连接的示例
# url: jdbc:oracle:thin:@127.0.0.1:1521:xe # Oracle 连接的示例
# url: jdbc:sqlserver://127.0.0.1:1433;DatabaseName=${spring.datasource.dynamic.datasource.master.name} # SQLServer 连接的示例
username: yxscm
password: 123456
username: root
password: linus,.123
# username: sa
# password: JSm:g(*%lU4ZAkz06cd52KqT3)i1?H7W
slave: # 模拟从库,可根据自己需要修改
name: yxscm
url: jdbc:mysql://127.0.0.1:3306/${spring.datasource.dynamic.datasource.slave.name}?useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true&nullCatalogMeansCurrent=true # MySQL Connector/J 8.X 连接的示例
url: jdbc:mysql://222.71.165.188:3309/${spring.datasource.dynamic.datasource.slave.name}?useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true&nullCatalogMeansCurrent=true # MySQL Connector/J 8.X 连接的示例
# url: jdbc:mysql://127.0.0.1:3306/${spring.datasource.dynamic.datasource.slave.name}?useSSL=false&allowPublicKeyRetrieval=true&useUnicode=true&characterEncoding=UTF-8&serverTimezone=CTT # MySQL Connector/J 5.X 连接的示例
# url: jdbc:postgresql://127.0.0.1:5432/${spring.datasource.dynamic.datasource.slave.name} # PostgreSQL 连接的示例
# url: jdbc:oracle:thin:@127.0.0.1:1521:xe # Oracle 连接的示例
# url: jdbc:sqlserver://127.0.0.1:1433;DatabaseName=${spring.datasource.dynamic.datasource.slave.name} # SQLServer 连接的示例
username: yxscm
password: 123456
username: root
password: linus,.123
# username: sa
# password: JSm:g(*%lU4ZAkz06cd52KqT3)i1?H7W

@ -5,7 +5,7 @@ ENV = 'development'
VUE_APP_TITLE = 云息供应链管理平台
# 云息供应链管理平台/开发环境
VUE_APP_BASE_API = 'http://localhost:48080'
VUE_APP_BASE_API = 'http://localhost:8091'
# 路由懒加载
VUE_CLI_BABEL_TRANSPILE_MODULES = true

@ -9,37 +9,37 @@
<el-form-item label="物料名称" prop="materialName">
<el-input v-model="queryParams.materialName" placeholder="请输入物料名称" clearable @keyup.enter.native="handleQuery"/>
</el-form-item>
<el-form-item label="物料图片" prop="materialPictures">
<!-- <el-form-item label="物料图片" prop="materialPictures">
<el-input v-model="queryParams.materialPictures" placeholder="请输入物料图片" clearable @keyup.enter.native="handleQuery"/>
</el-form-item>
<el-form-item label="物料类型id" prop="materialTypeId">
</el-form-item> -->
<!-- <el-form-item label="物料类型id" prop="materialTypeId">
<el-input v-model="queryParams.materialTypeId" placeholder="请输入物料类型id" clearable @keyup.enter.native="handleQuery"/>
</el-form-item>
<el-form-item label="行业id" prop="materialIndustryId">
</el-form-item> -->
<!-- <el-form-item label="行业id" prop="materialIndustryId">
<el-input v-model="queryParams.materialIndustryId" placeholder="请输入行业id" clearable @keyup.enter.native="handleQuery"/>
</el-form-item>
<el-form-item label="品牌id" prop="materialBrandId">
</el-form-item> -->
<!-- <el-form-item label="品牌id" prop="materialBrandId">
<el-input v-model="queryParams.materialBrandId" placeholder="请输入品牌id" clearable @keyup.enter.native="handleQuery"/>
</el-form-item>
</el-form-item> -->
<el-form-item label="创建时间" prop="createTime">
<el-date-picker v-model="queryParams.createTime" style="width: 240px" value-format="yyyy-MM-dd HH:mm:ss" type="daterange"
range-separator="-" start-placeholder="开始日期" end-placeholder="结束日期" :default-time="['00:00:00', '23:59:59']" />
</el-form-item>
<el-form-item label="物料英文名称" prop="materialEnglishName">
<!-- <el-form-item label="物料英文名称" prop="materialEnglishName">
<el-input v-model="queryParams.materialEnglishName" placeholder="请输入物料英文名称" clearable @keyup.enter.native="handleQuery"/>
</el-form-item>
<el-form-item label="物料简称" prop="materialAbbreviation">
<el-input v-model="queryParams.materialAbbreviation" placeholder="请输入物料简称" clearable @keyup.enter.native="handleQuery"/>
</el-form-item>
<el-form-item label="物料条码" prop="materialBarcode">
</el-form-item> -->
<!-- <el-form-item label="物料条码" prop="materialBarcode">
<el-input v-model="queryParams.materialBarcode" placeholder="请输入物料条码" clearable @keyup.enter.native="handleQuery"/>
</el-form-item>
<el-form-item label="物料规格" prop="materialSpec">
<el-input v-model="queryParams.materialSpec" placeholder="请输入物料规格" clearable @keyup.enter.native="handleQuery"/>
</el-form-item>
<el-form-item label="物料类目" prop="materialKind">
</el-form-item> -->
<!-- <el-form-item label="物料类目" prop="materialKind">
<el-input v-model="queryParams.materialKind" placeholder="请输入物料类目" clearable @keyup.enter.native="handleQuery"/>
</el-form-item>
</el-form-item> -->
<el-form-item label="存货类型" prop="inventoryType">
<el-select v-model="queryParams.inventoryType" placeholder="请选择存货类型(0原材料 1半成品 2产成品)" clearable size="small">
<el-option v-for="dict in this.getDictDatas(DICT_TYPE.MATERIAL_INVENTORY_TYPE)"
@ -58,9 +58,9 @@
:key="dict.value" :label="dict.label" :value="dict.value"/>
</el-select>
</el-form-item>
<el-form-item label="物料分类id" prop="materialCategoryId">
<!-- <el-form-item label="物料分类id" prop="materialCategoryId">
<el-input v-model="queryParams.materialCategoryId" placeholder="请输入物料分类id" clearable @keyup.enter.native="handleQuery"/>
</el-form-item>
</el-form-item> -->
<el-form-item>
<el-button type="primary" icon="el-icon-search" @click="handleQuery"></el-button>
<el-button icon="el-icon-refresh" @click="resetQuery"></el-button>
@ -80,17 +80,17 @@
<right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
</el-row>
<el-tabs v-model="activeTabs" @tab-click="handleClick">
<!-- <el-tabs v-model="activeTabs" @tab-click="handleClick"> -->
<!-- 全部 -->
<el-tab-pane label="全部" name="all">
<!-- <el-tab-pane label="全部" name="all"> -->
<!-- 列表 -->
<el-table v-loading="loading" :data="list" @selection-change="handleSelectionChange" sortable border custom-column stripe>
<el-table v-loading="loading" :data="list" @selection-change="handleSelectionChange" sortable custom-column stripe :cell-class-name="addSeparate">
<el-table-column type="selection" width="55"></el-table-column>
<!-- <el-table-column label="编号" align="center" prop="id" /> -->
<el-table-column label="物料名称" width="250px" >
<template v-slot="scope">
<div class="material-info">
<img v-if="scope.row.picture" :src="scope.row.picture" class="img-height" />
<ImagePreview :src="scope.row.materialPictures" class="img-height" />
<el-link type="primary" :underline="false" class="message">{{ scope.row.materialName }}</el-link>
</div>
</template>
@ -100,7 +100,7 @@
<el-table-column label="物料类型" align="center" prop="materialTypeId" sortable />
<!-- <el-table-column label="物料行业" align="center" prop="materialIndustryId" /> -->
<el-table-column label="物料规格" align="center" prop="materialSpec" sortable />
<el-table-column label="物料分类" align="center" prop="materialCategoryId" sortable />
<el-table-column label="物料分类" align="center" prop="materialCategoryName" sortable width="200px"/>
<el-table-column label="物料类目" align="center" prop="materialKind" sortable />
<el-table-column label="存货类型" align="center" prop="inventoryType" sortable >
<template v-slot="scope">
@ -139,126 +139,7 @@
</template>
</el-table-column>
</el-table>
</el-tab-pane>
<!-- 已上架 -->
<el-tab-pane label="已上架" name="up">
<!-- 列表 -->
<el-table v-loading="loading" :data="list" @selection-change="handleSelectionChange" sortable custom-column >
<el-table-column type="selection" width="55"></el-table-column>
<!-- <el-table-column label="编号" align="center" prop="id" /> -->
<el-table-column label="物料名称" width="250px" >
<template v-slot="scope">
<div class="material-info">
<img v-if="scope.row.picture" :src="scope.row.picture" class="img-height" />
<el-link type="primary" :underline="false" class="message">{{ scope.row.materialName }}</el-link>
</div>
</template>
</el-table-column>
<!-- <el-table-column label="物料编码" align="center" prop="materialCode" /> -->
<!-- <el-table-column label="物料图片" align="center" prop="materialPictures" /> -->
<el-table-column label="物料类型" align="center" prop="materialTypeId" sortable />
<!-- <el-table-column label="物料行业" align="center" prop="materialIndustryId" /> -->
<el-table-column label="物料规格" align="center" prop="materialSpec" />
<el-table-column label="物料分类" align="center" prop="materialCategoryId" sortable />
<el-table-column label="物料类目" align="center" prop="materialKind" sortable />
<el-table-column label="存货类型" align="center" prop="inventoryType" sortable >
<template v-slot="scope">
<dict-tag :type="DICT_TYPE.MATERIAL_INVENTORY_TYPE" :value="scope.row.inventoryType" />
</template>
</el-table-column>
<el-table-column label="物料状态" align="center" prop="materialState" sortable >
<template v-slot="scope">
<dict-tag :type="DICT_TYPE.MATERIAL_STATUS1" :value="scope.row.materialState" />
</template>
</el-table-column>
<el-table-column label="销售状态" align="center" prop="saleState" sortable >
<template v-slot="scope">
<dict-tag :type="DICT_TYPE.MATERIAL_SALE_STATUS" :value="scope.row.saleState" />
</template>
</el-table-column>
<!-- <el-table-column label="品牌id" align="center" prop="materialBrandId" /> -->
<el-table-column label="创建时间" align="center" prop="createTime" width="180">
<template v-slot="scope">
<span>{{ parseTime(scope.row.createTime) }}</span>
</template>
</el-table-column>
<!-- <el-table-column label="物料英文名称" align="center" prop="materialEnglishName" width="120px"/>
<el-table-column label="物料简称" align="center" prop="materialAbbreviation" />
<el-table-column label="物料条码" align="center" prop="materialBarcode" /> -->
<el-table-column label="操作" align="center" width="200px" class-name="small-padding fixed-width">
<template v-slot="scope">
<el-button size="mini" type="text" icon="el-icon-edit" @click="handleUpdate(scope.row)"
v-hasPermi="['xxjj:material:update']">修改</el-button>
<el-divider direction="vertical"></el-divider>
<el-button size="mini" type="text" icon="el-icon-edit" @click="handleUpOrDown(scope.row)"
>{{scope.row.materialState == 0 ? '下架' : '上架'}}</el-button>
<el-divider direction="vertical"></el-divider>
<el-button size="mini" type="text" icon="el-icon-delete" @click="handleDelete(scope.row)"
v-hasPermi="['xxjj:material:delete']">删除</el-button>
</template>
</el-table-column>
</el-table>
</el-tab-pane>
<!-- 已下架 -->
<el-tab-pane label="已下架" name="down">
<!-- 列表 -->
<el-table v-loading="loading" :data="list" @selection-change="handleSelectionChange" sortable custom-column >
<el-table-column type="selection" width="55"></el-table-column>
<!-- <el-table-column label="编号" align="center" prop="id" /> -->
<el-table-column label="物料名称" width="250px" >
<template v-slot="scope">
<div class="material-info">
<img v-if="scope.row.picture" :src="scope.row.picture" class="img-height" />
<el-link type="primary" :underline="false" class="message">{{ scope.row.materialName }}</el-link>
</div>
</template>
</el-table-column>
<!-- <el-table-column label="物料编码" align="center" prop="materialCode" /> -->
<!-- <el-table-column label="物料图片" align="center" prop="materialPictures" /> -->
<el-table-column label="物料类型" align="center" prop="materialTypeId" sortable />
<!-- <el-table-column label="物料行业" align="center" prop="materialIndustryId" /> -->
<el-table-column label="物料规格" align="center" prop="materialSpec" />
<el-table-column label="物料分类" align="center" prop="materialCategoryId" sortable />
<el-table-column label="物料类目" align="center" prop="materialKind" sortable />
<el-table-column label="存货类型" align="center" prop="inventoryType" sortable >
<template v-slot="scope">
<dict-tag :type="DICT_TYPE.MATERIAL_INVENTORY_TYPE" :value="scope.row.inventoryType" />
</template>
</el-table-column>
<el-table-column label="物料状态" align="center" prop="materialState" sortable >
<template v-slot="scope">
<dict-tag :type="DICT_TYPE.MATERIAL_STATUS1" :value="scope.row.materialState" />
</template>
</el-table-column>
<el-table-column label="销售状态" align="center" prop="saleState" sortable >
<template v-slot="scope">
<dict-tag :type="DICT_TYPE.MATERIAL_SALE_STATUS" :value="scope.row.saleState" />
</template>
</el-table-column>
<!-- <el-table-column label="品牌id" align="center" prop="materialBrandId" /> -->
<el-table-column label="创建时间" align="center" prop="createTime" width="180">
<template v-slot="scope">
<span>{{ parseTime(scope.row.createTime) }}</span>
</template>
</el-table-column>
<!-- <el-table-column label="物料英文名称" align="center" prop="materialEnglishName" width="120px"/>
<el-table-column label="物料简称" align="center" prop="materialAbbreviation" />
<el-table-column label="物料条码" align="center" prop="materialBarcode" /> -->
<el-table-column label="操作" align="center" width="200px" class-name="small-padding fixed-width">
<template v-slot="scope">
<el-button size="mini" type="text" icon="el-icon-edit" @click="handleUpdate(scope.row)"
v-hasPermi="['xxjj:material:update']">修改</el-button>
<el-divider direction="vertical"></el-divider>
<el-button size="mini" type="text" icon="el-icon-edit" @click="handleUpOrDown(scope.row)"
>{{scope.row.materialState == 0 ? '下架' : '上架'}}</el-button>
<el-divider direction="vertical"></el-divider>
<el-button size="mini" type="text" icon="el-icon-delete" @click="handleDelete(scope.row)"
v-hasPermi="['xxjj:material:delete']">删除</el-button>
</template>
</el-table-column>
</el-table>
</el-tab-pane>
</el-tabs>
<!-- </el-tabs> -->
<!-- 分页组件 -->
<pagination v-show="total > 0" :total="total" :page.sync="queryParams.pageNo" :limit.sync="queryParams.pageSize"
@pagination="getList"/>
@ -318,9 +199,11 @@
</el-form-item>
</el-col>
<el-col :span="8">
<!-- <el-form-item label="物料分类id" prop="materialTypeId">
<el-input v-model="form.materialTypeId" placeholder="请输入物料分类id" />
</el-form-item> -->
<el-form-item label="物料类型" prop="materialTypeId">
<el-input v-model="form.materialTypeId" placeholder="请输入物料类型" />
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="物料分类" prop="materialCategoryIds">
<el-cascader v-model="form.materialCategoryIds" placeholder="物料分类" style="width: 100%"
:options="categoryList" :props="propName" clearable/>
@ -367,12 +250,14 @@
import { createMaterial, updateMaterial, deleteMaterial, getMaterial, getMaterialPage, exportMaterialExcel } from "@/api/xxjj/material";
import {MaterialStatusEnum} from "@/utils/constants";
import ImageUpload from "@/components/ImageUpload";
import ImagePreview from "@/components/ImagePreview";
import {listMaterialCategory} from "@/api/xxjj/material/materialCategory";
export default {
name: "Material",
components: {
ImageUpload
ImageUpload,
ImagePreview
},
data() {
return {
@ -422,6 +307,11 @@ export default {
},
//
form: {},
addSeparate(row) {
if (row.columnIndex == 0 || row.columnIndex == 1 || row.columnIndex == 9) {
return "separator-border"
}
},
//
rules: {
materialCategoryIds: [{required: true, message: "物料分类不能为空", trigger: "blur"},],
@ -450,6 +340,7 @@ export default {
//
listMaterialCategory().then((response) => {
this.categoryList = this.handleTree(response.data, "id", "parentId");
debugger
});
},
// ,
@ -514,16 +405,7 @@ export default {
//
getMaterialPage(this.queryParams).then(response => {
this.list = response.data.list;
this.list.forEach((item,index) => {
if (item.materialPictures instanceof Array) {
item.picture = item.materialPictures.flatMap(m => m.split(','))
} else if (item.materialPictures.split(',') instanceof Array) {
item.picture = item.materialPictures.split(',').flatMap(m => m.split(','))
} else {
item.picture = Array.of(item.materialPictures)
}
item.picture = item.picture[0];
})
debugger
this.total = response.data.total;
this.loading = false;
});
@ -588,10 +470,10 @@ export default {
if (!valid) {
return;
}
debugger
let form = this.form
let category = form.materialCategoryIds instanceof Array ? form.materialCategoryIds: Array.of(form.materialCategoryIds)
console.log(category)
this.form.materialCategoryId = category[category.length - 1];
this.form.distinct = 0
//
if (this.form.id != null) {
updateMaterial(this.form).then(response => {
@ -642,6 +524,9 @@ export default {
margin-left: 10px;
}
.separator-border {
border-right: 1px solid #eeeff2!important;
}
.material-info {
display: flex;

@ -0,0 +1,667 @@
<template>
<div class="app-container">
<!-- 搜索工作栏 -->
<el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" label-width="68px">
<el-form-item label="物料编码" prop="materialCode">
<el-input v-model="queryParams.materialCode" placeholder="请输入物料编码" clearable @keyup.enter.native="handleQuery"/>
</el-form-item>
<el-form-item label="物料名称" prop="materialName">
<el-input v-model="queryParams.materialName" placeholder="请输入物料名称" clearable @keyup.enter.native="handleQuery"/>
</el-form-item>
<!-- <el-form-item label="物料图片" prop="materialPictures">
<el-input v-model="queryParams.materialPictures" placeholder="请输入物料图片" clearable @keyup.enter.native="handleQuery"/>
</el-form-item> -->
<!-- <el-form-item label="物料类型id" prop="materialTypeId">
<el-input v-model="queryParams.materialTypeId" placeholder="请输入物料类型id" clearable @keyup.enter.native="handleQuery"/>
</el-form-item> -->
<!-- <el-form-item label="行业id" prop="materialIndustryId">
<el-input v-model="queryParams.materialIndustryId" placeholder="请输入行业id" clearable @keyup.enter.native="handleQuery"/>
</el-form-item> -->
<!-- <el-form-item label="品牌id" prop="materialBrandId">
<el-input v-model="queryParams.materialBrandId" placeholder="请输入品牌id" clearable @keyup.enter.native="handleQuery"/>
</el-form-item> -->
<el-form-item label="创建时间" prop="createTime">
<el-date-picker v-model="queryParams.createTime" style="width: 240px" value-format="yyyy-MM-dd HH:mm:ss" type="daterange"
range-separator="-" start-placeholder="开始日期" end-placeholder="结束日期" :default-time="['00:00:00', '23:59:59']" />
</el-form-item>
<!-- <el-form-item label="物料英文名称" prop="materialEnglishName">
<el-input v-model="queryParams.materialEnglishName" placeholder="请输入物料英文名称" clearable @keyup.enter.native="handleQuery"/>
</el-form-item>
<el-form-item label="物料简称" prop="materialAbbreviation">
<el-input v-model="queryParams.materialAbbreviation" placeholder="请输入物料简称" clearable @keyup.enter.native="handleQuery"/>
</el-form-item> -->
<!-- <el-form-item label="物料条码" prop="materialBarcode">
<el-input v-model="queryParams.materialBarcode" placeholder="请输入物料条码" clearable @keyup.enter.native="handleQuery"/>
</el-form-item>
<el-form-item label="物料规格" prop="materialSpec">
<el-input v-model="queryParams.materialSpec" placeholder="请输入物料规格" clearable @keyup.enter.native="handleQuery"/>
</el-form-item> -->
<!-- <el-form-item label="物料类目" prop="materialKind">
<el-input v-model="queryParams.materialKind" placeholder="请输入物料类目" clearable @keyup.enter.native="handleQuery"/>
</el-form-item> -->
<el-form-item label="存货类型" prop="inventoryType">
<el-select v-model="queryParams.inventoryType" placeholder="请选择存货类型(0原材料 1半成品 2产成品)" clearable size="small">
<el-option v-for="dict in this.getDictDatas(DICT_TYPE.MATERIAL_INVENTORY_TYPE)"
:key="dict.value" :label="dict.label" :value="dict.value"/>
</el-select>
</el-form-item>
<el-form-item label="物料状态" prop="materialState">
<el-select v-model="queryParams.materialState" placeholder="请选择物料状态(0上架 1下架)" clearable size="small">
<el-option v-for="dict in this.getDictDatas(DICT_TYPE.MATERIAL_STATUS1)"
:key="dict.value" :label="dict.label" :value="dict.value"/>
</el-select>
</el-form-item>
<el-form-item label="销售状态" prop="saleState">
<el-select v-model="queryParams.saleState" placeholder="请选择销售状态(0销售中 1已售罄 2仓库中)" clearable size="small">
<el-option v-for="dict in this.getDictDatas(DICT_TYPE.MATERIAL_SALE_STATUS)"
:key="dict.value" :label="dict.label" :value="dict.value"/>
</el-select>
</el-form-item>
<!-- <el-form-item label="物料分类id" prop="materialCategoryId">
<el-input v-model="queryParams.materialCategoryId" placeholder="请输入物料分类id" clearable @keyup.enter.native="handleQuery"/>
</el-form-item> -->
<el-form-item>
<el-button type="primary" icon="el-icon-search" @click="handleQuery"></el-button>
<el-button icon="el-icon-refresh" @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="['xxjj:material:create']">新增</el-button>
</el-col>
<el-col :span="1.5">
<el-button type="warning" plain icon="el-icon-download" size="mini" @click="handleExport" :loading="exportLoading"
v-hasPermi="['xxjj:material:export']">导出</el-button>
</el-col>
<right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
</el-row>
<el-tabs v-model="activeTabs" @tab-click="handleClick">
<!-- 全部 -->
<el-tab-pane label="全部" name="all">
<!-- 列表 -->
<el-table v-loading="loading" :data="list" @selection-change="handleSelectionChange" sortable custom-column stripe :cell-class-name="addSeparate">
<el-table-column type="selection" width="55"></el-table-column>
<!-- <el-table-column label="编号" align="center" prop="id" /> -->
<el-table-column label="产品名称" width="250px" >
<template v-slot="scope">
<div class="material-info">
<ImagePreview :src="scope.row.materialPictures" class="img-height" />
<el-link type="primary" :underline="false" class="message">{{ scope.row.materialName }}</el-link>
</div>
</template>
</el-table-column>
<!-- <el-table-column label="物料编码" align="center" prop="materialCode" /> -->
<!-- <el-table-column label="物料图片" align="center" prop="materialPictures" /> -->
<el-table-column label="产品类型" align="center" prop="materialTypeId" sortable />
<!-- <el-table-column label="物料行业" align="center" prop="materialIndustryId" /> -->
<!-- <el-table-column label="物料规格" align="center" prop="materialSpec" sortable /> -->
<el-table-column label="产品分类" align="center" prop="materialCategoryId" sortable />
<el-table-column label="产品类目" align="center" prop="materialKind" sortable />
<el-table-column label="存货类型" align="center" prop="inventoryType" sortable >
<template v-slot="scope">
<dict-tag :type="DICT_TYPE.MATERIAL_INVENTORY_TYPE" :value="scope.row.inventoryType" />
</template>
</el-table-column>
<el-table-column label="状态" align="center" prop="materialState" sortable >
<template v-slot="scope">
<dict-tag :type="DICT_TYPE.MATERIAL_STATUS1" :value="scope.row.materialState" />
</template>
</el-table-column>
<el-table-column label="销售状态" align="center" prop="saleState" sortable >
<template v-slot="scope">
<dict-tag :type="DICT_TYPE.MATERIAL_SALE_STATUS" :value="scope.row.saleState" />
</template>
</el-table-column>
<!-- <el-table-column label="品牌id" align="center" prop="materialBrandId" /> -->
<el-table-column label="创建时间" align="center" prop="createTime" width="180">
<template v-slot="scope">
<span>{{ parseTime(scope.row.createTime) }}</span>
</template>
</el-table-column>
<!-- <el-table-column label="物料英文名称" align="center" prop="materialEnglishName" width="120px"/>
<el-table-column label="物料简称" align="center" prop="materialAbbreviation" />
<el-table-column label="物料条码" align="center" prop="materialBarcode" /> -->
<el-table-column label="操作" align="center" width="200px" class-name="small-padding fixed-width" fixed="right">
<template v-slot="scope">
<el-button size="mini" type="text" icon="el-icon-edit" @click="handleUpdate(scope.row)"
v-hasPermi="['xxjj:material:update']">修改</el-button>
<el-divider direction="vertical"></el-divider>
<el-button size="mini" type="text" icon="el-icon-edit" @click="handleUpOrDown(scope.row)"
>{{scope.row.materialState == 0 ? '下架' : '上架'}}</el-button>
<el-divider direction="vertical"></el-divider>
<el-button size="mini" type="text" icon="el-icon-delete" @click="handleDelete(scope.row)"
v-hasPermi="['xxjj:material:delete']">删除</el-button>
</template>
</el-table-column>
</el-table>
</el-tab-pane>
<!-- 已上架 -->
<el-tab-pane label="已上架" name="up">
<!-- 列表 -->
<el-table v-loading="loading" :data="list" @selection-change="handleSelectionChange" sortable custom-column :cell-class-name="addSeparate">
<el-table-column type="selection" width="55"></el-table-column>
<!-- <el-table-column label="编号" align="center" prop="id" /> -->
<el-table-column label="产品名称" width="250px" >
<template v-slot="scope">
<div class="material-info">
<ImagePreview :src="scope.row.materialPictures" class="img-height" />
<el-link type="primary" :underline="false" class="message">{{ scope.row.materialName }}</el-link>
</div>
</template>
</el-table-column>
<!-- <el-table-column label="物料编码" align="center" prop="materialCode" /> -->
<!-- <el-table-column label="物料图片" align="center" prop="materialPictures" /> -->
<el-table-column label="产品类型" align="center" prop="materialTypeId" sortable />
<!-- <el-table-column label="物料行业" align="center" prop="materialIndustryId" /> -->
<!-- <el-table-column label="物料规格" align="center" prop="materialSpec" /> -->
<el-table-column label="产品分类" align="center" prop="materialCategoryId" sortable />
<el-table-column label="产品类目" align="center" prop="materialKind" sortable />
<el-table-column label="存货类型" align="center" prop="inventoryType" sortable >
<template v-slot="scope">
<dict-tag :type="DICT_TYPE.MATERIAL_INVENTORY_TYPE" :value="scope.row.inventoryType" />
</template>
</el-table-column>
<el-table-column label="状态" align="center" prop="materialState" sortable >
<template v-slot="scope">
<dict-tag :type="DICT_TYPE.MATERIAL_STATUS1" :value="scope.row.materialState" />
</template>
</el-table-column>
<el-table-column label="销售状态" align="center" prop="saleState" sortable >
<template v-slot="scope">
<dict-tag :type="DICT_TYPE.MATERIAL_SALE_STATUS" :value="scope.row.saleState" />
</template>
</el-table-column>
<!-- <el-table-column label="品牌id" align="center" prop="materialBrandId" /> -->
<el-table-column label="创建时间" align="center" prop="createTime" width="180">
<template v-slot="scope">
<span>{{ parseTime(scope.row.createTime) }}</span>
</template>
</el-table-column>
<!-- <el-table-column label="物料英文名称" align="center" prop="materialEnglishName" width="120px"/>
<el-table-column label="物料简称" align="center" prop="materialAbbreviation" />
<el-table-column label="物料条码" align="center" prop="materialBarcode" /> -->
<el-table-column label="操作" align="center" width="200px" class-name="small-padding fixed-width">
<template v-slot="scope">
<el-button size="mini" type="text" icon="el-icon-edit" @click="handleUpdate(scope.row)"
v-hasPermi="['xxjj:material:update']">修改</el-button>
<el-divider direction="vertical"></el-divider>
<el-button size="mini" type="text" icon="el-icon-edit" @click="handleUpOrDown(scope.row)"
>{{scope.row.materialState == 0 ? '下架' : '上架'}}</el-button>
<el-divider direction="vertical"></el-divider>
<el-button size="mini" type="text" icon="el-icon-delete" @click="handleDelete(scope.row)"
v-hasPermi="['xxjj:material:delete']">删除</el-button>
</template>
</el-table-column>
</el-table>
</el-tab-pane>
<!-- 已下架 -->
<el-tab-pane label="已下架" name="down">
<!-- 列表 -->
<el-table v-loading="loading" :data="list" @selection-change="handleSelectionChange" sortable custom-column :cell-class-name="addSeparate">
<el-table-column type="selection" width="55"></el-table-column>
<!-- <el-table-column label="编号" align="center" prop="id" /> -->
<el-table-column label="产品名称" width="250px" >
<template v-slot="scope">
<div class="material-info">
<ImagePreview :src="scope.row.materialPictures" class="img-height" />
<el-link type="primary" :underline="false" class="message">{{ scope.row.materialName }}</el-link>
</div>
</template>
</el-table-column>
<!-- <el-table-column label="物料编码" align="center" prop="materialCode" /> -->
<!-- <el-table-column label="物料图片" align="center" prop="materialPictures" /> -->
<el-table-column label="产品类型" align="center" prop="materialTypeId" sortable />
<!-- <el-table-column label="物料行业" align="center" prop="materialIndustryId" /> -->
<!-- <el-table-column label="物料规格" align="center" prop="materialSpec" /> -->
<el-table-column label="产品分类" align="center" prop="materialCategoryId" sortable />
<el-table-column label="产品类目" align="center" prop="materialKind" sortable />
<el-table-column label="存货类型" align="center" prop="inventoryType" sortable >
<template v-slot="scope">
<dict-tag :type="DICT_TYPE.MATERIAL_INVENTORY_TYPE" :value="scope.row.inventoryType" />
</template>
</el-table-column>
<el-table-column label="物料状态" align="center" prop="materialState" sortable >
<template v-slot="scope">
<dict-tag :type="DICT_TYPE.MATERIAL_STATUS1" :value="scope.row.materialState" />
</template>
</el-table-column>
<el-table-column label="销售状态" align="center" prop="saleState" sortable >
<template v-slot="scope">
<dict-tag :type="DICT_TYPE.MATERIAL_SALE_STATUS" :value="scope.row.saleState" />
</template>
</el-table-column>
<!-- <el-table-column label="品牌id" align="center" prop="materialBrandId" /> -->
<el-table-column label="创建时间" align="center" prop="createTime" width="180">
<template v-slot="scope">
<span>{{ parseTime(scope.row.createTime) }}</span>
</template>
</el-table-column>
<!-- <el-table-column label="物料英文名称" align="center" prop="materialEnglishName" width="120px"/>
<el-table-column label="物料简称" align="center" prop="materialAbbreviation" />
<el-table-column label="物料条码" align="center" prop="materialBarcode" /> -->
<el-table-column label="操作" align="center" width="200px" class-name="small-padding fixed-width">
<template v-slot="scope">
<el-button size="mini" type="text" icon="el-icon-edit" @click="handleUpdate(scope.row)"
v-hasPermi="['xxjj:material:update']">修改</el-button>
<el-divider direction="vertical"></el-divider>
<el-button size="mini" type="text" icon="el-icon-edit" @click="handleUpOrDown(scope.row)"
>{{scope.row.materialState == 0 ? '下架' : '上架'}}</el-button>
<el-divider direction="vertical"></el-divider>
<el-button size="mini" type="text" icon="el-icon-delete" @click="handleDelete(scope.row)"
v-hasPermi="['xxjj:material:delete']">删除</el-button>
</template>
</el-table-column>
</el-table>
</el-tab-pane>
</el-tabs>
<!-- 分页组件 -->
<pagination v-show="total > 0" :total="total" :page.sync="queryParams.pageNo" :limit.sync="queryParams.pageSize"
@pagination="getList"/>
<!-- 对话框(添加 / 修改) -->
<el-dialog :title="title" :visible.sync="open" width="1300px" v-dialogDrag append-to-body>
<el-form ref="form" :model="form" :rules="rules" label-width="100px" style="width: 95%">
<el-row :gutter="15" class="">
<template v-if="!loading">
<el-col :span="24">
<el-form-item label="产品图片" prop="materialPictures">
<ImageUpload v-model="form.materialPictures" :value="form.materialPictures" :limit="10" class="mall-image"/>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="产品编码" prop="materialCode">
<!-- <div class="itemName">物料编码</div> -->
<el-input v-model="form.materialCode" placeholder="请输入物料编码" />
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="产品名称" prop="materialName">
<el-input v-model="form.materialName" placeholder="请输入物料名称" />
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="产品简称" prop="materialAbbreviation">
<el-input v-model="form.materialAbbreviation" placeholder="请输入物料简称" />
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="产品英文名称" prop="materialEnglishName">
<el-input v-model="form.materialEnglishName" placeholder="请输入物料英文名称" />
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="产品条码" prop="materialBarcode">
<el-input v-model="form.materialBarcode" placeholder="请输入物料条码" />
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="产品规格" prop="materialSpec">
<el-input v-model="form.materialSpec" placeholder="请输入物料规格" />
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="存货类型" prop="inventoryType">
<el-select v-model="form.inventoryType" placeholder="请选择存货类型(0原材料 1半成品 2产成品)">
<el-option v-for="dict in this.getDictDatas(DICT_TYPE.MATERIAL_INVENTORY_TYPE)"
:key="dict.value" :label="dict.label" :value="dict.value" />
</el-select>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="品牌" prop="materialBrandId">
<el-input v-model="form.materialBrandId" placeholder="请输入品牌" />
</el-form-item>
</el-col>
<el-col :span="8">
<!-- <el-form-item label="物料分类id" prop="materialTypeId">
<el-input v-model="form.materialTypeId" placeholder="请输入物料分类id" />
</el-form-item> -->
<el-form-item label="产品分类" prop="materialCategoryIds">
<el-cascader v-model="form.materialCategoryIds" placeholder="物料分类" style="width: 100%"
:options="categoryList" :props="propName" clearable/>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="产品类目" prop="materialKind">
<el-input v-model="form.materialKind" placeholder="请输入物料类目" />
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="行业id" prop="materialIndustryId">
<el-input v-model="form.materialIndustryId" placeholder="请输入行业id" />
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="物料状态" prop="materialState">
<el-select v-model="form.materialState" placeholder="请选择物料状态(0上架 1下架)">
<el-option v-for="dict in this.getDictDatas(DICT_TYPE.MATERIAL_STATUS1)"
:key="dict.value" :label="dict.label" :value="dict.value" />
</el-select>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="销售状态" prop="saleState">
<el-select v-model="form.saleState" placeholder="请选择销售状态(0销售中 1已售罄 2仓库中)">
<el-option v-for="dict in this.getDictDatas(DICT_TYPE.MATERIAL_SALE_STATUS)"
:key="dict.value" :label="dict.label" :value="dict.value" />
</el-select>
</el-form-item>
</el-col>
</template>
</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 { createMaterial, updateMaterial, deleteMaterial, getMaterial, getMaterialPage, exportMaterialExcel } from "@/api/xxjj/material";
import {MaterialStatusEnum} from "@/utils/constants";
import ImageUpload from "@/components/ImageUpload";
import ImagePreview from "@/components/ImagePreview";
import {listMaterialCategory} from "@/api/xxjj/material/materialCategory";
export default {
name: "Material",
components: {
ImageUpload,
ImagePreview
},
data() {
return {
picture: "",
categoryList: [],
activeTabs: "all",
propName: {
checkStrictly: true,
label: "name",
value: "id",
},
//
loading: true,
//
exportLoading: false,
//
showSearch: true,
//
total: 0,
//
list: [],
//
title: "",
//
open: false,
//
queryParams: {
pageNo: 1,
pageSize: 10,
materialCode: null,
materialName: null,
materialPictures: null,
materialTypeId: null,
materialIndustryId: null,
materialBrandId: null,
createTime: [],
materialEnglishName: null,
materialAbbreviation: null,
materialBarcode: null,
materialSpec: null,
materialKind: null,
inventoryType: null,
materialState: null,
saleState: null,
materialCategoryId: null,
materialCategoryIds: null,
},
//
form: {},
addSeparate(row) {
if (row.columnIndex == 0 || row.columnIndex == 1 || row.columnIndex == 8) {
return "separator-border"
}
},
//
rules: {
materialCategoryIds: [{required: true, message: "物料分类不能为空", trigger: "blur"},],
materialCode: [{ required: true, message: "物料编码不能为空", trigger: "blur" }],
materialName: [{ required: true, message: "物料名称不能为空", trigger: "blur" }],
materialPictures: [{ required: true, message: "物料图片不能为空", trigger: "blur" }],
// materialTypeId: [{ required: true, message: "id", trigger: "blur" }],
materialIndustryId: [{ required: true, message: "行业id不能为空", trigger: "blur" }],
materialBrandId: [{ required: true, message: "品牌id不能为空", trigger: "blur" }],
materialBarcode: [{ required: true, message: "物料条码不能为空", trigger: "blur" }],
materialSpec: [{ required: true, message: "物料规格不能为空", trigger: "blur" }],
materialKind: [{ required: true, message: "物料类目不能为空", trigger: "blur" }],
inventoryType: [{ required: true, message: "存货类型(0原材料 1半成品 2产成品)不能为空", trigger: "change" }],
materialState: [{ required: true, message: "物料状态(0上架 1下架)不能为空", trigger: "change" }],
saleState: [{ required: true, message: "销售状态(0销售中 1已售罄 2仓库中)不能为空", trigger: "change" }],
}
};
},
created() {
this.getList();
this.getListCategory();
},
methods: {
/** 查询分类 */
getListCategory() {
//
listMaterialCategory().then((response) => {
this.categoryList = this.handleTree(response.data, "id", "parentId");
});
},
// ,
handleUpOrDown(row) {
if (row.materialState == 1) {
this.$confirm('你确定要上架该商品吗', '提示', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning'
}).then(async () => {
try {
row.materialState = 0
updateMaterial(row).then(response => {
this.$modal.msgSuccess("上架成功");
this.open = false;
this.getList();
});
} catch (err) {
this.$message.error('上架失败')
}
})
} else if (row.materialState == 0) {
this.$confirm('你确定要下架该商品吗', '提示', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning'
}).then(async () => {
try {
row.materialState = 1
updateMaterial(row).then(response => {
this.$modal.msgSuccess("下架成功");
this.open = false;
this.getList();
});
} catch (err) {
this.$message.error('下架失败')
}
})
}
},
//
handleSelectionChange(val) {
this.multipleSelection = val;
},
// tab
handleClick(val) {
if (val.name === "all") {
this.queryParams.materialState = undefined;
this.queryParams.alarmStock = undefined;
} else if (val.name === "up") {
this.queryParams.materialState = MaterialStatusEnum.UP.status;
this.queryParams.alarmStock = undefined;
} else if (val.name === "down") {
this.queryParams.materialState = MaterialStatusEnum.DOWN.status;
this.queryParams.alarmStock = undefined;
}
this.getList();
},
/** 查询列表 */
getList() {
this.loading = true;
//
getMaterialPage(this.queryParams).then(response => {
this.list = response.data.list;
this.total = response.data.total;
this.loading = false;
});
},
/** 取消按钮 */
cancel() {
this.open = false;
this.reset();
},
/** 表单重置 */
reset() {
this.form = {
id: undefined,
materialCode: undefined,
materialName: undefined,
materialPictures: undefined,
materialTypeId: undefined,
materialIndustryId: undefined,
materialEnglishName: undefined,
materialAbbreviation: undefined,
materialBarcode: undefined,
materialSpec: undefined,
materialKind: undefined,
inventoryType: undefined,
materialState: undefined,
saleState: undefined,
materialCategoryId: undefined,
materialCategoryIds: undefined,
};
this.resetForm("form");
},
/** 搜索按钮操作 */
handleQuery() {
this.queryParams.pageNo = 1;
this.getList();
},
/** 重置按钮操作 */
resetQuery() {
this.resetForm("queryForm");
this.handleQuery();
},
/** 新增按钮操作 */
handleAdd() {
this.reset();
this.open = true;
this.title = "添加物料";
},
/** 修改按钮操作 */
handleUpdate(row) {
this.reset();
const id = row.id;
getMaterial(id).then(response => {
this.form = response.data;
this.form.materialCategoryIds = this.form.materialCategoryId
this.open = true;
this.title = "修改物料";
});
},
/** 提交按钮 */
submitForm() {
this.$refs["form"].validate(valid => {
if (!valid) {
return;
}
let form = this.form
let category = form.materialCategoryIds instanceof Array ? form.materialCategoryIds: Array.of(form.materialCategoryIds)
this.form.materialCategoryId = category[category.length - 1];
this.form.distinct = 1
//
if (this.form.id != null) {
updateMaterial(this.form).then(response => {
this.$modal.msgSuccess("修改成功");
this.open = false;
this.getList();
});
return;
}
//
createMaterial(this.form).then(response => {
this.$modal.msgSuccess("新增成功");
this.open = false;
this.getList();
});
});
},
/** 删除按钮操作 */
handleDelete(row) {
const id = row.id;
this.$modal.confirm('是否确认删除物料编号为"' + id + '"的数据项?').then(function() {
return deleteMaterial(id);
}).then(() => {
this.getList();
this.$modal.msgSuccess("删除成功");
}).catch(() => {});
},
/** 导出按钮操作 */
handleExport() {
//
let params = {...this.queryParams};
params.pageNo = undefined;
params.pageSize = undefined;
this.$modal.confirm('是否确认导出所有物料数据项?').then(() => {
this.exportLoading = true;
return exportMaterialExcel(params);
}).then(response => {
this.$download.excel(response, '物料.xls');
this.exportLoading = false;
}).catch(() => {});
}
}
};
</script>
<style lang="scss">
.app-container {
.el-tag + .el-tag {
margin-left: 10px;
}
.separator-border {
border-right: 1px solid #eeeff2!important;
}
.material-info {
display: flex;
.img-height {
height: 50px;
width: 50px;
}
.message {
margin-left: 10px;
text-overflow: ellipsis;
display: -webkit-box;
-webkit-line-clamp: 2;
word-break: break-all;
-webkit-box-orient: vertical;
white-space: normal;
overflow: hidden;
height: 50px;
line-height: 25px;
}
}
}
</style>

@ -0,0 +1,265 @@
<template>
<div class="app-container">
<el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch">
<el-form-item label="分类名称" prop="name">
<el-input v-model="queryParams.name" placeholder="请输入分类名称" clearable @keyup.enter.native="handleQuery"/>
</el-form-item>
<el-form-item>
<el-button type="primary" icon="el-icon-search" @click="handleQuery"></el-button>
<el-button icon="el-icon-refresh" @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="['xxjj:materialCategory:create']">新增</el-button>
</el-col>
<el-col :span="1.5">
<el-button type="info" plain icon="el-icon-sort" size="mini" @click="toggleExpandAll">/</el-button>
</el-col>
<right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
</el-row>
<el-table v-if="refreshTable" v-loading="loading" :data="materialCategoryList" row-key="id" :default-expand-all="isExpandAll"
:tree-props="{children: 'children', hasChildren: 'hasChildren'}">
<el-table-column prop="name" label="分类名称" width="260"></el-table-column>
<el-table-column prop="sort" label="排序" width="200"></el-table-column>
<el-table-column label="创建时间" align="center" prop="createTime" width="200">
<template v-slot="scope">
<span>{{ parseTime(scope.row.createTime) }}</span>
</template>
</el-table-column>
<el-table-column label="操作" align="center" class-name="small-padding fixed-width">
<template v-slot="scope">
<el-button size="mini" type="text" icon="el-icon-edit" @click="handleUpdate(scope.row)"
v-hasPermi="['xxjj:materialCategory:update']">修改</el-button>
<el-button size="mini" type="text" icon="el-icon-plus" @click="handleAdd(scope.row)"
v-hasPermi="['xxjj:materialCategory:create']">新增</el-button>
<el-button v-if="scope.row.parentId !== 0" size="mini" type="text" icon="el-icon-delete"
@click="handleDelete(scope.row)" v-hasPermi="['xxjj:materialCategory:delete']">删除</el-button>
</template>
</el-table-column>
</el-table>
<!-- 添加或修改分类对话框 -->
<el-dialog :title="title" :visible.sync="open" width="600px" append-to-body>
<el-form ref="form" :model="form" :rules="rules" label-width="80px">
<el-row>
<el-col :span="24">
<el-form-item label="上级分类" prop="parentId">
<treeselect v-model="form.parentId" :options="materialCategoryOptions" :normalizer="normalizer" placeholder="选择上级分类" />
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="分类名称" prop="name">
<el-input v-model="form.name" placeholder="请输入分类名称" />
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="显示排序" prop="sort">
<el-input-number v-model="form.sort" controls-position="right" :min="0" />
</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 { listMaterialCategory, getMaterialCategory, delMaterialCategory, addMaterialCategory, updateMaterialCategory } from "@/api/xxjj/materialCategory";
import Treeselect from "@riophae/vue-treeselect";
import "@riophae/vue-treeselect/dist/vue-treeselect.css";
import {CommonStatusEnum} from '@/utils/constants'
import { getDictDatas, DICT_TYPE } from '@/utils/dict'
import {listSimpleUsers} from "@/api/system/user";
export default {
name: "MaterialCategory",
components: { Treeselect },
data() {
return {
//
loading: true,
//
showSearch: true,
//
materialCategoryList: [],
//
materialCategoryOptions: [],
//
users: [],
//
title: "",
//
open: false,
//
isExpandAll: true,
//
refreshTable: true,
//
expand: false,
//
queryParams: {
name: undefined,
status: undefined
},
//
form: {},
//
rules: {
name: [
{ required: true, message: "部门名称不能为空", trigger: "blur" }
],
sort: [
{ required: true, message: "显示排序不能为空", trigger: "blur" }
],
email: [
{
type: "email",
message: "'请输入正确的邮箱地址",
trigger: ["blur", "change"]
}
],
phone: [
{
pattern: /^(?:(?:\+|00)86)?1(?:3[\d]|4[5-79]|5[0-35-9]|6[5-7]|7[0-8]|8[\d]|9[189])\d{8}$/,
message: "请输入正确的手机号码",
trigger: "blur"
}
],
status: [
{ required: true, message: "状态不能为空", trigger: "blur" }
]
},
//
CommonStatusEnum: CommonStatusEnum,
//
statusDictDatas: getDictDatas(DICT_TYPE.COMMON_STATUS)
};
},
created() {
this.getList();
//
listSimpleUsers().then(response => {
this.users = response.data;
});
},
methods: {
/** 查询部门列表 */
getList() {
this.loading = true;
listMaterialCategory(this.queryParams).then(response => {
this.materialCategoryList = this.handleTree(response.data, "id");
this.loading = false;
});
},
/** 转换部门数据结构 */
normalizer(node) {
if (node.children && !node.children.length) {
delete node.children;
}
return {
id: node.id,
label: node.name,
children: node.children
};
},
//
cancel() {
this.open = false;
this.reset();
},
//
reset() {
this.form = {
id: undefined,
parentId: undefined,
name: undefined,
sort: undefined,
};
this.resetForm("form");
},
/** 搜索按钮操作 */
handleQuery() {
this.getList();
},
/** 重置按钮操作 */
resetQuery() {
this.resetForm("queryForm");
this.handleQuery();
},
/** 新增按钮操作 */
handleAdd(row) {
this.reset();
if (row !== undefined) {
this.form.parentId = row.id;
}
this.open = true;
this.title = "添加分类";
listMaterialCategory().then(response => {
this.materialCategoryOptions = this.handleTree(response.data, "id");
});
},
/** 展开/折叠操作 */
toggleExpandAll() {
this.refreshTable = false;
this.isExpandAll = !this.isExpandAll;
this.$nextTick(() => {
this.refreshTable = true;
});
},
/** 修改按钮操作 */
handleUpdate(row) {
this.reset();
getMaterialCategory(row.id).then(response => {
this.form = response.data;
if (this.form.parentId === 0) { // undefined Unknown
this.form.parentId = undefined;
}
this.open = true;
this.title = "修改分类";
});
listMaterialCategory(row.id).then(response => {
this.materialCategoryOptions = this.handleTree(response.data, "id");
});
},
/** 提交按钮 */
submitForm: function() {
this.$refs["form"].validate(valid => {
if (valid) {
if (this.form.id !== undefined) {
updateMaterialCategory(this.form).then(response => {
this.$modal.msgSuccess("修改成功");
this.open = false;
this.getList();
});
} else {
addMaterialCategory(this.form).then(response => {
this.$modal.msgSuccess("新增成功");
this.open = false;
this.getList();
});
}
}
});
},
/** 删除按钮操作 */
handleDelete(row) {
this.$modal.confirm('是否确认删除名称为"' + row.name + '"的数据项?').then(function() {
return delMaterialCategory(row.id);
}).then(() => {
this.getList();
this.$modal.msgSuccess("删除成功");
}).catch(() => {});
}
}
};
</script>

File diff suppressed because it is too large Load Diff
Loading…
Cancel
Save