Parcourir la source

修改 车辆管理bug

11868 il y a 5 jours
Parent
commit
1760c52f60

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

@@ -14,7 +14,7 @@ export default {
   actions: {
     connectWebSocket({ commit, rootState }) {
       const token = rootState.user?.token;
-      WebSocketService.setStore(this._root); // 注入 store
+      WebSocketService.setStore(this); // 注入 store
       commit("setWebSocketStatus", "connecting");
       WebSocketService.initWebSocket(token);
     },

+ 488 - 230
src/views/doorcarManage/carInfoManage/CarEditDialog.vue

@@ -1,222 +1,503 @@
 <template>
   <el-dialog
-    :title="isEdit ? '修改人脸' : '新增人脸'"
-    :visible.sync="visible"
-    width="1200px"
-    class="user-edit-dialog"
-    :before-close="handleClose"
+    :visible.sync="localVisible"
+    :title="isEdit ? '修改车辆信息' : '新增车辆信息'"
+    @close="handleCancel"
+    custom-class="custom-dialog"
   >
     <el-form
-      :model="form"
-      :rules="rules"
-      ref="vehicleForm"
+      ref="carForm"
+      :model="formData"
+      :rules="formRules"
       label-width="150px"
-      class="vehicle-form"
+      class="user-form"
     >
-      <!-- 车牌与卡信息 -->
+      <!-- 一、车牌信息 -->
+      <el-divider content-position="center">车牌信息</el-divider>
       <el-row :gutter="20">
         <el-col :span="12">
           <el-form-item label="车牌号码" prop="plateNumber">
-            <el-input v-model="form.plateNumber" placeholder="请输入车牌号码" />
+            <el-input
+              v-model="formData.plateNumber"
+              placeholder="请输入车牌号码"
+            />
           </el-form-item>
         </el-col>
         <el-col :span="12">
           <el-form-item label="车牌颜色" prop="plateColor">
-            <el-select v-model="form.plateColor" placeholder="请选择车牌颜色">
+            <el-select
+              v-model="formData.plateColor"
+              placeholder="请选择车牌颜色"
+              filterable
+              clearable
+              class="full-width-select"
+            >
               <el-option label="蓝色" value="blue" />
               <el-option label="黄色" value="yellow" />
               <el-option label="绿色" value="green" />
               <el-option label="白色" value="white" />
               <el-option label="黑色" value="black" />
+              <el-option label="红色" value="red" />
+              <el-option label="灰色" value="gray" />
+              <el-option label="橙色" value="orange" />
+              <el-option label="棕色" value="brown" />
+              <el-option label="粉色" value="pink" />
+              <el-option label="紫色" value="purple" />
+              <el-option label="其他" value="other" />
             </el-select>
           </el-form-item>
         </el-col>
       </el-row>
-
       <el-row :gutter="20">
         <el-col :span="12">
-          <el-form-item label="卡号" prop="cardNo">
-            <el-input v-model="form.cardNo" placeholder="请输入卡号" />
-          </el-form-item>
-        </el-col>
-        <el-col :span="12">
-          <el-form-item label="卡片类型" prop="cardType">
-            <el-select v-model="form.cardType" placeholder="请选择卡片类型">
-              <el-option label="IC卡" value="IC" />
-              <el-option label="ID卡" value="ID" />
-              <el-option label="虚拟卡" value="virtual" />
+          <el-form-item label="车牌类型" prop="plateType">
+            <el-select
+              v-model="formData.plateType"
+              placeholder="请选择车牌类型"
+              filterable
+              clearable
+              class="full-width-select"
+            >
+              <el-option label="普通车牌" value="normal" />
+              <el-option label="临时车牌" value="temporary" />
+              <el-option label="新能源车牌" value="newEnergy" />
+              <el-option label="军车牌" value="military" />
+              <el-option label="警车牌" value="police" />
+              <el-option label="教练车牌" value="coach" />
+              <el-option label="挂车牌" value="trailer" />
+              <el-option label="领馆车牌" value="consulate" />
+              <el-option label="港澳车牌" value="hkMacao" />
+              <el-option label="应急车牌" value="emergency" />
+              <el-option label="其他" value="other" />
             </el-select>
           </el-form-item>
         </el-col>
       </el-row>
-
+      <!-- 二、车辆信息 -->
+      <el-divider content-position="center">车辆信息</el-divider>
       <el-row :gutter="20">
         <el-col :span="12">
-          <el-form-item label="工本费(元)" prop="cardFee">
-            <el-input-number v-model="form.cardFee" :min="0" />
+          <el-form-item label="车辆类型" prop="vehicleType">
+            <el-select
+              v-model="formData.vehicleType"
+              placeholder="请选择车辆类型"
+              filterable
+              clearable
+              class="full-width-select"
+            >
+              <el-option label="小型车" value="small" />
+              <el-option label="大型车" value="large" />
+              <el-option label="中型车" value="medium" />
+              <el-option label="电动车" value="electric" />
+              <el-option label="摩托车" value="motorcycle" />
+              <el-option label="货车" value="truck" />
+              <el-option label="客车" value="bus" />
+              <el-option label="特种车辆" value="special" />
+              <el-option label="其他" value="other" />
+            </el-select>
           </el-form-item>
         </el-col>
         <el-col :span="12">
-          <el-form-item label="余额(元)" prop="balance">
-            <el-input-number v-model="form.balance" :min="0" />
+          <el-form-item label="车辆颜色" prop="vehicleColor">
+            <el-select
+              v-model="formData.vehicleColor"
+              placeholder="请选择或输入车辆颜色"
+              filterable
+              allow-create
+              default-first-option
+              clearable
+              class="full-width-select"
+            >
+              <el-option label="白色" value="white" />
+              <el-option label="黑色" value="black" />
+              <el-option label="银色" value="silver" />
+              <el-option label="灰色" value="gray" />
+              <el-option label="红色" value="red" />
+              <el-option label="蓝色" value="blue" />
+              <el-option label="黄色" value="yellow" />
+              <el-option label="绿色" value="green" />
+              <el-option label="橙色" value="orange" />
+              <el-option label="棕色" value="brown" />
+              <el-option label="紫色" value="purple" />
+              <el-option label="粉色" value="pink" />
+            </el-select>
           </el-form-item>
         </el-col>
       </el-row>
-
-      <!-- 时间信息 -->
       <el-row :gutter="20">
         <el-col :span="12">
-          <el-form-item label="开始时间" prop="startTime">
-            <el-date-picker v-model="form.startTime" type="datetime" value-format="YYYY-MM-DD HH:mm:ss" />
+          <el-form-item label="车辆品牌" prop="vehicleBrand">
+            <el-select
+              v-model="formData.vehicleBrand"
+              placeholder="请选择或输入品牌"
+              filterable
+              allow-create
+              clearable
+              default-first-option
+              class="full-width-select"
+            >
+              <el-option label="丰田" value="Toyota" />
+              <el-option label="本田" value="Honda" />
+              <el-option label="日产" value="Nissan" />
+              <el-option label="大众" value="Volkswagen" />
+              <el-option label="宝马" value="BMW" />
+              <el-option label="奔驰" value="Mercedes-Benz" />
+              <el-option label="奥迪" value="Audi" />
+              <el-option label="比亚迪" value="BYD" />
+              <el-option label="特斯拉" value="Tesla" />
+              <el-option label="福特" value="Ford" />
+              <el-option label="长安" value="Changan" />
+              <el-option label="吉利" value="Geely" />
+              <el-option label="五菱" value="Wuling" />
+              <el-option label="其他" value="other" />
+            </el-select>
           </el-form-item>
         </el-col>
         <el-col :span="12">
-          <el-form-item label="截止时间" prop="endTime">
-            <el-date-picker v-model="form.endTime" type="datetime" value-format="YYYY-MM-DD HH:mm:ss" />
+          <el-form-item label="车辆排量" prop="displacement">
+            <el-input
+              v-model="formData.displacement"
+              placeholder="请输入排量(例如:1.5T / 2.0L)"
+              clearable
+            />
           </el-form-item>
         </el-col>
       </el-row>
-
       <el-row :gutter="20">
         <el-col :span="12">
-          <el-form-item label="注册时间" prop="registerTime">
-            <el-date-picker v-model="form.registerTime" type="datetime" value-format="YYYY-MM-DD HH:mm:ss" />
+          <el-form-item label="发动机号" prop="engineNo">
+            <el-input
+              v-model="formData.engineNo"
+              placeholder="请输入发动机号"
+              clearable
+              maxlength="30"
+              show-word-limit
+            />
           </el-form-item>
         </el-col>
         <el-col :span="12">
-          <el-form-item label="卡片状态" prop="cardStatus">
-            <el-select v-model="form.cardStatus" placeholder="请选择状态">
-              <el-option label="启用" value="active" />
-              <el-option label="挂失" value="lost" />
-              <el-option label="过期" value="expired" />
-              <el-option label="禁用" value="disabled" />
-            </el-select>
+          <el-form-item label="车架号" prop="vin">
+            <el-input
+              v-model="formData.vin"
+              placeholder="请输入车架号(17位字母或数字)"
+              clearable
+              maxlength="17"
+              show-word-limit
+            />
           </el-form-item>
         </el-col>
       </el-row>
-
-      <!-- 车辆基本信息 -->
-      <el-divider content-position="left">车辆信息</el-divider>
       <el-row :gutter="20">
         <el-col :span="12">
-          <el-form-item label="车辆类型" prop="vehicleType">
-            <el-select v-model="form.vehicleType" placeholder="请选择车辆类型">
-              <el-option label="小型车" value="small" />
-              <el-option label="大型车" value="large" />
-              <el-option label="电动车" value="electric" />
-            </el-select>
+          <el-form-item label="排放量号" prop="emissionNo">
+            <el-input
+              v-model="formData.emissionNo"
+              placeholder="请输入排放量号"
+              clearable
+              maxlength="20"
+              show-word-limit
+            />
           </el-form-item>
         </el-col>
         <el-col :span="12">
-          <el-form-item label="车辆颜色" prop="vehicleColor">
-            <el-input v-model="form.vehicleColor" placeholder="请输入车辆颜色" />
+          <el-form-item label="识别代码" prop="identifyCode">
+            <el-input
+              v-model="formData.identifyCode"
+              placeholder="请输入识别代码"
+              clearable
+              maxlength="20"
+              show-word-limit
+            />
           </el-form-item>
         </el-col>
       </el-row>
-
       <el-row :gutter="20">
         <el-col :span="12">
-          <el-form-item label="车辆品牌" prop="vehicleBrand">
-            <el-input v-model="form.vehicleBrand" placeholder="请输入车辆品牌" />
+          <el-form-item label="车队名称" prop="fleetName">
+            <el-input
+              v-model="formData.fleetName"
+              placeholder="请输入车队名称"
+              clearable
+              maxlength="50"
+              show-word-limit
+            />
           </el-form-item>
         </el-col>
+      </el-row>
+      <!-- 三、卡片信息 -->
+      <el-divider content-position="center">卡片信息</el-divider>
+      <el-row :gutter="20">
         <el-col :span="12">
-          <el-form-item label="车辆排量" prop="displacement">
-            <el-input v-model="form.displacement" placeholder="请输入车辆排量" />
+          <el-form-item label="发卡人员" prop="issuerName">
+            <el-input
+              v-model="formData.issuerName"
+              placeholder="请输入发卡人员"
+              clearable
+              maxlength="30"
+              show-word-limit
+            />
+          </el-form-item>
+        </el-col>
+        <el-col :span="12">
+          <el-form-item label="发卡器类型" prop="issuerDeviceType">
+            <el-input
+              v-model="formData.issuerDeviceType"
+              placeholder="请输入发卡器类型"
+              clearable
+              maxlength="30"
+              show-word-limit
+            />
           </el-form-item>
         </el-col>
       </el-row>
-
       <el-row :gutter="20">
         <el-col :span="12">
-          <el-form-item label="车架号(VIN)" prop="vin">
-            <el-input v-model="form.vin" placeholder="请输入车架号" />
+          <el-form-item label="停车类型" prop="parkingType">
+            <el-select
+              v-model="formData.parkingType"
+              placeholder="请选择停车类型"
+              filterable
+              clearable
+              class="full-width-select"
+            >
+              <el-option label="临时车" value="temp" />
+              <el-option label="月租车" value="monthly" />
+              <el-option label="固定车位" value="fixed" />
+              <el-option label="临时/访客车" value="visitor" />
+              <el-option label="员工车" value="employee" />
+              <el-option label="其他" value="other" />
+            </el-select>
           </el-form-item>
         </el-col>
         <el-col :span="12">
-          <el-form-item label="发动机号" prop="engineNo">
-            <el-input v-model="form.engineNo" placeholder="请输入发动机号" />
+          <el-form-item label="包时信息" prop="packageInfo">
+            <el-input
+              v-model="formData.packageInfo"
+              placeholder="请输入包时信息"
+              clearable
+              maxlength="50"
+              show-word-limit
+            />
           </el-form-item>
         </el-col>
       </el-row>
-
-      <!-- 车主信息 -->
-      <el-divider content-position="left">车主信息</el-divider>
+      <!-- 四、车主信息 -->
+      <el-divider content-position="center">车主信息</el-divider>
       <el-row :gutter="20">
         <el-col :span="12">
           <el-form-item label="车主姓名" prop="ownerName">
-            <el-input v-model="form.ownerName" placeholder="请输入车主姓名" />
+            <el-input
+              v-model="formData.ownerName"
+              placeholder="请输入车主姓名"
+              clearable
+              maxlength="30"
+              show-word-limit
+            />
           </el-form-item>
         </el-col>
         <el-col :span="12">
           <el-form-item label="手机号码" prop="phoneNumber">
-            <el-input v-model="form.phoneNumber" placeholder="请输入手机号" />
+            <el-input
+              v-model="formData.phoneNumber"
+              placeholder="请输入手机号码"
+              clearable
+              maxlength="11"
+              show-word-limit
+            />
           </el-form-item>
         </el-col>
       </el-row>
-
       <el-row :gutter="20">
         <el-col :span="12">
           <el-form-item label="证件号码" prop="certificateNo">
-            <el-input v-model="form.certificateNo" placeholder="请输入证件号码" />
+            <el-input
+              v-model="formData.certificateNo"
+              placeholder="请输入证件号码"
+              clearable
+              maxlength="20"
+              show-word-limit
+            />
           </el-form-item>
         </el-col>
         <el-col :span="12">
           <el-form-item label="住址" prop="address">
-            <el-input v-model="form.address" placeholder="请输入住址" />
+            <el-input
+              v-model="formData.address"
+              placeholder="请输入住址"
+              clearable
+              maxlength="100"
+              show-word-limit
+            />
           </el-form-item>
         </el-col>
       </el-row>
-
-      <!-- 公司组织信息 -->
-      <el-divider content-position="left">组织信息</el-divider>
       <el-row :gutter="20">
+        <el-col :span="12">
+          <el-form-item label="职位" prop="position">
+            <el-input
+              v-model="formData.position"
+              placeholder="请输入职位"
+              clearable
+              maxlength="30"
+              show-word-limit
+            />
+          </el-form-item>
+        </el-col>
         <el-col :span="12">
           <el-form-item label="所属公司" prop="company">
-            <el-input v-model="form.company" placeholder="请输入公司名称" />
+            <el-input
+              v-model="formData.company"
+              placeholder="请输入公司名称"
+              clearable
+              maxlength="50"
+              show-word-limit
+            />
           </el-form-item>
         </el-col>
+      </el-row>
+      <el-row :gutter="20">
         <el-col :span="12">
           <el-form-item label="所在部门" prop="departmentName">
-            <el-input v-model="form.departmentName" placeholder="请输入部门名称" />
+            <el-input
+              v-model="formData.departmentName"
+              placeholder="请输入部门名称"
+              clearable
+              maxlength="50"
+              show-word-limit
+            />
           </el-form-item>
         </el-col>
       </el-row>
-
+      <!-- 五、分组与权限信息 -->
+      <el-divider content-position="center">分组与权限信息</el-divider>
       <el-row :gutter="20">
         <el-col :span="12">
-          <el-form-item label="职位" prop="position">
-            <el-input v-model="form.position" placeholder="请输入职位" />
+          <el-form-item label="分组名称" prop="groupName">
+            <el-input
+              v-model="formData.groupName"
+              placeholder="请输入分组名称"
+              clearable
+              maxlength="30"
+              show-word-limit
+            />
           </el-form-item>
         </el-col>
+
         <el-col :span="12">
-          <el-form-item label="分组名称" prop="groupName">
-            <el-input v-model="form.groupName" placeholder="请输入分组名称" />
+          <el-form-item label="车辆群组" prop="vehicleGroup">
+            <el-input
+              v-model="formData.vehicleGroup"
+              placeholder="请输入车辆群组"
+              clearable
+              maxlength="30"
+              show-word-limit
+            />
           </el-form-item>
         </el-col>
       </el-row>
 
-      <!-- 备注 -->
+      <el-row :gutter="20">
+        <el-col :span="12">
+          <el-form-item label="场库权限" prop="parkingPermission">
+            <el-select
+              v-model="formData.parkingPermission"
+              multiple
+              placeholder="请选择场库"
+              filterable
+              clearable
+              class="full-width-select"
+            >
+              <el-option
+                v-for="item in parkingList"
+                :key="item.id"
+                :label="item.name"
+                :value="item.id"
+              />
+            </el-select>
+          </el-form-item>
+        </el-col>
+        <el-col :span="12">
+          <el-form-item label="场库名称" prop="parkingName">
+            <el-input
+              v-model="formData.parkingName"
+              placeholder="请输入场库名称"
+              clearable
+              maxlength="50"
+              show-word-limit
+            />
+          </el-form-item>
+        </el-col>
+      </el-row>
+      <el-row :gutter="20">
+        <el-col :span="12">
+          <el-form-item label="每日有效时段" prop="dailyValidTime">
+            <el-time-picker
+              is-range
+              v-model="formData.dailyValidTime"
+              range-separator="至"
+              start-placeholder="开始时间"
+              end-placeholder="结束时间"
+              format="HH:mm"
+              clearable
+              class="full-width-picker"
+            />
+          </el-form-item>
+        </el-col>
+        <el-col :span="12">
+          <el-form-item label="历史有效期" prop="historyValidTime">
+            <el-date-picker
+              v-model="formData.historyValidTime"
+              type="daterange"
+              range-separator="至"
+              start-placeholder="开始日期"
+              end-placeholder="结束日期"
+              value-format="yyyy-MM-dd"
+              clearable
+              class="full-width-picker"
+            />
+          </el-form-item>
+        </el-col>
+      </el-row>
+      <!-- 六、其他信息 -->
+      <el-divider content-position="center">其他信息</el-divider>
+      <el-row :gutter="20">
+        <el-col :span="12">
+          <el-form-item label="数据版本" prop="dataVersion">
+            <el-input
+              v-model="formData.dataVersion"
+              placeholder="请输入版本号"
+              clearable
+              maxlength="20"
+              show-word-limit
+            />
+          </el-form-item>
+        </el-col>
+      </el-row>
       <el-row :gutter="20">
         <el-col :span="24">
-          <el-form-item label="备注信息" prop="remarks">
-            <el-input v-model="form.remarks" type="textarea" rows="3" placeholder="请输入备注" />
+          <el-form-item label="备注" prop="remarks">
+            <el-input
+              v-model="formData.remarks"
+              type="textarea"
+              rows="3"
+              placeholder="请输入备注"
+              clearable
+              maxlength="200"
+              show-word-limit
+            />
           </el-form-item>
         </el-col>
       </el-row>
     </el-form>
 
     <div slot="footer" class="dialog-footer">
-      <el-button @click="handleClose">取消</el-button>
-      <el-button type="primary" @click="handleSubmit">{{
-        isEdit ? "修改" : "新增"
-      }}</el-button>
+      <el-button @click="handleCancel">取消</el-button>
+      <el-button type="primary" @click="handleSubmit">保存</el-button>
     </div>
   </el-dialog>
 </template>
 
 <script>
-import request from "@/utils/request";
 
 export default {
   name: "CarEditDialog",
@@ -225,7 +506,7 @@ export default {
       type: Boolean,
       default: false,
     },
-    userData: Object,
+    carData: Object,
     deviceId: {
       type: [Number, String],
       required: true,
@@ -233,168 +514,145 @@ export default {
   },
   data() {
     return {
+      localVisible: this.visible,
       isEdit: false,
+
+      parkingList: [
+        { id: 1, name: "A区停车场" },
+        { id: 2, name: "B区停车场" },
+      ],
       tempRightPlan: {
         doorNo: null,
         planTemplateNo: "",
       },
-      form: {
-        faceURL: "", // opt, string, 人脸url, 可选字段,填写人脸图片的URL
-        faceLibType: "blackFD", // req, enum, 人脸库类型, 必填字段, 可选值: blackFD-名单库, staticFD-静态库, blackList-非授权名单人
-        FDID: "", // req, string, 人脸库ID, 必填字段, 多个人脸库用逗号隔开, 最大长度63字节
-        FPID: "", // opt, string, 人脸记录ID, 可选字段, 与非视频工号(人员ID)一致, 最大长度63字节
-        name: "", // req, string, 姓名, 必填字段, 最大长度96字节
-        gender: "male", // opt, enum, 性别, 可选字段, male-男, female-女, unknown-未知, 最大长度32
-        bornTime: "", // req, string, 出生日期, 必填字段, 格式: yyyy-MM-dd, 最大长度20
-        city: "", // opt, string, 出生城市编号, 可选字段, 最大长度32
-        certificateType: "ID", // opt, enum, 证件类型, 可选字段, ID-身份证, other-其他, 最大长度10
-        certificateNumber: "", // opt, string, 证件号, 可选字段, 最大长度32
-        caseInfo: "", // opt, string, 备注信息, 可选字段, 最大长度192字节
-        tag: "", // opt, string, 自定义标签, 可选字段, 逗号分隔, 每个标签最大48字节, 最多4个标签
-        address: "", // opt, string, 住址, 可选字段, 最大长度192字节
-        customInfo: "", // opt, string, 自定义信息, 可选字段, 最大长度192字节
-        modelData: "", // opt, string, 目标模型数据, 可选字段, base64加密的非建模二进制数据
-        transfer: false, // opt, bool, PBG对接, 可选字段, 是否进行转存操作
-        operateType: "byTerminal", // opt, enum, 操作类型, 可选字段, byTerminal-按终端操作
-        terminalNoList: [], // opt, array[int], 终端ID列表, type为byTerminal时必填
-        saveFacePic: true, // opt, bool, 是否保存人脸底图
-        leaderPermission: [], // opt, array[int], 首次认证权限, 取值范围1~4, 数组为空表示清空权限
+      formData: {
+        plateNumber: "",
+        plateColor: "",
+        plateType: "",
+        vehicleType: "",
+        vehicleColor: "",
+        vehicleBrand: "",
+        engineNo: "",
+        emissionNo: "",
+        vin: "",
+        displacement: "",
+        identifyCode: "",
+        fleetName: "",
+        issuerName: "",
+        issuerDeviceType: "",
+        parkingType: "",
+        packageInfo: "",
+        ownerName: "",
+        phoneNumber: "",
+        certificateNo: "",
+        address: "",
+        position: "",
+        company: "",
+        departmentName: "",
+        groupName: "",
+        vehicleGroup: "",
+        parkingPermission: [],
+        parkingName: "",
+        dailyValidTime: [],
+        historyValidTime: [],
+        remarks: "",
+        dataVersion: "",
       },
-      rules: {
-        faceLibType: [
-          { required: true, message: "请选择人脸库类型", trigger: "change" },
-        ],
-        FDID: [{ required: true, message: "请输入人脸库ID", trigger: "blur" }],
-        name: [{ required: true, message: "请输入姓名", trigger: "blur" }],
-        bornTime: [
-          { required: true, message: "请选择出生日期", trigger: "change" },
-        ],
+      formRules: {
+        plateNumber: [{ required: true, message: "请输入车牌号码", trigger: "blur" }],
+        ownerName: [{ required: true, message: "请输入车主姓名", trigger: "blur" }],
       },
     };
   },
   watch: {
-    userData: {
+    visible(val) {
+      this.localVisible = val;
+    },
+    localVisible(val) {
+      this.$emit('update:visible', val)
+    },
+    carData: {
       immediate: true,
-      handler(val) {
-        this.isEdit = true;
-        if (val && Object.keys(val).length) {
-          console.log("userData is not null");
-          this.form = {
-            ...val,
-          };
-        } else {
-          console.log("userData is null");
-          this.isEdit = false;
-          // 重置表单
-          this.form = {
-            faceURL: "", // opt, string, 人脸url, 可选字段,填写人脸图片的URL
-            faceLibType: "blackFD", // req, enum, 人脸库类型, 必填字段, 可选值: blackFD-名单库, staticFD-静态库, blackList-非授权名单人
-            FDID: "", // req, string, 人脸库ID, 必填字段, 多个人脸库用逗号隔开, 最大长度63字节
-            FPID: "", // opt, string, 人脸记录ID, 可选字段, 与非视频工号(人员ID)一致, 最大长度63字节
-            name: "", // req, string, 姓名, 必填字段, 最大长度96字节
-            gender: "male", // opt, enum, 性别, 可选字段, male-男, female-女, unknown-未知, 最大长度32
-            bornTime: "", // req, string, 出生日期, 必填字段, 格式: yyyy-MM-dd, 最大长度20
-            city: "", // opt, string, 出生城市编号, 可选字段, 最大长度32
-            certificateType: "ID", // opt, enum, 证件类型, 可选字段, ID-身份证, other-其他, 最大长度10
-            certificateNumber: "", // opt, string, 证件号, 可选字段, 最大长度32
-            caseInfo: "", // opt, string, 备注信息, 可选字段, 最大长度192字节
-            tag: "", // opt, string, 自定义标签, 可选字段, 逗号分隔, 每个标签最大48字节, 最多4个标签
-            address: "", // opt, string, 住址, 可选字段, 最大长度192字节
-            customInfo: "", // opt, string, 自定义信息, 可选字段, 最大长度192字节
-            modelData: "", // opt, string, 目标模型数据, 可选字段, base64加密的非建模二进制数据
-            transfer: false, // opt, bool, PBG对接, 可选字段, 是否进行转存操作
-            operateType: "byTerminal", // opt, enum, 操作类型, 可选字段, byTerminal-按终端操作
-            terminalNoList: [], // opt, array[int], 终端ID列表, type为byTerminal时必填
-            saveFacePic: true, // opt, bool, 是否保存人脸底图
-            leaderPermission: [], // opt, array[int], 首次认证权限, 取值范围1~4, 数组为空表示清空权限
-          };
-        }
-      },
+      handler(newVal) {
+        this.isEdit = newVal && Object.keys(newVal).length > 0;
+        this.formData = {
+          ...this.getEmptyForm(),
+          ...(this.isEdit ? newVal : {})
+        };
+        console.log(this.isEdit ? '修改this.carData' : '新增this.carData', this.formData);
+      }
     },
   },
   methods: {
-    addRightPlan() {
-      if (!this.tempRightPlan.doorNo || !this.tempRightPlan.planTemplateNo) {
-        this.$message.warning("请填写门编号和计划模板编号");
-        return;
-      }
-      // 深拷贝一份到数组
-      this.form.RightPlan.push({ ...this.tempRightPlan });
-      // 清空临时表单
-      this.tempRightPlan.doorNo = null;
-      this.tempRightPlan.planTemplateNo = "";
-    },
-    removeRightPlan(row) {
-      const index = this.form.RightPlan.indexOf(row);
-      if (index > -1) this.form.RightPlan.splice(index, 1);
+    handleCancel() {
+      this.$emit("cancel");
     },
-    handleClose() {
-      this.$emit("update:visible", false);
-    },
-    async handleSubmit() {
-      this.$refs.userForm.validate(async (valid) => {
-        if (!valid) return;
-
+    handleSubmit() {
+      this.$refs.carForm.validate((valid) => {
+        if (!valid) {
+          this.$message.error("请检查表单填写项");
+          return false;
+        }
         const payload = {
-          UserInfo: {
-            employeeNo: this.form.employeeNo,
-            name: this.form.name,
-            userType: this.form.userType,
-            gender: this.form.gender,
-            Valid: {
-              enable: true,
-              beginTime: this.form.ValidTimes[0] + "+08:00",
-              endTime: this.form.ValidTimes[1] + "+08:00",
-              timeType: "local",
-            },
-            roomNumber: this.form.roomNumber,
-            floorNumber: this.form.floorNumber,
-            doorRight: this.form.doorRight,
-            userVerifyMode: this.form.userVerifyMode,
-            dynamicCode: this.form.dynamicCode,
-            belongGroup: this.form.belongGroup,
-            checkUser: true,
-            operateType: "byTerminal",
-            terminalNoList: [this.deviceId],
-          },
+          ...this.formData,
         };
-
-        console.log("payload", payload);
-
-        // try {
-        //   let url, method;
-        //   if (this.isEdit) {
-        //     url = "/ISAPI/AccessControl/UserInfo/Modify?format=json";
-        //     method = "PUT";
-        //   } else {
-        //     url = "/ISAPI/AccessControl/UserInfo/Record?format=json";
-        //     method = "POST";
-        //   }
-        //
-        //   const res = await request({ url, method, data: payload });
-        //   if (res.statusCode === 1) {
-        //     this.$message.success(this.isEdit ? "修改成功" : "新增成功");
-        //     this.$emit("success");
-        //     this.handleClose();
-        //   } else {
-        //     this.$message.error(`操作失败: ${res.errorMsg}`);
-        //   }
-        // } catch (e) {
-        //   this.$message.error("操作失败:" + e.message);
-        // }
+        this.$emit("submit", payload);
       });
     },
+    getEmptyForm() {
+      return {
+        plateNumber: "",
+        plateColor: "",
+        plateType: "",
+        vehicleType: "",
+        vehicleColor: "",
+        vehicleBrand: "",
+        engineNo: "",
+        emissionNo: "",
+        vin: "",
+        displacement: "",
+        identifyCode: "",
+        fleetName: "",
+        issuerName: "",
+        issuerDeviceType: "",
+        parkingType: "",
+        packageInfo: "",
+        ownerName: "",
+        phoneNumber: "",
+        certificateNo: "",
+        address: "",
+        position: "",
+        company: "",
+        departmentName: "",
+        groupName: "",
+        vehicleGroup: "",
+        parkingPermission: [],
+        parkingName: "",
+        dailyValidTime: [],
+        historyValidTime: [],
+        remarks: "",
+        dataVersion: "",
+      };
+    }
   },
 };
 </script>
-<style scoped>
-.user-form {
-  background-color: #0a427c;
+<style>
+.custom-dialog {
+  width: 1200px !important;
+  background-color: #003c68;
+}
+/* 设置对话框标题颜色为白色 */
+.custom-dialog .el-dialog__title {
+  color: white !important;
 }
+
 .user-form .el-form-item .el-input,
 .user-form .el-form-item .el-input-number,
-.user-form .el-form-item .el-select,
-.user-form .el-form-item .el-date-picker {
-  width: 250px; /* 统一右侧控件宽度 */
+.user-form .el-form-item .el-select {
+  width: 300px;
+}
+.user-form .el-form-item .el-date-editor {
+  width: 400px; /* 统一右侧控件宽度 */
 }
 </style>

+ 54 - 52
src/views/doorcarManage/carInfoManage/CarSearchDialog.vue

@@ -7,8 +7,8 @@
     :before-close="handleClose"
   >
     <el-form
-      :model="form"
-      :rules="rules"
+      :model="formData"
+      :rules="formRules"
       ref="searchForm"
       label-width="180px"
       class="user-form"
@@ -18,12 +18,12 @@
       <el-row :gutter="20">
         <el-col :span="12">
           <el-form-item label="查询结果在结果列表中的起始位置">
-            <el-input-number v-model="form.searchResultPosition" :min="0" />
+            <el-input-number v-model="formData.searchResultPosition" :min="0" />
           </el-form-item>
         </el-col>
         <el-col :span="12">
           <el-form-item label="本次查询(每页显示)最大记录数">
-            <el-input-number v-model="form.maxResults" :min="1" :max="1000" />
+            <el-input-number v-model="formData.maxResults" :min="1" :max="1000" />
           </el-form-item>
         </el-col>
       </el-row>
@@ -32,7 +32,7 @@
       <el-row :gutter="20">
         <el-col :span="12">
           <el-form-item label="人脸比对库唯一标示ID">
-            <el-input v-model="form.FDID" />
+            <el-input v-model="formData.FDID" />
           </el-form-item>
         </el-col>
       </el-row>
@@ -40,12 +40,12 @@
       <el-row :gutter="20">
         <el-col :span="12">
           <el-form-item label="人脸库人员出生开始时间">
-            <el-input v-model="form.startTime" />
+            <el-input v-model="formData.startTime" />
           </el-form-item>
         </el-col>
         <el-col :span="12">
           <el-form-item label="人脸库人员出生结束时间">
-            <el-input v-model="form.endTime" />
+            <el-input v-model="formData.endTime" />
           </el-form-item>
         </el-col>
       </el-row>
@@ -53,7 +53,7 @@
       <el-row :gutter="20">
         <el-col :span="12">
           <el-form-item label="性别">
-            <el-select v-model="form.sex" placeholder="请选择">
+            <el-select v-model="formData.sex" placeholder="请选择">
               <el-option label="男" value="male" />
               <el-option label="女" value="female" />
             </el-select>
@@ -62,7 +62,7 @@
         <el-col :span="12">
           <el-form-item label="出生日期">
             <el-date-picker
-              v-model="form.bornTime"
+              v-model="formData.bornTime"
               type="date"
               placeholder="选择日期"
               value-format="yyyy-MM-dd"
@@ -74,12 +74,12 @@
       <el-row :gutter="20">
         <el-col :span="12">
           <el-form-item label="省份代码">
-            <el-input v-model="form.province" />
+            <el-input v-model="formData.province" />
           </el-form-item>
         </el-col>
         <el-col :span="12">
           <el-form-item label="城市代码">
-            <el-input v-model="form.city" />
+            <el-input v-model="formData.city" />
           </el-form-item>
         </el-col>
       </el-row>
@@ -87,12 +87,12 @@
       <el-row :gutter="20">
         <el-col :span="12">
           <el-form-item label="证件类型">
-            <el-input v-model="form.certificateType" />
+            <el-input v-model="formData.certificateType" />
           </el-form-item>
         </el-col>
         <el-col :span="12">
           <el-form-item label="证件号">
-            <el-input v-model="form.certificateNumber" />
+            <el-input v-model="formData.certificateNumber" />
           </el-form-item>
         </el-col>
       </el-row>
@@ -100,7 +100,7 @@
       <el-row :gutter="20">
         <el-col :span="12">
           <el-form-item label="电话号码">
-            <el-input v-model="form.phoneNumber" />
+            <el-input v-model="formData.phoneNumber" />
           </el-form-item>
         </el-col>
       </el-row>
@@ -109,7 +109,7 @@
       <el-row :gutter="20">
         <el-col :span="12">
           <el-form-item label="建模状态 (旧)">
-            <el-select v-model="form.modelStatus" placeholder="请选择">
+            <el-select v-model="formData.modelStatus" placeholder="请选择">
               <el-option label="未建模" value="0" />
               <el-option label="建模中" value="1" />
               <el-option label="已建模" value="2" />
@@ -118,7 +118,7 @@
         </el-col>
         <el-col :span="12">
           <el-form-item label="建模状态 (新)">
-            <el-input v-model="form.modelingStatus" placeholder="如: modeling/finished" />
+            <el-input v-model="formData.modelingStatus" placeholder="如: modeling/finished" />
           </el-form-item>
         </el-col>
       </el-row>
@@ -127,12 +127,12 @@
       <el-row :gutter="20">
         <el-col :span="12">
           <el-form-item label="人脸模式 (FaceModeList)">
-            <el-input v-model="form.FaceModeList" placeholder="模式数据" />
+            <el-input v-model="formData.FaceModeList" placeholder="模式数据" />
           </el-form-item>
         </el-col>
         <el-col :span="12">
           <el-form-item label="相似度 (similarity)">
-            <el-input-number v-model="form.similarity" :min="0" :max="100" />
+            <el-input-number v-model="formData.similarity" :min="0" :max="100" />
           </el-form-item>
         </el-col>
       </el-row>
@@ -140,12 +140,12 @@
       <el-row :gutter="20">
         <el-col :span="12">
           <el-form-item label="最小评分 (faceScore)">
-            <el-input-number v-model="form.faceScore" :min="0" :max="100" />
+            <el-input-number v-model="formData.faceScore" :min="0" :max="100" />
           </el-form-item>
         </el-col>
         <el-col :span="12">
           <el-form-item label="最大评分 (faceScoreMax)">
-            <el-input-number v-model="form.faceScoreMax" :min="0" :max="100" />
+            <el-input-number v-model="formData.faceScoreMax" :min="0" :max="100" />
           </el-form-item>
         </el-col>
       </el-row>
@@ -154,7 +154,7 @@
       <el-row :gutter="20">
         <el-col :span="12">
           <el-form-item label="排序字段 (sortord)">
-            <el-select v-model="form.sortord" placeholder="请选择排序字段">
+            <el-select v-model="formData.sortord" placeholder="请选择排序字段">
               <el-option label="importTime" value="importTime" />
               <el-option label="similarity" value="similarity" />
               <el-option label="faceScore" value="faceScore" />
@@ -163,7 +163,7 @@
         </el-col>
         <el-col :span="12">
           <el-form-item label="排序方式 (order)">
-            <el-select v-model="form.order">
+            <el-select v-model="formData.order">
               <el-option label="升序" value="ascend" />
               <el-option label="降序" value="descend" />
             </el-select>
@@ -176,7 +176,7 @@
         <el-col :span="12">
           <el-form-item label="出现时间范围">
             <el-date-picker
-              v-model="form.appearTimeRange"
+              v-model="formData.appearTimeRange"
               type="datetimerange"
               start-placeholder="开始时间"
               end-placeholder="结束时间"
@@ -187,7 +187,7 @@
         <el-col :span="12">
           <el-form-item label="入库时间范围">
             <el-date-picker
-              v-model="form.importTimeRange"
+              v-model="formData.importTimeRange"
               type="datetimerange"
               start-placeholder="开始时间"
               end-placeholder="结束时间"
@@ -201,17 +201,17 @@
       <el-row :gutter="20">
         <el-col :span="8">
           <el-form-item label="频次是否返回">
-            <el-switch v-model="form.OccurrencesInfo.enabled" active-text="是" inactive-text="否" />
+            <el-switch v-model="formData.OccurrencesInfo.enabled" active-text="是" inactive-text="否" />
           </el-form-item>
         </el-col>
         <el-col :span="8">
           <el-form-item label="出现频次 (occurrences)">
-            <el-input-number v-model="form.OccurrencesInfo.occurrences" :min="0" />
+            <el-input-number v-model="formData.OccurrencesInfo.occurrences" :min="0" />
           </el-form-item>
         </el-col>
         <el-col :span="8">
           <el-form-item label="频次搜索类型 (occurrencesSearchType)">
-            <el-select v-model="form.OccurrencesInfo.occurrencesSearchType" placeholder="选择类型">
+            <el-select v-model="formData.OccurrencesInfo.occurrencesSearchType" placeholder="选择类型">
               <el-option label="大于" value="greater" />
               <el-option label="小于" value="less" />
               <el-option label="等于" value="equal" />
@@ -237,7 +237,7 @@ export default {
   },
   data() {
     return {
-      form: {
+      formData: {
         searchID: "",
         searchResultPosition: 0,
         maxResults: 100,
@@ -262,6 +262,8 @@ export default {
         enabled: false,
         occurrences: 0,
         occurrencesSearchType: ""
+      },
+      formRules: {
       }
     };
   },
@@ -272,31 +274,31 @@ export default {
     submitForm() {
       const payload = {
         searchID: Date.now().toString(), // 搜索记录唯一标识
-        searchResultPosition: this.form.searchResultPosition,
-        maxResults: this.form.maxResults,
-        FDID: this.form.FDID,
+        searchResultPosition: this.formData.searchResultPosition,
+        maxResults: this.formData.maxResults,
+        FDID: this.formData.FDID,
         condition: {
-          name: this.form.name,
-          sex: this.form.sex,
-          bornTime: this.form.bornTime,
-          province: this.form.province,
-          city: this.form.city,
-          certificateType: this.form.certificateType,
-          certificateNumber: this.form.certificateNumber,
-          phoneNumber: this.form.phoneNumber,
-          modelStatus: this.form.modelStatus,
-          modelingStatus: this.form.modelingStatus,
-          FaceModeList: this.form.FaceModeList,
-          similarity: this.form.similarity,
-          faceScore: this.form.faceScore,
-          faceScoreMax: this.form.faceScoreMax,
-          sortord: this.form.sortord,
-          order: this.form.order,
-          appearTimeRange: this.form.appearTimeRange,
-          importTimeRange: this.form.importTimeRange,
-          enabled: this.form.enabled,
-          occurrences: this.form.occurrences,
-          occurrencesSearchType: this.form.occurrencesSearchType
+          name: this.formData.name,
+          sex: this.formData.sex,
+          bornTime: this.formData.bornTime,
+          province: this.formData.province,
+          city: this.formData.city,
+          certificateType: this.formData.certificateType,
+          certificateNumber: this.formData.certificateNumber,
+          phoneNumber: this.formData.phoneNumber,
+          modelStatus: this.formData.modelStatus,
+          modelingStatus: this.formData.modelingStatus,
+          FaceModeList: this.formData.FaceModeList,
+          similarity: this.formData.similarity,
+          faceScore: this.formData.faceScore,
+          faceScoreMax: this.formData.faceScoreMax,
+          sortord: this.formData.sortord,
+          order: this.formData.order,
+          appearTimeRange: this.formData.appearTimeRange,
+          importTimeRange: this.formData.importTimeRange,
+          enabled: this.formData.enabled,
+          occurrences: this.formData.occurrences,
+          occurrencesSearchType: this.formData.occurrencesSearchType
         }
       };
 

+ 225 - 39
src/views/doorcarManage/carInfoManage/index.vue

@@ -1,25 +1,103 @@
 <template>
   <div style="padding: 10px">
     <!-- 搜索栏 -->
-    <div style="margin-bottom: 10px">
+    <div style="height: 50px; display: flex; align-items: center; gap: 10px">
+      <!--      <el-select-->
+      <!--        v-model="selectedDeviceId"-->
+      <!--        placeholder="选择设备"-->
+      <!--        size="small"-->
+      <!--        style="width: 150px"-->
+      <!--        clearable-->
+      <!--      >-->
+      <!--        <el-option-->
+      <!--          style="color: black"-->
+      <!--          v-for="device in devices"-->
+      <!--          :key="device.id"-->
+      <!--          :label="device.name"-->
+      <!--          :value="device.id"-->
+      <!--        />-->
+      <!--      </el-select>-->
+      <el-input
+        v-model="inputPlateNumber"
+        placeholder="输入车牌号码"
+        size="small"
+        style="width: 150px"
+        clearable
+        @keyup.enter.native="handleSearch"
+      />
+      <el-select
+        v-model="inputPlateType"
+        placeholder="请选择车牌类型"
+        size="small"
+        style="width: 150px"
+        @change="handleSearch"
+        filterable
+        clearable
+        class="full-width-select"
+      >
+        <el-option label="普通车牌" value="normal" />
+        <el-option label="临时车牌" value="temporary" />
+        <el-option label="新能源车牌" value="newEnergy" />
+        <el-option label="军车牌" value="military" />
+        <el-option label="警车牌" value="police" />
+        <el-option label="教练车牌" value="coach" />
+        <el-option label="挂车牌" value="trailer" />
+        <el-option label="领馆车牌" value="consulate" />
+        <el-option label="港澳车牌" value="hkMacao" />
+        <el-option label="应急车牌" value="emergency" />
+        <el-option label="其他" value="other" />
+      </el-select>
       <el-select
-        v-model="selectedDeviceId"
-        placeholder="选择设备"
+        v-model="inputVehicleType"
+        placeholder="请选择车辆类型"
         size="small"
         style="width: 150px"
+        @change="handleSearch"
+        filterable
         clearable
+        class="full-width-select"
       >
-        <el-option
-          style="color: black"
-          v-for="device in devices"
-          :key="device.id"
-          :label="device.name"
-          :value="device.id"
-        />
+        <el-option label="小型车" value="small" />
+        <el-option label="大型车" value="large" />
+        <el-option label="中型车" value="medium" />
+        <el-option label="电动车" value="electric" />
+        <el-option label="摩托车" value="motorcycle" />
+        <el-option label="货车" value="truck" />
+        <el-option label="客车" value="bus" />
+        <el-option label="特种车辆" value="special" />
+        <el-option label="其他" value="other" />
       </el-select>
+      <el-select
+        v-model="inputVehicleBrand"
+        placeholder="请选择或输入品牌"
+        size="small"
+        style="width: 150px"
+        @change="handleSearch"
+        filterable
+        allow-create
+        clearable
+        default-first-option
+        class="full-width-select"
+      >
+        <el-option label="丰田" value="Toyota" />
+        <el-option label="本田" value="Honda" />
+        <el-option label="日产" value="Nissan" />
+        <el-option label="大众" value="Volkswagen" />
+        <el-option label="宝马" value="BMW" />
+        <el-option label="奔驰" value="Mercedes-Benz" />
+        <el-option label="奥迪" value="Audi" />
+        <el-option label="比亚迪" value="BYD" />
+        <el-option label="特斯拉" value="Tesla" />
+        <el-option label="福特" value="Ford" />
+        <el-option label="长安" value="Changan" />
+        <el-option label="吉利" value="Geely" />
+        <el-option label="五菱" value="Wuling" />
+        <el-option label="其他" value="other" />
+      </el-select>
+
       <el-button
         type="primary"
-        @click="searchCarInfo()"
+        @click="handleSearch()"
         style="margin-left: 10px"
         >查询</el-button
       >
@@ -48,7 +126,13 @@
           {{ (currentPage - 1) * pageSize + scope.$index + 1 }}
         </template>
       </el-table-column>
-      <el-table-column prop="plateNumber" label="车牌号码" min-width="120" align="center" sortable />
+      <el-table-column
+        prop="plateNumber"
+        label="车牌号码"
+        min-width="120"
+        align="center"
+        sortable
+      />
       <!--      <el-table-column prop="cardNo" label="卡号" min-width="100"/>-->
       <!--      <el-table-column prop="cardType" label="卡片类型" min-width="100"/>-->
       <!--      <el-table-column prop="cardFee" label="工本费(元)" min-width="100"/>-->
@@ -59,15 +143,69 @@
       <!--      <el-table-column prop="department" label="发卡部门" min-width="120"/>-->
       <!--      <el-table-column prop="cardStatus" label="卡片状态" min-width="100"/>-->
       <!--      <el-table-column prop="issuer" label="发卡人员" min-width="120"/>-->
-      <el-table-column prop="parkingType" label="停车类型" min-width="100" align="center" sortable />
-      <el-table-column prop="plateColor" label="车牌颜色" min-width="100" align="center" sortable />
-      <el-table-column prop="vehicleType" label="车辆类型" min-width="100" align="center" sortable />
-      <el-table-column prop="plateType" label="车牌类型" min-width="100" align="center" sortable />
-      <el-table-column prop="vehicleColor" label="车辆颜色" min-width="100" align="center" sortable />
-      <el-table-column prop="vehicleBrand" label="车辆品牌" min-width="100" align="center" sortable />
-      <el-table-column prop="ownerName" label="车主姓名" min-width="120" align="center" sortable />
-      <el-table-column prop="phoneNumber" label="手机号码" min-width="120" align="center" sortable />
-      <el-table-column prop="certificateNo" label="证件号码" min-width="120" align="center" sortable />
+      <el-table-column
+        prop="parkingType"
+        label="停车类型"
+        min-width="100"
+        align="center"
+        sortable
+      />
+      <el-table-column
+        prop="plateColor"
+        label="车牌颜色"
+        min-width="100"
+        align="center"
+        sortable
+      />
+      <el-table-column
+        prop="vehicleType"
+        label="车辆类型"
+        min-width="100"
+        align="center"
+        sortable
+      />
+      <el-table-column
+        prop="plateType"
+        label="车牌类型"
+        min-width="100"
+        align="center"
+        sortable
+      />
+      <el-table-column
+        prop="vehicleColor"
+        label="车辆颜色"
+        min-width="100"
+        align="center"
+        sortable
+      />
+      <el-table-column
+        prop="vehicleBrand"
+        label="车辆品牌"
+        min-width="100"
+        align="center"
+        sortable
+      />
+      <el-table-column
+        prop="ownerName"
+        label="车主姓名"
+        min-width="120"
+        align="center"
+        sortable
+      />
+      <el-table-column
+        prop="phoneNumber"
+        label="手机号码"
+        min-width="120"
+        align="center"
+        sortable
+      />
+      <el-table-column
+        prop="certificateNo"
+        label="证件号码"
+        min-width="120"
+        align="center"
+        sortable
+      />
       <!--      <el-table-column prop="address" label="住址" min-width="200"/>-->
       <!--      <el-table-column prop="position" label="职位" min-width="120"/>-->
       <!--      <el-table-column prop="company" label="所属公司" min-width="150"/>-->
@@ -91,7 +229,13 @@
         align="center"
         sortable
       />
-      <el-table-column prop="remarks" label="备注" min-width="200" align="center" sortable/>
+      <el-table-column
+        prop="remarks"
+        label="备注"
+        min-width="200"
+        align="center"
+        sortable
+      />
       <!--      <el-table-column prop="dataVersion" label="数据版本" min-width="100"/>-->
       <!--      <el-table-column prop="packageInfo" label="包时信息" min-width="120"/>-->
       <!--      <el-table-column prop="engineNo" label="发动机号" min-width="120"/>-->
@@ -118,16 +262,19 @@
     <car-search-dialog
       :visible.sync="searchVisible"
       :detail="currentCar"
-    /><!-- 查看详情弹窗 -->
+    />
 
     <!-- 查看详情弹窗 -->
-    <car-detail-dialog :visible.sync="viewVisible" :detail="currentCar" />
+    <car-detail-dialog
+      :visible.sync="viewVisible"
+      :detail="currentCar" />
 
     <car-edit-dialog
       :visible.sync="editVisible"
-      :userData="currentCar"
+      :carData="currentCar"
       :deviceId="selectedDeviceId"
-      @success="searchCarInfo"
+      @submit="handleCarSubmit"
+      @cancel="handleCarCancel"
     />
   </div>
 </template>
@@ -149,6 +296,10 @@ export default {
     return {
       devices: [], // 设备列表
       selectedDeviceId: null, // 当前选择的设备
+      inputPlateNumber: "",
+      inputPlateType: "",
+      inputVehicleType: "",
+      inputVehicleBrand: "",
 
       searchVisible: false,
       viewVisible: false,
@@ -171,15 +322,54 @@ export default {
     };
   },
   mounted() {
-    this.getDeviceNameInfo();
+    // this.getDeviceNameInfo();
+    this.handleSearch();
   },
   methods: {
-    searchCarInfo() {
+    async handleSearch() {
+      console.log("查询");
       console.log("查询");
-      this.currentCar = {}; // 空对象代替 null
-      // this.currentUser = {}; // 空对象代替 null
-      // this.currentUser = null; // 空对象代替 null
-      this.searchVisible = true;
+      this.loading = true;
+      try {
+        const params = {
+          plateNumber: this.inputPlateNumber,
+          plateType: this.inputPlateType,
+          vehicleType: this.inputVehicleType,
+          vehicleBrand: this.inputVehicleBrand,
+          page: this.currentPage,
+          size: this.pageSize,
+        };
+        console.log("查询参数:", params);
+        const res = await request({
+          url: "/car/list",
+          method: "POST",
+          data: params,
+        });
+        console.log("查询结果:", res);
+        if (res && res.list) {
+          this.tableData = res.list;
+          this.total = res.total;
+        } else {
+          this.tableData = [];
+          this.total = 0;
+          this.$message.warning("未获取到数据");
+        }
+        console.log("查询结果:this.tableData", this.tableData);
+      } finally {
+        this.loading = false;
+      }
+    },
+    async handleCarSubmit(carData) {
+      console.log("提交参数:", carData);
+      const url = carData.id ? "/car/update" : "/car/add";
+      const res = await request({ url, method: "POST", data: carData });
+      console.log("提交结果:", res);
+      this.editVisible = false;
+      await this.$message(res.message);
+      await this.handleSearch();
+    },
+    handleCarCancel() {
+      this.editVisible = false;
     },
     viewCarInfo(row) {
       this.currentCar = row;
@@ -187,9 +377,7 @@ export default {
     },
     addCarInfo() {
       console.log("新增");
-      this.currentCar = {}; // 空对象代替 null
-      // this.currentUser = {}; // 空对象代替 null
-      // this.currentUser = null; // 空对象代替 null
+      this.currentCar = {};
       this.editVisible = true;
     },
     updateCarInfo(row) {
@@ -212,13 +400,13 @@ export default {
     // 切换页码
     handlePageChange(page) {
       this.currentPage = page;
-      // this.searchCarInfo()
+      this.handleSearch();
     },
     // 修改每页条数
     handleSizeChange(size) {
       this.pageSize = size;
       this.currentPage = 1; // 切换条数后回到第一页
-      // this.searchCarInfo()
+      this.handleSearch();
     },
     async getDeviceNameInfo() {
       try {
@@ -235,8 +423,6 @@ export default {
           if (this.devices.length > 0) {
             this.selectedDeviceId = this.devices[0].id;
             console.log("选中的设备ID:", this.selectedDeviceId);
-            // 获取该设备的人员信息
-            // this.searchUserInfo()
           }
         } else {
           this.devices = [];

+ 15 - 53
src/views/doorcarManage/whitelistTable/NameListEditDialog.vue

@@ -11,7 +11,7 @@
       :rules="formRules"
       label-width="100px"
       label-position="right"
-      class="nameList-form"
+      class="user-form"
     >
       <!-- 基本信息 -->
       <div class="form-row">
@@ -260,65 +260,27 @@ export default {
 
 <style>
 .custom-dialog {
-  background-color: #003c68;
   width: 800px !important;
-}
-
-/* 标签文字颜色深色背景下可读 */
-.custom-dialog .el-dialog__title {
-  color: #fff;
-}
-
-.custom-dialog .el-dialog__header {
-  background-color: #003c68;
-  color: #ffffff;
-}
-
-.custom-dialog .el-dialog__headerbtn {
-  color: #ffffff;
-}
-
-.nameList-form {
   background-color: #003c68;
-  padding: 15px 20px;
 }
-
-/* 两列布局 */
-.form-row {
-  display: flex;
-  gap: 20px;
-  margin-bottom: 10px;
-}
-
-/* 标签文字颜色深色背景下可读 */
-.nameList-form .el-form-item__label {
-  color: #fff;
-}
-
-/* 输入框文字颜色 */
-.nameList-form .el-input__inner,
-.nameList-form .el-select .el-input__inner,
-.nameList-form .el-input-number__input {
-  color: #000;
-  background-color: #fff;
-}
-
-/* 修改输入框 placeholder 文字颜色为黑色 */
-.nameList-form input::placeholder,
-.nameList-form .el-input__inner::placeholder {
-  color: #dbe1e7 !important;
-  opacity: 1; /* 避免部分浏览器透明度影响 */
+/* 设置对话框标题颜色为白色 */
+.custom-dialog .el-dialog__title {
+  color: white !important;
 }
 
-/* 针对 select 的 placeholder(实际上是 input) */
-.nameList-form .el-select .el-input__inner::placeholder {
-  color: #dbe1e7 !important;
+.user-form .el-form-item .el-input,
+.user-form .el-form-item .el-input-number,
+.user-form .el-form-item .el-select,
+.user-form .el-form-item .el-date-picker {
+  width: 250px; /* 统一右侧控件宽度 */
 }
 
-/* 针对 el-input-number */
-.nameList-form .el-input-number__input::placeholder {
-  color: #dbe1e7 !important;
-}
+/*!* 两列布局 *!*/
+/*.form-row {*/
+/*  display: flex;*/
+/*  gap: 20px;*/
+/*  margin-bottom: 10px;*/
+/*}*/
 
 /* 对话框底部按钮右对齐 */
 .dialog-footer {

+ 18 - 14
src/views/doormanManage/deviceManage/DeviceEditDialog.vue

@@ -1,12 +1,12 @@
 <template>
   <el-dialog
     :visible.sync="localVisible"
-    :title="formData.id ? '编辑设备' : '新增设备'"
+    :title="isEdit ? '编辑设备' : '新增设备'"
     @close="handleCancel"
     custom-class="custom-dialog"
   >
     <el-form
-      ref="editForm"
+      ref="deviceForm"
       :model="formData"
       :rules="formRules"
       label-width="120px"
@@ -178,6 +178,8 @@ export default {
   data() {
     return {
       localVisible: this.visible,
+      isEdit: false,
+
       deviceTypeOptions: [
         { label: "网络摄像机 (IPC)", value: "IPC" },
         { label: "人脸门禁终端 (MINMOE)", value: "MINMOE" },
@@ -264,7 +266,8 @@ export default {
     deviceData: {
       immediate: true,
       handler(newVal) {
-        if (!newVal || Object.keys(newVal).length === 0) {
+        this.isEdit = newVal && Object.keys(newVal).length > 0;
+        if (this.isEdit) {
           this.formData = this.getEmptyForm();
         } else {
           this.formData = {
@@ -367,7 +370,8 @@ export default {
       this.$emit("cancel");
     },
     handleSubmit() {
-      this.$refs.editForm.validate(valid => {
+      this.$refs.deviceForm.validate(valid => {
+        console.log('valid', valid);
         if (!valid) {
           this.$message.error("请检查表单填写项");
           return false;
@@ -425,20 +429,20 @@ export default {
   width: 1000px !important;
   background-color: #003c68;
 }
-
-/* 标签文字颜色深色背景下可读 */
+/* 设置对话框标题颜色为白色 */
 .custom-dialog .el-dialog__title {
-  color: #fff;
+  color: white !important;
 }
 
-.custom-dialog .el-dialog__header {
-  background-color: #003c68;
-  color: #ffffff;
-}
 
-.custom-dialog .el-dialog__headerbtn {
-  color: #ffffff;
-}
+/*.custom-dialog .el-dialog__header {*/
+/*  background-color: #003c68;*/
+/*  color: #ffffff;*/
+/*}*/
+
+/*.custom-dialog .el-dialog__headerbtn {*/
+/*  color: #ffffff;*/
+/*}*/
 
 .device-form {
   background-color: #003c68;

+ 15 - 6
src/views/doormanManage/eventManage/EventSearchDialog.vue

@@ -6,8 +6,9 @@
     custom-class="custom-dialog"
   >
     <el-form
-      :model="formData"
       ref="searchForm"
+      :model="formData"
+      :rules="formRules"
       label-width="180px"
       class="user-form"
     >
@@ -268,6 +269,9 @@ export default {
         szMonitorID: "",
         byEmployeeNo: "",
       },
+      formRules: {
+
+      }
     };
   },
   watch: {
@@ -326,13 +330,18 @@ export default {
 
 <style>
 .custom-dialog {
-  background-color: #003c68;
   width: 1000px !important;
+  background-color: #003c68;
+}
+/* 设置对话框标题颜色为白色 */
+.custom-dialog .el-dialog__title {
+  color: white !important;
 }
 
-.user-form .el-input,
-.user-form .el-select,
-.user-form .el-date-picker {
-  width: 100%;
+.user-form .el-form-item .el-input,
+.user-form .el-form-item .el-input-number,
+.user-form .el-form-item .el-select,
+.user-form .el-form-item .el-date-picker {
+  width: 250px; /* 统一右侧控件宽度 */
 }
 </style>

+ 0 - 1
src/views/doormanManage/eventManage/index.vue

@@ -33,7 +33,6 @@
       style="width: 100%; margin-top: 10px"
       border
       :header-cell-style="changeHeaderCellStyle"
-      @selection-change="handleSelectionChange"
     >
       <el-table-column label="序号" align="center" min-width="50" sortable>
         <template #default="scope">

+ 10 - 5
src/views/doormanManage/faceInfoManage/FaceEditDialog.vue

@@ -2,9 +2,8 @@
   <el-dialog
     :visible.sync="localVisible"
     :title="isEdit ? '修改人脸' : '新增人脸'"
-    width="1200px"
-    class="user-edit-dialog"
     :before-close="handleClose"
+    custom-class="custom-dialog"
   >
     <el-form
       :model="form"
@@ -443,10 +442,16 @@ export default {
   },
 };
 </script>
-<style scoped>
-.user-form {
-  background-color: #0a427c;
+<style>
+.custom-dialog {
+  background-color: #003c68;
+  width: 1200px !important;
 }
+/* 设置对话框标题颜色为白色 */
+.custom-dialog .el-dialog__title {
+  color: white !important;
+}
+
 .user-form .el-form-item .el-input,
 .user-form .el-form-item .el-input-number,
 .user-form .el-form-item .el-select,

+ 10 - 5
src/views/doormanManage/faceInfoManage/FaceSearchDialog.vue

@@ -2,9 +2,8 @@
   <el-dialog
     title="查询人脸图片数据"
     :visible.sync="visible"
-    width="1200px"
-    class="face-search-dialog"
     :before-close="handleClose"
+    custom-class="custom-dialog"
   >
     <el-form
       :model="form"
@@ -306,10 +305,16 @@ export default {
 };
 </script>
 
-<style scoped>
-.user-form {
-  background-color: #0a427c;
+<style>
+.custom-dialog {
+  background-color: #003c68;
+  width: 1200px !important;
 }
+/* 设置对话框标题颜色为白色 */
+.custom-dialog .el-dialog__title {
+  color: white !important;
+}
+
 .user-form .el-form-item .el-input,
 .user-form .el-form-item .el-input-number,
 .user-form .el-form-item .el-select,

+ 6 - 5
src/views/doormanManage/faceInfoManage/index.vue

@@ -9,6 +9,7 @@
         size="small"
         style="width: 150px"
         clearable
+        @change="handleSearch"
       >
         <el-option
           style="color: black"
@@ -25,11 +26,11 @@
         size="small"
         style="width: 300px; margin-left: 20px"
         clearable
-        @keyup.enter.native="searchUserInfo()"
+        @keyup.enter.native="handleSearch()"
       />
       <el-button
         type="primary"
-        @click="searchFaceInfo()"
+        @click="handleSearch()"
         style="margin-left: 10px"
         >查询</el-button
       >
@@ -153,7 +154,7 @@
       :visible.sync="editVisible"
       :userData="currentFace"
       :deviceId="selectedDeviceId"
-      @success="searchFaceInfo"
+      @success="handleSearch"
     />
   </div>
 </template>
@@ -252,12 +253,12 @@ export default {
     this.getDeviceNameInfo();
   },
   methods: {
-    searchFaceInfo() {
+    handleSearch() {
       console.log("查询");
       this.currentFace = {}; // 空对象代替 null
       this.searchVisible = true;
     },
-    // async searchFaceInfo() {
+    // async handleSearch() {
     //   // this.loading = true;
     //   try {
     //     console.log("this.selectedDeviceId", this.selectedDeviceId);

+ 10 - 5
src/views/doormanManage/peopleInfoManage/UserEditDialog.vue

@@ -2,9 +2,8 @@
   <el-dialog
     :title="isEdit ? '修改人员' : '新增人员'"
     :visible.sync="visible"
-    width="1200px"
-    class="user-edit-dialog"
     :before-close="handleClose"
+    custom-class="custom-dialog"
   >
     <el-form
       :model="form"
@@ -506,10 +505,16 @@ export default {
   },
 };
 </script>
-<style scoped>
-.user-form {
-  background-color: #0a427c;
+<style>
+.custom-dialog {
+  background-color: #003c68;
+  width: 1200px !important;
 }
+/* 设置对话框标题颜色为白色 */
+.custom-dialog .el-dialog__title {
+  color: white !important;
+}
+
 .user-form .el-form-item .el-input,
 .user-form .el-form-item .el-input-number,
 .user-form .el-form-item .el-select,

+ 1 - 1
src/views/doormanManage/peopleInfoManage/index.vue

@@ -9,7 +9,7 @@
         size="small"
         style="width: 150px"
         clearable
-        @keyup.enter.native="handleSearch"
+        @change="handleSearch"
       >
         <el-option
           style="color: black"