hzj18279462576@163.com преди 1 година
родител
ревизия
7339a758bf

+ 18 - 0
package-lock.json

@@ -25,6 +25,7 @@
         "sass": "^1.58.0",
         "sass-loader": "^13.2.0",
         "terser": "^5.16.5",
+        "v-viewer": "^3.0.11",
         "vue": "^3.2.45",
         "vue-router": "^4.0.10",
         "vuex": "^4.0.2",
@@ -2702,6 +2703,23 @@
         "punycode": "^2.1.0"
       }
     },
+    "node_modules/v-viewer": {
+      "version": "3.0.11",
+      "resolved": "https://registry.npmmirror.com/v-viewer/-/v-viewer-3.0.11.tgz",
+      "integrity": "sha512-E8LOdAxhzuktt4HB3PswVCccQ1Q1sYHYnLsS6zaJISpb5EvmAFs5sYNfXnDLFxVb5DQ82v4ZlGxkYlseXwWRJw==",
+      "dependencies": {
+        "lodash": "^4.17.21",
+        "viewerjs": "^1.9.0"
+      },
+      "peerDependencies": {
+        "vue": "^3.0.0"
+      }
+    },
+    "node_modules/viewerjs": {
+      "version": "1.11.7",
+      "resolved": "https://registry.npmmirror.com/viewerjs/-/viewerjs-1.11.7.tgz",
+      "integrity": "sha512-0JuVqOmL5v1jmEAlG5EBDR3XquxY8DWFQbFMprOXgaBB0F7Q/X9xWdEaQc59D8xzwkdUgXEMSSknTpriq95igg=="
+    },
     "node_modules/vite": {
       "version": "4.1.1",
       "resolved": "https://registry.npmmirror.com/vite/-/vite-4.1.1.tgz",

+ 1 - 0
package.json

@@ -26,6 +26,7 @@
     "sass": "^1.58.0",
     "sass-loader": "^13.2.0",
     "terser": "^5.16.5",
+    "v-viewer": "^3.0.11",
     "vue": "^3.2.45",
     "vue-router": "^4.0.10",
     "vuex": "^4.0.2",

BIN
src/assets/icons/bulb.png


BIN
src/assets/icons/bulbs.png


BIN
src/assets/icons/bulbs1.png


+ 23 - 0
src/main.js

@@ -9,11 +9,34 @@ import App from "./App.vue";
 import router from "@/router";
 import store from "@/store";
 
+import Viewer from "v-viewer";
+import "viewerjs/dist/viewer.css";
+
 const app = createApp(App);
 for (const [key, component] of Object.entries(ElementPlusIconsVue)) {
   app.component(key, component);
 }
 
+app.use(Viewer, {
+  Options: {
+    inline: true,
+    button: true, //右上角按钮
+    navbar: true, //底部缩略图
+    title: true, //当前图片标题
+    toolbar: true, //底部工具栏
+    tooltip: true, //显示缩放百分比
+    movable: true, //是否可以移动
+    zoomable: true, //是否可以缩放
+    rotatable: true, //是否可旋转
+    scalable: true, //是否可翻转
+    transition: true, //使用 CSS3 过度
+    fullscreen: true, //播放时是否全屏
+    keyboard: true, //是否支持键盘
+    url: "data-source",
+  },
+});
+
+
 app.use(ElementPlus, {
   locale: zhCn,
 });

+ 2 - 1
src/router/index.js

@@ -124,7 +124,8 @@ const routes = [
 ];
 const router = createRouter({
   // history: createWebHashHistory("/business"), // 线上地址
-  history: createWebHashHistory("/hotel/iHotelStudentManage"), // 测试环境发布地址
+  history: createWebHashHistory("/hotel/iHotelStudentManage"), // 线上地址
+  // history: createWebHashHistory("/testingServer/iHotelStudentManage"), // 测试环境发布地址
   // history: createWebHashHistory("/hotelReservation/pc3/"), // 测试环境发布地址
   routes: routes,
 });

+ 1 - 1
src/store/modules/user.js

@@ -10,7 +10,7 @@ const state = {
   username: "",
   password: "",
   api: "/hotel/ihotel/auto", // 线上
-  // api: "/ihotel/auto", // 测试
+  // api: "/testingServer/ihotel/auto", // 测试
   islogin: 1,
   hasRoutes: false,
   level: 1,

+ 68 - 36
src/views/class/class.vue

@@ -20,6 +20,17 @@
               />
             </div>
             <div class="condition">
+              <span>教师工号&nbsp;&nbsp;</span>
+              <el-input
+                :clearable="true"
+                @clear="searchBtn"
+                v-model.trim="searchInput.jsgh"
+                class="w-50 m-2"
+                placeholder="请输入教师工号"
+                style="width: 180px"
+              />
+            </div>
+            <div class="condition">
               <span>日期&nbsp;&nbsp; </span>
               <el-date-picker
                 v-model="searchInput.createTime"
@@ -137,12 +148,27 @@
             </template>
             <template #default="{ row }">
               <div v-if="row.list[i - 1]">
-                <el-checkbox
-                  @change="selDelChange($event, row.list[i - 1])"
-                  v-model="row.list[i - 1].selDel"
-                  size="large"
-                  >{{ row.list[i - 1].jsxm }}</el-checkbox
+                <el-popover
+                  placement="top-start"
+                  title="信息"
+                  :width="180"
+                  trigger="hover"
+                  content="this is content, this is content, this is content"
                 >
+                  <template #reference>
+                    <el-checkbox
+                      @change="selDelChange($event, row.list[i - 1])"
+                      v-model="row.list[i - 1].selDel"
+                      size="large"
+                      >{{ row.list[i - 1].jsxm }}</el-checkbox
+                    >
+                  </template>
+                  <div>
+                    <span>学院:{{ row.list[i - 1].orginizationName }}</span><br>
+                    <span>姓名:{{ row.list[i - 1].jsxm }}</span><br>
+                    <span>工号:{{ row.list[i - 1].jsgh }}</span>
+                  </div>
+                </el-popover>
               </div>
               <span v-else></span>
             </template>
@@ -190,7 +216,7 @@
                 v-for="item in schoolCardList"
                 :key="item.id"
                 :label="item.cardNumber"
-                :value="item.cardNumber"
+                :value="`${item.userName},${item.cardNumber}`"
               >
                 <div style="float: left">
                   <span style="display: inline-block; width: 80px">{{
@@ -313,6 +339,7 @@ const changePriceSelect = ref();
 // 搜索按钮数据
 const searchInput = reactive({
   keyWord: "",
+  jsgh:"",
   createTime: [],
 });
 
@@ -406,6 +433,7 @@ const getList = async () => {
   loading.value = true;
   let data = {
     teacherName: searchInput.keyWord, // 关键字查询
+    jsgh: searchInput.jsgh, // 关键字查询
     stateTime: "",
     endTime: "",
   };
@@ -583,36 +611,39 @@ const addschoolCardListMore = async () => {
 };
 // 改变微校卡号
 const schoolCardChange = async (value) => {
-  console.log(value);
-  let data = {
-    permissionSettingId: sessionStorage.getItem("permissionSettingId"),
-    page: 1,
-    size: 20,
-    keyWord: value,
-  };
-  let res = await axios({
-    method: "post",
-    url: api.value + "/admin/getUsersPage",
-    headers: {
-      token: sessionStorage.getItem("token"),
-      user_head: sessionStorage.getItem("user_head"),
-    },
-    data: data,
-  });
-  console.log(res, "微校卡号人");
-  if (res.data.code == 200) {
-    let resdata = res;
-    ruleForm.corpnName = res.data.data.records[0].userName;
-    ruleForm.corpnPhone = res.data.data.records[0].phone;
-    ruleForm.department = res.data.data.records[0].department;
-  } else {
-    ElMessage({
-      type: "error",
-      showClose: true,
-      message: res.data.message,
-      center: true,
-    });
-  }
+  console.log(value.split(','));
+  let data=value.split(',')
+  ruleForm.corpnName = data[0]
+  ruleForm.cardNum =data[1]!='null'?data[1]:""
+  // let data = {
+  //   permissionSettingId: sessionStorage.getItem("permissionSettingId"),
+  //   page: 1,
+  //   size: 20,
+  //   keyWord: value,
+  // };
+  // let res = await axios({
+  //   method: "post",
+  //   url: api.value + "/admin/getUsersPage",
+  //   headers: {
+  //     token: sessionStorage.getItem("token"),
+  //     user_head: sessionStorage.getItem("user_head"),
+  //   },
+  //   data: data,
+  // });
+  // console.log(res, "微校卡号人");
+  // if (res.data.code == 200) {
+  //   let resdata = res;
+  //   ruleForm.corpnName = res.data.data.records[0].userName;
+  //   ruleForm.corpnPhone = res.data.data.records[0].phone;
+  //   ruleForm.department = res.data.data.records[0].department;
+  // } else {
+  //   ElMessage({
+  //     type: "error",
+  //     showClose: true,
+  //     message: res.data.message,
+  //     center: true,
+  //   });
+  // }
 };
 
 // 添加账号 (---------------------------------===============================)
@@ -733,6 +764,7 @@ const handleUpload = async (file) => {
 const importExcel = lodash.debounce(async () => {
   let data = {
     teacherName: searchInput.keyWord, // 关键字查询
+    jsgh: searchInput.jsgh, // 关键字查询
     stateTime: "",
     endTime: "",
   };

+ 404 - 66
src/views/doorLock/doorLock.vue

@@ -814,12 +814,12 @@
                     <el-table-column align="center" label="操作" width="200">
                       <template #default="scope">
                         <div class="options">
-                          <!-- <div
+                          <div
                             class="reset"
                             @click="fingerprintEdit(scope.row)"
                           >
-                            修改
-                          </div> -->
+                            编辑
+                          </div>
                           <el-popconfirm
                             width="220"
                             confirm-button-text="确认"
@@ -947,7 +947,7 @@
                     <el-table-column align="center" label="操作" width="200">
                       <template #default="scope">
                         <div class="options">
-                          <!-- <div class="reset" @click="edit(scope.row)">修改</div> -->
+                          <div class="reset" @click="customFingerprintEdit(scope.row)">编辑</div>
                           <el-popconfirm
                             width="220"
                             confirm-button-text="确认"
@@ -1023,6 +1023,7 @@
               class="m-2"
               placeholder="请选择用户"
               style="width: 500px"
+              :disabled="passManagementEditFlag==2"
               @change="staffChange($event, '密码')"
               v-if="keypassflag == '系统'"
             >
@@ -1036,6 +1037,7 @@
               v-model.trim="passManagementRuleForm.name"
               placeholder="请输入用户"
               style="width: 500px"
+              :disabled="passManagementEditFlag==2"
               v-if="keypassflag == '自定义'"
             >
             </el-input>
@@ -1048,6 +1050,7 @@
             <el-input
               v-model.trim="passManagementRuleForm.phone"
               placeholder="请输入号码"
+              :disabled="passManagementEditFlag==2"
               style="width: 500px"
             >
             </el-input>
@@ -1057,11 +1060,20 @@
               v-model.trim="passManagementRuleForm.pass"
               placeholder="请输入6-8位数密码或者点击随机生成"
               style="width: 500px"
+              v-if="passManagementEditFlag==1"
             >
               <template #append>
                 <div @click="randomCipher">随机生成</div>
               </template>
             </el-input>
+            <el-input
+              v-if="passManagementEditFlag==2"
+              v-model.trim="passManagementRuleForm.pass"
+              placeholder="请输入6-8位数密码或者点击随机生成"
+              style="width: 500px"
+              :disabled="true"
+            >
+            </el-input>
           </el-form-item>
           <el-form-item label="生效时间 :" prop="effectiveTime">
             <div class="block">
@@ -1144,6 +1156,7 @@
               class="m-2"
               placeholder="请选择用户"
               style="width: 214px"
+              :disabled="fingerprintEditFlag==2"
               @change="staffChange($event, '指纹')"
               v-if="keypassflag == '系统'"
             >
@@ -1158,6 +1171,7 @@
               placeholder="请输入用户"
               style="width: 214px"
               v-if="keypassflag == '自定义'"
+              :disabled="fingerprintEditFlag==2"
             />
           </el-form-item>
           <el-form-item
@@ -1168,6 +1182,7 @@
             <el-input
               v-model.trim="fingerprintRuleForm.phone"
               placeholder="请输入号码"
+              :disabled="fingerprintEditFlag==2"
               style="width: 214px"
             >
             </el-input>
@@ -1179,6 +1194,7 @@
               style="width: 300px"
               type="textarea"
               rows="4"
+              :disabled="fingerprintEditFlag==2"
             />
             <span
               style="
@@ -1187,6 +1203,7 @@
                 cursor: pointer;
               "
               @click="fingerprintNext"
+              v-if="fingerprintEditFlag==1"
               >录入</span
             >
           </el-form-item>
@@ -1313,6 +1330,7 @@
               class="m-2"
               placeholder="再请选择用户"
               style="width: 214px"
+              :disabled="identityCardEditFlag==2"
               @change="staffChange($event, '房卡')"
               v-if="keypassflag == '系统' || keypassflag == '总卡'"
             >
@@ -1325,6 +1343,7 @@
             <el-input
               v-model.trim="identityCardRuleForm.name"
               placeholder="请输入用户"
+              :disabled="identityCardEditFlag==2"
               style="width: 214px"
               v-if="keypassflag == '自定义'"
             />
@@ -1337,6 +1356,7 @@
             <el-input
               v-model.trim="identityCardRuleForm.phone"
               placeholder="请输入号码"
+              :disabled="identityCardEditFlag==2"
               style="width: 214px"
             />
           </el-form-item>
@@ -1353,6 +1373,7 @@
             <el-input
               v-model.trim="identityCardRuleForm.icCard"
               placeholder="请输入卡号"
+              :disabled="identityCardEditFlag==2"
               style="width: 300px"
               type="textarea"
               rows="4"
@@ -1364,6 +1385,7 @@
                 margin-left: 10px;
                 cursor: pointer;
               "
+              v-if="identityCardEditFlag==1"
               @click="identityCardNext"
               >读卡</span
             >
@@ -1802,16 +1824,18 @@ const systemUserList = ref(); // 系统用户
 const customList = ref(); // 自定义用户
 const keypassflag = ref(""); // 添加系统或者自定义用户
 const cardFlag = ref(""); // 判断是添加房卡还是身份证
+
 // 钥匙管理 密码管理(--------------------------------------------------------)
 const passManagementVisible = ref(false);
 const passManagementIndex = ref(1); // 默认选中 时效密码
+const passManagementEditFlag=ref(1) // 判断是添加还是编辑 1.添加  2.编辑
 const passManagementRef = ref();
 const passManagementRuleForm = reactive({
   // level: '',
   name: "",
   phone: "",
-  effectiveTime: "",
-  failureTime: "",
+  effectiveTime: "",// 开始时间
+  failureTime: "",//结束时间
   pass: "",
   id: "",
 });
@@ -1854,6 +1878,7 @@ const staffList = ref(); // 选择的员工数据
 // 钥匙管理 添加指纹(--------------------------------------------------------)
 const fingerprintVisible = ref(false);
 const fingerprintRef = ref();
+const fingerprintEditFlag=ref(1)// 判断是1、添加还是2、编辑
 const fingerprintprops = {
   checkStrictly: true,
   label: "name",
@@ -1932,6 +1957,7 @@ const ws = ref("");
 // 钥匙管理 添加身份证(--------------------------------------------------------)
 const addIdentityCardVisibleTitle = ref("添加身份证");
 const identityCardVisible = ref(false);
+const identityCardEditFlag=ref(1) // 判断是添加还是编辑 1.添加  2.编辑
 const identityCardRef = ref();
 const identityCardRuleForm = reactive({
   level: "",
@@ -2811,6 +2837,7 @@ const cancelKey = () => {
 // 钥匙管理 密码管理(-----------------------------------------------------------------)
 const passManagementClick = (val) => {
   keypassflag.value = val;
+  passManagementEditFlag.value=1
   // rolesList();
   // fingerprintChangeList.value=""
   passManagementVisible.value = true;
@@ -2820,9 +2847,6 @@ const passManagementClick = (val) => {
   passManagementRuleForm.effectiveTime = "";
   passManagementRuleForm.failureTime = "";
   passManagementRuleForm.pass = "";
-  nextTick(() => {
-    passManagementRef.value.resetFields();
-  });
 };
 const cancelPassManagement = () => {
   passManagementVisible.value = false;
@@ -2839,7 +2863,8 @@ const passManagementSend = (formEl) => {
   formEl.validate(async (valid, fields) => {
     if (valid) {
       if (keypassflag.value == "系统") {
-        let data = {
+        if(passManagementEditFlag.value==1){
+          let data = {
           permissionSettingId: sessionStorage.getItem("permissionSettingId"), //权限表id
           adminId: sessionStorage.getItem("id"), //管理员id
           houseNumberId: keyData.houseNumberId, //房间号id
@@ -2849,8 +2874,8 @@ const passManagementSend = (formEl) => {
           equipmentType: keyData.equipmentType, //设备id
           passWord: passManagementRuleForm.pass, // 密码
           type: "4", //1:管理员用户,2:普通用户(永久),4:时效性用户,5:一次性时效密码用户,100:时效性无网络密码用户
-        };
-        let res = await axios({
+          };
+          let res = await axios({
           method: "post",
           url: api.value + "/unlocking-employee/savePassWord",
           headers: {
@@ -2858,9 +2883,9 @@ const passManagementSend = (formEl) => {
             user_head: sessionStorage.getItem("userhead"),
           },
           data: data,
-        });
-        console.log(res, "系统添加密码");
-        if (res.data.code == 200) {
+          });
+          console.log(res, "系统添加密码");
+          if (res.data.code == 200) {
           passManagementVisible.value = false;
           keyListData();
           ElMessage({
@@ -2869,16 +2894,51 @@ const passManagementSend = (formEl) => {
             message: res.data.message,
             center: true,
           });
-        } else {
+          } else {
           ElMessage({
             type: "error",
             showClose: true,
             message: res.data.message,
             center: true,
           });
+          }
+        }else if(passManagementEditFlag.value==2){
+          let data = {
+            unlockingAdminId: passManagementRuleForm.id, //系统用户钥匙id
+            startTime: passManagementRuleForm.effectiveTime, //    开始时间
+            endTime: passManagementRuleForm.failureTime, //结束时间
+          };
+          let res = await axios({
+          method: "post",
+          url: api.value + "/unlocking-employee/updateLock",
+          headers: {
+            token: sessionStorage.getItem("token"),
+            user_head: sessionStorage.getItem("userhead"),
+          },
+          data: data,
+          });
+          console.log(res, "员工编辑密码时效");
+          if (res.data.code == 200) {
+          passManagementVisible.value = false;
+          keyListData();
+          ElMessage({
+            type: "success",
+            showClose: true,
+            message: res.data.message,
+            center: true,
+          });
+          } else {
+          ElMessage({
+            type: "error",
+            showClose: true,
+            message: res.data.message,
+            center: true,
+          });
+          }
         }
       } else if (keypassflag.value == "自定义") {
-        let data = {
+        if(passManagementEditFlag.value==1){
+          let data = {
           permissionSettingId: sessionStorage.getItem("permissionSettingId"), //权限表id
           adminId: sessionStorage.getItem("id"), //管理员id
           houseNumberId: keyData.houseNumberId, //房间号id
@@ -2889,8 +2949,8 @@ const passManagementSend = (formEl) => {
           equipmentType: keyData.equipmentType, //设备id
           passWord: passManagementRuleForm.pass, // 密码
           type: "4", //1:管理员用户,2:普通用户(永久),4:时效性用户,5:一次性时效密码用户,100:时效性无网络密码用户
-        };
-        let res = await axios({
+          };
+          let res = await axios({
           method: "post",
           url: api.value + "/unlocking-custom/savePassWord",
           headers: {
@@ -2898,9 +2958,9 @@ const passManagementSend = (formEl) => {
             user_head: sessionStorage.getItem("userhead"),
           },
           data: data,
-        });
-        console.log(res, "自定义添加密码");
-        if (res.data.code == 200) {
+          });
+          console.log(res, "自定义添加密码");
+          if (res.data.code == 200) {
           passManagementVisible.value = false;
           keyListData();
           ElMessage({
@@ -2909,13 +2969,47 @@ const passManagementSend = (formEl) => {
             message: res.data.message,
             center: true,
           });
-        } else {
+          } else {
           ElMessage({
             type: "error",
             showClose: true,
             message: res.data.message,
             center: true,
           });
+          }
+        }else if(passManagementEditFlag.value==2){
+          let data = {
+            unlockingAdminId: passManagementRuleForm.id, //系统用户钥匙id
+            startTime: passManagementRuleForm.effectiveTime, //    开始时间
+            endTime: passManagementRuleForm.failureTime, //结束时间
+          };
+          let res = await axios({
+          method: "post",
+          url: api.value + "/unlocking-custom/updateLock",
+          headers: {
+            token: sessionStorage.getItem("token"),
+            user_head: sessionStorage.getItem("userhead"),
+          },
+          data: data,
+          });
+          console.log(res, "员工编辑密码时效");
+          if (res.data.code == 200) {
+            passManagementVisible.value = false;
+            keyListData();
+            ElMessage({
+              type: "success",
+              showClose: true,
+              message: res.data.message,
+              center: true,
+            });
+          } else {
+            ElMessage({
+              type: "error",
+              showClose: true,
+              message: res.data.message,
+              center: true,
+            });
+          }
         }
       }
     } else {
@@ -2945,6 +3039,102 @@ const randomCipher = async () => {
     });
   }
 };
+// (员工)编辑密码,指纹,卡片,身份证时效
+const fingerprintEdit=(row)=>{
+  console.log(row,'编辑密码,指纹,卡片,身份证时效');
+  passManagementEditFlag.value=2
+  if(row.lockStatus==1){
+    passManagementVisible.value = true;
+    keypassflag.value ="系统"
+    // passManagementRuleForm.level = "";
+    // passManagementRuleForm.name = "";
+    passManagementRuleForm.name = row.employeeUserId;
+    passManagementRuleForm.effectiveTime = row.startTime;
+    passManagementRuleForm.failureTime = row.endTime;
+    passManagementRuleForm.pass = row.passWord;
+    passManagementRuleForm.id = row.id;
+  }else if(row.lockStatus==2){
+    addIdentityCardVisibleTitle.value = "编辑房卡";
+    keypassflag.value = '系统'
+    identityCardEditFlag.value=2
+    identityCardVisible.value = true;
+    identityCardRuleForm.name = row.employeeUserId;
+    identityCardRuleForm.icCard = row.card;
+    identityCardRuleForm.effectiveTime = row.startTime;
+    identityCardRuleForm.failureTime = row.endTime;
+    identityCardRuleForm.id=row.id
+  }else if(row.lockStatus==4){
+    addIdentityCardVisibleTitle.value = "编辑身份证";
+    keypassflag.value = '系统'
+    identityCardEditFlag.value=2
+    identityCardVisible.value = true;
+    identityCardRuleForm.name = row.employeeUserId;
+    identityCardRuleForm.icCard = row.card;
+    identityCardRuleForm.effectiveTime = row.startTime;
+    identityCardRuleForm.failureTime = row.endTime;
+    identityCardRuleForm.id=row.id
+  }else if(row.lockStatus==3){
+    addIdentityCardVisibleTitle.value = "编辑指纹";
+    keypassflag.value = '系统'
+    fingerprintEditFlag.value=2
+    fingerprintVisible.value = true;
+    fingerprintRuleForm.name = row.employeeUserId;
+    fingerprintRuleForm.fingerprintNum = row.fingerprintData;
+    fingerprintRuleForm.effectiveTime = row.startTime;
+    fingerprintRuleForm.failureTime = row.endTime;
+    fingerprintRuleForm.id=row.id
+  }
+}
+// (自定义)编辑密码,指纹,卡片,身份证时效
+const customFingerprintEdit=(row)=>{
+  console.log(row,'编辑密码,指纹,卡片,身份证时效');
+  passManagementEditFlag.value=2
+  if(row.lockStatus==1){
+    passManagementVisible.value = true;
+    keypassflag.value ="自定义"
+    // passManagementRuleForm.level = "";
+    // passManagementRuleForm.name = "";
+    passManagementRuleForm.name = row.name;
+    passManagementRuleForm.effectiveTime = row.startTime;
+    passManagementRuleForm.failureTime = row.endTime;
+    passManagementRuleForm.pass = row.passWord;
+    passManagementRuleForm.phone = row.phone;
+    passManagementRuleForm.id = row.id;
+  }else if(row.lockStatus==2){
+    addIdentityCardVisibleTitle.value = "编辑房卡";
+    keypassflag.value = '自定义'
+    identityCardEditFlag.value=2
+    identityCardVisible.value = true;
+    identityCardRuleForm.name = row.name;
+    identityCardRuleForm.phone = row.phone;
+    identityCardRuleForm.icCard = row.card;
+    identityCardRuleForm.effectiveTime = row.startTime;
+    identityCardRuleForm.failureTime = row.endTime;
+    identityCardRuleForm.id=row.id
+  }else if(row.lockStatus==4){
+    addIdentityCardVisibleTitle.value = "编辑身份证";
+    keypassflag.value = '自定义'
+    identityCardEditFlag.value=2
+    identityCardVisible.value = true;
+    identityCardRuleForm.name = row.name;
+    identityCardRuleForm.phone = row.phone;
+    identityCardRuleForm.icCard = row.card;
+    identityCardRuleForm.effectiveTime = row.startTime;
+    identityCardRuleForm.failureTime = row.endTime;
+    identityCardRuleForm.id=row.id
+  }else if(row.lockStatus==3){
+    addIdentityCardVisibleTitle.value = "编辑指纹";
+    keypassflag.value = '自定义'
+    fingerprintEditFlag.value=2
+    fingerprintVisible.value = true;
+    fingerprintRuleForm.name = row.name;
+    fingerprintRuleForm.phone = row.phone;
+    fingerprintRuleForm.fingerprintNum = row.fingerprintData;
+    fingerprintRuleForm.effectiveTime = row.startTime;
+    fingerprintRuleForm.failureTime = row.endTime;
+    fingerprintRuleForm.id=row.id
+  }
+}
 
 // // 获取管理端角色信息
 // const rolesList = async () => {
@@ -3126,7 +3316,8 @@ const fingerprintconfig = (formEl) => {
   formEl.validate(async (valid, fields) => {
     if (valid) {
       if (keypassflag.value == "系统") {
-        let data = {
+        if(passManagementEditFlag.value==1){
+          let data = {
           permissionSettingId: sessionStorage.getItem("permissionSettingId"), //权限表id
           adminId: sessionStorage.getItem("id"), //管理员id
           houseNumberId: keyData.houseNumberId, //房间号id
@@ -3136,8 +3327,8 @@ const fingerprintconfig = (formEl) => {
           luid: keyData.equipmentType, //设备id
           fingerprintData: fingerprintRuleForm.fingerprintNum, //指纹特征值
           type: "4", //1:管理员用户,2:普通用户(永久),4:时效性用户,5:一次性时效密码用户,100:时效性无网络密码用户
-        };
-        let res = await axios({
+          };
+          let res = await axios({
           method: "post",
           url: api.value + "/unlocking-employee/saveFingerprint",
           headers: {
@@ -3145,9 +3336,9 @@ const fingerprintconfig = (formEl) => {
             user_head: sessionStorage.getItem("userhead"),
           },
           data: data,
-        });
-        console.log(res, "系统添加指纹钥匙");
-        if (res.data.code == 200) {
+          });
+          console.log(res, "系统添加指纹钥匙");
+          if (res.data.code == 200) {
           fingerprintVisible.value = false;
           keyListData();
           ElMessage({
@@ -3156,16 +3347,52 @@ const fingerprintconfig = (formEl) => {
             message: res.data.message,
             center: true,
           });
-        } else {
+          } else {
+          ElMessage({
+            type: "error",
+            showClose: true,
+            message: res.data.message,
+            center: true,
+          });
+          }
+        }else if(passManagementEditFlag.value==2){
+          let data = {
+            unlockingAdminId: fingerprintRuleForm.id, //系统用户钥匙id
+            startTime: fingerprintRuleForm.effectiveTime, //    开始时间
+            endTime: fingerprintRuleForm.failureTime, //结束时间
+          };
+          let res = await axios({
+          method: "post",
+          url: api.value + "/unlocking-employee/updateLock",
+          headers: {
+            token: sessionStorage.getItem("token"),
+            user_head: sessionStorage.getItem("userhead"),
+          },
+          data: data,
+          });
+          console.log(res, "系统编辑指纹钥匙");
+          if (res.data.code == 200) {
+          fingerprintVisible.value = false;
+          keyListData();
+          ElMessage({
+            type: "success",
+            showClose: true,
+            message: res.data.message,
+            center: true,
+          });
+          } else {
           ElMessage({
             type: "error",
             showClose: true,
             message: res.data.message,
             center: true,
           });
+          }
         }
+        
       } else if (keypassflag.value == "自定义") {
-        let data = {
+        if(passManagementEditFlag.value==1){
+          let data = {
           permissionSettingId: sessionStorage.getItem("permissionSettingId"), //权限表id
           adminId: sessionStorage.getItem("id"), //管理员id
           houseNumberId: keyData.houseNumberId, //房间号id
@@ -3176,8 +3403,8 @@ const fingerprintconfig = (formEl) => {
           luid: keyData.equipmentType, //设备id
           fingerprintData: fingerprintRuleForm.fingerprintNum, //指纹特征值
           type: "4", //1:管理员用户,2:普通用户(永久),4:时效性用户,5:一次性时效密码用户,100:时效性无网络密码用户
-        };
-        let res = await axios({
+          };
+          let res = await axios({
           method: "post",
           url: api.value + "/unlocking-custom/saveFingerprint",
           headers: {
@@ -3185,9 +3412,9 @@ const fingerprintconfig = (formEl) => {
             user_head: sessionStorage.getItem("userhead"),
           },
           data: data,
-        });
-        console.log(res, "自定义添加指纹钥匙");
-        if (res.data.code == 200) {
+          });
+          console.log(res, "自定义添加指纹钥匙");
+          if (res.data.code == 200) {
           fingerprintVisible.value = false;
           keyListData();
           ElMessage({
@@ -3196,13 +3423,47 @@ const fingerprintconfig = (formEl) => {
             message: res.data.message,
             center: true,
           });
-        } else {
+          } else {
           ElMessage({
             type: "error",
             showClose: true,
             message: res.data.message,
             center: true,
           });
+          }
+        }else if(passManagementEditFlag.value==2){
+          let data = {
+            unlockingAdminId: fingerprintRuleForm.id, //系统用户钥匙id
+            startTime: fingerprintRuleForm.effectiveTime, //    开始时间
+            endTime: fingerprintRuleForm.failureTime, //结束时间
+          };
+          let res = await axios({
+            method: "post",
+            url: api.value + "/unlocking-custom/updateLock",
+            headers: {
+              token: sessionStorage.getItem("token"),
+              user_head: sessionStorage.getItem("userhead"),
+            },
+            data: data,
+          });
+          console.log(res, "自定义编辑指纹钥匙");
+          if (res.data.code == 200) {
+          fingerprintVisible.value = false;
+          keyListData();
+          ElMessage({
+            type: "success",
+            showClose: true,
+            message: res.data.message,
+            center: true,
+          });
+          } else {
+          ElMessage({
+            type: "error",
+            showClose: true,
+            message: res.data.message,
+            center: true,
+          });
+          }
         }
       }
     }
@@ -3303,6 +3564,7 @@ const identityCardClick = (val, card) => {
   // fingerprintChangeList.value=""
 
   identityCardVisible.value = true;
+  identityCardEditFlag.value=1
   identityCardRuleForm.level = "";
   identityCardRuleForm.name = "";
   identityCardRuleForm.phone = "";
@@ -3310,9 +3572,9 @@ const identityCardClick = (val, card) => {
   identityCardRuleForm.cardType = "";
   identityCardRuleForm.effectiveTime = "";
   identityCardRuleForm.failureTime = "";
-  nextTick(() => {
-    identityCardRef.value.resetFields();
-  });
+  // nextTick(() => {
+  //   identityCardRef.value.resetFields();
+  // });
 };
 const cancelIdentityCard = () => {
   identityCardVisible.value = false;
@@ -3392,7 +3654,8 @@ const identityCardConfig = (formEl) => {
         } else if (cardFlag.value == "身份证") {
           identityCardRuleForm.cardType = 1;
         }
-        let data = {
+        if(identityCardEditFlag.value==1){
+          let data = {
           permissionSettingId: sessionStorage.getItem("permissionSettingId"), //权限表id
           adminId: sessionStorage.getItem("id"), //管理员id
           houseNumberId: keyData.houseNumberId, //房间号id
@@ -3403,9 +3666,9 @@ const identityCardConfig = (formEl) => {
           card: identityCardRuleForm.icCard, //指纹特征值
           cardType: identityCardRuleForm.cardType, //指纹特征值
           type: "4", //1:管理员用户,2:普通用户(永久),4:时效性用户,5:一次性时效密码用户,100:时效性无网络密码用户
-        };
-
-        let res = await axios({
+          };
+  
+          let res = await axios({
           method: "post",
           url: api.value + "/unlocking-employee/saveCard",
           headers: {
@@ -3413,9 +3676,9 @@ const identityCardConfig = (formEl) => {
             user_head: sessionStorage.getItem("userhead"),
           },
           data: data,
-        });
-        console.log(res, "系统添加卡片钥匙");
-        if (res.data.code == 200) {
+          });
+          console.log(res, "系统添加卡片钥匙");
+          if (res.data.code == 200) {
           loading.close();
           identityCardVisible.value = false;
           keyListData();
@@ -3425,7 +3688,7 @@ const identityCardConfig = (formEl) => {
             message: res.data.message,
             center: true,
           });
-        } else {
+          } else {
           loading.close();
           ElMessage({
             type: "error",
@@ -3433,27 +3696,65 @@ const identityCardConfig = (formEl) => {
             message: res.data.message,
             center: true,
           });
+          }
+        }else if(identityCardEditFlag.value==2){
+          let data = {
+            startTime: identityCardRuleForm.effectiveTime, //    开始时间
+            endTime: identityCardRuleForm.failureTime, //结束时间
+            unlockingAdminId: identityCardRuleForm.id, //用户id
+          };
+          let res = await axios({
+            method: "post",
+            url: api.value + "/unlocking-employee/updateLock",
+            headers: {
+              token: sessionStorage.getItem("token"),
+              user_head: sessionStorage.getItem("userhead"),
+            },
+            data: data,
+          });
+          console.log(res, "编辑添加卡片时效");
+          if (res.data.code == 200) {
+            loading.close();
+            identityCardVisible.value = false;
+            keyListData();
+            ElMessage({
+              type: "success",
+              showClose: true,
+              message: res.data.message,
+              center: true,
+            });
+          } else {
+            loading.close();
+            ElMessage({
+              type: "error",
+              showClose: true,
+              message: res.data.message,
+              center: true,
+            });
+          }
         }
+        
       } else if (keypassflag.value == "自定义") {
         if (cardFlag.value == "房卡") {
           identityCardRuleForm.cardType = 0; // 0:房卡  1:身份证
         } else if (cardFlag.value == "身份证") {
           identityCardRuleForm.cardType = 1;
         }
-        let data = {
-          permissionSettingId: sessionStorage.getItem("permissionSettingId"), //权限表id
-          adminId: sessionStorage.getItem("id"), //管理员id
-          houseNumberId: keyData.houseNumberId, //房间号id
-          startTime: identityCardRuleForm.effectiveTime, //    开始时间
-          endTime: identityCardRuleForm.failureTime, //结束时间
-          userName: identityCardRuleForm.name, //用户id
-          phone: identityCardRuleForm.phone, //用户id
-          luid: keyData.equipmentType, //设备id
-          card: identityCardRuleForm.icCard, //指纹特征值
-          cardType: identityCardRuleForm.cardType, //指纹特征值
-          type: "4", //1:管理员用户,2:普通用户(永久),4:时效性用户,5:一次性时效密码用户,100:时效性无网络密码用户
-        };
-        let res = await axios({
+        if(identityCardEditFlag.value==1){
+          let data = {
+            permissionSettingId: sessionStorage.getItem("permissionSettingId"), //权限表id
+            adminId: sessionStorage.getItem("id"), //管理员id
+            houseNumberId: keyData.houseNumberId, //房间号id
+            startTime: identityCardRuleForm.effectiveTime, //    开始时间
+            endTime: identityCardRuleForm.failureTime, //结束时间
+            userName: identityCardRuleForm.name, //用户id
+            phone: identityCardRuleForm.phone, //用户id
+            luid: keyData.equipmentType, //设备id
+            card: identityCardRuleForm.icCard, //指纹特征值
+            cardType: identityCardRuleForm.cardType, //指纹特征值
+            type: "4", //1:管理员用户,2:普通用户(永久),4:时效性用户,5:一次性时效密码用户,100:时效性无网络密码用户
+          };
+          let res = await axios({
           method: "post",
           url: api.value + "/unlocking-custom/saveCard",
           headers: {
@@ -3461,9 +3762,9 @@ const identityCardConfig = (formEl) => {
             user_head: sessionStorage.getItem("userhead"),
           },
           data: data,
-        });
-        console.log(res, "自定义添加卡片钥匙");
-        if (res.data.code == 200) {
+          });
+          console.log(res, "自定义编辑卡片钥匙");
+          if (res.data.code == 200) {
           loading.close();
           identityCardVisible.value = false;
           keyListData();
@@ -3473,7 +3774,7 @@ const identityCardConfig = (formEl) => {
             message: res.data.message,
             center: true,
           });
-        } else {
+          } else {
           loading.close();
           ElMessage({
             type: "error",
@@ -3481,7 +3782,44 @@ const identityCardConfig = (formEl) => {
             message: res.data.message,
             center: true,
           });
+          }
+        }else if(identityCardEditFlag.value==2){
+          let data = {
+            unlockingAdminId:identityCardRuleForm.id,
+            startTime: identityCardRuleForm.effectiveTime, //    开始时间
+            endTime: identityCardRuleForm.failureTime, //结束时间
+          };
+          let res = await axios({
+          method: "post",
+          url: api.value + "/unlocking-custom/updateLock",
+          headers: {
+            token: sessionStorage.getItem("token"),
+            user_head: sessionStorage.getItem("userhead"),
+          },
+          data: data,
+          });
+          console.log(res, "自定义编辑身份证钥匙");
+          if (res.data.code == 200) {
+            loading.close();
+            identityCardVisible.value = false;
+            keyListData();
+            ElMessage({
+              type: "success",
+              showClose: true,
+              message: res.data.message,
+              center: true,
+            });
+          } else {
+            loading.close();
+            ElMessage({
+              type: "error",
+              showClose: true,
+              message: res.data.message,
+              center: true,
+            });
+          }
         }
+        
       } else if (keypassflag.value == "总卡") {
         let data = {
           adminId: sessionStorage.getItem("id"), //管理员id

+ 149 - 30
src/views/order/order.vue

@@ -218,6 +218,38 @@
               @change="searchBtn"
             />
           </div>
+          <div class="condition">
+            <span>预入住时间 : </span>
+            <el-date-picker
+              v-model="searchInput.reserveLiveTime"
+              type="daterange"
+              range-separator="-"
+              start-placeholder="起始时间"
+              end-placeholder="结束时间"
+              format="YYYY-MM-DD"
+              value-format="YYYY-MM-DD"
+              :prefix-icon="Calendar"
+              placeholder="请选择日期"
+              style="width: 280px"
+              @change="searchBtn"
+            />
+          </div>
+          <div class="condition">
+            <span>预离店时间 : </span>
+            <el-date-picker
+              v-model="searchInput.reserveLeaveTime"
+              type="daterange"
+              range-separator="-"
+              start-placeholder="起始时间"
+              end-placeholder="结束时间"
+              format="YYYY-MM-DD"
+              value-format="YYYY-MM-DD"
+              :prefix-icon="Calendar"
+              placeholder="请选择日期"
+              style="width: 280px"
+              @change="searchBtn"
+            />
+          </div>
 
           <!-- <el-button
             style="margin-left: 20px"
@@ -377,6 +409,18 @@
           </el-table-column>
           <el-table-column
             align="center"
+            prop="reserveLiveTime"
+            label="预入住时间"
+            width="180"
+          />
+          <el-table-column
+            align="center"
+            prop="reserveLeaveTime"
+            label="预离店时间"
+            width="180"
+          />
+          <el-table-column
+            align="center"
             prop="reserveName"
             label="预订人"
             width="100"
@@ -399,6 +443,51 @@
             label="身份证号"
             width="190"
           />
+          <el-table-column align="center" label="住房来源" width="190">
+            <template #default="{ row }">
+              <span v-if="row.source == '自费'">{{ row.source }}</span>
+              <el-popover
+                v-if="row.source == '课表'"
+                placement="top-start"
+                title="课表"
+                :width="400"
+                trigger="hover"
+                content="this is content, this is content, this is content"
+              >
+              <template #reference>
+                <span style="color: #296de3; cursor: pointer">课表</span>
+              </template>
+              <el-table border :data="row.schedules">
+                <el-table-column label="日期">
+                  <template #default="{row}">
+                    {{ row.dateTime }}
+                  </template>
+                </el-table-column>
+                <el-table-column label="教师资格" prop="jsxm" />
+              </el-table>
+              </el-popover>
+              <el-popover
+                v-if="row.source == '流程'"
+                placement="top-start"
+                title="流程"
+                :width="400"
+                trigger="hover"
+                content="this is content, this is content, this is content"
+              >
+              <template #reference>
+                <span style="color: #296de3; cursor: pointer">流程</span>
+              </template>
+              <el-table border :data="row.applicationProcedureTemporaries">
+                <el-table-column label="时间">
+                  <template #default="{row}">
+                    {{ row.startTime }} - {{ row.endTime }}
+                  </template>
+                </el-table-column>
+                <el-table-column label="原因" prop="reasonApplication" />
+              </el-table>
+              </el-popover>
+            </template>
+          </el-table-column>
           <el-table-column
             align="center"
             prop="orgName"
@@ -424,7 +513,7 @@
               </span>
             </template>
           </el-table-column>
-          <el-table-column
+          <!-- <el-table-column
             align="center"
             prop="reserveLiveTime"
             label="预入住时间"
@@ -435,7 +524,7 @@
             prop="reserveLeaveTime"
             label="预离店时间"
             width="180"
-          />
+          /> -->
           <el-table-column
             align="center"
             prop="liveTime"
@@ -554,7 +643,7 @@
             align="center"
             fixed="right"
             label="操作"
-            width="320"
+            width="380"
           >
             <template #default="scope">
               <div class="edit">
@@ -651,7 +740,7 @@
                 </el-popconfirm>
                 <!-- 换房 -->
                 <span
-                  v-if="scope.row.orderStart == 4 && flagBtn.huanfang == 1"
+                  v-if="(scope.row.orderStart == 1 || scope.row.orderStart == 3 || scope.row.orderStart == 4) && flagBtn.huanfang == 1"
                   style="cursor: pointer; margin: 0 10px"
                   @click="roomChangeClick(scope.row)"
                   >换房</span
@@ -1407,13 +1496,15 @@
               <div class="changeItemss">
                 <div
                   class="changeNews"
-                  :class="roomChangeIndex == 1 ? 'changeNews_active' : ''"
-                  @click="changeRoom(1)"
+                  :class="roomChangeIndex == item.name ? 'changeNews_active' : ''"
+                  @click="changeRoom(item.name)"
+                  v-for="item in roomChangeItemList"
                 >
-                  {{ roomChangeRuleForm.houseName
-                  }}<span>
+                  {{ item.name
+                  }}
+                  <!-- <span>
                     ({{ roomChangeRuleForm.roomType == 1 ? "全" : "钟" }})</span
-                  >
+                  > -->
                 </div>
               </div>
             </div>
@@ -1610,6 +1701,8 @@ const searchInput = reactive({
   cancelTime: "",
   liveTime: "",
   leaveTime: "",
+  reserveLiveTime:"",
+  reserveLeaveTime:"",
   orgId: "",
 }); // 搜索按钮数据
 
@@ -1720,13 +1813,13 @@ var checkInName = (rule, value, callback) => {
     callback();
   }
 };
-var checkIdcardRule=(rule, value, callback) => {
+var checkIdcardRule = (rule, value, callback) => {
   if (!value) {
     return callback(new Error("请输入身份证号"));
   }
-  if(value.length==18){
+  if (value.length == 18) {
     callback();
-  }else{
+  } else {
     callback(new Error("请正确输入18位身份证号"));
   }
 };
@@ -1928,6 +2021,7 @@ const roomChangeRuleForm = reactive({
   houseNumberIdNow: "", // 勾选的房间id
 });
 const checkInd = ref();
+const roomChangeItemList=ref()// 左边的房间类型
 const roomChangeList = reactive({ list: [] });
 
 // 楼栋单元数据
@@ -2037,6 +2131,14 @@ const getList = async () => {
     data.cancelStartTime = searchInput.cancelTime[0];
     data.cancelEndTime = searchInput.cancelTime[1];
   }
+  if (searchInput.reserveLiveTime) {
+    data.reserveLiveStartTime = searchInput.reserveLiveTime[0];
+    data.reserveLiveEndTime = searchInput.reserveLiveTime[1];
+  }
+  if (searchInput.reserveLeaveTime) {
+    data.reserveLeaveStartTime = searchInput.reserveLeaveTime[0];
+    data.reserveLeaveEndTime = searchInput.reserveLeaveTime[1];
+  }
 
   let res = await axios({
     method: "get",
@@ -2130,7 +2232,7 @@ const orderInfoClick = async (row) => {
     electricTable.list = [
       {
         eleVolume: data.electricConsume, // 用电量(吨)
-        priceOfEle: 0.6, // 电价(元)
+        priceOfEle: 0.62, // 电价(元)
         allowance: res.data.data.freeQuotaOfElectric, // 补助量(吨)
         cost: data.electricCost, // 产生电费(元)
       },
@@ -2386,7 +2488,6 @@ const Card = () => {
       identityCardTitle.value = "配置失败,请检查卡片是否已放置设备上";
       identityCardIndex.value = 1;
     } else if (data.type == 140) {
-      
       console.log(data.data.uid, "读取的卡号");
 
       identityCardIndex.value = 2;
@@ -2763,7 +2864,7 @@ const paymentCodeClick = async () => {
         if (ress.data.code == 200) {
           if (ress.data.data.tradeState == "SUCCESS") {
             payFlag++;
-            if(payFlag==1){
+            if (payFlag == 1) {
               successPay.value = true;
               let liveTime = dayjs().format("YYYY-MM-DD HH:mm:ss");
               let livedata = {
@@ -2896,7 +2997,7 @@ const orderCheckout = async (row) => {
   checkOutForm.orderNumber = row.orderNumber;
   checkOutForm.houseNumberId = row.houseNumberId;
 };
-const checkOutConfirm =lodash.throttle(async () => {
+const checkOutConfirm = lodash.throttle(async () => {
   let datas = {
     orderNumber: checkOutForm.orderNumber,
     houseNumberId: checkOutForm.houseNumberId,
@@ -2950,7 +3051,7 @@ const checkOutConfirm =lodash.throttle(async () => {
       center: true,
     });
   }
-},5000);
+}, 5000);
 const cancelCheckOut = () => {
   checkOutVisible.value = false;
 };
@@ -3009,7 +3110,7 @@ const roomChangeClick = async (row) => {
   roomChangeRuleForm.forecastTime = row.liveTime;
   roomChangeRuleForm.preionizationTime = row.leaveTime;
   let data = {
-    liveTime: dayjs().format('YYYY-MM-DD HH:mm:ss'),
+    liveTime: dayjs().format("YYYY-MM-DD HH:mm:ss"),
     leaveTime: row.reserveLeaveTime,
     houseNumberId: row.houseNumberId,
     adminId: sessionStorage.getItem("permissionSettingId"),
@@ -3025,7 +3126,13 @@ const roomChangeClick = async (row) => {
   });
   console.log(res, "换房界面");
   if (res.data.code == 200) {
-    roomChangeList.list = res.data.data;
+    roomChangeItemList.value=res.data.data
+    roomChangeIndex.value=roomChangeItemList.value[0].name
+    if(roomChangeItemList.value[0].children.length!=[]){
+      roomChangeList.list = roomChangeItemList.value[0].children;
+    }else{
+      roomChangeList.list =[]
+    }
   } else {
     ElMessage({
       type: "error",
@@ -3036,11 +3143,13 @@ const roomChangeClick = async (row) => {
   }
 };
 // 切换房类型
-const changeRoom = (ind) => {
-  roomChangeIndex.value = ind;
-  if (ind == 1) {
-  } else if (ind == 2) {
-  }
+const changeRoom = (name) => {
+  roomChangeIndex.value = name;
+  roomChangeItemList.value.forEach(i=>{
+    if(i.name==name){
+      roomChangeList.list=i.children
+    }    
+  })
 };
 // 勾选房间
 const roomCheck = (row) => {
@@ -3051,7 +3160,7 @@ const roomCheck = (row) => {
 };
 // 确定换房
 const submitroomChange = async () => {
-  roomChangeLoading.value=true
+  roomChangeLoading.value = true;
   let data = {
     initialHouseNumberId: roomChangeRuleForm.houseNumberId, // 初始的房间id
     houseNumberId: roomChangeRuleForm.houseNumberIdNow, // 勾选的房间id
@@ -3071,9 +3180,10 @@ const submitroomChange = async () => {
   });
   console.log(res, "确定换房");
   if (res.data.code == 200) {
+    roomChangeRuleForm.houseNumberId = "";
     getList();
     roomChangeVisible.value = false;
-    roomChangeLoading.value=false
+    roomChangeLoading.value = false;
     ElMessage({
       type: "success",
       showClose: true,
@@ -3081,7 +3191,7 @@ const submitroomChange = async () => {
       center: true,
     });
   } else {
-    roomChangeLoading.value=false
+    roomChangeLoading.value = false;
     ElMessage({
       type: "error",
       showClose: true,
@@ -3100,7 +3210,7 @@ const cancelRoomChange = () => {
 };
 
 // 退款 (-------------------------------------------------------------------------)
-const orderPayout =lodash.throttle( async (row) => {
+const orderPayout = lodash.throttle(async (row) => {
   console.log(row, "退款");
   let data = {
     orderNumber: row.orderNumber,
@@ -3156,7 +3266,7 @@ const orderPayout =lodash.throttle( async (row) => {
       center: true,
     });
   }
-},5000);
+}, 5000);
 
 // 搜索功能
 const searchBtn = lodash.debounce(async () => {
@@ -3290,6 +3400,14 @@ const importExcel = lodash.throttle(async () => {
     data.leaveStartTime = searchInput.leaveTime[0];
     data.leaveEndTime = searchInput.leaveTime[1];
   }
+  if (searchInput.reserveLiveTime) {
+    data.reserveLiveStartTime = searchInput.reserveLiveTime[0];
+    data.reserveLiveEndTime = searchInput.reserveLiveTime[1];
+  }
+  if (searchInput.reserveLeaveTime) {
+    data.reserveLeaveStartTime = searchInput.reserveLeaveTime[0];
+    data.reserveLeaveEndTime = searchInput.reserveLeaveTime[1];
+  }
   let res = await axios({
     method: "get",
     url: api.value + "/house-order/queryExport",
@@ -4261,7 +4379,8 @@ onUnmounted(() => {
           }
           .room {
             width: calc(100% - 130px);
-            height: 100%;
+            height: 420px;
+            overflow: auto;
             margin: 10px 0 0 0;
             .floors {
               width: calc(100%);

+ 164 - 17
src/views/process/process.vue

@@ -211,9 +211,19 @@
               label="提交时间"
               width="180"
             />
-            <el-table-column align="center" prop="houseCount" width="150" label="申请房间数量" />
+            <el-table-column
+              align="center"
+              prop="houseCount"
+              width="150"
+              label="申请房间数量"
+            />
             <el-table-column align="center" prop="usersName" label="提交人" />
-            <el-table-column align="center" prop="orgName" width="120" label="部门" />
+            <el-table-column
+              align="center"
+              prop="orgName"
+              width="140"
+              label="部门"
+            />
             <el-table-column
               align="center"
               prop="reasonApplication"
@@ -221,6 +231,23 @@
               show-overflow-tooltip
               width="200"
             />
+            <el-table-column align="center" label="附件" width="150">
+              <template #default="{ row }">
+                <div style="display: flex;justify-content: space-around;align-items: center;">
+                  <div v-viewer v-if="row.imageUrl" style="width: 40px;overflow: hidden;display: flex;justify-content: space-around;align-items: center;">
+                    <div style="display: flex;align-items: center;" v-for="i in row.imageUrl.split(',')">
+                      <img style="width: 40px;margin: 10px 0;" :src="i" alt="">
+                      <!-- <div
+                        style="color: rgba(33, 107, 255, 1); cursor: pointer"
+                        @click="pdfChange(i)"
+                      >
+                        {{ i }}
+                      </div> -->
+                    </div>
+                  </div>
+                </div>
+              </template>
+            </el-table-column>
             <el-table-column
               align="center"
               prop="examineAndApproveTime"
@@ -420,6 +447,44 @@
           >
         </div>
       </el-dialog>
+
+      <!-- 预览pdf -->
+      <el-dialog
+        class="previewPdf"
+        v-model="previewPdfVisible"
+        :close-on-click-modal="false"
+        :close-on-press-escape="false"
+        title="预览文档"
+        width="1200"
+        align-center
+        :before-close="cancelPreviewPdf"
+      >
+        <!-- <vue-office-pdf 
+          v-if="previewPdfUrl"
+          :src="previewPdfUrl"
+          /> -->
+        <div class="pdfMain">
+          <div class="home-box" v-if="previewPdfUrl">
+            <div class="container" v-if="pdfFlag == 1">
+              <!-- <iframe :src="previewPdfUrl" width="100%" height="100%"></iframe> -->
+              <!-- <PDFViewer
+                page-scale="page-fit"
+                :width="1160"
+                :height="800"
+                theme="dark"
+                :src="previewPdfUrl"
+                @loaded="onLoaded"
+              /> -->
+            </div>
+            <div class="continer" v-if="pdfFlag == 2">
+              <!-- <VueOfficeDocx :src="previewPdfUrl" /> -->
+            </div>
+            <div class="continer" v-if="pdfFlag == 3">
+              <img :src="previewPdfUrl" />
+            </div>
+          </div>
+        </div>
+      </el-dialog>
     </div>
   </div>
 </template>
@@ -445,9 +510,10 @@ const store = useStore();
 const api = ref("");
 const router = useRouter();
 
-const organizations=ref({
-  name:'测试',id:'1'
-});// 部门数据
+const organizations = ref({
+  name: "测试",
+  id: "1",
+}); // 部门数据
 
 const flagBtn = ref(); // 按钮权限
 const adminMenuParentId = ref(); // 判断是 T0级 还是 T1级
@@ -500,6 +566,11 @@ const regulation = reactive({
   id: "",
 });
 
+// 预览Pdf (++++++++++++++++++++++++++++++++++++++++++++++++++++++++)
+const previewPdfVisible = ref(false);
+const previewPdfUrl = ref(); // pdf地址
+const pdfFlag = ref(1); // word文档地址 1、pdf 2、word 3、图片
+
 // 切换 申请记录 规则设置
 const changeItem = (ind) => {
   changeIndex.value = ind;
@@ -577,7 +648,7 @@ const getList = async () => {
     key: searchInput.keyWord,
     department: searchInput.department,
     adminMenuId: sessionStorage.getItem("permissionSettingId"),
-    OrgIds:searchInput.orgId.join(',')
+    OrgIds: searchInput.orgId.join(","),
   };
   if (searchInput.submitTime) {
     data.submissionStartTime = searchInput.submitTime[0];
@@ -619,15 +690,13 @@ const getList = async () => {
   }
   console.log(res, "申请记录");
   if (res.data.code == 200) {
+    // res.data.data.list.forEach((i) => {
+    //   i.imageUrl =
+    //     "https://chtech.ncjti.edu.cn/kpi/file/1322138640108883968.jpeg,https://chtech.ncjti.edu.cn/kpi/file/1322138650670141440.jpeg,https://chtech.ncjti.edu.cn/kpi/file/1322138904815603712.jpeg";
+    // });
     tableData.list = res.data.data.list;
     total.value = res.data.data.totalCount;
     loading.value = false;
-    // ElMessage({
-    //   type: "success",
-    //   showClose: true,
-    //   message: res.data.message,
-    //   center: true,
-    // });
   } else {
     loading.value = false;
     ElMessage({
@@ -733,6 +802,46 @@ const cancelRemarks = () => {
   remarksVisible.value = false;
 };
 
+// 判断PDF word 图片
+const pdfChange = (url) => {
+  // pdf
+  if (url.includes(".pdf")) {
+    pdfFlag.value = 1;
+  }
+  // word
+  else if (url.includes(".docx")) {
+    pdfFlag.value = 2;
+  }
+  // jpg jpeg png
+  else if (
+    url.includes(".jpg") ||
+    url.includes(".jpeg") ||
+    url.includes(".png")
+  ) {
+    pdfFlag.value = 3;
+  }
+  filePreviewPdf(url);
+};
+// 查看PDF
+const filePreviewPdf = (url) => {
+  console.log(url, "pdf地址信息");
+  if (url) {
+    previewPdfVisible.value = true;
+    previewPdfUrl.value = url;
+  } else {
+    ElMessage({
+      type: "warning",
+      showClose: true,
+      message: "未上传文件",
+      center: true,
+    });
+  }
+};
+const cancelPreviewPdf = () => {
+  previewPdfVisible.value = false;
+  previewPdfUrl.value = "";
+};
+
 // 表格斑马纹颜色修改
 const tableRowClassName = ({ row, rowIndex }) => {
   if (rowIndex % 2 === 0) {
@@ -752,10 +861,10 @@ const handleCurrentChange = (value) => {
 onBeforeMount(async () => {
   api.value = store.state.user.api;
   organizations.value = JSON.parse(sessionStorage.getItem("organizations"));
-  organizations.value.forEach(i=>{
-    searchInput.orgId.push(i.id)
-  })
-  
+  organizations.value.forEach((i) => {
+    searchInput.orgId.push(i.id);
+  });
+
   const btnflag = JSON.parse(sessionStorage.getItem("btnflag"));
   adminMenuParentId.value = JSON.parse(
     sessionStorage.getItem("adminMenuParentId")
@@ -788,7 +897,6 @@ onBeforeMount(async () => {
   }
   // console.log(adminMenuParentId.value, "管理员等级 0 T0级 1 T1级");
   // console.log(destinatio.value, "规则 1最上级 2依次审批");
-
 });
 onUnmounted(() => {
   // document.removeEventListener("keyup", Enters);
@@ -1107,6 +1215,45 @@ onUnmounted(() => {
       }
     }
   }
+
+  // 预览文档样式
+  :deep(.previewPdf) {
+    // height: 500px;
+    border-radius: 11px;
+
+    .el-dialog__header {
+      border-radius: 11px 11px 0 0;
+      background: rgba(237, 241, 245, 1);
+      font-weight: 600;
+      margin: 0;
+
+      .el-dialog__headerbtn {
+        outline: none;
+      }
+    }
+
+    .el-dialog__body {
+      padding: 20px;
+      height: 800px;
+      overflow: auto;
+      .pdfMain {
+        width: 100%;
+        height: 100%;
+      }
+      .home-box {
+        width: 100%;
+        height: 100%;
+        .continer {
+          height: 100%;
+          img {
+            width: 100%;
+            height: 100%;
+            object-fit: contain;
+          }
+        }
+      }
+    }
+  }
 }
 
 .el-input {

+ 167 - 19
src/views/roomStatus/roomStatus.vue

@@ -6,7 +6,21 @@
   >
     <div class="left">
       <div class="cameratxt">
-        <span class="cameratxt">房态管理</span>
+        <el-popover
+          placement="top-start"
+          title="房间使用情况"
+          :width="350"
+          trigger="hover"
+          effect="light"
+          content="this is content, this is content, this is content"
+        >
+          <template #reference>
+            <span class="cameratxt">房态管理</span>
+          </template>
+          <div v-for="i in roomList.list">
+            {{ i.name }} : 未使用 {{ i.freeCount }} 间 , 已使用 {{ i.useCount }} 间
+          </div>
+        </el-popover>
       </div>
       <!-- 按钮列表 -->
       <div class="gongneng">
@@ -181,6 +195,7 @@
             ><span>刷新房态信息</span></el-button
           >
         </div>
+        
       </div>
       <div class="footer" v-if="switchDayIndex == 1">
         <div class="floor" v-for="item in roomList.list">
@@ -199,7 +214,7 @@
                 :visible="i.visible"
               >
                 <template #reference>
-                  <div @click="itemClick(i)">
+                  <div @click="itemClick(i)" style="position: relative;">
                     <div class="roomNum" v-if="i.status">
                       <span
                         >{{ i.houseNumber
@@ -298,6 +313,10 @@
                     <div class="rLock" v-if="i.status == 5 || i.status == 6">
                       <span>结束:{{ i.endTime }}</span>
                     </div>
+                    <div style="position: absolute;right: 15px;bottom: 8px;">
+                      <img v-if="i.electricType==1" @click="bulbsClick(i)" style="width: 22px;height: 22px;cursor: pointer;" src="../../assets/icons/bulbs.png" alt="">
+                      <img v-if="i.electricType==2" @click="bulbsClick(i)" style="width: 20px;height: 20px;cursor: pointer;" src="../../assets/icons/bulb.png" alt="">
+                    </div>
                   </div>
                 </template>
                 <!-- 弹窗面板 -->
@@ -548,6 +567,13 @@
                         <img src="@/assets/icons/ruzhu.png" alt="" />
                         <span>入住</span>
                       </div>
+                      <div
+                        @click="roomChangeClick(i)"
+                        v-if="flagBtn.huanfang == 1"
+                      >
+                        <img src="@/assets/icons/roomChange.png" alt="" />
+                        <span>换房</span>
+                      </div>
                       <!-- <div @click="maintainClick">
                         <img src="@/assets/icons/weixiu.png" alt="" />
                         <span>维修</span>
@@ -792,6 +818,7 @@
                   </div>
                 </div>
               </el-popover>
+            
             </div>
           </div>
         </div>
@@ -1203,7 +1230,23 @@
             align="center"
           >
             <template #header>
-              {{ i.date }}
+              <el-popover
+                  placement="top-start"
+                  title="房间使用情况"
+                  :width="250"
+                  trigger="hover"
+                  effect="light"
+                  content="this is content, this is content, this is content"
+                >
+                  <template #reference>
+                    <span>{{ i.date }}</span>
+                  </template>
+                  <div>
+                    <div v-for="item in i.freeNumbers">{{ item.room_name }}: 未使用{{ item.num }}间</div><br>
+                    <div v-for="item in i.useNumbers">{{ item.room_name }}: 已使用{{ item.num }}间</div>
+                  </div>
+                </el-popover>
+              
             </template>
             <el-table-column
               prop="state"
@@ -1597,13 +1640,15 @@
             <div class="changeItemss">
               <div
                 class="changeNews"
-                :class="roomChangeIndex == 1 ? 'changeNews_active' : ''"
-                @click="changeRoom(1)"
+                :class="roomChangeIndex == item.name ? 'changeNews_active' : ''"
+                @click="changeRoom(item.name)"
+                v-for="item in roomChangeItemList"
               >
-                {{ roomChangeRuleForm.houseName
-                }}<span>
+                {{ item.name
+                }}
+                <!-- <span>
                   ({{ roomChangeRuleForm.roomType == 1 ? "全" : "钟" }})</span
-                >
+                > -->
               </div>
             </div>
           </div>
@@ -2891,7 +2936,7 @@ const roomTypeColor = ref([
 // 换房弹窗(----------------------------------------------------)
 const roomChangeVisible = ref(false);
 const roomChangeLoading = ref(false);
-const roomChangeIndex = ref(1);
+const roomChangeIndex = ref();
 const roomChangeRuleForm = reactive({
   houseName: "", // 原本的房型
   houseNumber: "", // 原本的房号
@@ -2911,6 +2956,7 @@ const roomChangeRuleForm = reactive({
   houseNumberIdNow: "", // 勾选的房间id
 });
 const checkInd = ref();
+const roomChangeItemList=ref()// 左边的房间类型
 const roomChangeList = reactive({ list: [] });
 
 // 预定(--------------------------------------------------------)
@@ -3624,6 +3670,8 @@ const clean = async (flag) => {
     }
   }
 };
+
+
 // 勾选房间
 const checkcleanRoom = (data, nodes) => {
   console.log(data, nodes);
@@ -3685,7 +3733,7 @@ const cancelClean = () => {
   // cleanRoomCount.value = [];
   // cleanRoomAllChecked.value = false;
 };
-// 确定批量开关
+// 确定批量开关
 const switchBatch = async () => {
   roomLoading.value = true; // 加载页面
   if (cleanRoomLiCount.value.length) {
@@ -3945,6 +3993,83 @@ const switchBatch = async () => {
     });
   }
 };
+// 单独控制房间的电
+const bulbsClick=async (i)=>{
+  roomLoading.value = true; // 加载页面
+  // electricType==1表示开电状态
+  if(i.electricType==1){
+    let data = {
+      houseNumberIds: [i.houseNumberId],
+      adminId: sessionStorage.getItem("permissionSettingId"),
+    };
+    let res = await axios({
+      method: "post",
+      url: api.value + "/house-number-state/shutRooms",
+      headers: {
+        token: sessionStorage.getItem("token"),
+        user_head: sessionStorage.getItem("user_head"),
+      },
+      data: data,
+    });
+    console.log(res, "单独关电");
+    if (res.data.code == 200) {
+      roomLoading.value = false; // 加载页面
+      getList();
+      ElMessage({
+        type: "success",
+        showClose: true,
+        message: res.data.message,
+        center: true,
+      });
+    } else {
+      roomLoading.value = false; // 加载页面
+      getList();
+      ElMessage({
+        type: "error",
+        showClose: true,
+        message: res.data.message,
+        center: true,
+      });
+    }
+  }
+  // electricType==2表示关电状态
+  else if(i.electricType==2){
+    let data = {
+      houseNumberIds: [i.houseNumberId],
+      adminId: sessionStorage.getItem("permissionSettingId"),
+    };
+    let res = await axios({
+      method: "post",
+      url: api.value + "/house-number-state/openERooms",
+      headers: {
+        token: sessionStorage.getItem("token"),
+        user_head: sessionStorage.getItem("user_head"),
+      },
+      data: data,
+    });
+    console.log(res, "单独开电");
+    if (res.data.code == 200) {
+      roomLoading.value = false; // 加载页面
+      getList();
+      ElMessage({
+        type: "success",
+        showClose: true,
+        message: res.data.message,
+        center: true,
+      });
+    } else {
+      roomLoading.value = false; // 加载页面
+      getList();
+      ElMessage({
+        type: "error",
+        showClose: true,
+        message: res.data.message,
+        center: true,
+      });
+    }
+  }
+}
+
 
 // 切换日历 单日
 const switchDay = (val) => {
@@ -4144,6 +4269,19 @@ const getList = async () => {
     });
     console.log(res, "日历房间列表");
     if (res.data.code == 200) {
+      // let arr=[]
+      // res.data.data.dateTime.forEach(item=>{
+      //   item.freeNumbers.forEach(i=>{
+      //     if(item.userNumbers){
+      //       item.userNumbers.forEach(j=>{
+      //         if(i.room_name==j.room_name){
+      //           i.useNum=j.num
+      //         }
+      //       })
+      //     }
+          
+      //   })
+      // })
       tableDateHeader.value = res.data.data.dateTime;
       tableDate.value = res.data.data.page.records;
       roomLoading.value = false;
@@ -4310,7 +4448,13 @@ const roomChangeClick = async (row) => {
   });
   console.log(res, "换房界面");
   if (res.data.code == 200) {
-    roomChangeList.list = res.data.data;
+    roomChangeItemList.value=res.data.data
+    roomChangeIndex.value=roomChangeItemList.value[0].name
+    if(roomChangeItemList.value[0].children.length!=[]){
+      roomChangeList.list = roomChangeItemList.value[0].children;
+    }else{
+      roomChangeList.list =[]
+    }
   } else {
     ElMessage({
       type: "error",
@@ -4321,11 +4465,13 @@ const roomChangeClick = async (row) => {
   }
 };
 // 切换房类型
-const changeRoom = (ind) => {
-  roomChangeIndex.value = ind;
-  if (ind == 1) {
-  } else if (ind == 2) {
-  }
+const changeRoom = (name) => {
+  roomChangeIndex.value = name;
+  roomChangeItemList.value.forEach(i=>{
+    if(i.name==name){
+      roomChangeList.list=i.children
+    }    
+  })
 };
 // 勾选房间
 const roomCheck = (row) => {
@@ -6207,9 +6353,9 @@ onUnmounted(() => {
   }
 
   .footer {
-    // flex:1;
+    flex:1;
     width: calc(100% - 61px);
-    height: calc(100% - 82px);
+    // height: calc(100% - 82px);
     margin: 0 auto 20px;
     color: #000;
     overflow: auto;
@@ -6816,6 +6962,7 @@ onUnmounted(() => {
         .changeItemss {
           /* // margin: 20px 0; */
           width: 130px;
+          
           .changeNews {
             margin: 15px 0;
             height: 40px;
@@ -6835,7 +6982,8 @@ onUnmounted(() => {
       }
       .room {
         width: calc(100% - 130px);
-        height: 100%;
+        height: 420px;
+        overflow: auto;
         margin: 10px 0 0 0;
         .floors {
           width: calc(100%);

+ 58 - 13
src/views/roomType/roomType.vue

@@ -109,15 +109,33 @@
             label="房号"
             width="220"
           >
-            <template #default="{ row }">
-              <div class="ul" style="display: flex; flex-wrap: wrap">
-                <el-tag
-                  v-for="i in row.roomList"
-                  style="margin: 5px"
-                  type="primary"
-                  >{{ i }}</el-tag
+            <template #default=" scope ">
+                <el-tag style="margin: 5px" type="primary">{{
+                  scope.row.roomOne
+                }}</el-tag>
+                <el-tooltip
+                  class="box-item"
+                  effect="light"
+                  v-if="scope.row.roomNum >= 1"
                 >
-              </div>
+                  <template #content>
+                    <div
+                      style="
+                        display: flex;
+                        justify-content: flex-start;
+                        flex-wrap: wrap;
+                      "
+                    >
+                      <el-tag
+                        style="margin: 3px 3px"
+                        type="primary"
+                        v-for="item in scope.row.roomTwo"
+                        >{{ item }}</el-tag
+                      >
+                    </div>
+                  </template>
+                  <el-tag type="primary">+{{ scope.row.roomNum }}</el-tag>
+                </el-tooltip>
               <!-- <div class="ul" v-if="row.roomList && row.roomList.length<=5" style="display: flex; flex-wrap: wrap">
                 <el-tag
                   v-for="i in row.roomList"
@@ -344,14 +362,19 @@
                   <el-form-item label="房间上架 :" prop="putaway">
                     <el-switch
                       v-model="ruleForm.putaway"
-                      style="
-                        --el-switch-on-color: #0f6aff;
-                      "
+                      style="--el-switch-on-color: #0f6aff"
                       :active-value="1"
                       :inactive-value="2"
                     />
                   </el-form-item>
-                  <span style="color: #f81313;display:inline-block;transform: translateY(-7px)">开启则在小程序上显示</span>
+                  <span
+                    style="
+                      color: #f81313;
+                      display: inline-block;
+                      transform: translateY(-7px);
+                    "
+                    >开启则在小程序上显示</span
+                  >
                 </div>
               </div>
               <div class="form_item">
@@ -707,6 +730,28 @@ const getList = async () => {
         i.roomLength = arr.length;
       }
     });
+    res.data.data.list.forEach((i) => {
+      if (i.roomId) {
+        let arr = i.roomId.split(",");
+        if (arr.length > 1) {
+          i.roomOne = arr[0];
+          arr = arr.filter((item, index) => {
+            return index != 0;
+          });
+          i.roomTwo = arr;
+          i.roomNum = arr.length;
+        } else if (arr.length == 1) {
+          i.roomOne = arr[0];
+          i.roomTwo = [];
+          i.roomNum = 0;
+        } else {
+          i.roomOne = "";
+          i.roomTwo = [];
+          i.roomNum = 0;
+        }
+      }
+    });
+
     tableData.list = res.data.data.list;
     total.value = res.data.data.totalCount;
   } else {
@@ -1908,7 +1953,7 @@ onUnmounted(() => {
 }
 </style>
 <style lang="scss">
-  .el-popper.account_tag_title{
+.el-popper.account_tag_title {
   // width: 450px;
   // height: 75%;
   // overflow: auto;

+ 270 - 23
src/views/statement/statement.vue

@@ -34,6 +34,23 @@
               style="width: 180px"
             />
           </div>
+          <div class="condition" v-if="changeIndex == 2">
+            <span>账期&nbsp;&nbsp;</span>
+            <el-select
+              v-model="searchInput.dateBill"
+              placeholder="请选择账期"
+              style="width: 200px"
+              @change="searchBtn"
+              :clearable="true"
+            >
+              <el-option
+                v-for="item in dateBillTypeList"
+                :key="item"
+                :label="item"
+                :value="item"
+              />
+            </el-select>
+          </div>
           <div class="condition">
             <span>创建时间&nbsp;&nbsp;</span>
             <el-date-picker
@@ -104,14 +121,37 @@
             </template>
           </el-table-column>
           <el-table-column align="center" prop="reserveName" label="入住人" />
-          <el-table-column align="center" prop="orgName" label="部门" />
-          <el-table-column align="center" prop="cardNumber" width="150" label="部门职工卡号" />
-          <el-table-column align="center" prop="houseName" label="房型" width="150">
+          <el-table-column
+            align="center"
+            prop="orgName"
+            width="160"
+            label="部门"
+          />
+          <el-table-column
+            align="center"
+            prop="cardNumber"
+            width="150"
+            label="部门职工卡号"
+          />
+          <el-table-column
+            align="center"
+            prop="houseName"
+            label="房型"
+            width="150"
+          >
             <template #default="{ row }">
-             <span>{{ row.roomName }}</span> <span style="color:rgba(30, 125, 251,1)">( {{ row.roomType==1?'全':'钟' }} )</span>
+              <span>{{ row.roomName }}</span>
+              <span style="color: rgba(30, 125, 251, 1)"
+                >( {{ row.roomType == 1 ? "全" : "钟" }} )</span
+              >
             </template>
           </el-table-column>
-          <el-table-column align="center" prop="roomNumber" width="120" label="房号" />
+          <el-table-column
+            align="center"
+            prop="roomNumber"
+            width="120"
+            label="房号"
+          />
           <el-table-column
             align="center"
             prop="payPrice"
@@ -122,7 +162,7 @@
           <el-table-column
             align="center"
             prop="payPrice"
-            width="130" 
+            width="130"
             v-if="changeIndex == 2"
             label="待结账(元)"
           />
@@ -174,6 +214,12 @@
           </el-table-column>
           <el-table-column
             align="center"
+            prop="dateBill"
+            width="200"
+            label="账期"
+          />
+          <el-table-column
+            align="center"
             prop="createTime"
             width="200"
             label="创建时间"
@@ -183,10 +229,23 @@
             fixed="right"
             label="操作"
             width="150"
-            v-if="flagBtn.xiangqing==1"
+            v-if="flagBtn.xiangqing == 1"
           >
             <template #default="scope">
-              <div class="look"  @click="clickOrderInfo(scope.row)">详情</div>
+              <div
+                class="look"
+                v-if="changeIndex == 1"
+                @click="clickOrderInfo(scope.row)"
+              >
+                详情
+              </div>
+              <div
+                class="look"
+                v-if="changeIndex == 2"
+                @click="clickOrderInfos(scope.row)"
+              >
+                详情
+              </div>
             </template>
           </el-table-column>
         </el-table>
@@ -213,7 +272,7 @@
       :close-on-click-modal="false"
       :close-on-press-escape="false"
       align-center
-      width="850"
+      width="1050"
       :before-close="orderInfoClose"
     >
       <div class="userinfo">用户信息</div>
@@ -264,15 +323,17 @@
       <!-- 水费区域 -->
       <div class="rate">水费明细</div>
       <div class="water">
-        表计:{{ order.watermeter }} &nbsp;&nbsp;&nbsp;楼层:{{
-          order.floor
-        }}
-        &nbsp;&nbsp;&nbsp;抄表时间:{{ order.realStartTime }}
+        <span v-if="changeIndex == 1">
+          表计:{{ order.watermeter }} &nbsp;&nbsp;&nbsp;楼层:{{ order.floor }} &nbsp;&nbsp;&nbsp;</span
+        >
+        <span v-if="changeIndex == 1">抄表时间:{{ order.realStartTime }}</span
+        ><span v-if="changeIndex == 2">抄表时间:{{ order.createTime }}</span>
       </div>
       <el-table
+        v-if="changeIndex == 1"
         :data="waterTable.list"
-        max-height="93"
-        style="width: 832px"
+        max-height="403"
+        style="width: 1000px"
         stripe
         :cell-style="rowbg"
         :header-cell-style="{
@@ -302,19 +363,75 @@
           show-overflow-tooltip
         ></el-table-column>
       </el-table>
+      <el-table
+        v-if="changeIndex == 2"
+        :data="waterTable.list"
+        max-height="403"
+        style="width: 1000px"
+        stripe
+        :cell-style="rowbg"
+        :header-cell-style="{
+          color: ' rgba(0, 0, 0, 1)',
+          background: 'rgba(240, 243, 247, 1)',
+        }"
+      >
+        <el-table-column
+          prop="orderNumber"
+          align="center"
+          label="订单号"
+        ></el-table-column>
+        <el-table-column
+          prop="liveTime"
+          align="center"
+          label="入住时间"
+        ></el-table-column>
+        <el-table-column
+          prop="leaveTime"
+          align="center"
+          label="离店时间"
+        ></el-table-column>
+        <el-table-column
+          prop="roomNumber"
+          align="center"
+          label="房号"
+        ></el-table-column>
+        <el-table-column
+          prop="waterConsume"
+          align="center"
+          label="用水量(吨)"
+        ></el-table-column>
+        <el-table-column
+          prop="waterPrice"
+          align="center"
+          label="水价(元)"
+        ></el-table-column>
+        <el-table-column
+          prop="freeWater"
+          align="center"
+          label="补助量(吨)"
+        ></el-table-column>
+        <el-table-column
+          prop="waterTotalPrice"
+          align="center"
+          label="产生水费(元)"
+          show-overflow-tooltip
+        ></el-table-column>
+      </el-table>
 
       <!-- 电费区域 -->
       <div class="rate">电费明细</div>
       <div class="water">
-        表计:{{ order.elemeter }} &nbsp;&nbsp;&nbsp;楼层:{{
-          order.floor
-        }}
-        &nbsp;&nbsp;&nbsp;抄表时间:{{ order.realStartTime }}
+        <span v-if="changeIndex == 1"
+          >表计:{{ order.elemeter }} &nbsp;&nbsp;&nbsp;楼层:{{ order.floor }} &nbsp;&nbsp;&nbsp;</span
+        >
+        <span v-if="changeIndex == 1">抄表时间:{{ order.realStartTime }}</span
+        ><span v-if="changeIndex == 2">抄表时间:{{ order.createTime }}</span>
       </div>
       <el-table
+        v-if="changeIndex == 1"
         :data="electricTable.list"
-        max-height="93"
-        style="width: 832px"
+        max-height="403"
+        style="width: 1000px"
         stripe
         :cell-style="rowbg"
         :header-cell-style="{
@@ -344,6 +461,60 @@
           show-overflow-tooltip
         ></el-table-column>
       </el-table>
+      <el-table
+        v-if="changeIndex == 2"
+        :data="electricTable.list"
+        max-height="403"
+        style="width: 1000px"
+        stripe
+        :cell-style="rowbg"
+        :header-cell-style="{
+          color: ' rgba(0, 0, 0, 1)',
+          background: 'rgba(240, 243, 247, 1)',
+        }"
+      >
+        <el-table-column
+          prop="orderNumber"
+          align="center"
+          label="订单号"
+        ></el-table-column>
+        <el-table-column
+          prop="liveTime"
+          align="center"
+          label="入住时间"
+        ></el-table-column>
+        <el-table-column
+          prop="leaveTime"
+          align="center"
+          label="离店时间"
+        ></el-table-column>
+        <el-table-column
+          prop="roomNumber"
+          align="center"
+          label="房号"
+        ></el-table-column>
+        <el-table-column
+          prop="electricConsume"
+          align="center"
+          label="用电量(度)"
+        ></el-table-column>
+        <el-table-column
+          prop="electricPrice"
+          align="center"
+          label="电价(元)"
+        ></el-table-column>
+        <el-table-column
+          prop="freeElectric"
+          align="center"
+          label="补助量(度)"
+        ></el-table-column>
+        <el-table-column
+          prop="electricTotalPrice"
+          align="center"
+          label="产生电费(元)"
+          show-overflow-tooltip
+        ></el-table-column>
+      </el-table>
     </el-dialog>
   </div>
 </template>
@@ -376,6 +547,7 @@ const flagBtn = ref(); // 按钮权限
 const searchInput = reactive({
   keyWord: "", // 关键字
   createTime: "",
+  dateBill: "",
 }); // 搜索按钮数据
 
 // 待结账 (---------------------------------------------------------------------)
@@ -395,6 +567,7 @@ const currentPage = ref(1); // 当前页
 const pageSize = ref(10);
 const total = ref(10); // 当前总数
 
+const dateBillTypeList = ref(); // 账期列表
 // 详情
 const orderInfoVisible = ref(false); // 详情弹窗
 const order = reactive({
@@ -402,6 +575,7 @@ const order = reactive({
   userPhone: "", // 联系方式
   orderNo: "", // 订单号
   allOfReceiveAmount: "", // 支付金额(元)
+  createTime: "", // 创建时间
   realStartTime: "", // 入住时间
   realEndTime: "", // 离住时间
   housDay: "", // 入住天数
@@ -447,6 +621,9 @@ const getList = async () => {
     keyWord: searchInput.keyWord,
     state: changeIndex.value,
   };
+  if (changeIndex == 2) {
+    data.dateBill = searchInput.dateBill;
+  }
   if (searchInput.createTime) {
     data.startTime = searchInput.createTime[0];
     data.endTime = searchInput.createTime[1];
@@ -485,6 +662,7 @@ const searchBtn = lodash.debounce(async () => {
 const clickOrderInfo = async (row) => {
   orderInfoVisible.value = true;
   order.floor = row.roomName + " " + row.roomNumber;
+
   console.log(row);
   let data = {
     orderNumber: row.orderNumber,
@@ -506,6 +684,7 @@ const clickOrderInfo = async (row) => {
     order.userPhone = data.reservePhone;
     order.orderNo = data.orderNumber;
     order.allOfReceiveAmount = data.payPrice;
+
     order.realStartTime = data.reserveLiveTime;
     order.realEndTime = data.reserveLeaveTime;
     order.housDay = data.liveDay;
@@ -537,6 +716,49 @@ const clickOrderInfo = async (row) => {
     });
   }
 };
+// 待结账
+const clickOrderInfos = async (row) => {
+  orderInfoVisible.value = true;
+  order.floor = row.roomName + " " + row.roomNumber;
+  order.createTime = row.createTime;
+  console.log(row);
+  let data = {
+    id: row.id,
+  };
+  let res = await axios({
+    method: "get",
+    url: api.value + "/house-order/reportStatisticsParticulars",
+    headers: {
+      token: sessionStorage.getItem("token"),
+      user_head: sessionStorage.getItem("user_head"),
+    },
+    params: data,
+  });
+  console.log(res, "待结账详情信息");
+  if (res.data.code == 200) {
+    let data = res.data.data.houseOrder;
+    order.userName = data.reserveName;
+    order.userPhone = data.reservePhone;
+    order.orderNo = data.orderNumber;
+    order.allOfReceiveAmount = data.payPrice;
+    order.realStartTime = data.reserveLiveTime;
+    order.realEndTime = data.reserveLeaveTime;
+    order.housDay = data.liveDay;
+    order.payTime = data.payTime;
+    order.watermeter = res.data.data.waterEquipmentMeterName;
+    order.elemeter = res.data.data.electricEquipmentMeterName;
+    waterTable.list = res.data.data.waterVos;
+    electricTable.list = res.data.data.electricVos;
+  } else {
+    ElMessage({
+      type: "error",
+      showClose: true,
+      message: res.data.message,
+      center: true,
+    });
+  }
+};
+
 // 关闭详情弹窗
 const orderInfoClose = () => {
   orderInfoVisible.value = false;
@@ -603,6 +825,30 @@ const importExcel = lodash.debounce(async () => {
     });
   }
 }, 1000);
+const dateBillType = async () => {
+  let res = await axios({
+    method: "get",
+    url: api.value + "/house-order/dateBillType",
+    headers: {
+      token: sessionStorage.getItem("token"),
+      user_head: sessionStorage.getItem("user_head"),
+    },
+  });
+  console.log(res, "账期列表");
+  if (res.data.code == 200) {
+    dateBillTypeList.value = res.data.data.filter((i) => {
+      return i != null;
+    });
+  } else {
+    loading.value = false;
+    ElMessage({
+      type: "error",
+      showClose: true,
+      message: res.data.message,
+      center: true,
+    });
+  }
+};
 
 onBeforeMount(async () => {
   api.value = store.state.user.api;
@@ -610,6 +856,7 @@ onBeforeMount(async () => {
   flagBtn.value = btnflag.statement;
   console.log(flagBtn.value, "按钮权限");
   changeItem(changeIndex.value);
+  dateBillType(); // 账期列表
 });
 onUnmounted(() => {
   // document.removeEventListener("keyup", Enters);
@@ -882,9 +1129,9 @@ onUnmounted(() => {
 
       .info {
         display: flex;
-
+        // justify-content: space-around;
         .user {
-          margin-right: 120px;
+          margin-right: 220px;
           .name {
             text-align: left;
             padding: 12px 0;

+ 1 - 1
src/views/system/system.vue

@@ -475,7 +475,7 @@
           <div class="titles">
             <div class="set">
               补助设置<span style="font-size: 14px; padding: 0 15px"
-                >/ 月底失效</span
+                >/ 每房每日定额</span
               >
             </div>
           </div>

+ 3 - 3
vite.config.js

@@ -37,10 +37,10 @@ export default defineConfig({
     //   },
     // },
     // proxy: {
-    //   "/ihotel/auto": {
-    //     target: "http://192.168.161.225:8090/ihotel/auto", // 万新亮测试环境
+    //   "/testingServer/ihotel/auto": {
+    //     target: "https://chtech.ncjti.edu.cn/testingServer/ihotel/auto", // 万新亮测试环境
     //     changeOrigin: true,
-    //     rewrite: (path) => path.replace(/^\/ihotel\/auto/, ""),
+    //     rewrite: (path) => path.replace(/^\/testingServer\/ihotel\/auto/, ""),
     //   },
     // },
   },