Pārlūkot izejas kodu

Merge branch 'master' of http://49.4.53.36:3000/hotel/hotel-saas-tenant-frontend

gqx 2 gadi atpakaļ
vecāks
revīzija
654981ab12

+ 115 - 0
src/api/good.js

@@ -13,5 +13,120 @@ export function tree(parameter) {
     })
 }
 
+/**
+ * 刪除商品分类
+ * @param {*} parameter 
+ * @returns 
+ */
+export function delTree(parameter){
+    return axios({
+        url: '/rooms/cesStockType/delete',
+        method:'delete',
+        params:parameter
+    })
+}
+
+/**
+ * 修改商品分类
+ * @param {*} parameter 
+ * @returns 
+ */
+export function editTree(parameter){
+    return axios({
+        url:'/rooms/cesStockType/modify',
+        method:'put',
+        params:parameter
+    })
+}
+
+/**
+ * 获取商品单位数据
+ * @param {*} parameter 
+ * @returns 
+ */
+export function getUnit(parameter){
+    return axios({
+        url:'/rooms/cesGoodsUnit/list',
+        method:'get',
+        params:parameter
+    })
+}
 
+/**
+ * 新增单位
+ * @param {*} parameter 
+ * @returns 
+ */
+export function addUnit(parameter){
+    return axios({
+        url:'/rooms/cesGoodsUnit/save',
+        method:'post',
+        data:parameter
+    })
+}
 
+/**
+ * 修改单位
+ * @param {*} data 
+ * @returns 
+ */
+export function editUnit(data){
+    return axios({
+        url:'/rooms/cesGoodsUnit/modify',
+        method:'put',
+        data:data
+    })
+}
+
+
+/**
+ * 删除商品单位
+ * @param {*} id 
+ * @returns 
+ */
+export function delUnit(hotelId){
+    return axios({
+        url:'/rooms/cesGoodsUnit/remove',
+        method:'delete',
+        params:hotelId
+    })
+}
+
+/**
+ * 批量删除
+ * @param {*} data 
+ * @returns 
+ */
+export function batchDelUnit(parameter){
+    return axios({
+        url:'/rooms/cesGoodsUnit/deleteBatch',
+        method:'post',
+        data:parameter
+    })
+}
+
+/**
+ * 商品批量删除
+ * @param {*} parameter 
+ * @returns 
+ */
+export function goodBatchDel(parameter){
+    return axios({
+        url:'/rooms/cesGoods/delBatch',
+        method:'delete',
+        data:parameter
+    })
+}
+
+/**
+ * 进退货
+ * @param {*} parameter 
+ * @returns 
+ */
+export function goodSet(parameter){
+    return axios({
+        url:"/rooms/cesGoodStockRecords/create",
+        method:'post',
+        data:parameter
+    })
+}

+ 322 - 31
src/views/settings/components/roomModules/goodList.vue

@@ -1,8 +1,8 @@
 <template>
     <div class="back">
         <div class="back-left">
-            <a-button @click="handleStockTypeModelManager(undefined,1)">添加分类</a-button>
-            <a-button style="margin-left: 30px;">单位设置</a-button>
+            <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;">
@@ -10,7 +10,13 @@
                     <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-button style="font-size: 12px; padding: 0 5px;" type="link" @click="() => { $message.success('删除--' + item.id) }">删除</a-button>
+                    <!-- <a-button style="font-size: 12px; padding: 0 5px;" type="link" @click="confirmDel(item.id)">删除</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>
@@ -34,11 +40,11 @@
                                     <a-button type="primary" @click="handleAdd">新增商品</a-button>
                                 </span>
                                 <span style="float:left; overflow: hidden">
-                                    <a-button type="danger" @click="searchQuery">批量删除</a-button>
+                                    <a-button type="danger" @click="goodBatchDel">批量删除</a-button>
                                 </span>
                                 <span style="float:left; overflow: hidden;">
-                                    <a-button type="primary" style="background-color:coral;border: none"
-                                        @click="searchQuery">进退货</a-button>
+                                    <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"
@@ -50,30 +56,127 @@
                 </div>
                 <!-- 查询区域-END -->
                 <div>
-                    <a-table ref="table" size="middle" :scroll="{ x: true }" bordered rowKey="id" :columns="columns"
-                        :dataSource="dataSource" :pagination="ipagination" :loading="false" :rowSelection="{
+                    <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>
-                <!-- <room-layout-form ref="modalForm" @ok="modalFormOk"></room-layout-form> -->
+                <!-- 进退货弹窗 -->
+                <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;盘
+                        </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 -->
+                <!-- 更多设置弹窗 -->
+                <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 } from '@/api/good'
+import { tree, delTree, goodBatchDel, goodSet } from '@/api/good'
 import { JeecgListMixin } from "@/mixins/JeecgListMixin";
+import roomLayoutForm from './goodStock/goods'
 import stockTypeModel from './stockTypeModel.vue'
+import Commodity from './moreSet/commodity.vue'
+import GoodImg from './moreSet/goodImg.vue';
+import { computed } from 'vue';
+import SetUnit from './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
+        stockTypeModel,
+        roomLayoutForm,
+        SetUnit,
+        Commodity,
+        GoodImg
       },
     data() {
         return {
@@ -97,9 +200,16 @@ export default {
                         },
                     ],
                 },],
+
+            key: 'tab1',
+            noTitleKey: 'commodity',
+
             checkedKeys: [''],
+            tabListNoTitle,
             selectedKeys: [],
             queryParam: {},
+            //单位对话框
+            unitVisible:false,
             // 分页参数
             ipagination: {
                 current: 1,
@@ -118,78 +228,127 @@ export default {
                     title: "商家",
                     align: "center",
                     dataIndex: "hotelName",
+                    customCell:() => {
+                        return {
+                        style: {
+                            wordWrap:'break-word',
+                            wordBreak:'break-all',
+                            whiteSpace:'normal',
+                            minHeight:'50px',
+                            width: '50px',
+                        }
+                        }
+                    }
                 },
                 {
                     title: "分类",
                     align: "center",
-                    dataIndex: "cover",
-
+                    dataIndex: "typeName",
+                    customCell:() => {
+                        return {
+                        style: {
+                            wordWrap:'break-word',
+                            wordBreak:'break-all',
+                            whiteSpace:'normal',
+                            minHeight:'50px',
+                            width: '50px',
+                        }
+                        }
+                    }
                 },
                 {
                     title: "单位",
                     align: "center",
-                    dataIndex: "name",
-
+                    dataIndex: "unitName",
+                    customCell:() => {
+                        return {
+                        style: {
+                            wordWrap:'break-word',
+                            wordBreak:'break-all',
+                            whiteSpace:'normal',
+                            minHeight:'50px',
+                            width: '50px',
+                        }
+                        }
+                    }
                 },
                 {
                     title: "条码",
                     align: "center",
-                    dataIndex: "marketPrice",
+                    dataIndex: "barCode",
                 },
                 {
                     title: "名称",
                     align: "center",
-                    dataIndex: "canLivePersonNum",
+                    dataIndex: "name",
                 },
                 {
                     title: "进价",
                     align: "center",
-                    dataIndex: "num",
+                    dataIndex: "bid",
                 },
                 {
                     title: "售价",
                     align: "center",
-                    dataIndex: "state",
+                    dataIndex: "sellingPrice",
 
                 },
 
                 {
                     title: "进货量",
                     align: "center",
-                    dataIndex: "appState",
+                    dataIndex: "purchases",
 
                 },
                 {
                     title: "销售量",
                     align: "center",
-                    dataIndex: "appState2",
+                    dataIndex: "salesVolume",
 
                 },
                 {
                     title: "库存量",
                     align: "center",
-                    dataIndex: "storeNum",
+                    dataIndex: "inventory",
 
                 },
                 {
                     title: "排序",
                     align: "center",
-                    dataIndex: "appState3",
+                    dataIndex: "sort",
 
                 },
                 {
-                    title: "操作",
-                    dataIndex: "action",
+                    title: "最近更新",
                     align: "center",
-                    fixed: "right",
-                    width: 147,
+                    dataIndex: "updateAt",
+
                 },
+                {
+                    title: '状态',
+                    dataIndex: 'appState',
+                    // 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: "/rooms/cesRoomLayout/list?hotelId",
-                delete: "/rooms/cesRoomLayout/remove",
-                deleteBatch: "/rooms/cesRoomLayout/deleteBatch",
+                list:'/rooms/cesGoods/list',
+                // list: "/rooms/cesRoomLayout/list?hotelId",
+                // delete: "/rooms/cesRoomLayout/remove",
+                delete:'/rooms/cesGoods/delete',
+                // deleteBatch: "/rooms/cesRoomLayout/deleteBatch",
+                deleteBatch:'/rooms/cesGoods/delBatch',
                 exportXlsUrl: "/rooms/cesRoomLayout/exportXls",
                 importExcelUrl:"rooms/cesRoomLayout/importExcel",
             },
@@ -201,6 +360,14 @@ export default {
                 order: "desc",
             },
             stockTypeVisible:false,
+            // 选中的数据
+            beforeTree:null,
+            goodsSetVisible:false,//进退货弹窗
+            moreSetVisible:false,//更多设置弹窗
+            goodsSetData:{
+                number:0,
+                type:1
+            }
         };
     },
     computed: {
@@ -212,9 +379,22 @@ export default {
     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
         },
@@ -235,6 +415,117 @@ export default {
             console.log('onSelect', info);
             this.selectedKeys = selectedKeys;
         },
+        /**
+         * 保存成功
+         */
+        onSave(){
+            this.loadTree()
+        },
+        /**
+         * 删除
+         */
+        confirmDel(id){
+            delTree({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(e){
+            console.log(e);
+            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>

+ 60 - 0
src/views/settings/components/roomModules/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>

+ 333 - 0
src/views/settings/components/roomModules/goodStock/goodsForm.vue

@@ -0,0 +1,333 @@
+<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" type='flex' justify="start">
+                    <a-form-model-item label="分类" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="">
+                        <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-row>
+            <a-row>
+                <a-col :span="12" type='flex' justify="start">
+                    <a-form-model-item style="width:100%" label="单位" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="">
+                        <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="">
+                        <a-input v-model="model.barCode" placeholder="请填写条码" />
+                    </a-form-model-item>
+                </a-col>
+                <a-col :span="12">
+                    <a-form-model-item label="名称" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="">
+                        <a-input v-model="model.name" 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="">
+                        <a-input-number v-model="model.bid" :min="0" />
+                    </a-form-model-item>
+                </a-col>
+                <a-col :span="12">
+                    <a-form-model-item label="售价" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="">
+                        <a-input-number v-model="model.sellingPrice" :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="">
+                        <a-input-number v-model="model.purchases" :min="0" />
+                    </a-form-model-item>
+                </a-col>
+                <a-col :span="12">
+                    <a-form-model-item label="销售量" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="">
+                        <a-input-number v-model="model.salesVolume" :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="">
+                        <a-input-number v-model="model.inventory" :min="0" />
+                    </a-form-model-item>
+                </a-col>
+                <a-col :span="12">
+                    <a-form-model-item label="是否启用" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="">
+                        <a-switch :checked="model.appState" @change="switchState" ></a-switch>
+                    </a-form-model-item>
+                </a-col>
+            </a-row>
+            <a-row>
+                <a-col :span="16" type='flex' justify="start">
+                    <a-form-model-item style="width:100%" label="启用库存模块" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="">
+                        <a-switch></a-switch>
+                    </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: '',
+                bid:null,
+                name:'',
+                sellingPrice:'',
+                purchases:null,
+                salesVolume:null,
+                inventory:null,
+                appState:null
+            },
+            labelCol: {
+                xs: {
+                    span: 24
+                },
+                sm: {
+                    span: 5
+                },
+            },
+            wrapperCol: {
+                xs: {
+                    span: 24
+                },
+                sm: {
+                    span: 16
+                },
+            },
+            confirmLoading: false,
+            validatorRules: {
+                name: [{
+                    required: true,
+                    message: "请输入房型!"
+                }],
+                marketPrice: [{
+                    required: true,
+                    message: "请填写门市价!"
+                }],
+                canLivePersonNum: [{
+                    required: true,
+                    message: "请填写可住人数!"
+                }],
+                breakfastNum: [{
+                    required: true,
+                    message: "请填写早餐数量!"
+                }],
+                lunchNum: [{
+                    required: true,
+                    message: "请填写中餐数量!"
+                }],
+                dinnerNum: [{
+                    required: true,
+                    message: "请填写晚餐数量!"
+                }],
+            },
+            url: {
+                // add: "/rooms/cesRoomLayout/save",
+                add:'/rooms/cesGoods/create',
+                // edit: "/rooms/cesRoomLayout/modify",
+                edit:'/rooms/cesGoods/modify',
+                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;
+                    }
+                    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.appState = e
+        }
+    },
+};
+</script>
+
+<style scoped>
+.avatar-uploader>.ant-upload {
+    width: 104px;
+    height: 104px;
+}
+</style>

+ 271 - 0
src/views/settings/components/roomModules/moreSet/commodity.vue

@@ -0,0 +1,271 @@
+<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" type='flex' justify="start">
+                    <a-form-model-item label="app是否上架" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="">
+                        <a-switch :checked="model.appState" @change="switchState" ></a-switch>
+                    </a-form-model-item>
+                </a-col>
+            </a-row>
+            <a-row>
+                <a-col :span="12" type='flex' justify="start">
+                    <a-form-model-item style="width:100%" label="能否储值卡" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="">
+                        <a-switch :checked="model.appState" @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="">
+                        <a-switch :checked="model.appState" @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="">
+                        <a-input-number v-model="model.bid" :min="0" />
+                    </a-form-model-item>
+                </a-col>
+            </a-row>
+            <a-row>
+                <a-col :span="24">
+                    <a-form-model-item label="描述" :labelCol="{span:'2',offset:'0'}" :wrapperCol="wrapperCol" prop="">
+                        <j-editor />
+                    </a-form-model-item>
+                </a-col>
+            </a-row>
+        </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: '',
+                bid:null,
+                name:'',
+                sellingPrice:'',
+                purchases:null,
+                salesVolume:null,
+                inventory:null,
+                appState:null
+            },
+            labelCol: {
+                xs: {
+                    span: 24
+                },
+                sm: {
+                    span: 5
+                },
+            },
+            wrapperCol: {
+                xs: {
+                    span: 24
+                },
+                sm: {
+                    span: 16
+                },
+            },
+            confirmLoading: false,
+            validatorRules: {
+                name: [{
+                    required: true,
+                    message: "请输入房型!"
+                }],
+                marketPrice: [{
+                    required: true,
+                    message: "请填写门市价!"
+                }],
+                canLivePersonNum: [{
+                    required: true,
+                    message: "请填写可住人数!"
+                }],
+                breakfastNum: [{
+                    required: true,
+                    message: "请填写早餐数量!"
+                }],
+                lunchNum: [{
+                    required: true,
+                    message: "请填写中餐数量!"
+                }],
+                dinnerNum: [{
+                    required: true,
+                    message: "请填写晚餐数量!"
+                }],
+            },
+            url: {
+                // add: "/rooms/cesRoomLayout/save",
+                add:'/rooms/cesGoods/create',
+                // edit: "/rooms/cesRoomLayout/modify",
+                edit:'/rooms/cesGoods/modify',
+                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;
+                    }
+                    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.appState = e
+        }
+    },
+};
+</script>
+
+<style scoped>
+.avatar-uploader>.ant-upload {
+    width: 104px;
+    height: 104px;
+}
+</style>

+ 87 - 0
src/views/settings/components/roomModules/moreSet/goodImg.vue

@@ -0,0 +1,87 @@
+<template>
+  <div class="clearfix">
+        <a-row>
+            <a-col>商品大图</a-col>
+            <a-col>
+                <a-upload action="https://www.mocky.io/v2/5cc8019d300000980a055e76"
+                list-type="picture-card"
+                :file-list="fileList"
+                @preview="handlePreview"
+                @change="handleChange">
+                <div v-if="fileList.length < 8">
+                    <a-icon type="plus" />
+                    <div class="ant-upload-text">
+                    Upload
+                    </div>
+                </div>
+                </a-upload>
+            </a-col>
+        </a-row>
+        <a-row>
+            <a-col>图片</a-col>
+            <a-col>
+                <a-upload action="https://www.mocky.io/v2/5cc8019d300000980a055e76"
+                list-type="picture-card"
+                :file-list="fileList"
+                @preview="handlePreview"
+                @change="handleChange">
+                <div v-if="fileList.length < 8">
+                    <a-icon type="plus" />
+                    <div class="ant-upload-text">
+                    Upload
+                    </div>
+                </div>
+                </a-upload>
+            </a-col>
+        </a-row>
+    <a-modal :visible="previewVisible" :footer="null" @cancel="handleCancel">
+      <img alt="example" style="width: 100%" :src="previewImage" />
+    </a-modal>
+  </div>
+</template>
+<script>
+function getBase64(file) {
+  return new Promise((resolve, reject) => {
+    const reader = new FileReader();
+    reader.readAsDataURL(file);
+    reader.onload = () => resolve(reader.result);
+    reader.onerror = error => reject(error);
+  });
+}
+export default {
+  data() {
+    return {
+      previewVisible: false,
+      previewImage: '',
+      fileList: [],
+    };
+  },
+  methods: {
+    handleCancel() {
+      this.previewVisible = false;
+    },
+    async handlePreview(file) {
+      if (!file.url && !file.preview) {
+        file.preview = await getBase64(file.originFileObj);
+      }
+      this.previewImage = file.url || file.preview;
+      this.previewVisible = true;
+    },
+    handleChange({ fileList }) {
+      this.fileList = fileList;
+    },
+  },
+};
+</script>
+<style>
+/* you can make up upload button and sample style by using stylesheets */
+.ant-upload-select-picture-card i {
+  font-size: 32px;
+  color: #999;
+}
+
+.ant-upload-select-picture-card .ant-upload-text {
+  margin-top: 8px;
+  color: #666;
+}
+</style>

+ 273 - 0
src/views/settings/components/roomModules/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>

+ 88 - 36
src/views/settings/components/roomModules/stockTypeForm.vue

@@ -5,40 +5,42 @@
                 <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-select  style="width: 120px" v-model="model.canLivePersonNum" defaultValue="0">
-                        <a-select-option value ="0">{{"顶级目录"}}</a-select-option>
-                        <a-select-option v-for="d in selectData" :key="d.value">
+                <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.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.canLivePersonNum" />
+                    <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.checkedList" :options="plainOptions" @change="onChange" />
+                    <!-- <a-checkbox-group :disabled='beforeTree.parentId!=0 && !beforeTree.editData' v-model="model.applyScope" :options="plainOptions" @change="onChange" /> -->
+                    <a-checkbox-group v-model="model.applyScope" :options="plainOptions" @change="onChange" />
                 </a-form-model-item>
-                <a-form-model-item v-show="model.checkedList.includes('2')" label="POS类型" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="posType">
+                <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 v-model="model.postTypes" :options="posOptions" @change="onChangePos" />
+                    <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.checkedList.includes('3')" label="娱乐类型" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="funType">
+                <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 v-model="model.funTypes" :options="funOptions" @change="onChangeFun" />
+                    <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.dinnerNum" :min="0"  placeholder="请输入排序"/>
+                    <a-input-number style="width:50%;" v-model="model.sort" :min="0"  placeholder="请输入排序"/>
                 </a-form-model-item>
             </a-form-model>
 
@@ -50,10 +52,15 @@
 import { getRoomPlans, getSelectList } from "@/api/api";
 import { httpAction, getAction } from "@/api/manage";
 import { validateDuplicateValue } from "@/utils/util";
-
+import { tree } from '@/api/good'
 
 export default {
     name: "BusMarketMemberForm",
+    inject:{
+        beforeTree:{
+            default:{id:0}
+        }
+    },
     props: {
         disabled: {
 
@@ -86,16 +93,21 @@ export default {
             ],
             selectData:[],
             model: {
-                id: "",
-                hotelId: 0,
-                name: null,
-                marketPrice: null,
-                canLivePersonNum: true,
-                breakfastNum: 0,
-                lunchNum: 0,
-                checkedList: ["1"],
-                postTypes:[],
-                funTypes:[]
+                // id: "",
+                name: null, //名字
+                hotelId: 0, //酒店id
+                parentId: 0, //上级id
+                // 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 },
@@ -107,16 +119,17 @@ export default {
             },
             confirmLoading: false,
             validatorRules: {
-                name: [{ required: true, message: "请输入房型!" }],
-                marketPrice: [{ required: true, message: "请填写门市价!" }],
-                canLivePersonNum: [{ required: true, message: "请填写可住人数!" }],
-                breakfastNum: [{ required: true, message: "请填写早餐数量!" }],
-                lunchNum: [{ required: true, message: "请填写中餐数量!" }],
-                dinnerNum: [{ required: true, message: "请填写晚餐数量!" }],
+                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: "/rooms/cesRoomLayout/save",
-                edit: "/rooms/cesRoomLayout/modify",
+                add: "/rooms/cesStockType/create",
+                edit: "/rooms/cesStockType/modify",
                 queryById: "/rooms/cesRoomLayout/queryById",
             },
             iconChooseVisible: false,
@@ -135,9 +148,43 @@ export default {
             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(){
+            tree().then(res=>{
+                if (res.success) {
+                    this.selectData = res.result;
+                }
+            })
+        },
+        /**
+         * 选择器选中时
+         */
+        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;
@@ -149,29 +196,29 @@ export default {
         onChange(checkedList) {
            if(checkedList.length == 0){
               this.$message.error("应用范围必须选择一项!");
-              this.model.checkedList.push("1")
+              this.model.applyScope.push("1")
            }
          
         },
         onCheckAllChangePos(e) {   
-            this.model.postTypes = e.target.checked ? this.posOptions.map(v => v.value) : []
+            this.model.posType = e.target.checked ? this.posOptions.map(v => v.value) : []
             this.indeterminatePos = false
             this.posCheckAll = e.target.checked
             // Object.assign(this, {
             //     model:{
-            //         postTypes: e.target.checked ? this.posOptions.map(v => v.value) : []
+            //         posType: e.target.checked ? this.posOptions.map(v => v.value) : []
             //     },
             //     indeterminatePos: false,
             //     ,
             // });
         },
         onCheckAllChangeFun(e) {   
-            this.model.funTypes = e.target.checked ? this.funOptions.map(v => v.value) : []
+            this.model.funType = e.target.checked ? this.funOptions.map(v => v.value) : []
             this.indeterminateFun = false
             this.funCheckAll = e.target.checked
             // Object.assign(this, {
             //     model:{
-            //         funTypes: e.target.checked ? this.funOptions.map(v => v.value) : []
+            //         funType: e.target.checked ? this.funOptions.map(v => v.value) : []
             //     },
             //     indeterminateFun: false,
             //     funCheckAll: e.target.checked,
@@ -226,6 +273,11 @@ export default {
                     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) {