ItemModal.vue 10 KB

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