ItemModal.vue 8.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306
  1. <template>
  2. <el-dialog
  3. :title="title"
  4. :visible.sync="modal"
  5. width="80%"
  6. :close-on-click-modal="false"
  7. @close="
  8. res => {
  9. $emit('cancel');
  10. }
  11. "
  12. >
  13. <el-form ref="form" :model="form" :rules="rules" label-width="100px">
  14. <el-form-item label="机构名称" prop="name"
  15. ><el-input v-model="form.name" placeholder="请输入机构名称" />
  16. </el-form-item>
  17. <el-form-item label="机构类型" prop="type">
  18. <el-radio-group v-model="form.type">
  19. <el-radio
  20. v-for="(item, index) in TypeOptions"
  21. :key="index"
  22. :label="item.value"
  23. >
  24. {{ item.label }}
  25. </el-radio>
  26. </el-radio-group>
  27. </el-form-item>
  28. <el-form-item label="所在地区">
  29. <!-- TODO 联动select -->
  30. {{ form.area ? form.province + '/' + form.city + '/' + form.area : '' }}
  31. </el-form-item>
  32. <el-form-item label="详细地址" prop="type">
  33. <el-input v-model="form.address" placeholder="请输入详细地址" />
  34. </el-form-item>
  35. <el-form-item label="机构logo">
  36. <upload
  37. v-model="form.logo"
  38. :url="
  39. $upload('/yxl-back-end/app/my/apply/kindergarten/public/upload')
  40. "
  41. params="prefix=/kindergarten"
  42. />
  43. </el-form-item>
  44. <el-form-item label="门店图片">
  45. <upload v-model="form.frontDoor" params="prefix=/kindergarten" />
  46. </el-form-item>
  47. <el-form-item label="营业执照">
  48. <upload v-model="form.businessLicense" params="prefix=/kindergarten" />
  49. </el-form-item>
  50. <el-form-item label="证照号码" prop="idCardNumber">
  51. <el-input v-model="form.idCardNumber" placeholder="请输入证照号码" />
  52. </el-form-item>
  53. <el-form-item label="办公电话" prop="phonenumber">
  54. <el-input v-model="form.phonenumber" placeholder="请输入办公电话" />
  55. </el-form-item>
  56. <el-form-item label="场景介绍" prop="brief">
  57. <el-input
  58. v-model="form.brief"
  59. type="textarea"
  60. :rows="2"
  61. placeholder="请输入场景介绍"
  62. />
  63. </el-form-item>
  64. <el-form-item label="申请人姓名" prop="realName">
  65. <el-input v-model="form.realName" placeholder="请输入申请人姓名" />
  66. </el-form-item>
  67. <el-form-item label="手机号" prop="personPhonenumber">
  68. <el-input v-model="form.personPhonenumber" placeholder="请输入手机号" />
  69. </el-form-item>
  70. <el-form-item label="半身照">
  71. <upload
  72. v-model="form.bodyPhoto"
  73. :uploadUrl="$upload('/yxl-back-end/app/my/apply/kindergarten/upload')"
  74. params="prefix=/kindergarten"
  75. />
  76. </el-form-item>
  77. <el-form-item label="证件正面">
  78. <upload
  79. v-model="form.idCardFront"
  80. :uploadUrl="$upload('/yxl-back-end/app/my/apply/kindergarten/upload')"
  81. params="prefix=/kindergarten"
  82. />
  83. </el-form-item>
  84. <el-form-item label="证件背面">
  85. <upload
  86. v-model="form.idCardBack"
  87. :uploadUrl="$upload('/yxl-back-end/app/my/apply/kindergarten/upload')"
  88. params="prefix=/kindergarten"
  89. />
  90. </el-form-item>
  91. <el-form-item label="状态" prop="isShow">
  92. <el-radio-group v-model="form.isShow">
  93. <el-radio :label="true">显示</el-radio>
  94. <el-radio :label="false">隐藏</el-radio>
  95. </el-radio-group>
  96. </el-form-item>
  97. </el-form>
  98. <span slot="footer" class="dialog-footer">
  99. <el-button @click="modal = false">取消</el-button>
  100. <el-button type="primary" @click="handleConfirm">确定</el-button>
  101. </span>
  102. </el-dialog>
  103. </template>
  104. <script>
  105. import SCENETYPE from '@/const/sceneType';
  106. import { getItem, saveItem } from '@/api/scene';
  107. export default {
  108. name: 'SceneItemModal',
  109. props: {
  110. id: {
  111. type: String,
  112. default: ''
  113. }
  114. },
  115. data() {
  116. return {
  117. title: '场景详情',
  118. modal: true,
  119. TypeOptions: SCENETYPE,
  120. form: {
  121. name: '',
  122. address: '',
  123. idCardNumber: '',
  124. phonenumber: '',
  125. brief: '',
  126. realName: '',
  127. personPhonenumber: '',
  128. type: '',
  129. // TODO 未对接接口字段
  130. province: '广东',
  131. city: '中山',
  132. area: '大涌',
  133. logo: [],
  134. frontDoor: [],
  135. businessLicense: [],
  136. bodyPhoto: [],
  137. idCardFront: [],
  138. idCardBack: [],
  139. isShow: false
  140. },
  141. rules: {
  142. name: [
  143. { required: true, message: '请输入机构名称', trigger: 'change' }
  144. ],
  145. address: [
  146. { required: true, message: '请输入详细地址', trigger: 'change' }
  147. ],
  148. idCardNumber: [
  149. { required: true, message: '请输入证照号码', trigger: 'change' }
  150. ],
  151. phonenumber: [
  152. { required: true, message: '请输入办公电话', trigger: 'change' }
  153. ],
  154. brief: [
  155. { required: true, message: '请输入场景介绍', trigger: 'change' }
  156. ],
  157. realName: [
  158. { required: true, message: '请输入申请人姓名', trigger: 'change' }
  159. ],
  160. personPhonenumber: [
  161. { required: true, message: '请输入手机号', trigger: 'change' }
  162. ],
  163. type: [
  164. { required: true, message: '请输入机构类型', trigger: 'change' }
  165. ],
  166. logo: [
  167. {
  168. type: 'array',
  169. required: true,
  170. message: '请上传图片',
  171. trigger: 'change'
  172. }
  173. ],
  174. frontDoor: [
  175. {
  176. type: 'array',
  177. required: true,
  178. message: '请上传图片',
  179. trigger: 'change'
  180. }
  181. ],
  182. businessLicense: [
  183. {
  184. type: 'array',
  185. required: true,
  186. message: '请上传图片',
  187. trigger: 'change'
  188. }
  189. ],
  190. bodyPhoto: [
  191. {
  192. type: 'array',
  193. required: true,
  194. message: '请上传图片',
  195. trigger: 'change'
  196. }
  197. ],
  198. idCardFront: [
  199. {
  200. type: 'array',
  201. required: true,
  202. message: '请上传图片',
  203. trigger: 'change'
  204. }
  205. ],
  206. idCardBack: [
  207. {
  208. type: 'array',
  209. required: true,
  210. message: '请上传图片',
  211. trigger: 'change'
  212. }
  213. ]
  214. }
  215. };
  216. },
  217. watch: {
  218. id: {
  219. handler(id) {
  220. id && this.loadData();
  221. },
  222. immediate: true
  223. }
  224. },
  225. mounted() {},
  226. methods: {
  227. async loadData() {
  228. const { success, data, msg } = await getItem({
  229. id: this.id
  230. });
  231. if (success) {
  232. let result = data;
  233. result.logo = [
  234. {
  235. url: data.logo
  236. }
  237. ];
  238. result.frontDoor = [
  239. {
  240. url: data.frontDoor
  241. }
  242. ];
  243. result.businessLicense = [
  244. {
  245. url: data.businessLicense
  246. }
  247. ];
  248. result.bodyPhoto = [
  249. {
  250. url: data.bodyPhoto
  251. }
  252. ];
  253. result.idCardFront = [
  254. {
  255. url: data.idCardFront
  256. }
  257. ];
  258. result.idCardBack = [
  259. {
  260. url: data.idCardBack
  261. }
  262. ];
  263. this.form = result;
  264. }
  265. },
  266. handleConfirm() {
  267. this.$refs.form.validate(async valid => {
  268. if (valid) {
  269. let params = Object.assign({}, this.form);
  270. params.logo = this.form.logo[0].url;
  271. params.frontDoor = this.form.frontDoor[0].url;
  272. params.businessLicense = this.form.businessLicense[0].url;
  273. params.bodyPhoto = this.form.bodyPhoto[0].url;
  274. params.idCardFront = this.form.idCardFront[0].url;
  275. params.idCardBack = this.form.idCardBack[0].url;
  276. if (this.id) params.id = this.id;
  277. const { success, msg } = await saveItem(params);
  278. if (success) {
  279. this.$success('保存成功!');
  280. this.modal = false;
  281. this.$g_emit('scene_reload');
  282. }
  283. }
  284. });
  285. }
  286. }
  287. };
  288. </script>
  289. <style lang="scss" scoped>
  290. .pre-img {
  291. height: 80px;
  292. }
  293. </style>