ItemModal.vue 8.8 KB

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