DESKTOP-B78GIPM\admin 2 gadi atpakaļ
vecāks
revīzija
b627b43851

+ 24 - 0
src/api/good.js

@@ -156,4 +156,28 @@ export function getPosTypeList(parameter){
         method:'get',
         params:parameter
     })
+}
+
+
+/**
+ * 获取库存商品分类
+ */
+export function getStockTypeList(parameter){
+    return axios({
+        url:'/kc/kcGoodsType/tree',
+        method:'get',
+        params:parameter
+    })
+}
+
+
+/**
+ * 库存页面删除商品分类
+ */
+export function delStockType(parameter){
+    return axios({
+        url:'/kc/kcGoodsType/delete',
+        method:'delete',
+        params:parameter
+    })
 }

+ 73 - 0
src/views/room/calendarHouse/index.vue

@@ -0,0 +1,73 @@
+<template>
+<div>
+    <a-date-picker v-model="selectedDate" :disabledDate="disabledDate" @change="handleDateChange" />
+    <a-table :columns="columns" :dataSource="dataSource" :pagination="false" />
+</div>
+</template>
+
+<script>
+
+export default {
+  data() {
+    return {
+      selectedDate: new Date(),
+      columns: [
+        {
+          title: '日期',
+          dataIndex: 'date',
+        },
+        {
+          title: '单人间',
+          dataIndex: 'singleRoom',
+        },
+        {
+          title: '双人间',
+          dataIndex: 'doubleRoom',
+        },
+        {
+          title: '三人间',
+          dataIndex: 'tripleRoom',
+        },
+      ],
+      dataSource: [],
+    };
+  },
+  mounted() {
+    this.handleDateChange(this.selectedDate);
+  },
+  methods: {
+    disabledDate(current) {
+      return current && current < new Date();
+    },
+    handleDateChange(date) {
+      const dataSources = [];
+      for (let i = 0; i < 30; i++) {
+        const currentDate = new Date(date.getTime() + i * 24 * 60 * 60 * 1000);
+        const singleRoom = {
+          key: `singleRoom-${i}`,
+          roomType: '单人间',
+          roomNumber: `101-${i}`,
+        };
+        const doubleRoom = {
+          key: `doubleRoom-${i}`,
+          roomType: '双人间',
+          roomNumber: `201-${i}`,
+        };
+        const tripleRoom = {
+          key: `tripleRoom-${i}`,
+          roomType: '三人间',
+          roomNumber: `301-${i}`,
+        };
+        dataSources.push({
+          key: currentDate.toLocaleDateString(),
+          date: currentDate.toLocaleDateString(),
+          singleRoom,
+          doubleRoom,
+          tripleRoom,
+        });
+      }
+      this.dataSource = dataSources;
+    },
+  },
+};
+</script>

+ 561 - 2
src/views/stock/goods.vue

@@ -1,3 +1,562 @@
 <template>
-    
-</template>
+    <div class="back">
+        <div class="back-left">
+            <a-button @click="handleStockTypeModelManager('-1',1)">添加分类</a-button>
+            <a-button @click="unitVisible=true" style="margin-left: 30px;">单位设置</a-button>
+            <a-tree class="draggable-tree" :tree-data="treeData" blockNode style="width: 400px;"
+                :replaceFields="{ children: 'children', title: 'name', key: 'id' }">
+                <div slot="title" slot-scope="item,key,children" style="display:flex; align-items: center; height: 100%; overflow: hidden;">
+                    <a-button style="font-size: 12px" type="link" @click="() => { $message.success(item.name) }">{{ item.name}}</a-button>
+                    <div style="flex:1;height:1px;"></div>
+                    <a-button style="font-size: 12px; padding: 0 5px;" type="link" v-show="item.parentId == 0" @click="handleStockTypeModelManager(item,1)">添加分类</a-button>
+                    <a-button style="font-size: 12px; padding: 0 5px;" type="link" @click="handleStockTypeModelManager(item,2)">编辑</a-button>
+                    <a-popconfirm placement="topLeft" ok-text="是的" cancel-text="取消" @confirm="confirmDel(item.id)">
+                        <template slot="title">
+                        确定删除吗?
+                        </template>
+                        <a-button style="font-size: 12px; padding: 0 5px;" type="link">删除</a-button>
+                    </a-popconfirm>
+                </div>
+            </a-tree>
+        </div>
+        <div class="back-right" style="margin-top: -28px; margin-left: 10px;">
+            <a-card :bordered="false">
+                <!-- 查询区域 -->
+                <div class="table-page-search-wrapper">
+                    <a-form layout="inline" @keyup.enter.native="searchQuery">
+                        <a-row :gutter="24">
+                            <a-col :span="4">
+                                <a-form-item label="">
+                                    <j-input placeholder="商品名称" v-model="queryParam.name" style="width: 200px"></j-input>
+                                </a-form-item>
+                            </a-col>
+                            <a-col :md="13" :sm="8" style="display: flex;">
+                                <span style="float:left; overflow: hidden;margin-right:10px;" class="table-page-search-submitButtons">
+                                    <a-button type="primary" @click="searchQuery" icon="search">查询</a-button>
+                                </span>
+                                <!-- <span style="float:left; overflow: hidden; line-height: 32px">【全部】房间属性</span> -->
+                                <span style="float:left; overflow: hidden;margin-right:10px;">
+                                    <a-button type="primary" @click="handleAdd">新增商品</a-button>
+                                </span>
+                                <span style="float:left; overflow: hidden">
+                                    <a-button type="danger" @click="batchDel">批量删除</a-button>
+                                </span>
+                                <!-- <span style="float:left; overflow: hidden;">
+                                    <a-button :disabled="selectedRowKeys.length==0 || selectedRowKeys.length>1" type="primary" style="background-color:coral;border: none"
+                                        @click="goodsSet">进退货</a-button>
+                                </span>
+                                <span style="float:left; overflow: hidden">
+                                    <a-button type="primary" style="background-color:seagreen;border: none"
+                                        @click="searchQuery">导入商品</a-button>
+                                </span> -->
+                            </a-col>
+                        </a-row>
+                    </a-form>
+                </div>
+                <!-- 查询区域-END -->
+                <div>
+                    <a-table ref="table" size="middle" :scroll="{ x: '165%' }" bordered rowKey="id" :columns="columns"
+                        :dataSource="dataSource" :pagination="ipagination" :loading="loading" :rowSelection="{
+                            selectedRowKeys: selectedRowKeys,
+                            onChange: onSelectChange,
+                        }" class="j-table-force-nowrap" @change="handleTableChange">
+                        <span slot="state" slot-scope="record">
+                            {{record?'启用':'停用'}}
+                            <!-- {{record}} -->
+                        </span>
+                        <span slot="action" slot-scope="text, record">
+                            <a @click="handleEdit(record)">修改</a>
+                            <a-divider type="vertical" />
+                            <!-- <a @click="moreSet(record)">更多设置</a>
+                            <a-divider type="vertical" /> -->
+                            <a-popconfirm title="确定删除吗?" @confirm="() => handleDelete(record.id)">
+                                <a>删除</a>
+                            </a-popconfirm>
+                        </span>
+                    </a-table>
+                </div>
+                <!-- 进退货弹窗 -->
+                <a-modal destroyOnClose title="进退货" closable :visible="goodsSetVisible" @ok="handleGoodOk" @cancel="handleGoodCancel"
+                 width="50%" >
+                 <a-space direction="vertical" style="width:100%" :size="'large'">
+                    <a-card title="商品信息" :bordered="true" >
+                        <a-row>
+                            <a-col :span="8">
+                                商品编号:{{goodsSetData.barCode}}
+                            </a-col>
+                            <a-col :span="8">
+                                商品名称:{{goodsSetData.name}}
+                            </a-col>
+                            <a-col :span="8">
+                                商品库存:{{goodsSetData.inventory}}
+                            </a-col>
+                        </a-row>
+                    </a-card>
+                    
+                    <a-radio-group name="radioGroup" :default-value="1" @change="goodChange">
+                        <a-radio :value="1">
+                            进货
+                        </a-radio>
+                        <a-radio :value="2">
+                            退货
+                        </a-radio>
+                    </a-radio-group>
+                    <a-row style="display:flex;align-items:center;">
+                        <a-col :span="1">
+                            数量
+                        </a-col>
+                        <a-col :span="4">
+                            <a-input-number v-model="goodsSetData.goodNum" :min="0" /> &nbsp;{{goodsSetData.unitName}}
+                        </a-col>
+                    </a-row>
+                    <a-row style="display:flex;justify-content:center;align-items:center;">
+                        <a-col :span="1">
+                            备注
+                        </a-col>
+                        <a-col :span="23">
+                            <a-input v-model="goodsSetData.remark" type="text" />
+                        </a-col>
+                    </a-row>
+                  </a-space>
+                </a-modal>
+                <!-- 进退货区域END -->
+                <!-- 更多设置弹窗 -->
+                <moreSet ref='modalSet' @ok="onSave" />
+                <!-- <a-modal destroyOnClose title="详细设置" closable :visible="moreSetVisible" @ok="handleMoreSetOk" @cancel="()=>{moreSetVisible=false}"
+                 width="70%" >
+                    <a-card style="width:100%" :tab-list="tabListNoTitle" :active-tab-key="noTitleKey"
+                     @tabChange="key => onTabChange(key, 'noTitleKey')">
+                        <Commodity v-if="noTitleKey=='commodity'" />
+                        <GoodImg v-if="noTitleKey=='goodImg'" />
+                    </a-card>
+                </a-modal> -->
+                <room-layout-form ref="modalForm" @ok="modalFormOk"></room-layout-form>
+                <stock-type-model ref="stockTypeModel" @ok="onSave"></stock-type-model>
+            </a-card>
+        </div>
+        <!-- 单位设置区域 -->
+        <SetUnit :unitVisible="unitVisible" @center="handleCancel" />
+    </div>
+
+</template>
+<script>
+import { tree, delStockType, goodBatchDel, goodSet, getStockTypeList } from '@/api/good'
+import { JeecgListMixin } from "@/mixins/JeecgListMixin";
+import roomLayoutForm from './goodsModal/goodStock/goods.vue'
+import stockTypeModel from './goodsModal/goodType/stockTypeModel.vue'
+// import Commodity from './moreSet/commodity.vue'
+// import GoodImg from './moreSet/goodImg.vue';
+// import moreSet from './moreSet/moreModal.vue'
+import { computed } from 'vue';
+import SetUnit from './goodsModal/setUnit/index.vue'
+
+
+const tabListNoTitle=[
+        {
+          key: 'commodity',
+          tab: '商品小程序设置',
+        },
+        {
+          key: 'goodImg',
+          tab: '商品图片',
+        },
+        {
+          key: 'project',
+          tab: '餐饮设置',
+        },
+        {
+          key: 'game',
+          tab: '娱乐设置',
+        },
+      ]
+export default {
+    name: "goodList",
+    mixins: [JeecgListMixin],
+    components: {
+        stockTypeModel,
+        roomLayoutForm,
+        SetUnit,
+        // moreSet
+        // Commodity,
+        // GoodImg
+      },
+    data() {
+        return {
+            treeData: [
+                {
+                    t: '111',
+                    k: '1',
+                    c: [
+                        {
+                            t: '222',
+                            k: '2',
+                            c: [
+                                { t: 'leaf', k: '333', disableCheckbox: true },
+                                { t: 'leaf', k: '444' },
+                            ],
+                        },
+                        {
+                            t: '555',
+                            k: '555',
+                            c: [{ k: '666', t: 'sb' }],
+                        },
+                    ],
+                },],
+
+            key: 'tab1',
+            noTitleKey: 'commodity',
+
+            checkedKeys: [''],
+            tabListNoTitle,
+            selectedKeys: [],
+            queryParam: {},
+            //单位对话框
+            unitVisible:false,
+            // 分页参数
+            ipagination: {
+                current: 1,
+                pageSize: 10,
+                pageSizeOptions: ["10", "20", "30"],
+                showTotal: (total, range) => {
+                    return range[0] + "-" + range[1] + " 共" + total + "条";
+                },
+                showQuickJumper: true,
+                showSizeChanger: true,
+                total: 0,
+            },
+            // 表头
+            columns: [
+                // {
+                //     title: "商家",
+                //     align: "center",
+                //     dataIndex: "hotelName",
+                //     customCell:() => {
+                //         return {
+                //         style: {
+                //             wordWrap:'break-word',
+                //             wordBreak:'break-all',
+                //             whiteSpace:'normal',
+                //             minHeight:'50px',
+                //             width: '50px',
+                //         }
+                //         }
+                //     }
+                // },
+                {
+                    title: "分类",
+                    align: "center",
+                    dataIndex: "goodTypeName",
+                    customCell:() => {
+                        return {
+                        style: {
+                            wordWrap:'break-word',
+                            wordBreak:'break-all',
+                            whiteSpace:'normal',
+                            minHeight:'50px',
+                            width: '50px',
+                        }
+                        }
+                    }
+                },
+                {
+                    title: "单位",
+                    align: "center",
+                    dataIndex: "goodsUnitName",
+                    customCell:() => {
+                        return {
+                        style: {
+                            wordWrap:'break-word',
+                            wordBreak:'break-all',
+                            whiteSpace:'normal',
+                            minHeight:'50px',
+                            width: '50px',
+                        }
+                        }
+                    }
+                },
+                {
+                    title: "商品名称",
+                    align: "center",
+                    dataIndex: "name",
+                },
+                // {
+                //     title: "商品简码",
+                //     align: "center",
+                //     dataIndex: "",
+                // },
+                {
+                    title: "条码",
+                    align: "center",
+                    dataIndex: "barCode",
+                },
+                {
+                    title: "售卖周期",
+                    align: "center",
+                    dataIndex: "sellDay",
+
+                },
+
+                {
+                    title: "采购最高限价",
+                    align: "center",
+                    dataIndex: "maxPrice",
+
+                },
+                {
+                    title: "成本标准价",
+                    align: "center",
+                    dataIndex: "costPrice",
+
+                },
+                {
+                    title: "商品规格",
+                    align: "center",
+                    dataIndex: "spec",
+
+                },
+                {
+                    title: "最高库存",
+                    align: "center",
+                    dataIndex: "maxSotck",
+
+                },
+                {
+                    title: "最低库存",
+                    align: "center",
+                    dataIndex: "minSotck",
+
+                },
+                {
+                    title: "库存预警数",
+                    align: "center",
+                    dataIndex: "stockWarning",
+
+                },
+                {
+                    title: '状态',
+                    dataIndex: 'isEnable',
+                    // key: 'address',
+                    scopedSlots: { customRender: "state" },
+                    align:'center'
+                },
+                {
+                    title: '操作',
+                    dataIndex: 'action',
+                    key: 'action',
+                    scopedSlots: { customRender: "action" },
+                    align:'center',
+                    fixed: "right",
+                    width: 200,
+                }
+            ],
+            url: {
+                // list: 'org.jeecg.modules.business/busMarketMember/list',
+                list:'/kc/kcGoods/list',
+                // list: "/rooms/cesRoomLayout/list?hotelId",
+                // delete: "/rooms/cesRoomLayout/remove",
+                delete:'/kc/kcGoods/delete',
+                // deleteBatch: "/rooms/cesRoomLayout/deleteBatch",
+                deleteBatch:'/kc/kcGoods/deleteBatch',
+                exportXlsUrl: "/rooms/cesRoomLayout/exportXls",
+                importExcelUrl:"rooms/cesRoomLayout/importExcel",
+            },
+            dictOptions: {},
+            superFieldList: [],
+            selectedRowKeys: [],
+            isorter: {
+                column: "createTime",
+                order: "desc",
+            },
+            stockTypeVisible:false,
+            // 选中的数据
+            beforeTree:null,
+            goodsSetVisible:false,//进退货弹窗
+            moreSetVisible:false,//更多设置弹窗
+            goodsSetData:{
+                number:0,
+                type:1
+            }
+        };
+    },
+    computed: {
+
+    },
+    watch: {
+
+    },
+    created() {
+        this.loadTree();
+    },
+    provide(){
+        return {
+            beforeTree:computed(() => this.beforeTree?this.beforeTree:{id:'0'}),
+            treeData:computed(()=> this.treeData),
+            dataSource:computed(()=> this.dataSource)
+        }
+    },
+    methods: {
+        handleStockTypeModelManager(item,type) {
+            console.log(item, type)
+            this.beforeTree = null
+            if (item!='-1') {
+                this.beforeTree = item
+                this.beforeTree.editData = type ===2?true:false
+            }
+            console.log(this.beforeTree);
+            this.$refs.stockTypeModel.title = type === 1 ?"新增":"修改"
+            this.$refs.stockTypeModel.visible = true
+        },
+        loadTree() {
+            var that = this
+            getStockTypeList().then((res) => {
+                if (res.success) {
+                    this.treeData = res.result;
+                }
+            })
+        },
+        onExpand(expandedKeys) {
+            console.log('onExpand', expandedKeys);
+            // if not set autoExpandParent to false, if children expanded, parent can not collapse.
+            // or, you can remove all expanded children keys.
+        },
+        onSelect(selectedKeys, info) {
+            console.log('onSelect', info);
+            this.selectedKeys = selectedKeys;
+        },
+        /**
+         * 保存成功
+         */
+        onSave(){
+            this.loadTree()
+        },
+        /**
+         * 删除
+         */
+        confirmDel(id){
+            delStockType({id:id}).then(res=>{
+                if (res.code && res.code==200) {
+                    this.$message.success('删除成功')
+                    this.loadTree()
+                }
+            })
+        },
+        //批量删除
+        goodBatchDel(){
+            console.log(this.selectedRowKeys);
+            if (this.selectedRowKeys.length==0) {
+                this.$message.info('请先选择要删除的数据')
+                return
+            }
+            this.$confirm({
+                title: '提示',
+                content: '确认要删除吗',
+                okText: '确认',
+                cancelText: '取消',
+                onOk:(e)=>{
+                    return goodBatchDel({idStr:this.selectedRowKeys.toString()}).then(res=>{
+                        if (res.code && res.code==200) {
+                            this.$message.success(res.message)
+                            this.loadData();
+                        }else{
+                            this.$message.error(res.message)
+                        }
+                    })
+                }
+            });
+        },
+        //单位设置区域
+        handleOk(e) {
+            // this.confirmLoading = true;
+            // setTimeout(() => {
+            //     this.visible = false;
+            //     this.confirmLoading = false;
+            // }, 2000);
+            this.unitVisible=false
+        },
+        handleCancel(e) {
+            console.log('Clicked cancel button',e);
+            this.unitVisible = false;
+        },
+        /**
+         * 进退货
+         */
+        goodsSet(){
+            this.goodsSetData = this.dataSource.filter(item=> item.id==this.selectedRowKeys.toString() )[0]
+            console.log(this.goodsSetData);
+            this.goodsSetVisible = true
+        },
+        goodChange(e){
+            console.log(e);
+            this.goodsSetData.type = e.target.value
+        },
+        //更多设置
+        moreSet(record){
+            console.log(this.$refs.modalSet);
+            this.$refs.modalSet.edit(record)
+            this.$refs.modalForm.disableSubmit = false;
+            // this.moreSetVisible = true
+        },
+        //更多设置确认
+        handleMoreSetOk(){
+
+        },
+        //更多设置切换卡片
+        onTabChange(key, type) {
+            console.log(key, type);
+            this[type] = key;
+        },
+
+        //进退货确认事件
+        handleGoodOk(){
+            console.log(this.goodsSetData);
+            if (!this.goodsSetData.type) {
+                this.goodsSetData.type = 1
+            }
+            let obj = {
+                hotelId:this.goodsSetData.hotelId,
+                goodId:this.goodsSetData.id,
+                type:this.goodsSetData.type,
+                goodNum:this.goodsSetData.goodNum,
+                remark:this.goodsSetData.remark?this.goodsSetData.remark:''
+            }
+            // this.goodsSetData.goodId = this.goodsSetData.id
+            goodSet(obj).then(res=>{
+                if (res.code && res.code==200) {
+                            this.$message.success(res.message)
+                            this.goodsSetVisible = false
+                            // this.goodsSetData = {}
+                            this.loadData();
+                        }else{
+                            this.$message.error(res.message)
+                        }
+            })
+
+        },
+        //进退货取消
+        handleGoodCancel(){
+            this.goodsSetVisible = false
+        }
+    },
+};
+</script>
+<style scoped>
+.back {
+    display: flex;
+    justify-content: space-between;
+}
+
+.back-left {
+    flex: 10
+}
+
+.back-right {
+    flex: 38;
+}
+
+.ant-tree li .ant-tree-node-content-wrapper {
+    height: auto !important;
+}
+
+.ant-tree li .ant-tree-node-content-wrapper.ant-tree-node-selected {
+    background-color: #bae7ff33;
+}</style>

+ 60 - 0
src/views/stock/goodsModal/goodStock/goods.vue

@@ -0,0 +1,60 @@
+<template>
+  <j-modal
+    :title="title"
+    :width="width"
+    :visible="visible"
+    switchFullscreen
+    @ok="handleOk"
+    :okButtonProps="{ class:{'jee-hidden': disableSubmit} }"
+    @cancel="handleCancel"
+    cancelText="关闭">
+    <bus-market-member-form ref="realForm" @ok="submitCallback" :disabled="disableSubmit"></bus-market-member-form>
+  </j-modal>
+</template>
+
+<script>
+
+  import BusMarketMemberForm from './goodsForm.vue'
+  export default {
+    name: 'BusMarketMemberModal',
+    components: {
+      BusMarketMemberForm
+    },
+    data () {
+      return {
+        title:'',
+        width:800,
+        visible: false,
+        disableSubmit: false
+      }
+    },
+    methods: {
+      add () {
+        this.visible=true
+        this.$nextTick(()=>{
+          this.$refs.realForm.add();
+        })
+      },
+      edit (record) {
+        this.visible=true
+        this.$nextTick(()=>{
+          this.$refs.realForm.edit(record);
+        })
+      },
+      close () {
+        this.$emit('close');
+        this.visible = false;
+      },
+      handleOk () {
+        this.$refs.realForm.submitForm();
+      },
+      submitCallback(){
+        this.$emit('ok');
+        this.visible = false;
+      },
+      handleCancel () {
+        this.close()
+      }
+    }
+  }
+</script>

+ 386 - 0
src/views/stock/goodsModal/goodStock/goodsForm.vue

@@ -0,0 +1,386 @@
+<template>
+<a-spin :spinning="confirmLoading">
+    <j-form-container :disabled="formDisabled">
+        <a-form-model ref="form" :model="model" :rules="validatorRules" slot="detail">
+            <a-row>
+                <a-col :span="12">
+                    <a-form-model-item label="分类" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="goodType">
+                        <a-cascader :defaultValue="arr" :options="treeData?treeData:[]" :field-names="{ label: 'name', value: 'id', children: 'children' }" placeholder="请选择" @change="onChange" />
+                    </a-form-model-item>
+                </a-col>
+                <a-col :span="12" >
+                    <a-form-model-item style="width:100%" label="单位" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="goodUnit">
+                        <a-select :value="model.goodUnit?model.goodUnit:'-1'" placeholder='请选择商品单位' @change="handleChange">
+                            <a-select-option value="-1">{{"请选择商品单位"}}</a-select-option>
+                            <a-select-option v-for="item in unitData" :unitName='item.name' :key="item.id" :value="item.id">
+                                {{item.name}}
+                            </a-select-option>
+                        </a-select>
+                    </a-form-model-item>
+                </a-col>
+            </a-row>
+            <a-row>
+                <a-col :span="12">
+                    <a-form-model-item label="商品名称" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="name">
+                        <a-input v-model="model.name" placeholder="商品名称" />
+                    </a-form-model-item>
+                </a-col>
+                <a-col :span="12">
+                    <a-form-model-item label="是否启用" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="isEnable">
+                        <a-switch :checked="model.isEnable" @change="switchState"></a-switch>
+                    </a-form-model-item>
+                </a-col>
+            </a-row>
+            <a-row>
+                <a-col :span="12">
+                    <a-form-model-item label="商品规格" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="spec">
+                        <a-input v-model="model.spec" placeholder="商品规格" />
+                    </a-form-model-item>
+                </a-col>
+                <a-col :span="12">
+                    <a-form-model-item label="条码" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="barCode">
+                        <a-input v-model="model.barCode" placeholder="请填写条码" />
+                    </a-form-model-item>
+                </a-col>
+            </a-row>
+            <a-row>
+                <a-col :span="12">
+                    <a-form-model-item label="售卖周期" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="sellDay">
+                        <a-input-number v-model="model.sellDay" :min="0" />天
+                    </a-form-model-item>
+                </a-col>
+            </a-row>
+            <a-row>
+                <a-col :span="12">
+                    <a-form-model-item label="采购最高限价" :labelCol="{span:7,offset:0}" :wrapperCol="wrapperCol" prop="maxPrice">
+                        <a-input-number v-model="model.maxPrice" :min="0" />
+                    </a-form-model-item>
+                </a-col>
+                <a-col :span="12">
+                    <a-form-model-item label="成本标准价" :labelCol="{span:6,offset:0}" :wrapperCol="wrapperCol" prop="costPrice">
+                        <a-input-number v-model="model.costPrice" :min="0" />
+                    </a-form-model-item>
+                </a-col>
+            </a-row>
+            <a-row>
+                <a-col :span="12">
+                    <a-form-model-item label="最高库存" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="maxSotck">
+                        <a-input-number v-model="model.maxSotck" :min="0" />
+                    </a-form-model-item>
+                </a-col>
+                <a-col :span="12">
+                    <a-form-model-item label="最低库存" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="minSotck">
+                        <a-input-number v-model="model.minSotck" :min="0" />
+                    </a-form-model-item>
+                </a-col>
+            </a-row>
+            <a-row>
+                <a-col :span="16">
+                    <a-form-model-item label="库存预警数" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="stockWarning">
+                        <a-input-number v-model="model.stockWarning" :min="0" />
+                    </a-form-model-item>
+                </a-col>
+            </a-row>
+            <!-- <a-form-model-item label="房型名称" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="name">
+                    <a-input v-model="model.name" placeholder="请输入房型名称"></a-input>
+                </a-form-model-item>
+                <a-form-model-item label="门市价" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="marketPrice">
+                    <a-input-number style="width:50%;" v-model="model.marketPrice" :min="1"  placeholder="请填写门市价"/>
+                </a-form-model-item>
+
+                <a-form-model-item label="可住人数" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="canLivePersonNum">
+                    <a-input-number style="width:50%;" v-model="model.canLivePersonNum" :min="0"  placeholder="请填写可住人数"/>
+                </a-form-model-item>
+
+                <a-form-model-item label="早餐数量" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="breakfastNum">
+                    <a-input-number style="width:50%;" v-model="model.breakfastNum" :min="0"  placeholder="请填写早餐数量"/>
+                </a-form-model-item>
+
+                <a-form-model-item label="中餐数量" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="lunchNum">
+                    <a-input-number style="width:50%;" v-model="model.lunchNum" :min="0"  placeholder="请填写中餐数量"/>
+                </a-form-model-item>
+
+                <a-form-model-item label="晚餐数量" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="dinnerNum">
+                    <a-input-number style="width:50%;" v-model="model.dinnerNum" :min="0"  placeholder="请填写晚餐数量"/>
+                </a-form-model-item> -->
+        </a-form-model>
+
+    </j-form-container>
+</a-spin>
+</template>
+
+<script>
+import {
+    getRoomPlans,
+    getSelectList
+} from "@/api/api";
+import {
+    httpAction,
+    getAction
+} from "@/api/manage";
+import {
+    validateDuplicateValue
+} from "@/utils/util";
+import {
+    getUnit
+} from '@/api/good'
+
+export default {
+    name: "BusMarketMemberForm",
+    inject: ['treeData', 'dataSource'],
+    props: {
+        disabled: {
+            type: Boolean,
+            default: false,
+            required: false,
+        },
+    },
+    data() {
+        return {
+            unitData: [],
+            options: [{
+                label: '张三',
+                value: '1'
+            }],
+            model: {
+                // id: "",
+                hotelId: 0,
+                goodType: '',
+                goodUnit: '',
+                barCode: '',
+                name: '',
+                isEnable: false,
+                maxPrice: null,
+                maxSotck: null,
+                minSotck: null,
+                sellDay: null,
+                spec: null,
+                stockWarning: null,
+            },
+            labelCol: {
+                xs: {
+                    span: 24
+                },
+                sm: {
+                    span: 5
+                },
+            },
+            wrapperCol: {
+                xs: {
+                    span: 24
+                },
+                sm: {
+                    span: 16
+                },
+            },
+            confirmLoading: false,
+            validatorRules: {
+                name: [{
+                    required: true,
+                    message: "请输入商品名称!"
+                }],
+                goodType: [{
+                    required: true,
+                    message: "请选择商品分类!"
+                }],
+                goodUnit: [{
+                    required: true,
+                    message: "请选择商品单位!"
+                }],
+                barCode: [{
+                    required: true,
+                    message: "请输入商品条码!"
+                }],
+                maxPrice: [{
+                    required: true,
+                    message: "请输入最高售价!"
+                }],
+                maxSotck: [{
+                    required: true,
+                    message: "请输入最高库存!"
+                }],
+                minSotck: [{
+                    required: true,
+                    message: "请输入最低库存!"
+                }],
+                sellDay: [{
+                    required: true,
+                    message: "请输入有效期!"
+                }],
+                spec: [{
+                    required: true,
+                    message: "请输入规格!"
+                }],
+                stockWarning: [{
+                    required: true,
+                    message: "请输入库存预警数!"
+                }],
+                costPrice: [{
+                    required: true,
+                    message: "请输入成本价!"
+                }],
+                isEnable: [{
+                    required: true,
+                    message: "请选择是否启用!"
+                }],
+            },
+            url: {
+                // add: "/rooms/cesRoomLayout/save",
+                add: '/kc/kcGoods/add',
+                // edit: "/rooms/cesRoomLayout/modify",
+                edit: '/kc/kcGoods/edit',
+                delete: '/rooms/cesGoods/delete'
+                // queryById: "/rooms/cesRoomLayout/queryById",
+            },
+            iconChooseVisible: false,
+            roomPlans: [],
+            members: [],
+            arr: []
+        };
+    },
+    computed: {
+        formDisabled() {
+            return this.disabled;
+        },
+    },
+    created() {
+        var _info = JSON.parse(localStorage.getItem("storeInfo"));
+        if (_info) {
+            this.model.hotelId = _info.id;
+            this.initData();
+            this.getData()
+        }
+        console.log(111111111111, this.treeData);
+        this.modelDefault = JSON.parse(JSON.stringify(this.model));
+    },
+    methods: {
+        onChange(e) {
+            console.log(e);
+            this.model.goodType = e[e.length - 1]
+            console.log(this.model.goodType);
+        },
+        handleChange(e, options) {
+            console.log(e);
+            this.model.goodUnit = e
+        },
+        initData() {
+            getRoomPlans(this.model.hotelId, null).then((res) => {
+                if (res.success) {
+                    this.roomPlans = res.result;
+                }
+            });
+
+        },
+        selectIcons() {
+            this.iconChooseVisible = true;
+        },
+        handleIconCancel() {
+            this.iconChooseVisible = false;
+        },
+        handleIconChoose(value) {
+            console.log(value);
+            this.model.icon = value;
+            this.iconChooseVisible = false;
+        },
+        add() {
+            this.edit(this.modelDefault);
+        },
+        //筛选分类数组
+        filterType(array, id) {
+            let arr = []
+            array.forEach((item, index) => {
+                if (item.id == id) {
+                    this.arr[0] = item.parentId
+                    this.arr[1] = item.id
+                    return
+                } else if (Array.isArray(item.children) && item.children) {
+                    this.filterType(item.children, id)
+                }
+            })
+        },
+        edit(record) {
+            console.log(22222222, record);
+            // this.model = Object.assign({}, record);
+            this.model = JSON.parse(JSON.stringify(record))
+
+            console.log(this.filterType(this.treeData, record.goodType));
+            console.log(this.arr);
+            this.visible = true;
+            getSelectList({
+                id: this.model.id
+            }).then((res) => {
+                if (res.success) {
+                    this.members = res.result;
+                }
+            });
+        },
+        submitForm() {
+            const that = this;
+            // 触发表单验证
+            debugger
+            this.$refs.form.validate((valid) => {
+                if (valid) {
+                    that.confirmLoading = true;
+                    let httpurl = "";
+                    let method = "";
+                    if (!this.model.id) {
+                        httpurl += this.url.add;
+                        method = "post";
+                    } else {
+                        httpurl += this.url.edit;
+                        method = "put";
+                    }
+                    if (this.model.payFlag == 0) {
+                        this.model.payAmount = 0;
+                    }
+                    this.model.maxPrice = Number(this.model.maxPrice)
+                    this.model.maxSotck = Number(this.model.maxSotck)
+                    this.model.minSotck = Number(this.model.minSotck)
+                    this.model.sellDay = Number(this.model.sellDay)
+                    this.model.stockWarning = Number(this.model.stockWarning)
+                    // if (this.model.isEnable==true) {
+                    //     this.model.isEnable = '1'
+                    // }else{
+                    //     this.model.isEnable = '0'
+                    // }
+                    console.log('11111111111', this.model);
+                    httpAction(httpurl, this.model, method)
+                        .then((res) => {
+                            if (res.success) {
+                                that.$message.success(res.message);
+                                that.$emit("ok");
+                            } else {
+                                that.$message.warning(res.message);
+                            }
+                        })
+                        .finally(() => {
+                            that.confirmLoading = false;
+                        });
+                }
+            });
+        },
+        getData() {
+            getUnit({
+                pageNo: 1,
+                pageSize: 1000
+            }).then(res => {
+                console.log(res);
+                if (res.code && res.code == 200) {
+                    this.unitData = res.result.records
+                }
+            })
+        },
+        switchState(e) {
+            console.log('这是滑动按钮触发', e);
+            this.model.isEnable = e
+        }
+    },
+};
+</script>
+
+<style scoped>
+.avatar-uploader>.ant-upload {
+    width: 104px;
+    height: 104px;
+}
+</style>

+ 315 - 0
src/views/stock/goodsModal/goodType/stockTypeForm.vue

@@ -0,0 +1,315 @@
+<template>
+    <a-spin :spinning="confirmLoading">
+        <j-form-container :disabled="formDisabled">
+            <a-form-model ref="form" :model="model" :rules="validatorRules" slot="detail">
+                <a-form-model-item label="名称" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="name">
+                    <a-input v-model="model.name" placeholder="请输入名称"></a-input>
+                </a-form-model-item>
+                <a-form-model-item label="上级" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="">
+                    <a-select  style="width: 120px" :default-value="beforeTree.editData?beforeTree.parentId:beforeTree.id" @change="onChangeSelect" >
+                        <!-- :defaultValue='beforeTree.id' -->
+                        <a-select-option value="0">{{"顶级目录"}}</a-select-option>
+                        <a-select-option v-for="d in selectData" :key="d.value" :value="d.id">
+                            {{ d.name }}
+                        </a-select-option>
+                    </a-select>
+                </a-form-model-item>
+                
+                <!-- <a-form-model-item label="快捷" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="canLivePersonNum">
+                    <a-switch default-checked @change="onChange"  v-model="model.isQuick" />
+                </a-form-model-item> -->
+
+                <a-form-model-item label="是否启用" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="breakfastNum">
+                    <a-switch default-checked @change="onChange"  v-model="model.state" />
+                </a-form-model-item>
+
+                <!-- <a-form-model-item label="应用范围" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="lunchNum">
+                    <a-checkbox-group v-model="model.applyScope" :options="plainOptions" @change="onChange" />
+                </a-form-model-item>
+                <a-form-model-item v-show="model.applyScope.includes('2')" label="POS类型" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="posType">
+                    <a-checkbox :indeterminate="indeterminatePos" :checked="posCheckAll" @change="onCheckAllChangePos">
+                        全选
+                    </a-checkbox>
+                    <a-checkbox-group :disabled='beforeTree.parentId==0?false:true' v-model="model.posType" :options="posOptions" @change="onChangePos" />
+                </a-form-model-item>
+                <a-form-model-item v-show="model.applyScope.includes('3')" label="娱乐类型" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="funType">
+                    <a-checkbox :indeterminate="indeterminateFun" :checked="funCheckAll" @change="onCheckAllChangeFun">
+                        全选
+                    </a-checkbox>
+                    <a-checkbox-group :disabled='beforeTree.parentId==0?false:true' v-model="model.funType" :options="funOptions" @change="onChangeFun" />
+                </a-form-model-item>
+                <a-form-model-item label="排序" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="dinnerNum">
+                    <a-input-number style="width:50%;" v-model="model.sort" :min="0"  placeholder="请输入排序"/>
+                </a-form-model-item> -->
+            </a-form-model>
+
+        </j-form-container>
+    </a-spin>
+
+</template>
+<script>
+import { getRoomPlans, getSelectList } from "@/api/api";
+import { httpAction, getAction } from "@/api/manage";
+import { validateDuplicateValue } from "@/utils/util";
+import { getStockTypeList, getPosTypeList } from '@/api/good'
+
+export default {
+    name: "BusMarketMemberForm",
+    inject:{
+        beforeTree:{
+            default:{id:0}
+        }
+    },
+    props: {
+        disabled: {
+
+            
+            type: Boolean,
+            default: false,
+            required: false,
+        },
+    },
+    data() {
+        return {
+            indeterminatePos: true,
+            indeterminateFun:true,
+            posCheckAll: false,
+            funCheckAll:false,
+            plainOptions:[
+                { label: '客房', value: '1' },
+                { label: 'POS', value: '2' },
+                { label: '娱乐', value: '3' },
+            ],
+            posOptions:[
+               { label: '茶室', value: '1' },
+                { label: '餐厅', value: '2' },
+                { label: '超市', value: '3' },
+            ],
+            funOptions:[
+               { label: '茶室', value: '1' },
+                { label: '餐厅', value: '2' },
+                { label: '超市', value: '3' },
+            ],
+            selectData:[],
+            model: {
+                // id: "",
+                name: null, //名字
+                hotelId: 0, //酒店id
+                parentId: 0, //上级id
+                tenantId:"",
+                // marketPrice: null,
+                // canLivePersonNum: true,
+                // breakfastNum: 0,
+                // isQuick:0, // 是否快捷
+                state:1, // 是否启用
+                // lunchNum: 0,
+                // checkedList: ["1"],
+                // applyScope:['1'],//应用范围
+                // posType:[], //应用范围 pos
+                // funType:[], //应用范围 娱乐
+                // sort:0
+            },
+            labelCol: {
+                xs: { span: 24 },
+                sm: { span: 5 },
+            },
+            wrapperCol: {
+                xs: { span: 24 },
+                sm: { span: 16 },
+            },
+            confirmLoading: false,
+            validatorRules: {
+                name: [{ required: true, message: "请输入名称!" }],
+                marketPrice: [{ required: false, message: "请填写门市价!" }],
+                canLivePersonNum: [{ required: false, message: "请填写可住人数!" }],
+                breakfastNum: [{ required: false, message: "请填写早餐数量!" }],
+                lunchNum: [{ required: false, message: "请填写中餐数量!" }],
+                isQuick: [{required: false, message: ""}],
+                sort: [{ required: false, message: "请填写晚餐数量!" }],
+            },
+            url: {
+                add: "/kc/kcGoodsType/create",
+                edit: "/kc/kcGoodsType/modify",
+                queryById: "/rooms/cesRoomLayout/queryById",
+            },
+            iconChooseVisible: false,
+            roomPlans: [],
+            members: [],
+        };
+    },
+    computed: {
+        formDisabled() {
+            return this.disabled;
+        },
+    },
+    created() {
+        var _info = JSON.parse(localStorage.getItem("storeInfo"));
+        if (_info) {
+            this.model.hotelId = _info.id;
+            this.initData();
+        }
+        console.log(this.beforeTree);
+        this.model.parentId = this.beforeTree.id
+        if (this.beforeTree && this.beforeTree.editData) {
+            this.model.name = this.beforeTree.name
+            // this.model.hotelId = this.beforeTree.hotelId
+            this.model.parentId = this.beforeTree.parentId
+            this.model.id = this.beforeTree.id
+            // this.model.hotelId = this.beforeTree
+            // this.model.hotelId = this.beforeTree
+            // this.model.hotelId = this.beforeTree
+            // this.model.hotelId = this.beforeTree
+        }
+        this.modelDefault = JSON.parse(JSON.stringify(this.model));
+        this.getAlldata()
+    },
+    mounted(){
+        // console.log(this.beforeTree);
+    },
+    methods: {
+        /**
+         * 获取初始数据
+         */
+        getAlldata(){
+            getStockTypeList().then(res=>{
+                if (res.success) {
+                    this.selectData = res.result;
+                }
+            })
+            getPosTypeList().then(res=>{
+                if (res.success) {
+                    this.posOptions = res.result.records.map(item=>{
+                        return {
+                            label:item.name,
+                            value:item.id
+                        }
+                    })
+                }
+            })
+        },
+        /**
+         * 选择器选中时
+         */
+        onChangeSelect(val, options){
+            console.log(val);
+            console.log(options);
+            this.model.parentId = val
+        },
+        onChangePos(checkedList){
+            this.indeterminatePos = !!checkedList.length && checkedList.length < this.posOptions.length;
+            this.posCheckAll = checkedList.length === this.posOptions.length;
+        },
+        onChangeFun(checkedList){
+            this.indeterminateFun = !!checkedList.length && checkedList.length < this.funOptions.length;
+            this.funCheckAll = checkedList.length === this.funOptions.length;
+        },
+        onChange(checkedList) {
+           if(checkedList.length == 0){
+              this.$message.error("应用范围必须选择一项!");
+              this.model.applyScope.push("1")
+           }
+         
+        },
+        onCheckAllChangePos(e) {
+            this.model.posType = e.target.checked ? this.posOptions.map(v => v.value) : []
+            this.indeterminatePos = false
+            this.posCheckAll = e.target.checked
+            // Object.assign(this, {
+            //     model:{
+            //         posType: e.target.checked ? this.posOptions.map(v => v.value) : []
+            //     },
+            //     indeterminatePos: false,
+            //     ,
+            // });
+        },
+        onCheckAllChangeFun(e) {   
+            this.model.funType = e.target.checked ? this.funOptions.map(v => v.value) : []
+            this.indeterminateFun = false
+            this.funCheckAll = e.target.checked
+            // Object.assign(this, {
+            //     model:{
+            //         funType: e.target.checked ? this.funOptions.map(v => v.value) : []
+            //     },
+            //     indeterminateFun: false,
+            //     funCheckAll: e.target.checked,
+            // });
+        },
+        initData() {
+            getRoomPlans(this.model.hotelId, null).then((res) => {
+                if (res.success) {
+                    this.roomPlans = res.result;
+                }
+            });
+
+        },
+        selectIcons() {
+            this.iconChooseVisible = true;
+        },
+        handleIconCancel() {
+            this.iconChooseVisible = false;
+        },
+        handleIconChoose(value) {
+            console.log(value);
+            this.model.icon = value;
+            this.iconChooseVisible = false;
+        },
+        add() {
+            this.edit(this.modelDefault);
+        },
+        edit(record) {
+            this.model = Object.assign({}, record);
+            this.visible = true;
+            getSelectList({ id: this.model.id }).then((res) => {
+                if (res.success) {
+                    this.members = res.result;
+                }
+            });
+        },
+        submitForm() {
+            const that = this;
+            // 触发表单验证
+            debugger
+            this.$refs.form.validate((valid) => {
+                if (valid) {
+                    that.confirmLoading = true;
+                    let httpurl = "";
+                    let method = "";
+                    if (!this.model.id) {
+                        httpurl += this.url.add;
+                        method = "post";
+                    } else {
+                        httpurl += this.url.edit;
+                        method = "put";
+                    }
+                    if (this.model.payFlag == 0) {
+                        this.model.payAmount = 0;
+                    }
+                    // that.model.applyScope = that.model.applyScope.toString()
+                    // that.model.posType = that.model.posType.toString()
+                    // that.model.funType = that.model.funType.toString()
+                    // that.model.isQuick = that.model.isQuick?true:false
+                    that.model.state = that.model.state?true:false
+                    httpAction(httpurl, this.model, method)
+                        .then((res) => {
+                            if (res.success) {
+                                that.$message.success(res.message);
+                                that.$emit("ok");
+                            } else {
+                                that.$message.warning(res.message);
+                            }
+                        })
+                        .finally(() => {
+                            that.confirmLoading = false;
+                        });
+                }
+            });
+        },
+    },
+};
+</script>
+<style scoped>
+.avatar-uploader>.ant-upload {
+    width: 104px;
+    height: 104px;
+}
+</style>

+ 53 - 0
src/views/stock/goodsModal/goodType/stockTypeModel.vue

@@ -0,0 +1,53 @@
+<template>
+<j-modal :title="title" :width="width" :visible="visible" switchFullscreen @ok="handleOk" :okButtonProps="{ class:{'jee-hidden': disableSubmit} }" @cancel="handleCancel" cancelText="关闭">
+    <stock-type-form ref="realForm" @ok="submitCallback" :disabled="disableSubmit"></stock-type-form>
+</j-modal>
+</template>
+
+  
+<script>
+import stockTypeForm from './stockTypeForm.vue'
+export default {
+    name: 'stockTypeModel',
+    components: {
+        stockTypeForm
+    },
+    data() {
+        return {
+            title: '',
+            width: 800,
+            visible: false,
+            disableSubmit: false,
+
+        }
+    },
+    methods: {
+        add() {
+            this.visible = true
+            this.$nextTick(() => {
+                this.$refs.realForm.add();
+            })
+        },
+        edit(record) {
+            this.visible = true
+            this.$nextTick(() => {
+                this.$refs.realForm.edit(record);
+            })
+        },
+        close() {
+            this.$emit('close');
+            this.visible = false;
+        },
+        handleOk() {
+            this.$refs.realForm.submitForm();
+        },
+        submitCallback() {
+            this.$emit('ok');
+            this.visible = false;
+        },
+        handleCancel() {
+            this.close()
+        }
+    }
+}
+</script>

+ 273 - 0
src/views/stock/goodsModal/setUnit/index.vue

@@ -0,0 +1,273 @@
+<template>
+  <div>
+    <a-modal destroyOnClose title="单位设置" :footer='null' closable :visible="unitVisible" @cancel="unitCancel" width="70%" >
+        <a-space direction="vertical" style="width:100%">
+            <a-space>
+                <a-input v-model="queryParam.name" placeholder="单位名称" /><a-button @click="searchQuery" type="primary">查询</a-button>
+                <a-button type="primary" @click="addUnit">新增</a-button>
+                <a-button type="primary" @click="batchDelUnit">批量删除</a-button>
+            </a-space>
+            <a-table rowKey="id" :columns="columns" :data-source="dataSource" :row-selection="rowSelection"
+             :pagination="ipagination" @change="handleTableChange" :loading="loading">
+                <span slot="state" slot-scope="record">
+                    {{record?'启用':'停用'}}
+                    <!-- {{record}} -->
+                </span>
+                <span slot="action" slot-scope="text, record">
+                    <a @click="handleEdit(record)">修改</a>
+                    <a-divider type="vertical" />
+                    <a-popconfirm title="确定删除吗?" @confirm="() => handleDelete(record.id)">
+                        <a>删除</a>
+                    </a-popconfirm>
+                </span>
+            </a-table>
+        </a-space>
+    </a-modal>
+    <!-- 新增和修改弹窗 -->
+    <a-modal destroyOnClose :title="titleUnit" :confirm-loading="confirmLoading" closable :visible="addVisible" width="70%" @ok="handleOk" @cancel="handleCancel">
+        <a-form-model ref="ruleForm" :model="ruleForm" :rules="rules" v-bind="layout">
+            <a-form-model-item has-feedback label="名称" prop="name">
+                <a-input v-model="ruleForm.name" autocomplete="off" />
+            </a-form-model-item>
+            <a-form-model-item has-feedback label="是否启用" prop="">
+                <a-switch :defaultChecked="ruleForm.state" @change="switchState" />
+            </a-form-model-item>
+        </a-form-model>
+    </a-modal>
+  </div>
+</template>
+
+<script>
+import { JeecgListMixin } from "@/mixins/JeecgListMixin";
+import { getUnit, addUnit, editUnit, delUnit, batchDelUnit } from '@/api/good'
+const columns = [
+  {
+    title: '商家',
+    dataIndex: 'name',
+    key: 'name',
+    align:'center'
+  },
+  {
+    title: '单位名称',
+    dataIndex: 'name',
+    key: 'age',
+    align:'center'
+  },
+  {
+    title: '最近更新',
+    dataIndex: 'updateAt',
+    key: 'updateAt',
+    align:'center'
+  },
+  {
+    title: '状态',
+    dataIndex: 'state',
+    // key: 'address',
+    scopedSlots: { customRender: "state" },
+    align:'center'
+  },
+  {
+    title: '操作',
+    dataIndex: 'action',
+    key: 'action',
+    scopedSlots: { customRender: "action" },
+    align:'center'
+  },
+];
+const rowSelection = {
+  onChange: (selectedRowKeys, selectedRows) => {
+    console.log(`selectedRowKeys: ${selectedRowKeys}`, 'selectedRows: ', selectedRows);
+  },
+  onSelect: (record, selected, selectedRows) => {
+    console.log(record, selected, selectedRows);
+    console.log(this.delDataArr);
+  },
+  onSelectAll: (selected, selectedRows, changeRows) => {
+    console.log(selected, selectedRows, changeRows);
+  },
+};
+const validatePass = (rule, value, callback) => {
+    //   if (value === '') {
+    //     callback(new Error('Please input the password'));
+    //   } else {
+    //     if (this.ruleForm.checkPass !== '') {
+    //       this.$refs.ruleForm.validateField('checkPass');
+    //     }
+        // callback();
+    //   }
+    };
+export default {
+    props:{
+        unitVisible:{
+            type:Boolean
+        }
+    },
+    mixins:[JeecgListMixin],
+    data(){
+        return{
+            queryParam:{},
+            columns,
+            dataSource:[],
+            titleUnit:'添加',
+            // rowSelection,
+            page:1,
+            pageSize:10,
+            addVisible:false,
+            ruleForm:{
+                name:'',
+                checked:true
+            },
+            rules:{
+                name: [{ required: true, message: "名称不能为空!" }],
+                state: [{ validator:validatePass}],
+            },
+            layout: {
+                labelCol: { span: 4 },
+                wrapperCol: { span: 14 },
+            },
+            confirmLoading:false,
+            hotelId:null,
+            editUnitData:{},
+            delDataArr:[],
+            //分页参数
+            ipagination: {
+                current: 1,
+                pageSize: 10,
+                pageSizeOptions: ["10", "20", "30"],
+                showTotal: (total, range) => {
+                return range[0] + "-" + range[1] + " 共" + total + "条";
+                },
+                showQuickJumper: true,
+                showSizeChanger: true,
+                total: 0,
+            },
+            url:{
+                list:'/rooms/cesGoodsUnit/list'
+            }
+        }
+    },
+    created(){
+
+    },
+    mounted(){
+        this.getData()
+        this.hotelId = JSON.parse(localStorage.getItem('storeInfo')).id
+    },
+    computed:{
+        rowSelection(){
+            return {
+                onChange: (selectedRowKeys, selectedRows) => {
+                    console.log(`selectedRowKeys: ${selectedRowKeys}`, 'selectedRows: ', selectedRows);
+                    if (selectedRows.length>0) {
+                        //获取选中数据的id
+                        this.delDataArr = selectedRows.map(i=> i.id).toString()
+                        console.log(this.delDataArr);
+                    }
+                },
+                onSelect: (record, selected, selectedRows) => {
+                    console.log(record, selected, selectedRows);
+                },
+                onSelectAll: (selected, selectedRows, changeRows) => {
+                    console.log(selected, selectedRows, changeRows);
+                },
+            }
+        }
+    },
+    methods:{
+        getData(){
+            getUnit({pageNo:this.page,pageSize:this.pageSize}).then(res=>{
+                console.log(res);
+                if (res.code && res.code==200) {
+                    this.dataSource = res.result.records
+                }
+            })
+        },
+        addUnit(){
+            this.ruleForm = {name:'', state:false}
+            this.addVisible = true
+            this.titleUnit = '添加'
+        },
+        unitCancel(){
+            this.$emit('center')
+            // this.unitVisible=false
+        },
+        handleEdit(e){
+            this.titleUnit = '修改'
+            this.ruleForm.name = e.name
+            this.ruleForm.state = e.state
+            this.editUnitData = e
+            this.addVisible = true
+            console.log(e);
+        },
+        handleDelete(e){
+            console.log(e);
+            delUnit({id:e}).then(res=>{
+                if (res.code && res.code==200) {
+                    this.$message.success(res.message)
+                    this.getData()
+                }else{
+                    this.$message.error(res.message)
+                }
+            })
+        },
+        handleOk(e) {
+            this.confirmLoading = true
+            if (this.titleUnit=='添加') {
+                addUnit({hotelId:this.hotelId, name:this.ruleForm.name, state:this.ruleForm.state}).then(res=>{
+                if (res.code && res.code==200) {
+                    this.$message.success(res.message)
+                    this.confirmLoading = false
+                    this.addVisible=false
+                    this.getData()
+                }else{
+                    this.$message.error(res.message)
+                }
+            })
+            }else{
+                this.editUnitData.name = this.ruleForm.name
+                this.editUnitData.state = this.ruleForm.state
+                editUnit(this.editUnitData).then(res=>{
+                    if (res.code && res.code==200) {
+                        this.$message.success(res.message)
+                        this.confirmLoading = false
+                        this.addVisible=false
+                    }else{
+                        this.$message.error(res.message)
+                    }
+                })
+            }
+        },
+        handleCancel(e) {
+            console.log('点击了取消');
+            this.addVisible = false;
+        },
+        switchState(e){
+            console.log(e);
+            this.ruleForm.state = e
+            console.log(this.ruleForm.state);
+        },
+        batchDelUnit(){
+            this.$confirm({
+                title: '提示',
+                content: '确认要删除吗',
+                okText: '确认',
+                cancelText: '取消',
+                onOk:(e)=>{
+                    console.log(e);
+                    return batchDelUnit({idsStr:this.delDataArr}).then(res=>{
+                        if (res.code && res.code==200) {
+                            this.$message.success(res.message)
+                            this.getData()
+                        }else{
+                            this.$message.error(res.message)
+                        }
+                    })
+                }
+            });
+        },
+    }
+}
+</script>
+
+<style>
+</style>