| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426 |
- <template>
- <ele-modal custom-class="ele-dialog-form long-dialog-form" :centered="true" :append-to-body="true"
- :visible.sync="visible" :close-on-click-modal="false" width="60%" @close="cancel" :title="title"
- :fullscreen="fullscreen">
- <template slot="title">
- <modalTitle :title="title" @setFullscreen="fullscreen = !fullscreen">
- </modalTitle>
- </template>
- <headerTitle title="基本信息"></headerTitle>
- <el-form label-width="120px" ref="form" :model="form" :rules="rules" class="el-form-box">
- <el-row>
- <el-col :span="8">
- <el-form-item label="商品名称:" prop="goodsName">
- <el-input placeholder="请输入" v-model="form.goodsName" maxlength="50"></el-input>
- </el-form-item>
- </el-col>
- <el-col :span="8">
- <el-form-item label="商品分类:" prop="categoryLevelId">
- <SelectTree :data="gList" placeholder="请选择商品分类" v-model="form.categoryLevelId" />
- </el-form-item>
- </el-col>
- <el-col :span="8">
- <el-form-item label="商机编码:" prop="goodsCode">
- <el-input disabled="true" v-model="form.goodsCode" maxlength="50"></el-input>
- </el-form-item>
- </el-col>
- <el-col :span="24">
- <el-form-item label="商品图片:">
- <ImgUpload ref="imgUploadRef" v-model="form.backgroundImgs" />
- </el-form-item>
- </el-col>
- <!-- <el-col :span="8">
- <el-form-item label="产品名称:" prop="productName">
- <el-input disabled="true" v-model="form.productName" maxlength="50"></el-input>
- </el-form-item>
- </el-col>
- <el-col :span="8">
- <el-form-item label="产品类型:" prop="productCategoryName">
- <el-input disabled="true" v-model="form.productCategoryName" maxlength="50"></el-input>
- </el-form-item>
- </el-col>
- <el-col :span="8">
- <el-form-item label="产品编码:" prop="productCode">
- <el-input disabled="true" v-model="form.productCode" maxlength="50"></el-input>
- </el-form-item>
- </el-col>
- <el-col :span="8">
- <el-form-item label="属性类型:" prop="produceType">
- <el-input disabled="true" v-model="form.produceType" maxlength="50"></el-input>
- </el-form-item>
- </el-col>
- <el-col :span="8">
- <el-form-item label="仓库名称:" prop="warehouseId">
- <el-select
- v-model="form.warehouseId"
- placeholder="请选择"
- width="100%"
- @change="warehouseChange"
- >
- <el-option
- v-for="item in form.warehouseList"
- :key="item.warehouseId"
- :label="item.warehouseName"
- :value="item.warehouseId"
- >
- </el-option>
- </el-select>
- </el-form-item>
- </el-col>
- <el-col :span="8">
- <el-form-item label="库存:" prop="warehouseNum">
- <el-input disabled="true" v-model="form.warehouseNum" maxlength="50"></el-input>
- </el-form-item>
- </el-col>
- <el-col :span="8">
- <el-form-item label="计量单位:" prop="measuringUnit">
- <el-input disabled="true" v-model="form.measuringUnit" maxlength="50"></el-input>
- </el-form-item>
- </el-col>
- <el-col :span="8">
- <el-form-item label="重量单位:" prop="weightUnit">
- <el-input disabled="true" v-model="form.weightUnit" maxlength="50"></el-input>
- </el-form-item>
- </el-col> -->
- </el-row>
- <BIZproductList
- ref="BIZproductListRef"
- classType="1"
- :isGetInventoryTotal="true"
- @changeParent="changeParentBiz"
- ></BIZproductList>
- </el-form>
- <headerTitle title="产品" v-show="!isUpdate"></headerTitle>
- <el-form v-show="!isUpdate" label-width="120px" class="el-form-box">
- <el-button
- size="small"
- type="primary"
- icon="el-icon-plus"
- class="ele-btn-icon"
- @click="handParent()"
- >
- 选择产品
- </el-button>
- <el-row>
- <el-col :span="8">
- <el-form-item label="产品名称:" >
- <el-input disabled="true" v-model="form.productName" maxlength="50"></el-input>
- </el-form-item>
- </el-col>
- <el-col :span="8">
- <el-form-item label="产品类型:">
- <el-input disabled="true" v-model="form.productCategoryName" maxlength="50"></el-input>
- </el-form-item>
- </el-col>
- <el-col :span="8">
- <el-form-item label="产品编码:">
- <el-input disabled="true" v-model="form.productCode" maxlength="50"></el-input>
- </el-form-item>
- </el-col>
- <el-col :span="8">
- <el-form-item label="属性类型:">
- <el-input disabled="true" v-model="form.produceType" maxlength="50"></el-input>
- </el-form-item>
- </el-col>
- <el-col :span="8">
- <el-form-item label="仓库名称:">
- <el-select
- v-model="form.warehouseId"
- placeholder="请选择"
- width="100%"
- @change="warehouseChange"
- >
- <el-option
- v-for="item in form.warehouseList"
- :key="item.warehouseId"
- :label="item.warehouseName"
- :value="item.warehouseId"
- >
- </el-option>
- </el-select>
- </el-form-item>
- </el-col>
- <el-col :span="8">
- <el-form-item label="库存:">
- <el-input disabled="true" v-model="form.warehouseNum" maxlength="50"></el-input>
- </el-form-item>
- </el-col>
- <el-col :span="8">
- <el-form-item label="计量单位:">
- <el-input disabled="true" v-model="form.measuringUnit" maxlength="50"></el-input>
- </el-form-item>
- </el-col>
- <el-col :span="8">
- <el-form-item label="重量单位:">
- <el-input disabled="true" v-model="form.weightUnit" maxlength="50"></el-input>
- </el-form-item>
- </el-col>
- </el-row>
- <BIZproductList
- ref="BIZproductListRef"
- classType="1"
- :isGetInventoryTotal="true"
- @changeParent="changeParentBiz"
- ></BIZproductList>
- </el-form>
- <headerTitle title="价格"></headerTitle>
- <ProductTable ref="inventoryTable" />
- <template slot="footer">
- <el-button type="primary" @click="save">保存</el-button>
- <el-button @click="cancel">返回</el-button>
- </template>
-
- </ele-modal>
- </template>
- <script>
- import BIZproductList from '@/BIZComponents/product-list.vue';
- import SelectTree from './selectTree.vue';
- import modalTitle from '@/BIZComponents/modalTitle.vue';
- import dictMixins from '@/mixins/dictMixins';
- import ProductTable from './productTable.vue';
- import { saveGoods } from '@/api/goodsManage/index';
- import { getTreeByPid, getPcTreeByPids } from '@/api/classifyManage';
- import { getByCode } from '@/api/system/dictionary-data';
- import { copyObj } from '@/utils/util';
- import {
- getWarehouseOutStock,
- getIdWarehouseList
- } from '@/api/saleManage/saleorder';
- import { lbjtList } from '@/enum/dict.js';
- import { getCode } from '@/api/login/index';
- import ImgUpload from './imgUpload.vue';
- import { getGoodsById, updateGoods } from '@/api/goodsManage/index'
- export default {
- components: {
- ProductTable,
- modalTitle,
- SelectTree,
- BIZproductList,
- ImgUpload
- },
- mixins: [dictMixins],
- data() {
- const formDef = {
- id: '',//商品id
- categoryLevelId: '',//商品分类
- goodsName:'',//商品名称
- goodsCode:'',//商品编码
- backgroundImgs: "",//商品图片
- categoryId: '',//产品id
- productName: '',//产品名称
- productCategoryName: '',//产品类型
- productCode: '',//产品编码
- produceType: '',//属性类型
- warehouseId: '',//仓库名称
- warehouseNum:'',//库存
- measuringUnit: '',//计量单位
- weightUnit: '',//重量单位
- warehouseList:[],//仓库
- imagesFileIds: '',
- children:[],//价格数组
- };
- return {
- // form:{
- // id: '',//产品id
- // productName: '',//产品名称
- // productCategoryName: '',//产品类型
- // productCode: '',//产品编码
- // produceType: '',//属性类型
- // warehouseId: '',//仓库名称
- // warehouseNum:'',//库存
- // measuringUnit: '',//计量单位
- // weightUnit: '',//重量单位
- // warehouseList:[],//仓库
- // },
- title: '',
- visible: false,
- fullscreen: false,
- form: copyObj(formDef),
- // 提交状态
- loading: false,
- // 是否是修改
- isUpdate: false,
- gList: [], //商品分类
- rules: {
- categoryLevelId: [
- { required: true, message: '请选择商品分类', trigger: 'change' }
- ],
- goodsName: [
- { required: true, message: '请输入商品名称', trigger: 'blur' }
- ],
- goodsCode: [
- { required: true, message: '请输入商品编码', trigger: 'blur' }
- ],
- }
- };
- },
- created() {
- this.getTreeData();
- this.getByCode('goods_price_type'); //获取商品类型字典
- },
- methods: {
- //打开弹出框
- async open(type, row, contactCategoryId) {
- // this.$refs.inventoryTable.resetTable()
- this.form.categoryLevelId = contactCategoryId;
- this.title = type === 'add' ? '新增' : '修改';
- this.visible = true;
- if (type == 'add') {
- this.isUpdate = false;
- } else {
- this.isUpdate = true;
- }
- if (type === 'editGoodsInfo') {
- this.getGoodsById(row.id);
- }
- },
- //获取详情数据
- async getGoodsById(id) {
- let res = await getGoodsById(id);
- this.form = res;
- let goodsImgItem = {id: res.imagesFileIds,url:window.location.origin + '/api/main/file/getFile?objectName=' + res.imagesPaths,status: 'done'}
- this.form.backgroundImgs = goodsImgItem;
- this.$refs.imgUploadRef.putValue(goodsImgItem);
- this.$refs.inventoryTable.putTableList(res.children);
- },
- //查询商品分类
- async getTreeData() {
- const res = await getTreeByPid('1789827921908150274');
- if (res?.code === '0') {
- this.gList = res.data;
- }
- },
- //查询商品价格字典
- async getByCode(code) {
- const res = await getByCode(code);
- if (res?.code === '0') {
- this.goodsTypeList = res.data;
- }
- },
- //库存计算
- async warehouseChange(e) {
- const warehouseOutStock = await getWarehouseOutStock({
- warehouseId: e,
- code: this.form.productCode
- });
- this.form.warehouseNum = warehouseOutStock || 0
- },
- //选择产品
- handParent() {
- this.$refs.BIZproductListRef.open('', 1);
- },
- changeParentBiz(obj = [], idx) {
- this.getGoodsCode('goods_code')
- obj.forEach(async (item, index) => {
- this.form.categoryId = item.id;
- this.form.productName = item.name
- this.form.productCategoryName = item.categoryLevelPath;
- this.form.productCode = item.code;
- this.form.produceType = lbjtList[item.componentAttribute].toString();
- this.form.warehouseId = item.warehouseId;
- this.form.measuringUnit = item.measuringUnit;
- this.form.weightUnit = item.weightUnit;
- this.form.warehouseList = await getIdWarehouseList({ categoryId: item.id });
- })
- },
- //提交
- async save() {
- try {
- if (this.form.categoryId === '' && this.$message.error('请选择产品')) return;
- await this.getValidate();
- // 表单验证通过,执行保存操作
- let commitData = this.$refs?.inventoryTable?.getTableValue() || [];
- if (commitData.length < 1) {
- return
- }
- let comitDatasource = {};
- const { categoryLevelId, goodsName, goodsCode, categoryId, backgroundImgs, id } = this.form;
- comitDatasource['categoryId'] = categoryId;
- comitDatasource['categoryLevelId'] = categoryLevelId;
- comitDatasource['goodsCode'] = goodsCode;
- comitDatasource['goodsName'] = goodsName;
- comitDatasource['imagesFileIds'] = backgroundImgs[0]?.id;
- comitDatasource['priceList'] = commitData;
- console.log('comitDatasource',comitDatasource);
- this.loading = true;
- var res = {}
- if (!this.isUpdate) {
- res = await saveGoods(comitDatasource);
- } else {
- comitDatasource['id'] = id
- res = await updateGoods(comitDatasource);
- }
- if (res?.code === '0') {
- this.$message.success('操作成功');
- this.cancel();
- this.$emit('done');
- }
- } catch (error) {
- this.loading = false;
- }
- },
- //查询商品编码
- async getGoodsCode(code) {
- this.form.goodsCode = await getCode(code);
- },
- cancel() {
- this.$nextTick(() => {
- this.$refs.inventoryTable.putTableList([]);
- this.$refs.imgUploadRef.putValue();
- // 重置表单验证状态
- // 关闭后,销毁所有的表单数据
- this.form = {}
- this.visible = false;
- });
- },
- getValidate() {
- //开始表单校验
- return Promise.all([
- new Promise((resolve, reject) => {
- this.$refs.form.validate((valid) => {
- if (!valid) {
- reject(false);
- } else {
- resolve(true);
- }
- });
- }),
- new Promise((resolve, reject) => {
- this.$refs.inventoryTable.validateForm((valid) => {
- if (!valid) {
- reject(false);
- } else {
- resolve(true);
- }
- });
- }),
-
- ]);
- }
- }
- };
- </script>
- <style lang="scss" scoped>
- .el-form-item {
- margin-bottom: 20px !important;
- }
- .el-form-item__error {
- display: block !important;
- color: red;
- padding-top: 4px;
- }
- </style>
|