edit.vue 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148
  1. <template>
  2. <el-form
  3. :model="data"
  4. ref="form"
  5. label-width="120px"
  6. class="cameraVersion-from"
  7. >
  8. <el-form-item label="版本号" class="mandatory">
  9. <el-input
  10. maxlength="30"
  11. v-model.trim="data.version"
  12. placeholder="请输入最新版本号"
  13. ></el-input>
  14. </el-form-item>
  15. <el-form-item label="最低版本号">
  16. <el-input
  17. maxlength="30"
  18. v-model.trim="data.minVersion"
  19. placeholder="请输入最低版本(低于此版本号强制更新)"
  20. ></el-input>
  21. </el-form-item>
  22. <el-form-item label="版本更新说明" class="mandatory">
  23. <el-input
  24. :maxlength="200"
  25. type="textarea"
  26. :autosize="{ minRows: 4, maxRows: 10 }"
  27. style="white-space: pre-wrap; word-break: break-all"
  28. v-model="data.description"
  29. placeholder="请输入版本更新说明"
  30. ></el-input>
  31. </el-form-item>
  32. <el-form-item label="文件" class="mandatory" v-if="isAdd">
  33. <el-upload
  34. class="upload-demo"
  35. :multiple="false"
  36. :limit="1"
  37. :disabled="!!data.file"
  38. :before-upload="upload"
  39. :file-list="fileList"
  40. :http-request="httpsApi"
  41. :on-preview="previewFile"
  42. :accept="accept"
  43. :before-remove="removeFile"
  44. >
  45. <el-button type="primary" :disabled="!!data.file">
  46. <el-icon><Upload /></el-icon>上传
  47. </el-button>
  48. <template v-slot:tip>
  49. <div class="el-upload__tip">注:可上传{{ size }}以内的文件</div>
  50. </template>
  51. <!-- <template v-slot:file="{ file }: { file: UploadFile }">
  52. <div class="file" @click.stop="previewFile()">
  53. <div>
  54. <el-icon><Document /></el-icon>
  55. <span class="name">{{ file.name }}</span>
  56. </div>
  57. <el-icon @click.stop="removeFile()"><Close /></el-icon>
  58. </div>
  59. </template> -->
  60. </el-upload>
  61. </el-form-item>
  62. </el-form>
  63. </template>
  64. <script setup lang="ts">
  65. import { computed, ref, unref, watch, watchEffect } from "vue";
  66. import { QuiskExpose } from "@/helper/mount";
  67. import { CameraVersionAppEntity } from "@/store/cameraVersionApp";
  68. import { useUpload } from "@/hook/upload";
  69. import { maxFileSize } from "@/constant/caseFile";
  70. import {
  71. addCameraVersionApp,
  72. editCameraVersionApp,
  73. CameraVersionAppType,
  74. } from "@/store/cameraVersionApp";
  75. import { ElMessage } from "element-plus";
  76. const props = defineProps<{
  77. // type: string | number;
  78. entity?: CameraVersionAppEntity;
  79. }>();
  80. const data = ref<CameraVersionAppEntity>({
  81. version: "",
  82. description: "",
  83. minVersion: "",
  84. file: undefined,
  85. });
  86. const form = ref();
  87. const isAdd = computed(() => !props.entity?.id);
  88. const httpsApi = async ({ file }) => {
  89. console.log("httpsApi", file);
  90. // let fileUrl = await uploadFile(file);
  91. data.value.file = file;
  92. // file.url = fileUrl;
  93. // console.log("httpsApi", file, fileUrl);
  94. };
  95. watchEffect(() => {
  96. if (props.entity) {
  97. data.value = { ...props.entity };
  98. }
  99. });
  100. const { size, fileList, upload, removeFile, previewFile, file, accept } =
  101. useUpload({
  102. maxSize: maxFileSize,
  103. formats: [".jpg", ".jpeg"],
  104. });
  105. defineExpose<QuiskExpose>({
  106. async submit() {
  107. if (!data.value.version) {
  108. ElMessage.error("版本号不能为空!");
  109. throw "版本号不能为空!";
  110. }
  111. if (
  112. !data.value.description ||
  113. (data.value.description &&
  114. String(data.value.description).trim().length === 0)
  115. ) {
  116. ElMessage.error("版本更新说明不能为空!");
  117. throw "版本更新说明不能为空!";
  118. }
  119. if (unref(isAdd)) {
  120. if (!data.value.file) {
  121. ElMessage.error("文件不能为空!");
  122. throw "文件不能为空!";
  123. }
  124. await addCameraVersionApp(data.value as any as CameraVersionAppType);
  125. ElMessage.success("添加成功!");
  126. } else {
  127. await editCameraVersionApp(data.value as any as CameraVersionAppType);
  128. ElMessage.success("保存成功!");
  129. }
  130. },
  131. });
  132. </script>
  133. <style scoped>
  134. .icon-style {
  135. font-size: 20px;
  136. line-height: 50px;
  137. }
  138. </style>