lanan-system-vue/src/views/repair/wares/WaresForm.vue
2024-09-18 14:12:35 +08:00

347 lines
12 KiB
Vue
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<template>
<div class="app-container">
<!-- 对话框(添加 / 修改) -->
<el-dialog :title="dialogTitle" :visible.sync="dialogVisible" width="50%" v-dialogDrag append-to-body>
<el-form ref="formRef" :model="formData" :rules="formRules" v-loading="formLoading" label-width="100px">
<el-collapse v-model="activeNames">
<!--基本信息-->
<el-collapse-item title="商品基本信息" name="1">
<el-row :gutter="20">
<el-col :span="12">
<el-form-item label="条形码" prop="barCode">
<el-input v-model="formData.barCode" placeholder="请输入条形码"/>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="商品编码" prop="code">
<el-input v-model="formData.code" placeholder="请输入商品编码"/>
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="20">
<el-col :span="12">
<el-form-item label="商品名称" prop="name">
<el-input v-model="formData.name" placeholder="请输入商品名称"/>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="规格型号" prop="model">
<el-input v-model="formData.model" placeholder="请输入规格型号"/>
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="20">
<el-col :span="12">
<el-form-item label="所属分类" prop="type">
<TreeSelect
v-model="formData.type"
:options="baseTypeTree"
:normalizer="normalizer"
placeholder="请选择所属分类"
/>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="计量单位" prop="unit">
<el-select v-model="formData.unit" placeholder="请选择单位">
<el-option v-for="dict in this.getDictDatas(DICT_TYPE.REPAIR_UNIT)"
:key="dict.value" :label="dict.label" :value="dict.value"/>
</el-select>
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="20">
<el-col :span="12">
<el-form-item label="销售价格" prop="price">
<el-input-number v-model="formData.price" :precision="2" :step="0.1" :max="10"></el-input-number>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="默认仓库" prop="warehouse">
<TreeSelect
v-model="formData.warehouse"
:options="baseWarehouseTree"
:normalizer="normalizer"
placeholder="请选择仓库"
/>
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="20">
<el-col :span="12">
<el-form-item label="最低库存" prop="miniStock">
<el-input-number v-model="formData.miniStock" :max="10"></el-input-number>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="最高库存" prop="maxStock">
<el-input-number v-model="formData.maxStock" :max="10"></el-input-number>
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="20">
<el-col :span="12">
<el-form-item label="当前库存" prop="stock">
<el-input-number v-model="formData.stock" :max="10"></el-input-number>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="状态" prop="status">
<el-switch
v-model="formData.status"
active-color="#13ce66"
inactive-color="#ff4949"
active-value="01"
inactive-value="02">
</el-switch>
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="20">
<el-col :span="12">
<el-form-item label="来源" prop="dataForm">
<el-select v-model="formData.dataForm" placeholder="请选择来源">
<el-option v-for="dict in this.getDictDatas(DICT_TYPE.REPAIR_WARES_DATA_FORM)"
:key="dict.value" :label="dict.label" :value="dict.value"/>
</el-select>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="配件属性" prop="attribute">
<el-select v-model="formData.attribute" placeholder="请选择单位">
<el-option v-for="dict in this.getDictDatas(DICT_TYPE.REPAIR_WARES_ATTRIBUTE)"
:key="dict.value" :label="dict.label" :value="dict.value"/>
</el-select>
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="20">
<el-col :span="24">
<el-form-item label="适用子公司" prop="corpId">
<el-select v-model="formData.corpIds" multiple placeholder="请选择">
<el-option
v-for="item in companyList"
:key="item.id"
:label="item.corpName"
:value="item.id">
</el-option>
</el-select>
</el-form-item>
</el-col>
<el-col :span="24">
<el-form-item label="适用车型" prop="carModel">
<el-input type="textarea" v-model="formData.carModel" placeholder="请输入适用车型"/>
</el-form-item>
</el-col>
<el-col :span="24">
<el-form-item label="备注" prop="remark">
<el-input type="textarea" v-model="formData.remark" placeholder="请输入备注"/>
</el-form-item>
</el-col>
</el-row>
</el-collapse-item>
<el-collapse-item title="附件信息" name="2">
<el-row :gutter="20">
<el-col :span="24">
<el-form-item label="产品图片" prop="img">
<ImageUpload v-model="formData.img" />
</el-form-item>
</el-col>
<el-col :span="24">
<el-form-item label="封面图片" prop="coverImg">
<ImageUpload :limit="1" v-model="formData.coverImg" />
</el-form-item>
</el-col>
</el-row>
</el-collapse-item>
</el-collapse>
</el-form>
<div slot="footer" class="dialog-footer">
<el-button type="primary" @click="submitForm" :disabled="formLoading"> </el-button>
<el-button @click="dialogVisible = false"> </el-button>
</div>
</el-dialog>
</div>
</template>
<script>
import * as WaresApi from '@/api/repair/wares';
import * as BaseTypeApi from '@/api/base/type';
import {getCompanyList} from '@/api/base/company'
import TreeSelect from "@riophae/vue-treeselect";
import "@riophae/vue-treeselect/dist/vue-treeselect.css";
import * as BaseWarehouseApi from '@/api/base/warehouse';
import ImageUpload from '@/components/ImageUpload';
export default {
name: "WaresForm",
components: {TreeSelect,ImageUpload},
data() {
return {
// 弹出层标题
dialogTitle: "",
// 是否显示弹出层
dialogVisible: false,
// 表单的加载中1修改时的数据加载2提交的按钮禁用
formLoading: false,
// 表单参数
formData: {
barCode: undefined,
code: undefined,
name: undefined,
model: undefined,
price: undefined,
type: undefined,
unit: undefined,
warehouse: undefined,
miniStock: undefined,
maxStock: undefined,
stock: undefined,
img: undefined,
attribute: undefined,
corpId: undefined,
coverImg: undefined,
carModel: undefined,
remark: undefined,
dataForm: undefined,
corpIds: [],
status: '01',
},
// 表单校验
formRules: {
name: [{required: true, message: '商品名称不能为空', trigger: 'blur'}],
barCode: [{required: true, message: '条形码不能为空', trigger: 'blur'}],
price: [{required: true, message: '销售价格不能为空', trigger: 'blur'}],
unit: [{required: true, message: '计量单位不能为空', trigger: 'blur'}],
type: [{required: true, message: '所属分类不能为空', trigger: 'blur'}],
},
activeNames: ['1', '2'],
//类型树
baseTypeTree: [],
//子公司
companyList: [],
//仓库
baseWarehouseTree: []
};
},
methods: {
/** 打开弹窗 */
async open(id) {
this.dialogVisible = true;
this.reset();
// 修改时,设置数据
if (id) {
this.formLoading = true;
try {
const res = await WaresApi.getWares(id);
this.formData = res.data;
this.title = "修改配件库";
} finally {
this.formLoading = false;
}
}
this.title = "新增配件库";
//获取类型树
await this.getBaseTypeTree();
//获取子公司
await this.listCompany();
//获取仓库
await this.getBaseWarehouseTree();
},
/** 获得配置类型树 */
async getBaseTypeTree() {
this.baseTypeTree = [];
let param = {
type: '02'
}
const res = await BaseTypeApi.getBaseTypeList(param);
const root = {id: 0, name: '顶级配置类型', children: []};
root.children = this.handleTree(res.data, 'id', 'parentId', "children", "0")
this.baseTypeTree.push(root)
},
/** 查询子公司 */
async listCompany() {
const res = await getCompanyList()
this.companyList = res.data
},
/** 获得仓库树 */
async getBaseWarehouseTree() {
this.baseWarehouseTree = [];
const res = await BaseWarehouseApi.getBaseWarehouseList();
const root = {id: 0, name: '顶级仓库', children: []};
root.children = this.handleTree(res.data, 'id', 'parentId', "children", "0")
this.baseWarehouseTree.push(root)
},
/** 提交按钮 */
async submitForm() {
// 校验主表
await this.$refs["formRef"].validate();
this.formLoading = true;
try {
this.formData.corpId = this.formData.corpIds + ''
const data = this.formData;
// 修改的提交
if (data.id) {
await WaresApi.updateWares(data);
this.$modal.msgSuccess("修改成功");
this.dialogVisible = false;
this.$emit('success');
return;
}
// 添加的提交
await WaresApi.createWares(data);
this.$modal.msgSuccess("新增成功");
this.dialogVisible = false;
this.$emit('success');
} finally {
this.formLoading = false;
}
},
/** 转换仓库数据结构 */
normalizer(node) {
if (node.children && !node.children.length) {
delete node.children;
}
return {
id: node.id,
label: node.name,
children: node.children
};
},
/** 表单重置 */
reset() {
this.formData = {
barCode: undefined,
code: undefined,
name: undefined,
model: undefined,
price: undefined,
type: undefined,
unit: undefined,
warehouse: undefined,
miniStock: undefined,
maxStock: undefined,
stock: undefined,
img: undefined,
attribute: undefined,
corpId: undefined,
coverImg: undefined,
carModel: undefined,
remark: undefined,
dataForm: undefined,
corpIds: [],
status: '01',
};
this.resetForm("formRef");
}
}
};
</script>