bind.vue 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596
  1. <template>
  2. <el-form ref="form" label-width="100px" class="camera-from">
  3. <el-form-item label="SN码:" class="mandatory">
  4. <el-input
  5. :disabled="bindCamera.id && !operateIsPermissionByPath('edit', 'sn')"
  6. :modelValue="bindCamera.snCode"
  7. placeholder="请输入相机底部SN码,如214D5RE2G8"
  8. @update:modelValue="(val: string) => (bindCamera.snCode = val.trim())"
  9. />
  10. </el-form-item>
  11. <el-form-item label="相机类型:" class="mandatory">
  12. <el-select v-model="bindCamera.cameraType" placeholder="请选择" style="width: 100%">
  13. <el-option
  14. v-for="item in cameraTypes"
  15. :key="item"
  16. :label="cameraTypeDesc[item]"
  17. :value="item.toString()"
  18. />
  19. </el-select>
  20. </el-form-item>
  21. <el-form-item label="所属架构:" class="mandatory">
  22. <com-company
  23. v-model="bindCamera.deptId"
  24. :disabled="!!(bindCamera.id && !operateIsPermissionByPath('edit', 'dept'))"
  25. hide-all
  26. />
  27. </el-form-item>
  28. <el-form-item label="管理员:" class="mandatory">
  29. <el-select v-model="bindCamera.userId" placeholder="请选择" style="width: 100%">
  30. <el-option
  31. v-for="item in users"
  32. :key="item.id"
  33. :label="item.nickName"
  34. :value="item.id"
  35. />
  36. </el-select>
  37. </el-form-item>
  38. </el-form>
  39. </template>
  40. <script setup lang="ts">
  41. import comCompany from "@/components/company-select/index.vue";
  42. import { operateIsPermissionByPath } from "@/directive/permission";
  43. import { Camera, CameraType, addCamera, editCamera } from "@/store/camera";
  44. import { cameraTypeDesc } from "@/constant/camera";
  45. import { UserInfo, getUsers } from "@/store/user";
  46. import { ref, watchEffect } from "vue";
  47. import { ElMessage } from "element-plus";
  48. import { QuiskExpose } from "@/helper/mount";
  49. const props = defineProps<{ camera?: Camera }>();
  50. const bindCamera = ref<Camera>(
  51. (props.camera ? { ...props.camera } : { cameraSn: "", snCode: "" }) as Camera
  52. );
  53. const cameraTypes = [CameraType.SWKJ, CameraType.SWSS2];
  54. const users = ref<UserInfo[]>([]);
  55. watchEffect(async () => {
  56. if (bindCamera.value.deptId) {
  57. users.value = await getUsers(bindCamera.value.deptId);
  58. if (
  59. bindCamera.value.userId &&
  60. !users.value.some((user) => user.id === bindCamera.value.userId)
  61. ) {
  62. bindCamera.value.userId = undefined as any;
  63. }
  64. if (users.value.length === 1 && !bindCamera.value.userId) {
  65. bindCamera.value.userId = users.value[0].id;
  66. }
  67. }
  68. });
  69. defineExpose<QuiskExpose>({
  70. async submit() {
  71. if (!bindCamera.value.snCode || !bindCamera.value.snCode.trim()) {
  72. ElMessage.error("SN码不能为空");
  73. throw "SN码不能为空";
  74. } else if (!bindCamera.value.cameraType) {
  75. ElMessage.error("请选择相机类型");
  76. throw "请选择相机类型";
  77. } else if (!bindCamera.value.userId) {
  78. ElMessage.error("请选择管理员");
  79. throw "请选择管理员";
  80. } else {
  81. if (bindCamera.value.id) {
  82. await editCamera(bindCamera.value);
  83. } else {
  84. await addCamera(bindCamera.value);
  85. }
  86. return bindCamera.value;
  87. }
  88. },
  89. });
  90. </script>