edit.vue 6.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203
  1. <template>
  2. <ElForm ref="formRef" :model="formData" :rules="rules" label-width="auto">
  3. <el-row :gutter="20">
  4. <el-col>
  5. <ElFormItem label="食堂名称" prop="name">
  6. <ElInput style="max-width: 400px" v-model="formData.name" maxlength="20" type="text" />
  7. </ElFormItem>
  8. </el-col>
  9. <el-col>
  10. <ElFormItem label="档口数量" prop="stall_num">
  11. <ElInput style="max-width: 400px" v-model="formData.stall_num" type="number" />
  12. </ElFormItem>
  13. </el-col>
  14. <el-col>
  15. <ElFormItem label="是否直营" prop="is_direct">
  16. <el-select style="max-width: 200px" v-model="formData.is_direct" placeholder="请选择">
  17. <el-option
  18. v-for="item in [
  19. { label: '非直营', value: 0 },
  20. { label: '直营', value: 1 }
  21. ]"
  22. :key="item.value"
  23. :value="item.value"
  24. :label="item.label"
  25. />
  26. </el-select>
  27. </ElFormItem>
  28. </el-col>
  29. <el-col>
  30. <ElFormItem label="学校(校区)" prop="school_id">
  31. <ElSelect style="max-width: 200px" v-model="formData.school_id" placeholder="请选择" :empty-values="[0]" :value-on-clear="0">
  32. <ElOption
  33. v-for="item in selectList"
  34. :key="item.id"
  35. :value="item.id"
  36. :label="item.name"
  37. />
  38. </ElSelect>
  39. </ElFormItem>
  40. </el-col>
  41. <el-col>
  42. <ElFormItem label="餐饮公司" prop="school_id">
  43. <ElInput style="max-width: 400px" v-model="formData.school_id" type="number" />
  44. </ElFormItem>
  45. </el-col>
  46. <el-col>
  47. <ElFormItem label="食堂经理" prop="username">
  48. <ElInput style="max-width: 400px" v-model="formData.username" maxlength="20" type="text" />
  49. </ElFormItem>
  50. </el-col>
  51. <el-col>
  52. <ElFormItem label="手机号" prop="phone">
  53. <ElInput style="max-width: 400px" v-model="formData.phone" maxlength="20" type="text" />
  54. </ElFormItem>
  55. </el-col>
  56. <el-col>
  57. <ElFormItem label="微信号" prop="weixin">
  58. <ElInput style="max-width: 400px" v-model="formData.weixin" maxlength="20" type="text" />
  59. </ElFormItem>
  60. </el-col>
  61. <el-col>
  62. <ElFormItem label="档口照片" prop="tall_imgs">
  63. <ArtUploadImgs
  64. :imgs="formData.stall_imgs"
  65. :limit = "12"
  66. file-name="canteen"
  67. :maxSizeMB="3"
  68. @update:imgs="(value:string[]) => formData.stall_imgs = value"
  69. />
  70. </ElFormItem>
  71. </el-col>
  72. <el-col>
  73. <ElFormItem label="备注" prop="memo">
  74. <ElInput rows="4" v-model="formData.memo" maxlength="255" type="textarea" />
  75. </ElFormItem>
  76. </el-col>
  77. <el-col :span="24">
  78. <ElFormItem label=" " prop="">
  79. <ElButton type="primary" @click="handleSubmit">提交</ElButton>
  80. </ElFormItem>
  81. </el-col>
  82. </el-row>
  83. </ElForm>
  84. </template>
  85. <script setup lang="ts">
  86. import type { FormInstance, FormRules } from 'element-plus'
  87. import {canteenApi, canteenApi as Api} from '@/api/canteenApi'
  88. import { onMounted } from 'vue'
  89. import { router } from '@/router'
  90. import { ElMessageBox } from 'element-plus'
  91. import { RoutesAlias } from '@/router/routesAlias'
  92. // 表单实例
  93. const formRef = ref<FormInstance>()
  94. const DefaultData = <Form.Canteen>{
  95. id: 0,
  96. school_id: 0,
  97. name: '',
  98. stall_num: 0,
  99. is_direct: 0,
  100. stall_imgs: [],
  101. username: '',
  102. phone: '',
  103. weixin: '',
  104. memo: '',
  105. last_user_id: 0,
  106. last_user_name: '',
  107. last_date: ''
  108. }
  109. // 表单数据
  110. const formData = reactive<Form.Canteen>({ ...DefaultData })
  111. // 表单验证规则
  112. const rules: FormRules = {
  113. school_id: [{ required: true, message: '请输入学校ID', trigger: 'blur' }],
  114. name: [
  115. { required: true, message: '请输入名称', trigger: 'blur' },
  116. { max: 20, message: '长度最多20个字符', trigger: 'blur' }
  117. ],
  118. stall_num: [{ required: true, message: '请输入档口数量', trigger: 'blur' }],
  119. username: [
  120. { required: true, message: '请输入食堂经理', trigger: 'blur' },
  121. { max: 20, message: '长度最多20个字符', trigger: 'blur' }
  122. ],
  123. phone: [
  124. { required: true, message: '请输入手机号', trigger: 'blur' },
  125. {
  126. pattern: /^1[3456789]\d{9}$/,
  127. message: '请输入正确的手机号码',
  128. trigger: 'blur'
  129. }
  130. ],
  131. weixin: [
  132. { required: true, message: '请输入微信号', trigger: 'blur' },
  133. { max: 20, message: '长度最多20个字符', trigger: 'blur' }
  134. ],
  135. memo: [{ max: 255, message: '长度最多255个字符', trigger: 'blur' }]
  136. }
  137. const route = useRoute()
  138. let id = 0
  139. // 初始化表单数据
  140. const initFormData = () => {
  141. if (id == 0) {
  142. Object.assign(formData, DefaultData)
  143. } else {
  144. Api.info(id).then((res) => {
  145. Object.assign(formData, res)
  146. })
  147. }
  148. }
  149. const selectList = ref<Api.Common.SelectRelationInfo[]>([])
  150. const getSelectList = async () => {
  151. await canteenApi.selectList().then(res => {
  152. selectList.value = res
  153. })
  154. }
  155. onMounted(() => {
  156. id = route.query.id ? parseInt(route.query.id as string) : 0
  157. getSelectList()
  158. initFormData()
  159. nextTick(() => {
  160. formRef.value?.clearValidate()
  161. })
  162. })
  163. const afterOk = () => {
  164. ElMessageBox.confirm('操作成功,是否返回列表', 'Success', {
  165. confirmButtonText: '返回列表',
  166. cancelButtonText: '留在此页',
  167. type: 'info'
  168. })
  169. .then(() => {
  170. router.push({ path: RoutesAlias.CanteenList })
  171. })
  172. .catch(() => {
  173. // ... do nothing
  174. })
  175. }
  176. // 提交表单
  177. const handleSubmit = async () => {
  178. if (!formRef.value) return
  179. await formRef.value.validate((valid) => {
  180. if (valid) {
  181. if (id == 0) {
  182. Api.add(formData).then(() => {
  183. afterOk()
  184. })
  185. } else {
  186. Api.edit(formData).then(() => {
  187. afterOk()
  188. })
  189. }
  190. }
  191. })
  192. }
  193. </script>