detail.vue 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140
  1. <template>
  2. <div class='app-container'>
  3. <el-form :model="form" ref="form" :rules="rules" label-width="100px" :disabled="disabled">
  4. <el-form-item label="门店名称:" prop="name">
  5. <el-input v-model="form.name" placeholder="请输入门店名称" />
  6. </el-form-item>
  7. <el-form-item label="门店图片:" prop="icon">
  8. <Upload list-type="picture-card" :url="form.icon" @upload="upload" :disabled="disabled" />
  9. </el-form-item>
  10. <el-form-item label="联系电话:">
  11. <el-input v-model="form.linkPhone" placeholder="请输入联系电话" />
  12. </el-form-item>
  13. <el-form-item label="城市筛选:" prop="cascader">
  14. <el-cascader style="width: 100%" v-model="form.cascader" :options="options" placeholder="请选择省市区"
  15. :props="{ value: 'id', label: 'name', children: 'childList', checkStrictly: true }" />
  16. </el-form-item>
  17. <el-form-item label="详细地址:" prop="address">
  18. <el-input v-model="form.address" placeholder="请输入详细地址" />
  19. </el-form-item>
  20. <el-form-item label="经度:" prop="longitude">
  21. <el-input v-model="form.longitude" placeholder="请输入经度" />
  22. </el-form-item>
  23. <el-form-item label="纬度:" prop="latitude">
  24. <el-input v-model="form.latitude" placeholder="请输入纬度" />
  25. </el-form-item>
  26. </el-form>
  27. <div class="form-btn">
  28. <el-button @click="cancel">取消</el-button>
  29. <el-button v-if="!disabled" type="primary" @click="getSubmit">确定</el-button>
  30. </div>
  31. </div>
  32. </template>
  33. <script>
  34. import { detail, options, submit } from '@/api/operation/map'
  35. export default {
  36. data() {
  37. return {
  38. // 表单
  39. form: {
  40. status: 0
  41. },
  42. // 省市区
  43. options: [],
  44. // 校验
  45. rules: {
  46. name: [{
  47. required: true, message: '请输入店铺名称', trigger: 'blur'
  48. }],
  49. icon: [{
  50. required: true, message: '请上传店铺图片', trigger: 'change'
  51. }],
  52. cascader: [{
  53. required: true, message: '请选择省市区', trigger: 'change'
  54. }],
  55. address: [{
  56. required: true, message: '请输入详细地址', trigger: 'blur'
  57. }],
  58. latitude: [{
  59. required: true, message: '请输入经度', trigger: 'blur'
  60. }],
  61. longitude: [{
  62. required: true, message: '请输入纬度', trigger: 'blur'
  63. }]
  64. },
  65. // 只读
  66. disabled: false
  67. }
  68. },
  69. mounted() {
  70. this.getOptions()
  71. if (this.$route.query.id) {
  72. this.getDetail()
  73. this.disabled = Boolean(this.$route.query.boolean)
  74. }
  75. },
  76. methods: {
  77. // 详情
  78. getDetail() {
  79. detail(this.$route.query.id).then(res => {
  80. if (res.code === 0) {
  81. this.form = res.data
  82. this.form.cascader = [Number(res.data.province), Number(res.data.city), Number(res.data.area)]
  83. }
  84. })
  85. },
  86. // 上传
  87. upload(e) {
  88. this.form.icon = e.file
  89. },
  90. // 省市区
  91. getOptions() {
  92. options().then(res => {
  93. if (res.code === 0) {
  94. this.options = res.data
  95. }
  96. })
  97. },
  98. cancel() {
  99. this.$tab.closeOpenPage("/operation/map")
  100. },
  101. // 提交
  102. getSubmit() {
  103. this.$refs.form.validate((valid) => {
  104. if (valid) {
  105. this.form.province = this.form.cascader[0]
  106. this.form.city = this.form.cascader[1]
  107. this.form.area = this.form.cascader[2]
  108. submit(this.form).then(res => {
  109. if (res.code === 0) {
  110. this.$message.success('提交成功!')
  111. this.cancel()
  112. }
  113. })
  114. } else {
  115. return false
  116. }
  117. })
  118. }
  119. }
  120. }
  121. </script>
  122. <style lang="scss" scoped>
  123. .el-form {
  124. .el-form-item {
  125. width: 500px;
  126. }
  127. }
  128. ::v-deep .el-dialog__wrapper {
  129. .el-dialog__body {
  130. padding: 0;
  131. }
  132. }
  133. </style>