edit.vue 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132
  1. <template>
  2. <el-form ref="form" label-width="84px">
  3. <el-form-item label="案件名称">
  4. <el-input
  5. v-model="bindExample.caseTitle"
  6. maxlength="300"
  7. placeholder="请输入案件名称"
  8. />
  9. </el-form-item>
  10. <el-form-item label="案件编号">
  11. <el-input
  12. v-model="bindExample.caseNum"
  13. maxlength="300"
  14. placeholder="请输入案件编号"
  15. />
  16. </el-form-item>
  17. <el-form-item label="案件类别">
  18. <el-input
  19. v-model="bindExample.caseCategory"
  20. maxlength="300"
  21. placeholder="请输入案件类别"
  22. />
  23. </el-form-item>
  24. <el-form-item label="案件区域">
  25. <el-input
  26. v-model="bindExample.caseRegion"
  27. maxlength="300"
  28. placeholder="案件区域"
  29. />
  30. </el-form-item>
  31. <el-form-item label="案件地点">
  32. <el-input
  33. v-model="bindExample.caseAddress"
  34. maxlength="300"
  35. placeholder="案件地点"
  36. />
  37. </el-form-item>
  38. <!-- class="mandatory" -->
  39. <div class="el-form-item">
  40. <el-col :span="12">
  41. <el-form-item label="是否命案">
  42. <el-radio-group v-model="bindExample.homicideCase">
  43. <el-radio-button :value="1">是</el-radio-button>
  44. <el-radio-button :value="0">否</el-radio-button>
  45. </el-radio-group>
  46. </el-form-item>
  47. </el-col>
  48. <el-col :span="12">
  49. <el-form-item label="是否刑案">
  50. <el-radio-group v-model="bindExample.criminalCase">
  51. <el-radio-button :value="1">是</el-radio-button>
  52. <el-radio-button :value="0">否</el-radio-button>
  53. </el-radio-group>
  54. </el-form-item>
  55. </el-col>
  56. </div>
  57. <el-form-item label="经纬度">
  58. <el-input
  59. v-model="bindExample.latAndLong"
  60. maxlength="50"
  61. placeholder="经纬度"
  62. />
  63. </el-form-item>
  64. <el-form-item label="详细地址">
  65. <el-input
  66. v-model="bindExample.mapUrl"
  67. placeholder="输入名称搜索"
  68. clearable
  69. disabled
  70. >
  71. <template #append>
  72. <el-button :icon="Search" @click="searchAMapAddress" />
  73. </template>
  74. </el-input>
  75. </el-form-item>
  76. </el-form>
  77. </template>
  78. <script setup lang="ts">
  79. import { ref } from "vue";
  80. import { Example, setExample, addExample } from "@/app/criminal/store/example";
  81. import { ElMessage } from "element-plus";
  82. import { QuiskExpose } from "@/helper/mount";
  83. import { Search } from "@element-plus/icons-vue";
  84. import { selectMapImage } from "@/view/case/quisk";
  85. interface CriminalExample extends Example {
  86. caseNum: string; //案件编号
  87. caseCategory: string; //案件类别
  88. caseRegion: string; //案发区域
  89. caseAddress: string; //案发地址
  90. homicideCase: number; //是否命案,0否,1是
  91. criminalCase: number; //是否刑案,0否,1是
  92. }
  93. const props = defineProps<{ example?: CriminalExample }>();
  94. const bindExample = ref<CriminalExample>(
  95. props.example ? { ...props.example } : ({} as CriminalExample)
  96. );
  97. defineExpose<QuiskExpose>({
  98. async submit() {
  99. if (!bindExample.value.caseTitle || !bindExample.value.caseTitle.trim()) {
  100. ElMessage.error("案件名称不能为空");
  101. throw "案件名称不能为空";
  102. } else if (
  103. !bindExample.value.latAndLong ||
  104. !bindExample.value.latAndLong.trim()
  105. ) {
  106. ElMessage.error("详细地址不能为空");
  107. throw "详细地址不能为空!";
  108. }
  109. await (bindExample.value.caseId
  110. ? setExample(bindExample.value)
  111. : addExample(bindExample.value));
  112. },
  113. });
  114. const searchAMapAddress = async () => {
  115. const data = await selectMapImage({});
  116. if (!data?.search) return;
  117. bindExample.value.mapUrl = data.search.text;
  118. bindExample.value.latAndLong = `${data.search.lat},${data.search.lng}`;
  119. };
  120. </script>