DESKTOP-B78GIPM\admin лет назад: 2
Родитель
Сommit
a20b917438

+ 185 - 6
src/views/fangwu/index.vue

@@ -28,7 +28,7 @@
                     <a-card class="card">
                         <div class="assign-flex">
                             <div>今日待派房间<span>0</span>间,已经分配了<span>0</span>间,剩余<span>0</span>间</div>
-                            <div style="color:#1890FF">点击分配</div>
+                            <div style="color:#1890FF" @click="showAssignModal">点击分配</div>
                         </div>
                         <div style="text-indent: 2em;" class="assign-content">
                             <div v-for="(item, index) in 15" :key="index">
@@ -40,14 +40,14 @@
                         <div>
                             <div>房务审核记录及调整</div>
                         </div>
-                        <div class="assgin-center">0条需要审核,点击查看> </div>
+                        <div class="assgin-center">0条需要审核,<span @click="lookLook">点击查看></span> </div>
                     </a-card>
                     <a-card class="card">
                         <div>
                             <div>房屋审核记录及调整</div>
                         </div>
                         <div class="assgin-right">
-                            <a-button>点击设置</a-button>
+                            <a-button @click="auditRecords">点击设置</a-button>
                         </div>
                     </a-card>
                 </div>
@@ -72,7 +72,7 @@
                         <a-range-picker v-show="activeIndex==4" @change="onChange" size="large" />
                     </div>
 
-                    <a-button style="background:#1890ff;color:#fff;">配置易耗品</a-button>
+                    <a-button @click="dispose" style="background:#1890ff;color:#fff;">配置易耗品</a-button>
                 </div>
                 <a-card class="card">
                     <div>
@@ -97,6 +97,64 @@
             <HouseTypeConsumablesVue />
         </a-tab-pane>
     </a-tabs>
+    <!-- 分派房务弹窗 -->
+    <a-modal v-model="assignVisible" title="分派房务" @ok="handleAssignOk" width="70%">
+        <div style="background-color: #ecf8ff; display: flex; justify-content: center; align-items: center;height:40px;border-radius:5px;overflow: hidden;">
+            <div style="width: 10px; height: 100%; background-color: #1890FF;"> </div>
+            <div style="text-align: center;flex:1;">剩余脏房 {{0}} 间 续(脏)房 {{5}} 间 退(脏)房 {{1}} 间</div>
+        </div>
+        <a-table ref="table" size="middle" :scroll="{ x: true, y: 600 }" bordered rowKey="id" :columns="columns" :dataSource="dataSource" :pagination="false" :loading="loading" :rowSelection="{
+          selectedRowKeys: selectedRowKeys,
+          onChange: onSelectChange,
+        }" class="j-table-force-nowrap" @change="handleTableChange">
+
+            <template slot="houseDetail" slot-scope="text, record">
+                <div>
+                    退(脏)房: <span class="check-out" v-for="(item, index) in !record || 6" :key="index">{{8306+index + ''}}</span>
+                </div>
+                <div style="margin-top:10px;">
+                    续(脏)房: <span class="continue" v-for="(item, index) in !record || 6" :key="index">{{210+index + ''}}</span>
+                </div>
+            </template>
+            <template slot="prefix_name" slot-scope="text, record">
+                {{ (record.prefix || "") + record.name }}
+            </template>
+            <template slot="htmlSlot" slot-scope="text">
+                <div v-html="text"></div>
+            </template>
+            <span slot="action" slot-scope="text, record">
+                <a @click="handVisible = true">手动分房</a>
+            </span>
+        </a-table>
+    </a-modal>
+    <!-- 手动分房弹窗 -->
+    <a-modal v-model="handVisible" title="房间列表" @ok="handVisible=false" width="50%">
+        <a-card title="退(脏)房">
+            <div style="display:flex; margin-right:6px;flex-wrap:wrap;">
+                <div @click="checkOut(item)" class="check-out" v-for="item in 5" :key="item.id">{{item}}</div>
+            </div>
+        </a-card>
+        <br />
+        <a-card title="续(脏)房">
+            <div style="display:flex; margin-right:6px;flex-wrap:wrap;">
+                <div @click="continueHouse(item)" class="check-out" v-for="item in 5" :key="item.id">{{item}}</div>
+            </div>
+        </a-card>
+    </a-modal>
+
+    <!-- 手动分房弹窗结束 -->
+    <!-- 分派房弹窗结束 -->
+
+    <!-- 房务审核记录及调整点击查看弹窗 -->
+    <LookLookVue ref="lookModal" />
+    <!-- 房务审核记录及调整点击查看弹窗结束 -->
+
+    <!-- 房务审核记录及调整点击设置弹窗 -->
+    <AuditRecords ref="auditModal" />
+    <!-- 结束 -->
+    <!-- 配置易耗品弹窗 -->
+    <ConfigureConsumables ref="configModal" />
+    <!-- 配置易耗品弹窗结束 -->
 </a-card>
 </template>
 
@@ -106,18 +164,82 @@ import ClearRoomManagement from './tabList/clearRoomManagement.vue'
 import HouseTypeConsumablesVue from './tabList/houseTypeConsumables.vue'
 import LockRoomRecords from './tabList/LockRoomRecords.vue'
 import MaintenanceRecords from './tabList/maintenanceRecords.vue'
+import LookLookVue from './modalList/lookLook.vue'
+import AuditRecords from './modalList/auditRecords.vue'
+import ConfigureConsumables from './modalList/configureConsumables.vue'
+
+import {
+    JeecgListMixin
+} from "@/mixins/JeecgListMixin";
+// import roomNumModal from "./roomNumModal.vue"; // todo roomLayoutForm 需要替换成房型的表单弹窗
+// import roomImgs from './roomImagesForm.vue'
+import {
+    getAllLayouts
+} from "@/api/roomLayout";
+import {
+    delBatch,
+    delAll
+} from '@/api/roomBuildingApi'
+
+let hotelInfo = JSON.parse(localStorage.getItem("storeInfo"));
 export default {
+    mixins: [JeecgListMixin],
     components: {
         ClearRecords,
         MaintenanceRecords,
         LockRoomRecords,
         ClearRoomManagement,
-        HouseTypeConsumablesVue
+        HouseTypeConsumablesVue,
+        LookLookVue,
+        AuditRecords,
+        ConfigureConsumables
     },
     data() {
         return {
             list: ['今天', '昨日', '本周', '本月', '更多'],
             activeIndex: 0,
+            dataSource:[],
+            assignVisible: false,
+            handVisible: false,
+            // 表头
+            columns: [{
+                    title: "姓名",
+                    align: "center",
+                    dataIndex: "hotelName",
+                },
+                {
+                    title: "退房",
+                    // align: "center",
+                    dataIndex: "房间明细",
+                    scopedSlots: {
+                        customRender: "houseDetail"
+                    },
+                },
+                {
+                    title: "操作",
+                    dataIndex: "action",
+                    align: "center",
+                    fixed: "right",
+                    width: 147,
+                    scopedSlots: {
+                        customRender: "action"
+                    },
+                },
+            ],
+            url: {
+                // list: 'org.jeecg.modules.business/busMarketMember/list',
+                list: "/rooms/cesRooms/list",
+                delete: "/rooms/cesRooms/remove",
+                deleteBatch: "/rooms/cesRooms/deleteBatch",
+                exportXlsUrl: "/rooms/cesRooms/exportXls",
+                importExcelUrl: "rooms/cesRooms/importExcel",
+            },
+            buildingFloorSearchTag: {
+                name: null
+            },
+            dictOptions: {},
+            superFieldList: [],
+            selectedRowKeys: [],
         }
     },
     methods: {
@@ -131,9 +253,44 @@ export default {
         onChange(date, dateString) {
             console.log(date, dateString)
         },
+        //点击弹出框
+        showAssignModal() {
+            this.assignVisible = true
+        },
+        handleAssignOk() {
+            this.assignVisible = false
+        },
+        continueHouse(item) {
+            console.log(item)
+        },
+        checkOut(item) {
+            console.log(item)
+        },
+        lookLook() {
+            this.$refs.lookModal.visible = true
+            this.$refs.lookModal.title = '房务审核'
+        },
+        //房务审核记录设置
+        auditRecords() {
+            this.$refs.auditModal.visible = true
+            this.$refs.auditModal.title = '分派规则'
+        },
+        /**
+         * 配置易耗品
+         */
+        dispose(){
+            this.$refs.configModal.visible = true
+            this.$refs.configModal.title = '配置易耗品'
+        }
     },
     mounted() {
-
+        getAllLayouts().then((res) => {
+            if (res.code == 200) {
+                this.layouts = res.result.records;
+                this.loadData();
+            }
+        });
+        
     }
 }
 </script>
@@ -219,4 +376,26 @@ export default {
 h3 {
     margin-top: 15px;
 }
+.check-out{
+    // width: 22px;
+    // height: 12px;
+    background: #909399;
+    padding: 5px;
+    color: #fff;
+    border-radius: 5px;
+    border: 1px solid #c9caca;
+    display: inline-block;
+    vertical-align: middle;
+    margin-right: 10px;
+}
+.continue{
+    background: #1890ff60;
+    padding: 5px;
+    color: #fff;
+    border-radius: 5px;
+    border: 1px solid #1890ff;
+    display: inline-block;
+    vertical-align: middle;
+    margin-right: 10px;
+}
 </style>

+ 60 - 0
src/views/fangwu/modalList/auditRecords.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 './dispatchingRule.vue'
+  export default {
+    name: 'BusMarketMemberModal',
+    components: {
+      BusMarketMemberForm
+    },
+    data () {
+      return {
+        title:'',
+        width:600,
+        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>

+ 60 - 0
src/views/fangwu/modalList/configureConsumables.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 '../tabList/configureTable.vue'
+  export default {
+    name: 'BusMarketMemberModal',
+    components: {
+      BusMarketMemberForm
+    },
+    data () {
+      return {
+        title:'',
+        width:1200,
+        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>

+ 82 - 0
src/views/fangwu/modalList/dispatchingRule.vue

@@ -0,0 +1,82 @@
+<template>
+<div>
+    <a-checkbox-group @change="onChange">
+        <a-row :gutter="[0, 10]">
+            <a-col :span="24">
+                <a-checkbox value="A">
+                    房态客人信息保密(仅对移动房务有效)
+                </a-checkbox>
+            </a-col>
+            <a-col :span="24">
+                <a-checkbox value="B">
+                    房务人员在房态上仅查看负责房扫的房间(仅对移动房务有效)
+                </a-checkbox>
+            </a-col>
+            <a-col :span="24">
+                <a-checkbox value="C">
+                    房务人员置净是否需要进行布草操作
+                </a-checkbox>
+            </a-col>
+            <a-col :span="24">
+                <a-checkbox value="D">
+                    特脏房未达到做房基数时, 是否算提成
+                </a-checkbox>
+            </a-col>
+            <a-col :span="24">
+                <a-checkbox value="E">
+                    钟点房未达到做房基数时, 是否算提成
+                </a-checkbox>
+            </a-col>
+            <a-col>
+                <span style="margin-right:20px;">做房基数</span><a-input-number :min="0" :max="100" :step="1" /> <span style="color:red">*超过此数字后考虑提成</span>
+            </a-col>
+            <a-col :span="12">
+                <div>续脏房提成</div>
+                <div>
+                    <a-input-number :min="0" :max="1000" :step="1" />元
+                </div>
+            </a-col>
+            <a-col :span="12">
+                <div>退脏房提成</div>
+                <div>
+                    <a-input-number :min="0" :max="1000" :step="1" />元
+                </div>
+            </a-col>
+            <a-col :span="12">
+                <div>特脏房提成</div>
+                <div>
+                    <a-input-number :min="0" :max="1000" :step="1" />元
+                </div>
+            </a-col>
+            <a-col :span="12">
+                <div>钟点房提成</div>
+                <div>
+                    <a-input-number :min="0" :max="1000" :step="1" />元
+                </div>
+            </a-col>
+        </a-row>
+    </a-checkbox-group>
+</div>
+</template>
+
+<script>
+export default {
+    data() {
+        return {
+
+        }
+    },
+    methods: {
+        onChange(checkedValues) {
+            console.log('checked = ', checkedValues);
+        }
+    },
+    mounted() {
+
+    }
+}
+</script>
+
+<style>
+
+</style>

+ 60 - 0
src/views/fangwu/modalList/lookLook.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 '../tabList/housekeepingAudit.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>

+ 330 - 0
src/views/fangwu/tabList/configureTable.vue

@@ -0,0 +1,330 @@
+<template>
+<a-card :bordered="false">
+    <!-- 查询区域-END -->
+
+    <!-- 操作按钮区域 -->
+    <div class="table-operator">
+        <a-tag color="pink" v-if="buildingFloorSearchTag.name">
+            {{ buildingFloorSearchTag.name }}
+            <a-icon type="close" @click="onFliterClose" />
+        </a-tag>
+        <div style="display:flex;align-items:center;width:100%;">
+            <div class="list-container">
+                <div class="list-item" v-for="(item, index) in list" :key="index" :class="{active: activeIndex === index}" @click="handleClick(index)">
+                    {{ item }}
+                </div>
+            </div>
+        </div>
+    </div>
+
+    <!-- table区域-begin -->
+    <div class="grid-clear">
+        <a-table ref="table" size="middle" bordered rowKey="id" :columns="columns" :dataSource="[1]" :pagination="false" :loading="loading" :rowSelection="{
+          selectedRowKeys: selectedRowKeys,
+          onChange: onSelectChange,
+        }" class="j-table-force-nowrap" @change="handleTableChange">
+            <template slot="houseType">
+                <div>
+                    {{list[activeIndex]}}
+                </div>
+            </template>
+            <template slot="continueConsume" slot-scope="text, record">
+                <div class="flex" style="margin-bottom:10px;">
+                    <div>一次性牙刷(套)</div> <a-input-number :min="0" :max="1000" :step="1" />
+                </div>
+                <div class="flex">
+                    <div>一次性香皂(个)</div><a-input-number :min="0" :max="1000" :step="1" />
+                </div>
+            </template>
+            <template slot="Linen" slot-scope="text, record">
+                <div class="flex">
+                    <div>床单(张)</div><a-input-number :min="0" :max="1000" :step="1" />
+                </div>
+            </template>
+            <template slot="outConsume">
+                <div class="flex" style="margin-bottom:10px;">
+                    <div>一次性牙刷(套)</div> <a-input-number :min="0" :max="1000" :step="1" />
+                </div>
+                <div class="flex">
+                    <div>一次性香皂(个)</div><a-input-number :min="0" :max="1000" :step="1" />
+                </div>
+            </template>
+            <template slot="outLinen">
+                <div class="flex">
+                    <div>床单(张)</div><a-input-number :min="0" :max="1000" :step="1" />
+                </div>
+            </template>
+            <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>
+                <a-divider type="vertical" />
+                <a @click="handleImage(record)">图片</a>
+            </span>
+        </a-table>
+    </div>
+    <!-- <room-num-modal ref="modalForm" @ok="modalFormOk"></room-num-modal> -->
+    <!-- <room-imgs @saveOk="onImgSave" ref="roomimgmodal"></room-imgs> -->
+</a-card>
+</template>
+
+<script>
+import {
+    JeecgListMixin
+} from "@/mixins/JeecgListMixin";
+// import roomNumModal from "./roomNumModal.vue"; // todo roomLayoutForm 需要替换成房型的表单弹窗
+// import roomImgs from './roomImagesForm.vue'
+import {
+    getAllLayouts
+} from "@/api/roomLayout";
+import {
+    delBatch,
+    delAll
+} from '@/api/roomBuildingApi'
+let hotelInfo = JSON.parse(localStorage.getItem("storeInfo"));
+export default {
+    mixins: [JeecgListMixin],
+    components: {
+        // roomNumModal,
+        // roomImgs
+    },
+    data() {
+        return {
+            list: ['零压双床房', '零压大床房', '休闲家庭房', '特价房', '豪华大床套房','豪华麻将房','单间'],
+            activeIndex: 0,
+            delLoading: false,
+            layouts: [],
+            queryParam: {},
+            // 分页参数
+            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",
+                    width:150,
+                    scopedSlots: {
+                        customRender: "houseType"
+                    },
+                    // dataIndex: "hotelName",
+                },
+                {
+                    title: "续房",
+                    // align: "center",
+                    // dataIndex: "floorName",
+                    children: [{
+                        title: '客房易耗品',
+                        dataIndex: 'continueConsume',
+                        // key: 'companyAddress',
+                        width: 200,
+                        scopedSlots: {
+                            customRender: "continueConsume"
+                        },
+                    },
+                    {
+                        title: '布草',
+                        dataIndex: 'Linen',
+                        // key: 'companyAddress',
+                        width: 200,
+                        scopedSlots: {
+                            customRender: "Linen"
+                        },
+                    }],
+                },
+                {
+                    title: "退房",
+                    // align: "center",
+                    // dataIndex: "buildName",
+                    children: [{
+                        title: '客房易耗品',
+                        dataIndex: 'outConsume',
+                        // key: 'companyAddress',
+                        width: 200,
+                        scopedSlots: {
+                            customRender: "outConsume"
+                        },
+                    },
+                    {
+                        title: '布草',
+                        // dataIndex: 'buildName',
+                        // key: 'companyAddress',
+                        width: 200,
+                        scopedSlots: {
+                            customRender: "outLinen"
+                        },
+                    }],
+                }
+            ],
+            url: {
+                // list: 'org.jeecg.modules.business/busMarketMember/list',
+                list: "/rooms/cesRooms/list",
+                delete: "/rooms/cesRooms/remove",
+                deleteBatch: "/rooms/cesRooms/deleteBatch",
+                exportXlsUrl: "/rooms/cesRooms/exportXls",
+                importExcelUrl: "rooms/cesRooms/importExcel",
+            },
+            buildingFloorSearchTag: {
+                name: null
+            },
+            dictOptions: {},
+            superFieldList: [],
+            selectedRowKeys: [],
+            isorter: {
+                column: "createTime",
+                order: "desc",
+            },
+        };
+    },
+    created() {
+        // this.loadData()
+        getAllLayouts().then((res) => {
+            if (res.code == 200) {
+                this.layouts = res.result.records;
+                this.loadData();
+            }
+        });
+    },
+    methods: {
+        onImgSave() {
+            this.loadData()
+        },
+        onFliterClose() {
+            this.filters['buildId'] = null
+            this.filters['floorId'] = null
+            this.ipagination.current = 1
+            this.buildingFloorSearchTag.name = null
+            this.loadData()
+        },
+        // 搜索
+        searchParam(id, name, isBuilding) {
+            this.$set(this.buildingFloorSearchTag, 'name', name)
+            if (isBuilding) {
+                this.filters['buildId'] = id
+                if (this.filters['floorId']) {
+                    delete this.filters.floorId
+                }
+            } else {
+                this.filters['floorId'] = id
+                if (this.filters['buildId']) {
+                    delete this.filters.buildId
+                }
+            }
+            this.loadData()
+        },
+        getLayoutName(row) {
+            let i = this.layouts.findIndex((s) => s.id == row.layoutId);
+            if (i > -1) {
+                return this.layouts[i].name;
+            }
+            return "";
+        },
+        // 批量删除
+        delBatch() {
+            let hotelInfo = JSON.parse(localStorage.getItem('storeInfo'))
+            let keys = this.selectedRowKeys
+            this.delLoading = true
+            delBatch({
+                hotelId: hotelInfo.id,
+                idStr: keys.toString()
+            }).then(res => {
+                if (res.code == 200) {
+                    this.selectedRowKeys = []
+                    this.$message.success('删除成功');
+                    this.loadData()
+                }
+            }).finally(_ => {
+                this.delLoading = false
+            })
+        },
+        // 删除所有
+        delAll() {
+            let hotelInfo = JSON.parse(localStorage.getItem('storeInfo'))
+            this.delLoading = true
+            delAll({
+                hotelId: hotelInfo.id,
+            }).then(res => {
+                if (res.code == 200) {
+                    this.selectedRowKeys = []
+                    this.$message.success('全部删除成功');
+                    this.loadData()
+                }
+            }).finally(_ => {
+                this.delLoading = false
+            })
+        },
+        // 批量添加按钮
+        onAddBatch() {
+            this.$router.push('/tenant/gen/rooms');
+        },
+        // 全部删除
+        onDelAll() {},
+        // 显示图片弹窗
+        handleImage(row) {
+            this.$refs.roomimgmodal.setModel(row)
+        },
+        onSaveOk() {
+            this.loadData();
+        },
+        handleClick(index) {
+            this.activeIndex = index
+            this.searchQuery()
+        },
+        onChange(checkedValues) {
+            console.log('checked = ', checkedValues)
+        },
+        //选择日期
+        onChangeTime(date, dateString) {
+            console.log(date, dateString)
+        },
+    },
+};
+</script>
+
+<style scoped>
+@import "~@assets/less/common.less";
+
+.list-container {
+    display: grid;
+    grid-template-columns: 1fr 1fr 1fr 1fr 1fr 1fr 1fr;
+    border: solid 1px #d9d9d9;
+    width: 70%;
+    border-radius: 5px;
+    /* margin-bottom: 20px; */
+    margin-right: 10px;
+}
+.flex{
+    display: flex;
+    align-items: center;
+    justify-content: space-between;
+}
+
+.list-item {
+    padding: 10px;
+    border-right: solid 1px #d9d9d9;
+    cursor: pointer;
+    text-align: center;
+}
+
+.list-item.active {
+    background-color: #1890ff;
+    color: #fff;
+}
+
+.grid-clear {
+    display: grid;
+    grid-template-columns: 2fr 1fr;
+    grid-gap: 10px;
+}
+</style>

+ 319 - 0
src/views/fangwu/tabList/housekeepingAudit.vue

@@ -0,0 +1,319 @@
+<template>
+<a-card :bordered="false">
+    <!-- 查询区域-END -->
+
+    <!-- 操作按钮区域 -->
+    <div class="table-operator">
+        <a-tag color="pink" v-if="buildingFloorSearchTag.name">
+            {{ buildingFloorSearchTag.name }}
+            <a-icon type="close" @click="onFliterClose" />
+        </a-tag>
+        <!-- <a-button @click="onAddBatch" type="primary" icon="tags">批量新增</a-button> -->
+        <!-- <a-popconfirm title="确定全部删除吗?" @confirm="delAll">
+            <a-button :disabled="delLoading" :loading="delLoading" type="primary" icon="stop">全部删除</a-button>
+        </a-popconfirm> -->
+        <!-- <j-input placeholder="商品名称" v-model="queryParam.name" style="width: 200px;margin-right:8px;"></j-input> -->
+        <!-- <a-button @click="handleAdd" type="primary" icon="plus">新增</a-button> -->
+        <a-button type="primary" @click="searchQuery">全部</a-button>
+        <a-button type="primary" @click="searchQuery">待审核</a-button>
+        <a-button type="primary" @click="searchQuery">已审核</a-button>
+        <a-button type="primary" @click="searchQuery">审核不通过</a-button>
+        <!-- <a-range-picker style="margin-right:8px;" @change="onChangeTime" /> -->
+        <a-popconfirm v-if="selectedRowKeys.length > 0" title="确定删除吗?" @confirm="delBatch">
+            <a-button :disabled="delLoading" :loading="delLoading" icon="stop" style="">
+                批量删除</a-button>
+        </a-popconfirm>
+        <!-- <div style="display:flex;align-items:center;width:100%;">
+            <div class="list-container">
+                <div class="list-item" v-for="(item, index) in list" :key="index" :class="{active: activeIndex === index}" @click="handleClick(index)">
+                    {{ item }}
+                </div>
+            </div>
+            <a-range-picker v-show="activeIndex==4" @change="onChangeTime" size="large" />
+        </div> -->
+    </div>
+
+    <!-- table区域-begin -->
+    <div class="grid-clear">
+        <a-table ref="table" size="middle" :scroll="{ x: true }" bordered rowKey="id" :columns="columns" :dataSource="dataSource" :pagination="ipagination" :loading="loading" :rowSelection="{
+          selectedRowKeys: selectedRowKeys,
+          onChange: onSelectChange,
+        }" class="j-table-force-nowrap" @change="handleTableChange">
+
+            <template slot="layoutId" slot-scope="text, record">
+                {{ getLayoutName(record) }}
+            </template>
+            <template slot="prefix_name" slot-scope="text, record">
+                {{ (record.prefix || "") + record.name }}
+            </template>
+            <template slot="pictureSlot" slot-scope="text, record">
+                <img :src="record.cover" style="width:40px;height40px;" />
+            </template>
+            <template slot="htmlSlot" slot-scope="text">
+                <div v-html="text"></div>
+            </template>
+
+            <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>
+                <a-divider type="vertical" />
+                <a @click="handleImage(record)">图片</a>
+            </span>
+        </a-table>
+    </div>
+    <!-- <room-num-modal ref="modalForm" @ok="modalFormOk"></room-num-modal> -->
+    <!-- <room-imgs @saveOk="onImgSave" ref="roomimgmodal"></room-imgs> -->
+</a-card>
+</template>
+
+<script>
+import {
+    JeecgListMixin
+} from "@/mixins/JeecgListMixin";
+// import roomNumModal from "./roomNumModal.vue"; // todo roomLayoutForm 需要替换成房型的表单弹窗
+// import roomImgs from './roomImagesForm.vue'
+import {
+    getAllLayouts
+} from "@/api/roomLayout";
+import {
+    delBatch,
+    delAll
+} from '@/api/roomBuildingApi'
+let hotelInfo = JSON.parse(localStorage.getItem("storeInfo"));
+export default {
+    mixins: [JeecgListMixin],
+    components: {
+        // roomNumModal,
+        // roomImgs
+    },
+    data() {
+        return {
+            list: ['今天', '昨日', '本周', '本月', '更多'],
+            activeIndex: 0,
+            delLoading: false,
+            layouts: [],
+            queryParam: {},
+            // 分页参数
+            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",
+                },
+                {
+                    title: "房型",
+                    // align: "center",
+                    dataIndex: "buildName",
+                },
+                {
+                    title: "时间",
+                    // align: "center",
+                    dataIndex: "floorName",
+                },
+                {
+                    title: "房号",
+                    align: "center",
+                    dataIndex: "layoutId",
+                    scopedSlots: {
+                        customRender: "layoutId"
+                    },
+                },
+                {
+                    title: "脏房类型",
+                    // align: "center",
+                    dataIndex: "floorName",
+                },
+                {
+                    title: "备注",
+                    // align: "center",
+                    dataIndex: "floorName",
+                },
+                {
+                    title: "审核状态",
+                    align: "center",
+                    dataIndex: "layoutId",
+                    scopedSlots: {
+                        customRender: "layoutId"
+                    },
+                },
+                {
+                    title: "操作",
+                    align: "center",
+                    dataIndex: "name",
+                    scopedSlots: {
+                        customRender: "action"
+                    },
+                }
+            ],
+            url: {
+                // list: 'org.jeecg.modules.business/busMarketMember/list',
+                list: "/rooms/cesRooms/list",
+                delete: "/rooms/cesRooms/remove",
+                deleteBatch: "/rooms/cesRooms/deleteBatch",
+                exportXlsUrl: "/rooms/cesRooms/exportXls",
+                importExcelUrl: "rooms/cesRooms/importExcel",
+            },
+            buildingFloorSearchTag: {
+                name: null
+            },
+            dictOptions: {},
+            superFieldList: [],
+            selectedRowKeys: [],
+            isorter: {
+                column: "createTime",
+                order: "desc",
+            },
+        };
+    },
+    created() {
+        // this.loadData()
+        getAllLayouts().then((res) => {
+            if (res.code == 200) {
+                this.layouts = res.result.records;
+                this.loadData();
+            }
+        });
+    },
+    methods: {
+        onImgSave() {
+            this.loadData()
+        },
+        onFliterClose() {
+            this.filters['buildId'] = null
+            this.filters['floorId'] = null
+            this.ipagination.current = 1
+            this.buildingFloorSearchTag.name = null
+            this.loadData()
+        },
+        // 搜索
+        searchParam(id, name, isBuilding) {
+            this.$set(this.buildingFloorSearchTag, 'name', name)
+            if (isBuilding) {
+                this.filters['buildId'] = id
+                if (this.filters['floorId']) {
+                    delete this.filters.floorId
+                }
+            } else {
+                this.filters['floorId'] = id
+                if (this.filters['buildId']) {
+                    delete this.filters.buildId
+                }
+            }
+            this.loadData()
+        },
+        getLayoutName(row) {
+            let i = this.layouts.findIndex((s) => s.id == row.layoutId);
+            if (i > -1) {
+                return this.layouts[i].name;
+            }
+            return "";
+        },
+        // 批量删除
+        delBatch() {
+            let hotelInfo = JSON.parse(localStorage.getItem('storeInfo'))
+            let keys = this.selectedRowKeys
+            this.delLoading = true
+            delBatch({
+                hotelId: hotelInfo.id,
+                idStr: keys.toString()
+            }).then(res => {
+                if (res.code == 200) {
+                    this.selectedRowKeys = []
+                    this.$message.success('删除成功');
+                    this.loadData()
+                }
+            }).finally(_ => {
+                this.delLoading = false
+            })
+        },
+        // 删除所有
+        delAll() {
+            let hotelInfo = JSON.parse(localStorage.getItem('storeInfo'))
+            this.delLoading = true
+            delAll({
+                hotelId: hotelInfo.id,
+            }).then(res => {
+                if (res.code == 200) {
+                    this.selectedRowKeys = []
+                    this.$message.success('全部删除成功');
+                    this.loadData()
+                }
+            }).finally(_ => {
+                this.delLoading = false
+            })
+        },
+        // 批量添加按钮
+        onAddBatch() {
+            this.$router.push('/tenant/gen/rooms');
+        },
+        // 全部删除
+        onDelAll() {},
+        // 显示图片弹窗
+        handleImage(row) {
+            this.$refs.roomimgmodal.setModel(row)
+        },
+        onSaveOk() {
+            this.loadData();
+        },
+        handleClick(index) {
+            this.activeIndex = index
+            this.searchQuery()
+        },
+        onChange(checkedValues) {
+            console.log('checked = ', checkedValues)
+        },
+        //选择日期
+        onChangeTime(date, dateString) {
+            console.log(date, dateString)
+        },
+    },
+};
+</script>
+
+<style scoped>
+@import "~@assets/less/common.less";
+
+.list-container {
+    display: grid;
+    grid-template-columns: 1fr 1fr 1fr 1fr 1fr;
+    border: solid 1px #d9d9d9;
+    width: 300px;
+    border-radius: 5px;
+    /* margin-bottom: 20px; */
+    margin-right: 10px;
+}
+
+.list-item {
+    padding: 10px;
+    border-right: solid 1px #d9d9d9;
+    cursor: pointer;
+    text-align: center;
+}
+
+.list-item.active {
+    background-color: #1890ff;
+    color: #fff;
+}
+
+.grid-clear {
+    /* display: grid; */
+    /* grid-template-columns: 2fr 1fr; */
+    /* grid-gap: 10px; */
+    width: 100%;
+}
+</style>

+ 0 - 1
src/views/settings/components/roomModules/goodList.vue

@@ -10,7 +10,6 @@
                     <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="confirmDel(item.id)">删除</a-button> -->
                     <a-popconfirm placement="topLeft" ok-text="是的" cancel-text="取消" @confirm="confirmDel(item.id)">
                         <template slot="title">
                         确定删除吗?