ItemModal.vue 10 KB

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