dingxin 6 年 前
コミット
dec41d7c13
共有22 個のファイルを変更した697 個の追加601 個の削除を含む
  1. 2
    2
      CODE/smart-community/app-api/src/main/java/com/community/huiju/config/BillQuartz.java
  2. 12
    0
      CODE/smart-community/app-api/src/main/java/com/community/huiju/controller/UserLicenseController.java
  3. 17
    0
      CODE/smart-community/app-api/src/main/java/com/community/huiju/dao/TpEquipmentMapper.java
  4. 8
    0
      CODE/smart-community/app-api/src/main/java/com/community/huiju/service/ITaUserLicenseService.java
  5. 9
    5
      CODE/smart-community/app-api/src/main/java/com/community/huiju/service/impl/FaceServicelimpl.java
  6. 2
    2
      CODE/smart-community/app-api/src/main/java/com/community/huiju/service/impl/MonitoringServiceImpl.java
  7. 20
    1
      CODE/smart-community/app-api/src/main/java/com/community/huiju/service/impl/TaUserLicenseServiceImpl.java
  8. 3
    3
      CODE/smart-community/app-api/src/main/resources/mapper/TpTransactionReplyMapper.xml
  9. 1
    1
      CODE/smart-community/property-api/src/main/resources/mapper/TpShopMapper.xml
  10. 1
    0
      VUECODE/smart-operate-manage/config/prod.env.js
  11. 1
    0
      VUECODE/smart-property-manage/config/prod.env.js
  12. 15
    12
      VUECODE/smart-property-manage/src/views/bill/info/index.vue
  13. 6
    4
      VUECODE/smart-property-manage/src/views/grogshop/configindex.vue
  14. 26
    23
      VUECODE/smart-property-manage/src/views/grogshop/grogshopRoomEdit.vue
  15. 4
    4
      VUECODE/smart-property-manage/src/views/rental/rentalAdd.vue
  16. 1
    1
      VUECODE/smart-property-manage/src/views/rental/rentalEdit.vue
  17. 5
    0
      VUECODE/smart-property-manage/src/views/shop/shopAdd.vue
  18. 2
    5
      VUECODE/smart-property-manage/src/views/shop/shopEdit.vue
  19. 26
    23
      VUECODE/smart-property-manage/src/views/systemResources/app/index.vue
  20. 6
    5
      VUECODE/smart-property-manage/src/views/ticket/details.vue
  21. 265
    255
      文档/MYSQL/smartCommunity.pdb
  22. 265
    255
      文档/MYSQL/smartCommunity.pdm

+ 2
- 2
CODE/smart-community/app-api/src/main/java/com/community/huiju/config/BillQuartz.java ファイルの表示

@@ -17,7 +17,7 @@ import java.util.List;
17 17
  * 定时器
18 18
  * @author weiximei
19 19
  */
20
-@Component
20
+//@Component
21 21
 @Slf4j
22 22
 public class BillQuartz {
23 23
 
@@ -30,7 +30,7 @@ public class BillQuartz {
30 30
     @Autowired
31 31
     private TaUserLicenseOrderMapper taUserLicenseOrderMapper;
32 32
 
33
-    @Scheduled(cron = "0 0/10 * * * ?")
33
+    //@Scheduled(cron = "0 0/10 * * * ?")
34 34
     public void billInvoice() {
35 35
         log.info("定时任务,扫描订单,超过 10 分未付款则,关闭订单!");
36 36
         // 物业缴费

+ 12
- 0
CODE/smart-community/app-api/src/main/java/com/community/huiju/controller/UserLicenseController.java ファイルの表示

@@ -81,6 +81,18 @@ public class UserLicenseController extends BaseController {
81 81
         return responseBean;
82 82
     }
83 83
 
84
+    @ApiOperation(value = "获取用户车牌信息", notes = "获取用户车牌信息")
85
+    @ApiImplicitParams({
86
+            @ApiImplicitParam(paramType = "header", dataTypeClass = String.class, name = "X-Auth-Token", value = "token"),
87
+            @ApiImplicitParam(paramType = "path", dataTypeClass = String.class, name = "licenseId", value = "车牌id"),
88
+    })
89
+    @RequestMapping(value = "/license/user/{licenseId}", method = RequestMethod.GET)
90
+    public ResponseBean getUserLicenseAndUserId(HttpSession session, @PathVariable("licenseId") Integer licenseId) {
91
+        ResponseBean responseBean = new ResponseBean();
92
+        UserElement userElement = getUserElement(session);
93
+        responseBean = iTaUserLicenseService.getUserLicenseAndUserId(userElement, licenseId);
94
+        return responseBean;
95
+    }
84 96
 
85 97
 
86 98
 }

+ 17
- 0
CODE/smart-community/app-api/src/main/java/com/community/huiju/dao/TpEquipmentMapper.java ファイルの表示

@@ -82,4 +82,21 @@ public interface TpEquipmentMapper {
82 82
             "where trne.community_id=#{communityId} and trne.unit_id=#{unitId} and te.equipment_type=#{equipmentType}")
83 83
     List<TpEquipment> selectByCommunityIdAndUnitId(@Param("communityId") Integer communityId, @Param("unitId") Integer unitId, @Param("equipmentType") Integer equipmentType);
84 84
 
85
+    /**
86
+     * 根据小区 和 单元号 查询所有人脸设备
87
+     * @param communityId
88
+     * @param unitId
89
+     * @return
90
+     */
91
+    @ResultMap("BaseResultMap")
92
+    @Select("select " +
93
+            "te.* " +
94
+            "from tp_unit_equipment trne left join tp_equipment te " +
95
+            "on trne.equipment_id = te.id " +
96
+            "LEFT JOIN tp_configuration tc ON te.uuid_id = tc.id " +
97
+            "where trne.community_id=#{communityId} and trne.unit_id=#{unitId} and te.equipment_type=#{equipmentType} " +
98
+            "AND tc.device_type = 1")
99
+    List<TpEquipment> selectByCommunityIdAndUnitIdAndFace(@Param("communityId") Integer communityId, @Param("unitId") Integer unitId, @Param("equipmentType") Integer equipmentType);
100
+
101
+
85 102
 }

+ 8
- 0
CODE/smart-community/app-api/src/main/java/com/community/huiju/service/ITaUserLicenseService.java ファイルの表示

@@ -38,4 +38,12 @@ public interface ITaUserLicenseService {
38 38
      */
39 39
     ResponseBean deleteUserLicense(UserElement userElement, Integer licenseId);
40 40
 
41
+    /**
42
+     * 查询 车牌
43
+     * @param userElement
44
+     * @param licenseId
45
+     * @return
46
+     */
47
+    ResponseBean getUserLicenseAndUserId(UserElement userElement, Integer licenseId);
48
+
41 49
 }

+ 9
- 5
CODE/smart-community/app-api/src/main/java/com/community/huiju/service/impl/FaceServicelimpl.java ファイルの表示

@@ -15,6 +15,7 @@ import com.community.huiju.service.IHKService;
15 15
 import com.community.huiju.service.ImageServiceI;
16 16
 import com.google.common.collect.Maps;
17 17
 import lombok.extern.slf4j.Slf4j;
18
+import org.apache.commons.collections.CollectionUtils;
18 19
 import org.springframework.beans.factory.annotation.Autowired;
19 20
 import org.springframework.http.HttpEntity;
20 21
 import org.springframework.http.HttpHeaders;
@@ -216,7 +217,8 @@ public class FaceServicelimpl implements FaceServiceI {
216 217
                 // 设备树
217 218
                 TpEquipmentTree tpEquipmentTree = tpEquipmentTreeMapper.selectByCommunityId(communityId);
218 219
                 // 所有设备
219
-                List<TpEquipment> tpEquipments = tpEquipmentMapper.selectByCommunityIdAndUnitId(communityId, unitId, 4);
220
+                // List<TpEquipment> tpEquipments = tpEquipmentMapper.selectByCommunityIdAndUnitId(communityId, unitId, 4);
221
+                List<TpEquipment> tpEquipments = tpEquipmentMapper.selectByCommunityIdAndUnitIdAndFace(communityId, unitId, 4);
220 222
                 List<Map<String, Object>> equipmentUUID = getEquipmentUUID(tpEquipments);
221 223
                 StringBuilder doorUuids = new StringBuilder();
222 224
                 StringBuilder deviceUuids = new StringBuilder();
@@ -243,12 +245,14 @@ public class FaceServicelimpl implements FaceServiceI {
243 245
 
244 246
                 // 单元门口机
245 247
                 List<TpEquipment> visualEquipments = tpEquipmentMapper.selectByCommunityIdAndUnitId(communityId, unitId, 3);
246
-                List<String> visualList = visualEquipments.stream()
247
-                        .map(e-> tpConfigurationMapper.selectByPrimaryKey(e.getUuidId()).getConfigurationValue())
248
-                        .collect(Collectors.toList());
248
+                if (CollectionUtils.isNotEmpty(visualEquipments)) {
249
+                    List<String> visualList = visualEquipments.stream()
250
+                            .map(e-> tpConfigurationMapper.selectByPrimaryKey(e.getUuidId()).getConfigurationValue())
251
+                            .collect(Collectors.toList());
249 252
 //                List<String> visualList = new ArrayList<>();
250 253
 //                visualList.add("10010100000");
251
-                HKOpenApi.visualIntercom(tpEquipmentTree.getOpUserUuid(), 1, userIdList, visualList, tpEquipmentTree.getAppkey(), tpEquipmentTree.getSecret(), tpEquipmentTree.getHttpServer());
254
+                    HKOpenApi.visualIntercom(tpEquipmentTree.getOpUserUuid(), 1, userIdList, visualList, tpEquipmentTree.getAppkey(), tpEquipmentTree.getSecret(), tpEquipmentTree.getHttpServer());
255
+                }
252 256
             } else {
253 257
                 responseBean.addError("请录入正确图片");
254 258
             }

+ 2
- 2
CODE/smart-community/app-api/src/main/java/com/community/huiju/service/impl/MonitoringServiceImpl.java ファイルの表示

@@ -218,8 +218,8 @@ public class MonitoringServiceImpl implements IMonitoringService {
218 218
             queryMap.put("appKey", tpEquipment.getAppkey());
219 219
             queryMap.put("appSecret", tpEquipment.getSecret());
220 220
             try {
221
-                String result = OkHttpRequestUtils.doGet(yinShiProperties.getVideoTokenUrl(), queryMap);
222
-                JSONObject jsonObject = JSONObject.parseObject(result);
221
+                String result = OkHttpRequestUtils.doPost(yinShiProperties.getVideoTokenUrl(), queryMap);
222
+                JSONObject jsonObject = JSONObject.parseObject(result).getJSONObject("data");
223 223
                 tpEquipment.setOpUserUuid(jsonObject.getString("accessToken"));
224 224
                 tpEquipment.setUnitUuids(String.valueOf(jsonObject.getLong("expireTime")));
225 225
                 tpEquipmentMapper.updateByPrimaryKeySelective(tpEquipment);

+ 20
- 1
CODE/smart-community/app-api/src/main/java/com/community/huiju/service/impl/TaUserLicenseServiceImpl.java ファイルの表示

@@ -104,6 +104,10 @@ public class TaUserLicenseServiceImpl implements ITaUserLicenseService {
104 104
         //2. 更新车牌信息
105 105
 
106 106
         taUserLicenses = taUserLicenses.stream().map(e-> {
107
+            TaUserLicense userLicense = getTaUserLicense(e.getLicensePlate(), e);
108
+            userLicense.setUpdateDate(new Date());
109
+            userLicense.setUpdateUser(userElement.getId());
110
+            taUserLicenseMapper.updateByPrimaryKeySelective(userLicense);
107 111
             e.setUnitPrice(String.valueOf(Double.valueOf(e.getUnitPrice()) / 100));
108 112
             return e;
109 113
         }).collect(Collectors.toList());
@@ -140,7 +144,6 @@ public class TaUserLicenseServiceImpl implements ITaUserLicenseService {
140 144
         taUserLicense.setLicensePlate(carNo);
141 145
         String price = String.valueOf(Double.valueOf(((BigDecimal) jsonParam.get("Cost")).toString()) * 100);
142 146
         taUserLicense.setUnitPrice(price.substring(0, price.lastIndexOf(".")));
143
-        taUserLicense.setCreateDate(new Date());
144 147
         taUserLicense.setParkingLot(String.valueOf(jsonParam.get("ParkingName")));
145 148
         taUserLicense.setRenewTime(Integer.valueOf(String.valueOf(jsonParam.get("RenewTime"))));
146 149
 
@@ -169,4 +172,20 @@ public class TaUserLicenseServiceImpl implements ITaUserLicenseService {
169 172
         responseBean.addSuccess("操作成功!");
170 173
         return responseBean;
171 174
     }
175
+
176
+    @Override
177
+    public ResponseBean getUserLicenseAndUserId(UserElement userElement, Integer licenseId) {
178
+        ResponseBean responseBean = new ResponseBean();
179
+
180
+        TaUserLicense taUserLicense = taUserLicenseMapper.selectByUserIdAndCommunityIdAndLicenseId(userElement.getCommunityId(), userElement.getId(), licenseId);
181
+        if (null == taUserLicense) {
182
+            responseBean.addError("没有关联此车牌!");
183
+            return responseBean;
184
+        }
185
+
186
+        taUserLicense = getTaUserLicense(taUserLicense.getLicensePlate(), taUserLicense);
187
+        taUserLicenseMapper.updateByPrimaryKeySelective(taUserLicense);
188
+        responseBean.addSuccess(taUserLicense);
189
+        return responseBean;
190
+    }
172 191
 }

+ 3
- 3
CODE/smart-community/app-api/src/main/resources/mapper/TpTransactionReplyMapper.xml ファイルの表示

@@ -170,13 +170,13 @@
170 170
     WHERE
171 171
 	tr.community_id = #{communityId}
172 172
     and tr.transaction_id=#{transactionId}
173
-      <if test="type != null and type != '' and type == 2" >
173
+      <if test="type == 2" >
174 174
         AND release_identity=1
175 175
       </if>
176
-      <if test="type != null and type != '' and type == 1" >
176
+      <if test="type == 1" >
177 177
         AND  tr.ta_user_id = #{founderUserID}
178 178
       </if>
179
-      <if test="type != null and type != '' and type == 0" >
179
+      <if test="type == 0" >
180 180
         AND (tr.ta_user_id = #{founderUserID}) OR (tr.reply_ta_user_id = #{founderUserID})
181 181
       </if>
182 182
    </select>

+ 1
- 1
CODE/smart-community/property-api/src/main/resources/mapper/TpShopMapper.xml ファイルの表示

@@ -33,7 +33,7 @@
33 33
         <if test="tpShop.shopStatus != null and tpShop.shopStatus != ''">
34 34
             and t.shop_status  = #{tpShop.shopStatus}
35 35
         </if>
36
-        ORDER BY t.sort, t.update_date desc
36
+        ORDER BY t.sort desc, t.update_date desc
37 37
     </select>
38 38
 
39 39
 </mapper>

+ 1
- 0
VUECODE/smart-operate-manage/config/prod.env.js ファイルの表示

@@ -2,4 +2,5 @@
2 2
 module.exports = {
3 3
   NODE_ENV: '"production"',
4 4
   BASE_API: '"http://106.14.20.193:8086/operate-api"',
5
+  // BASE_API: '"http://operate.jcjyhn.com/operate-api"',
5 6
 }

+ 1
- 0
VUECODE/smart-property-manage/config/prod.env.js ファイルの表示

@@ -2,4 +2,5 @@
2 2
 module.exports = {
3 3
   NODE_ENV: '"production"',
4 4
   BASE_API: '"http://106.14.20.193:8086/property-api"',
5
+  // BASE_API: '"http://property.jcjyhn.com/property-api"',
5 6
 }

+ 15
- 12
VUECODE/smart-property-manage/src/views/bill/info/index.vue ファイルの表示

@@ -7,9 +7,10 @@
7 7
       <el-button type="info" @click="updateBill">修改</el-button>
8 8
     </div>
9 9
     <div class="bill-info-search">
10
-      <span style="font-size: 14px; color: #606266;">收费情况</span>
10
+      <span style="font-size: 14px; color:#888888">收费情况</span>
11 11
       <el-form :model="formInline" inline="true" class="form-inline">
12
-        <el-form-item label="选择房子">
12
+        <el-form-item>
13
+          <span class="title-info">选择房子</span>
13 14
           <el-select v-model="formInline.phaseId" placeholder="请选择期" @change="buildSelectChange(0)">
14 15
             <el-option
15 16
               v-for="item in phaseList"
@@ -48,18 +49,21 @@
48 49
           </el-select>
49 50
         </el-form-item>
50 51
         <br>
51
-        <el-form-item label="户主姓名">
52
-          <el-input v-model="formInline.ownerName"/>
52
+        <el-form-item>
53
+          <span class="title-info">户主姓名</span>
54
+          <el-input v-model="formInline.ownerName" style="padding-left:25%;transform:translateY(-90%);"/>
53 55
         </el-form-item>
54
-        <el-form-item label="缴费状态">
55
-          <el-select v-model="formInline.billStatus" placeholder="请选择">
56
+        <el-form-item>
57
+          <span class="title-info">缴费状态</span>
58
+          <el-select v-model="formInline.billStatus" placeholder="请选择" style="padding-left:25%;transform:translateY(-90%);">
56 59
             <el-option label="未缴费" value="0"/>
57 60
             <el-option label="已线上缴费" value="1"/>
58 61
             <el-option label="已线下缴费" value="2"/>
59 62
           </el-select>
60 63
         </el-form-item>
61
-        <el-form-item label="缴费人姓名">
62
-          <el-input v-model="formInline.payName"/>
64
+        <el-form-item>
65
+          <span class="title-info">缴费人姓名</span>
66
+          <el-input v-model="formInline.payName" style="padding-left:30%;transform:translateY(-90%);"/>
63 67
         </el-form-item>
64 68
         <el-form-item>
65 69
           <el-button type="info" @click="cleanQuery">清空</el-button>
@@ -72,7 +76,7 @@
72 76
       <el-button type="danger" @click="deleteBeachIds">删除</el-button>
73 77
       <el-button type="primary" @click="offlinePayment">设置为已线下缴费</el-button>
74 78
       <el-button type="success" @click="exportExcel">导出数据</el-button>
75
-      <div style="height: 40px; line-height: 40px; margin-left: 10px; font-size: 14px; color: #606266;">未缴户主费用可以直接点击 收费金额数字 修改,已缴费户主无法修改,需要线下多退少补</div>
79
+      <div style="height: 40px; line-height: 40px; margin-left: 10px; font-size: 14px; color:#888888;padding-left:18%;">未缴户主费用可以直接点击 收费金额数字 修改,已缴费户主无法修改,需要线下多退少补</div>
76 80
     </div>
77 81
     <el-table
78 82
       v-loading="tableLoading"
@@ -550,11 +554,10 @@ export default {
550 554
   margin-top: 20px;
551 555
 }
552 556
 .title-info {
553
-  font-weight: bold;
554 557
   height: 40px;
555 558
   line-height: 40px;
556
-  font-size: 14px;
557
-  color: #606266;
559
+  font-size:14px;
560
+  color:#888888
558 561
 }
559 562
 .bill-info-search {
560 563
   margin-left: 20px;

+ 6
- 4
VUECODE/smart-property-manage/src/views/grogshop/configindex.vue ファイルの表示

@@ -126,9 +126,6 @@ export default {
126 126
         appIndexImg: [
127 127
           { required: true, message: 'app列表展示图', trigger: 'blur' }
128 128
         ],
129
-        appCarouselImg: [
130
-          { required: true, message: '轮播图', trigger: 'blur' }
131
-        ],
132 129
         hotelName: [
133 130
           { required: true, message: '酒店名称', trigger: 'blur' }
134 131
         ],
@@ -169,9 +166,10 @@ export default {
169 166
       this.listData.appIndexImg = res.data[0]
170 167
     },
171 168
     handleRemove(file, fileList) {
169
+      console.log(fileList)
172 170
       this.listData.appCarouselImg = []
173 171
       for (let i = 0; i < fileList.length; i++) {
174
-        this.listData.appCarouselImg.push(fileList[i].response.data[0])
172
+        this.listData.appCarouselImg.push(fileList[i].url)
175 173
       }
176 174
     },
177 175
     handleSuccessCarouselImg(response, file, fileList) { // 活动配图上传成功时回调
@@ -224,6 +222,10 @@ export default {
224 222
       this.$refs[formName].resetFields()
225 223
     },
226 224
     updateRental() {
225
+      if(this.listData.appCarouselImg.length == 0){
226
+       this.$message.error("酒店banner图不能为空")
227
+       return
228
+     }
227 229
       // 加载框
228 230
       const loading = this.$loading({
229 231
         lock: true,

+ 26
- 23
VUECODE/smart-property-manage/src/views/grogshop/grogshopRoomEdit.vue ファイルの表示

@@ -1,7 +1,7 @@
1 1
 <template>
2 2
   <div id="root">
3
-    <el-form ref="ruleForm" :model="ruleForm"  label-width="100px" class="demo-ruleForm">
4
-      <el-form-item label="房型名称" >
3
+    <el-form ref="ruleForm" :model="ruleForm" :rules="rules" label-width="100px" class="demo-ruleForm">
4
+      <el-form-item label="房型名称" prop="roomName">
5 5
         <el-input v-model="ruleForm.roomName" placeholder="房型名称"/>
6 6
       </el-form-item>
7 7
       <!-- <el-form-item label="房型号" >
@@ -10,10 +10,10 @@
10 10
      <el-form-item class="filter-item" label="房型短描述" prop="remark" >
11 11
         <el-input v-model.trim="ruleForm.remark" placeholder="房型推荐语等"/>
12 12
       </el-form-item>
13
-      <el-form-item label="房型价格">
13
+      <el-form-item label="房型价格" prop="price">
14 14
         <el-input v-model="ruleForm.price" placeholder="单位元" onkeyup="this.value=this.value.replace(/\D/g,'')"/>
15 15
       </el-form-item>
16
-      <el-form-item class="filter-item"  label="上架状态">
16
+      <el-form-item class="filter-item"  label="上架状态" prop="roomStatus">
17 17
         <el-select v-model="ruleForm.roomStatus" placeholder="上架">
18 18
          <el-option label="上架" value="1"/>
19 19
          <el-option label="下架" value="2"/>
@@ -41,18 +41,21 @@ export default {
41 41
        roomStatus: '',
42 42
              sort: '',
43 43
            roomNo: ''
44
+      },
45
+      rules: {
46
+        roomName: [
47
+          { required: true, message: '请输入房型名称', trigger: 'blur' }
48
+        ],
49
+        remark: [
50
+          { required: true, message: '请输入房型描述', trigger: 'blur' }
51
+        ],
52
+        price: [
53
+          { required: true, message: '请输入价格', trigger: 'blur' }
54
+        ],
55
+        roomStatus: [
56
+          { required: true, message: '请选择状态', trigger: 'blur' }
57
+        ],         
44 58
       }
45
-      // rules: {
46
-      //   userName: [
47
-      //     { required: true, message: '请输入姓名', trigger: 'blur' }
48
-      //   ],
49
-      //   price: [
50
-      //     { required: true, message: '请输入价格', trigger: 'blur' }
51
-      //   ],
52
-      //   menuArray: [
53
-      //     { required: true, message: '请选择角色', trigger: 'blur' }
54
-      //   ],       
55
-      // }
56 59
     }
57 60
   },
58 61
   mounted() {
@@ -64,14 +67,14 @@ export default {
64 67
       //   this.$message.error('请输入房型号');
65 68
       //   return
66 69
       // }
67
-      if(this.ruleForm.roomName ===''){
68
-        this.$message.error('请输入房型名称');
69
-        return
70
-      }
71
-      if(this.ruleForm.price ===''){
72
-        this.$message.error('房型价格');
73
-        return
74
-      }
70
+      // if(this.ruleForm.roomName ===''){
71
+      //   this.$message.error('请输入房型名称');
72
+      //   return
73
+      // }
74
+      // if(this.ruleForm.price ===''){
75
+      //   this.$message.error('房型价格');
76
+      //   return
77
+      // }
75 78
     
76 79
       this.$store.dispatch('HotelRoomEdit', this.ruleForm).then((res) => {
77 80
         if(res.code === '1'){

+ 4
- 4
VUECODE/smart-property-manage/src/views/rental/rentalAdd.vue ファイルの表示

@@ -92,7 +92,6 @@
92 92
         <el-checkbox v-model="listData.balcony" true-label="1" false-label="0">阳台</el-checkbox>
93 93
       </el-form-item>
94 94
       <el-form-item label="地图定位" prop="communityLatitude">
95
-        <span>高德坐标</span>
96 95
         <span  style="font-size:14px;color:#C0C0C0">在地图上搜索选择公寓位置确定坐标值,供APP端用户导航</span>
97 96
         <span>高德坐标</span>
98 97
         <el-input placeholder="经度" v-model="listData.communityLongitude" style="width: 100px;" />
@@ -203,9 +202,6 @@ export default {
203 202
         appListImg: [
204 203
           { required: true, message: 'app列表展示图', trigger: 'blur' }
205 204
         ],
206
-        appCarouselImg: [
207
-          { required: true, message: '轮播图', trigger: 'blur' }
208
-        ],
209 205
         communityAddress: [
210 206
           { required: true, message: '请选择小区地址', trigger: 'blur' }
211 207
         ],
@@ -286,6 +282,10 @@ export default {
286 282
       this.$refs[formName].resetFields()
287 283
     },
288 284
     addRental() {
285
+      if(this.listData.appCarouselImg.length == 0){
286
+       this.$message.error("app轮播图不能为空")
287
+       return
288
+     }
289 289
       // 加载框
290 290
       const loading = this.$loading({
291 291
         lock: true,

+ 1
- 1
VUECODE/smart-property-manage/src/views/rental/rentalEdit.vue ファイルの表示

@@ -9,7 +9,7 @@
9 9
         <span style="font-size:0.7vw;color:#C0C0C0">季租,年租优惠可以写在房间介绍中</span>
10 10
       </el-form-item>
11 11
       <el-form-item label="面积" prop="area">
12
-        <el-input v-model="listData.area" onkeyup="this.value=this.value.replace(/\D/g,'')" placeholder="面积"/>
12
+        <el-input v-model="listData.area" onkeyup="this.value=this.value.replace(/\D/g,'')" placeholder="单位 平米"/>
13 13
       </el-form-item>
14 14
       <el-form-item label="app列表展示图" prop="appListImg">
15 15
         <el-upload

+ 5
- 0
VUECODE/smart-property-manage/src/views/shop/shopAdd.vue ファイルの表示

@@ -275,6 +275,11 @@ export default {
275 275
         this.$message.error('商铺介绍不能为空');
276 276
         return
277 277
       }
278
+      if(this.listData.appCarouselImg == 0){
279
+         this.$message.error("轮播图不能为空")
280
+        loading.close()
281
+        return
282
+      }
278 283
       // 加载框
279 284
       const loading = this.$loading({
280 285
         lock: true,

+ 2
- 5
VUECODE/smart-property-manage/src/views/shop/shopEdit.vue ファイルの表示

@@ -163,9 +163,6 @@ export default {
163 163
         appListImg: [
164 164
           { required: true, message: 'app列表展示图', trigger: 'blur' }
165 165
         ],
166
-        appCarouselImg: [
167
-          { required: true, message: 'app商铺轮播图', trigger: 'blur' }
168
-        ],
169 166
         shopName: [
170 167
           { required: true, message: '商铺名称', trigger: 'blur' }
171 168
         ],
@@ -215,7 +212,7 @@ export default {
215 212
     handleRemove(file, fileList) {
216 213
       this.listData.appCarouselImg = []
217 214
       for (let i = 0; i < fileList.length; i++) {
218
-        this.listData.appCarouselImg.push(fileList[i].response.data[0])
215
+        this.listData.appCarouselImg.push(fileList[i].url)
219 216
       }
220 217
     },
221 218
     handleSuccessCarouselImg(response, file, fileList) { // 活动配图上传成功时回调
@@ -284,7 +281,7 @@ export default {
284 281
         spinner: 'el-icon-loading',
285 282
         background: 'rgba(0, 0, 0, 0.7)'
286 283
       })
287
-      if(this.listData.appCarouselImg == 0){
284
+      if(this.listData.appCarouselImg.length == 0){
288 285
          this.$message.error("轮播图不能为空")
289 286
         loading.close()
290 287
         return

+ 26
- 23
VUECODE/smart-property-manage/src/views/systemResources/app/index.vue ファイルの表示

@@ -3,7 +3,7 @@
3 3
     <el-tabs v-model="activeName2" type="card" @tab-click="handleClick">
4 4
       <el-tab-pane label="banner轮播" name="banner">
5 5
         <div style="width: 1000px; margin-left: auto; margin-right: auto;">
6
-          <span>APP端公告列表中,前多少个,显示在公告banner位?</span>
6
+          <span style="font-size:0.7vw;color:#666666">APP端公告列表中,前多少个,显示在公告banner位?</span>
7 7
           <el-input v-model="announcementBannerNum" min="1" max="10" type="number" placeholder="请输入数字" style="width: 150px;" @change="handleBannerChange"/>
8 8
           <el-tooltip class="item" effect="dark" content="如果需要修改,请选择1~10之间的数字后保存!" placement="top-start">
9 9
             <i class="el-icon-info"/>
@@ -11,7 +11,7 @@
11 11
           <el-button v-if="announcementBannerBool" type="primary" @click="carouselAnnouncementBanner">保存</el-button>
12 12
         </div>
13 13
         <div style="width: 1000px; margin-left: auto; margin-right: auto; margin-top: 20px;">
14
-          <span>APP端活动列表中,前多少个,显示在活动banner位?</span>
14
+          <span style="font-size:0.7vw;color:#666666">APP端活动列表中,前多少个,显示在活动banner位?</span>
15 15
           <el-input v-model="activityBannerNum" min="1" max="10" type="number" placeholder="请输入数字" style="width: 150px;" @change="handleActivityChange"/>
16 16
           <el-tooltip class="item" effect="dark" content="如果需要修改,请选择1~10之间的数字后保存!" placement="top-start">
17 17
             <i class="el-icon-info"/>
@@ -118,13 +118,14 @@
118 118
       </el-tab-pane>
119 119
       <el-tab-pane label="公区监控" name="monitoring">
120 120
         <span style="display: flex; justify-content: center;">可配置项</span>
121
-        <div style="display: flex; justify-content: center; margin-top: 20px;">
121
+        <!-- padding: 10px 20px 0;border-radius: 8px;margin: 20px 15px 10px 15px;border: 1px solid #eee;box-shadow: 4px 4px 10px #dadada; -->
122
+        <div style="display: flex; justify-content: center; margin: 20px 15px 10px 15px;">
122 123
           <span style="display: flex; justify-content: center; color: #409EFF;cursor: pointer; margin-right: 50px;" @click="addMonitoring">添加一个配置</span>
123 124
           <span style="display: flex; justify-content: center; color: #409EFF;cursor: pointer; margin-left: 50px;" @click="monitoringSubmit">提交</span>
124 125
         </div>
125
-        <div style="display: flex; justify-content: center; flex-wrap: wrap;">
126
+        <div style="display: flex; justify-content: center; flex-wrap: wrap; ">
126 127
           <el-form v-for="(item, index) in equipmentList" ref="monitoringForm" label-width="120px" style="margin-top: 20px;">
127
-            <div>
128
+            <div style="padding: 10px 20px 0;border-radius: 8px;margin: 20px 15px 10px 15px;border: 1px solid #eee;box-shadow: 4px 4px 10px #dadada;">
128 129
               <el-form-item label="编号">
129 130
                 <!-- item.id -->
130 131
                 <span>{{ index }}</span>
@@ -223,26 +224,28 @@ export default {
223 224
       })
224 225
     },
225 226
     monitoringRemover(id, equipmentIndex) { // 监控删除
226
-      // console.log('monitoringForm : ', this.equipmentList, '  下坐标:', index)
227
-      // const tempEquipmentList = []
228
-      // this.equipmentList.map((item, index) => {
229
-      //   // 排除需要删除的下坐标的数据
230
-      //   if (index !== equipmentIndex) {
231
-      //     tempEquipmentList.push(item)
232
-      //   }
233
-      // })
234
-      // this.equipmentList = tempEquipmentList
235
-
236
-      this.$store.dispatch('DeleteEquipment', id).then(res => {
237
-        const resCode = res.code
238
-        if (resCode === '1') {
239
-          this.$message.error(res.message)
240
-          return
227
+      // console.log('monitoringForm : ', this.equipmentList, '  下坐标:', equipmentIndex)
228
+      const tempEquipmentList = []
229
+      this.equipmentList.map((item, index) => {
230
+        // 排除需要删除的下坐标的数据
231
+        if (index !== equipmentIndex) {
232
+          tempEquipmentList.push(item)
241 233
         }
242
-        this.getMenuList()
243
-      }).catch(() => {
244
-        console.log('DeleteEquipment error!')
245 234
       })
235
+      this.equipmentList = tempEquipmentList
236
+
237
+      if (id !== '') {
238
+        this.$store.dispatch('DeleteEquipment', id).then(res => {
239
+          const resCode = res.code
240
+          if (resCode === '1') {
241
+            this.$message.error(res.message)
242
+            return
243
+          }
244
+          this.getMenuList()
245
+        }).catch(() => {
246
+          console.log('DeleteEquipment error!')
247
+        })
248
+      }
246 249
     },
247 250
     onSubmit() {
248 251
       this.getPropertyData()

+ 6
- 5
VUECODE/smart-property-manage/src/views/ticket/details.vue ファイルの表示

@@ -1,8 +1,8 @@
1 1
 <template>
2 2
 <div id="app" style="margin-top:30px;font-size: 14px; color: #606266;">
3 3
  <el-form :inline="true" :model="listQuery" class="form-listQuery">
4
-      <div style="transform:translateY(-70%);">
5
-         <span style="padding-right:0%;font-weight:bold;font-size:12px;">工单详情</span>
4
+      <div style="transform:translateY(-70%); margin-top:5px;">
5
+         <span style="padding-left:0.8%;">工单详情</span>
6 6
      </div>
7 7
      <div>
8 8
        <table>
@@ -48,11 +48,12 @@
48 48
       </div> -->
49 49
 
50 50
       <div style="transform:translateY(20%);">
51
-        <el-form-item style="padding-left:1%;" class="filter-item" label="工单标题:" >
51
+        <el-form-item style="padding-left:0.8%;" class="filter-item">
52
+          <span>工单标题:</span>
52 53
          <span>{{listQuery.ticketTitle}}</span>
53 54
         </el-form-item>
54
-        <el-form-item  label="当前负责人:" class="size-left">
55
-         <span>{{listQuery.tpUserNmae}}</span>
55
+        <el-form-item  class="size-left">
56
+         <span>当前负责人:{{listQuery.tpUserNmae}}</span>
56 57
       </el-form-item>
57 58
       </div>
58 59
       <div>

+ 265
- 255
文档/MYSQL/smartCommunity.pdb
ファイル差分が大きすぎるため省略します
ファイルの表示


+ 265
- 255
文档/MYSQL/smartCommunity.pdm
ファイル差分が大きすぎるため省略します
ファイルの表示