edit.vue 9.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298
  1. <template>
  2. <ElForm ref="formRef" :model="formData" :rules="rules" label-width="auto">
  3. <el-row :gutter="20">
  4. <el-col :xs="24" :lg="8" :sm="12">
  5. <ElFormItem label="名称" prop="name">
  6. <ElInput v-model="formData.name" maxlength="20" type="text" />
  7. </ElFormItem>
  8. </el-col>
  9. <el-col :xs="24" :lg="8" :sm="12">
  10. <ElFormItem label="地区" prop="distinct">
  11. <el-cascader
  12. v-model="formData.distinct"
  13. :options="cityJson"
  14. filterable
  15. placeholder="可搜索"
  16. clearable
  17. style="width: 100%"
  18. />
  19. </ElFormItem>
  20. </el-col>
  21. <el-col :span="24">
  22. <ElFormItem label="详细地址" prop="address">
  23. <ElInput v-model="formData.address" maxlength="255" type="textarea" />
  24. </ElFormItem>
  25. </el-col>
  26. <el-col :xs="24" :lg="8" :sm="12">
  27. <ElFormItem label="在校人数" prop="person_num">
  28. <ElInput v-model="formData.person_num" maxlength="32" type="text" />
  29. </ElFormItem>
  30. </el-col>
  31. <el-col :xs="24" :lg="8" :sm="12">
  32. <ElFormItem label="负责人" prop="bind_user_id">
  33. <ElInput v-model="formData.bind_user_id" type="number" />
  34. </ElFormItem>
  35. </el-col>
  36. <el-col :xs="24" :lg="8" :sm="12">
  37. <ElFormItem label="是否有饿了么校内站" prop="is_eleme_in_school">
  38. <el-select v-model="formData.is_eleme_in_school" placeholder="请选择">
  39. <el-option
  40. v-for="item in [
  41. { label: '无', value: 0 },
  42. { label: '有', value: 1 }
  43. ]"
  44. :key="item.value"
  45. :value="item.value"
  46. :label="item.label"
  47. />
  48. </el-select>
  49. </ElFormItem>
  50. </el-col>
  51. <el-col :xs="24" :lg="8" :sm="12">
  52. <ElFormItem label="是否有饿了么校外站" prop="is_eleme_out_school">
  53. <el-select v-model="formData.is_eleme_out_school" placeholder="请选择">
  54. <el-option
  55. v-for="item in [
  56. { label: '无', value: 0 },
  57. { label: '有', value: 1 }
  58. ]"
  59. :key="item.value"
  60. :value="item.value"
  61. :label="item.label"
  62. />
  63. </el-select>
  64. </ElFormItem>
  65. </el-col>
  66. <el-col :xs="24" :lg="8" :sm="12">
  67. <ElFormItem label="是否有美团校内站" prop="is_meituan_in_school">
  68. <el-select v-model="formData.is_meituan_in_school" placeholder="请选择">
  69. <el-option
  70. v-for="item in [
  71. { label: '无', value: 0 },
  72. { label: '有', value: 1 }
  73. ]"
  74. :key="item.value"
  75. :value="item.value"
  76. :label="item.label"
  77. />
  78. </el-select>
  79. </ElFormItem>
  80. </el-col>
  81. <el-col :xs="24" :lg="8" :sm="12">
  82. <ElFormItem label="是否有美团校外站" prop="is_meituan_out_school">
  83. <el-select v-model="formData.is_meituan_out_school" placeholder="请选择">
  84. <el-option
  85. v-for="item in [
  86. { label: '无', value: 0 },
  87. { label: '有', value: 1 }
  88. ]"
  89. :key="item.value"
  90. :value="item.value"
  91. :label="item.label"
  92. />
  93. </el-select>
  94. </ElFormItem>
  95. </el-col>
  96. <el-col :xs="24" :lg="8" :sm="12">
  97. <ElFormItem label="是否能上楼" prop="can_go_upstairs">
  98. <el-select v-model="formData.can_go_upstairs" placeholder="请选择">
  99. <el-option
  100. v-for="item in [
  101. { label: '能', value: 0 },
  102. { label: '不能', value: 1 }
  103. ]"
  104. :key="item.value"
  105. :value="item.value"
  106. :label="item.label"
  107. />
  108. </el-select>
  109. </ElFormItem>
  110. </el-col>
  111. <el-col :xs="24" :lg="8" :sm="12">
  112. <ElFormItem label="是否合作" prop="is_cooperate">
  113. <el-select v-model="formData.is_cooperate" placeholder="请选择">
  114. <el-option
  115. v-for="item in [
  116. { label: '无', value: 0 },
  117. { label: '有', value: 1 }
  118. ]"
  119. :key="item.value"
  120. :value="item.value"
  121. :label="item.label"
  122. />
  123. </el-select>
  124. </ElFormItem>
  125. </el-col>
  126. <el-col :xs="24" :lg="8" :sm="12">
  127. <ElFormItem label="是否允许骑电动车" prop="can_ride">
  128. <el-select v-model="formData.can_ride" placeholder="请选择">
  129. <el-option
  130. v-for="item in [
  131. { label: '能', value: 0 },
  132. { label: '不能', value: 1 }
  133. ]"
  134. :key="item.value"
  135. :value="item.value"
  136. :label="item.label"
  137. />
  138. </el-select>
  139. </ElFormItem>
  140. </el-col>
  141. <el-col :span="24">
  142. <ElFormItem label="宿舍分布情况" prop="dormitory_distribution">
  143. <ElInput v-model="formData.dormitory_distribution" maxlength="1000" type="textarea" />
  144. </ElFormItem>
  145. </el-col>
  146. <el-col :span="24">
  147. <ElFormItem label="校门口取餐点离宿舍情况" prop="qucan_station_distribution">
  148. <ElInput v-model="formData.qucan_station_distribution" maxlength="1000" type="textarea" />
  149. </ElFormItem>
  150. </el-col>
  151. <el-col :span="24">
  152. <ElFormItem label="校外商圈情况" prop="out_business_description">
  153. <ElInput v-model="formData.out_business_description" maxlength="1000" type="textarea" />
  154. </ElFormItem>
  155. </el-col>
  156. <el-col :span="24">
  157. <ElFormItem label="备注" prop="memo">
  158. <ElInput v-model="formData.memo" maxlength="255" type="textarea" />
  159. </ElFormItem>
  160. </el-col>
  161. <el-col :span="24">
  162. <ElFormItem label=" " prop="">
  163. <ElButton type="primary" @click="handleSubmit">提交</ElButton>
  164. </ElFormItem>
  165. </el-col>
  166. </el-row>
  167. </ElForm>
  168. </template>
  169. <script setup lang="ts">
  170. import type { FormInstance, FormRules } from 'element-plus'
  171. import { schoolApi as Api } from '@/api/schoolApi'
  172. import { onMounted } from 'vue'
  173. import { router } from '@/router'
  174. import { cityJson } from '@/router/utils/city'
  175. import { ElMessageBox } from 'element-plus'
  176. import { RoutesAlias } from '@/router/routesAlias'
  177. // 表单实例
  178. const formRef = ref<FormInstance>()
  179. const DefaultData = <Form.School>{
  180. name: '',
  181. distinct:[],
  182. address: '',
  183. person_num: '',
  184. bind_user_id: 0,
  185. is_eleme_in_school: 0,
  186. is_eleme_out_school: 0,
  187. is_meituan_in_school: 0,
  188. is_meituan_out_school: 0,
  189. can_go_upstairs: 0,
  190. is_cooperate: 0,
  191. can_ride: 0,
  192. dormitory_distribution: '',
  193. qucan_station_distribution: '',
  194. out_business_description: '',
  195. memo: ''
  196. }
  197. // 表单数据
  198. const formData = reactive<Form.School>({...DefaultData})
  199. // 表单验证规则
  200. const rules: FormRules = {
  201. name: [
  202. { required: true, message: '请输入名称', trigger: 'blur' },
  203. { max: 20, message: '长度最多20个字符', trigger: 'blur' }
  204. ],
  205. distinct: [
  206. { required: true, message: '请选择地区', trigger: 'blur' },
  207. ],
  208. address: [
  209. { required: true, message: '请输入详细地址', trigger: 'blur' },
  210. { max: 255, message: '长度最多255个字符', trigger: 'blur' }
  211. ],
  212. person_num: [
  213. { required: true, message: '请输入在校人数', trigger: 'blur' },
  214. { max: 32, message: '长度最多32个字符', trigger: 'blur' }
  215. ],
  216. bind_user_id: [{ required: true, message: '请输入负责人', trigger: 'blur' }],
  217. dormitory_distribution: [{ max: 1000, message: '长度最多1000个字符', trigger: 'blur' }],
  218. qucan_station_distribution: [{ max: 1000, message: '长度最多1000个字符', trigger: 'blur' }],
  219. out_business_description: [{ max: 1000, message: '长度最多1000个字符', trigger: 'blur' }],
  220. memo: [{ max: 255, message: '长度最多255个字符', trigger: 'blur' }]
  221. }
  222. const route = useRoute()
  223. let id = 0
  224. // 初始化表单数据
  225. const initFormData = () => {
  226. if (id == 0) {
  227. Object.assign(formData, DefaultData)
  228. } else {
  229. Api.info(id).then((res) => {
  230. Object.assign(formData, res)
  231. })
  232. }
  233. }
  234. onMounted(() => {
  235. id = route.query.id ? parseInt(route.query.id as string) : 0
  236. initFormData()
  237. nextTick(() => {
  238. formRef.value?.clearValidate()
  239. })
  240. })
  241. const afterOk = () => {
  242. ElMessageBox.confirm('操作成功,是否返回列表', 'Success', {
  243. confirmButtonText: '返回列表',
  244. cancelButtonText: '留在此页',
  245. type: 'info'
  246. })
  247. .then(() => {
  248. router.push({ path: RoutesAlias.SchoolList })
  249. })
  250. .catch(() => {
  251. // ... do nothing
  252. })
  253. }
  254. // 提交表单
  255. const handleSubmit = async () => {
  256. if (!formRef.value) return
  257. await formRef.value.validate((valid) => {
  258. if (valid) {
  259. if (id == 0) {
  260. Api.add(formData).then(() => {
  261. afterOk()
  262. })
  263. } else {
  264. Api.edit(formData).then(() => {
  265. afterOk()
  266. })
  267. }
  268. }
  269. })
  270. }
  271. </script>