Browse Source

feat: #修复小bug,幼儿园管理基本对接完成

loki 3 years ago
parent
commit
3bec38cd2f

+ 2 - 2
.env.development

@@ -2,6 +2,6 @@
 ENV = 'development'
 
 # base api
-VUE_APP_BASE_API = 'http://127.0.0.1:18080/'
-# VUE_APP_BASE_API = 'http://localhost:18080/'
+VUE_APP_BASE_API = 'http://127.0.0.1:18080'
+# VUE_APP_BASE_API = 'http://localhost:18080'
 VUE_APP_API_TIMEOUT = 30000

+ 0 - 19
src/api/banner.js

@@ -1,19 +0,0 @@
-import api from '@/utils/request';
-
-export const iGetList = params =>
-	api.post(`/yxl-back-end/admin/banner/page`, params);
-
-export const iGetItem = ({ id, ...params }) =>
-	api.get(`/yxl-back-end/admin/banner/${id}`);
-
-export const iDelItem = ({ id, ...params }) =>
-	api.del(`/yxl-back-end/admin/banner/del/${id}`, params);
-
-export const iGetTotalNum = ({ id, ...params }) =>
-	api.del(`/yxl-back-end/admin/banner/del/${id}`, params);
-
-export const iUpdateItem = params =>
-	api.post(`/yxl-back-end/admin/banner/save`, params);
-
-export const iShowItem = ({ id, ...params }) =>
-	api.post(`/yxl-back-end/admin/banner/show/${id}`, params);

+ 7 - 2
src/api/base/banner.js

@@ -4,7 +4,12 @@ export const getList = params =>
 	api.post(`/yxl-back-end/admin/banner/page`, params);
 export const getItem = ({ id, ...params }) =>
 	api.get(`/yxl-back-end/admin/banner/${id}`, params);
-export const saveItem = params =>
-	api.post(`/yxl-back-end/admin/banner/save`, params);
+export const saveItem = params => {
+	if (params.id) {
+		return api.put(`/yxl-back-end/admin/banner/update`, params);
+	} else {
+		return api.post(`/yxl-back-end/admin/banner/save`, params);
+	}
+};
 export const delItem = ({ id, ...params }) =>
 	api.del(`/yxl-back-end/admin/banner/${id}`, params);

+ 1 - 0
src/components/Upload.vue

@@ -93,6 +93,7 @@ export default {
       handler(val) {
         // if (this.imgList.length < val.length) {
         this.imgList = val;
+        console.log(this.imgList);
         // }
       },
       immediate: true

+ 3 - 0
src/const/sceneType.js

@@ -0,0 +1,3 @@
+import { setStatus } from '@/utils';
+
+export default setStatus(['公办', '私办'], ['公办', '私办']);

+ 2 - 2
src/main.js

@@ -61,8 +61,8 @@ Vue.prototype.$success = message.success;
 Vue.prototype.$error = message.error;
 Vue.prototype.$warning = message.warning;
 
-window.UEDITOR_CONFIG = `${process.env.VUE_APP_BASE_API}yxl-back-end/framework/oss/ueditor/ueditor-action`;
-window.UEDITOR_SERVER_URL = `${process.env.VUE_APP_BASE_API}yxl-back-end/framework/oss/ueditor/ueditor-action`;
+window.UEDITOR_CONFIG = `${process.env.VUE_APP_BASE_API}/yxl-back-end/framework/oss/ueditor/ueditor-action`;
+window.UEDITOR_SERVER_URL = `${process.env.VUE_APP_BASE_API}/yxl-back-end/framework/oss/ueditor/ueditor-action`;
 // window.UEDITOR_CONFIG = `https://ex.by-health.com/baby-institute-back-end/oss/ueditor/ueditor-action`;
 // window.UEDITOR_SERVER_URL = `https://ex.by-health.com/baby-institute-back-end/oss/ueditor/ueditor-action`;
 

+ 8 - 0
src/utils/dialog-helper.js

@@ -8,6 +8,7 @@ import InfoItem from 'views/baseManagement/infoManagement/modal/ItemModal.vue';
 import MemberLeverItem from 'views/memberManagement/memberLever/modal/ItemModal.vue';
 import TrendItem from 'views/baseManagement/trending/modal/ItemModal.vue';
 import SceneVerifyItem from 'views/sceneManagement/sceneVerify/modal/ItemModal.vue';
+import SceneItem from 'views/sceneManagement/sceneList/modal/ItemModal.vue';
 
 const modal = (Component, props) => {
   let _component = null;
@@ -85,3 +86,10 @@ let SceneVerifyItemModal = data => {
 Vue.prototype.$SceneVerifyItemModal = params => {
   SceneVerifyItemModal(params);
 };
+
+let SceneItemModal = data => {
+  modal(SceneItem, data);
+};
+Vue.prototype.$SceneItemModal = params => {
+  SceneItemModal(params);
+};

+ 22 - 5
src/views/baseManagement/bannerManagement/modal/ItemModal.vue

@@ -12,6 +12,9 @@
   >
     <el-form ref="form" :model="form" :rules="rules" label-width="100px">
       <!-- TODO 补充图片上传 -->
+      <el-form-item label="图片" prop="imgUrl">
+        <upload v-model="form.imgUrl" params="prefix=/banner" />
+      </el-form-item>
       <el-form-item label="位置" prop="type">
         <el-select
           v-model="form.type"
@@ -74,6 +77,7 @@ export default {
       modal: true,
 
       form: {
+        imgUrl: [],
         type: null,
         name: '',
         link: '',
@@ -84,7 +88,15 @@ export default {
         type: [
           { required: true, message: '请选择所属位置', trigger: 'change' }
         ],
-        name: [{ required: true, message: '请输入标题', trigger: 'change' }]
+        name: [{ required: true, message: '请输入标题', trigger: 'change' }],
+        imgUrl: [
+          {
+            type: 'array',
+            required: true,
+            message: '请上传图片',
+            trigger: 'change'
+          }
+        ]
         // link: [{ required: true, message: '请输入链接地址', trigger: 'change' }]
       },
 
@@ -119,22 +131,27 @@ export default {
         id: this.id
       });
       if (success) {
-        this.form = data;
+        let result = data;
+        result.imgUrl = [
+          {
+            url: data.imgUrl
+          }
+        ];
+        this.form = result;
       }
     },
 
     handleConfirm() {
       this.$refs.form.validate(async valid => {
         if (valid) {
-          const params = Object.assign({}, this.form);
+          let params = Object.assign({}, this.form);
+          params.imgUrl = this.form.imgUrl[0].url;
           if (this.id) params.id = this.id;
           const { success, msg } = await saveItem(params);
           if (success) {
             this.$success('保存成功!');
             this.modal = false;
             this.$g_emit('banner_reload');
-          } else {
-            this.$error(msg);
           }
         }
       });

+ 23 - 4
src/views/baseManagement/infoManagement/modal/ItemModal.vue

@@ -20,6 +20,10 @@
       <el-form-item label="简介" prop="brief">
         <el-input v-model="form.brief" type="textarea" :rows="2"></el-input>
       </el-form-item>
+      <el-form-item label="封面" prop="cover">
+        <upload v-model="form.cover" params="prefix=/tweet" />
+      </el-form-item>
+
       <!-- TODO 上传封面 -->
       <el-form-item label="内容" prop="content">
         <RichText v-model="form.content"></RichText>
@@ -68,6 +72,7 @@ export default {
         author: '',
         title: '',
         brief: '',
+        cover: [],
         content: '',
         isShow: false,
         sort: 1
@@ -76,7 +81,15 @@ export default {
         author: [{ required: true, message: '请输入作者', trigger: 'change' }],
         title: [{ required: true, message: '请输入标题', trigger: 'change' }],
         brief: [{ required: true, message: '请输入简介', trigger: 'change' }],
-        content: [{ required: true, message: '请输入内容', trigger: 'change' }]
+        content: [{ required: true, message: '请输入内容', trigger: 'change' }],
+        cover: [
+          {
+            type: 'array',
+            required: true,
+            message: '请上传图片',
+            trigger: 'change'
+          }
+        ]
       },
 
       typeOptions: []
@@ -110,15 +123,21 @@ export default {
         id: this.id
       });
       if (success) {
-        this.form = data;
+        let result = data;
+        result.cover = [
+          {
+            url: data.cover
+          }
+        ];
+        this.form = result;
       }
     },
 
     handleConfirm() {
       this.$refs.form.validate(async valid => {
         if (valid) {
-          const params = Object.assign({}, this.form);
-          params.cover = '';
+          let params = Object.assign({}, this.form);
+          params.cover = this.form.cover[0].url;
           if (this.id) params.id = this.id;
           const { success, msg } = await saveItem(params);
           if (success) {

+ 21 - 3
src/views/sceneManagement/sceneList/index.vue

@@ -52,12 +52,30 @@ export default {
         {
           key: 'logo',
           name: 'Logo',
-          width: '120'
+          width: '120',
+          render: (h, { row }) =>
+            h('image', {
+              style: {
+                width: '120px',
+                height: '90px'
+              },
+              attrs: {
+                src: row.logo
+              },
+              on: {
+                click: () =>
+                  this.$AdvanceViewImageModal({
+                    items: [{ src: row.logo }]
+                  })
+              }
+            })
         },
         {
           key: 'region',
           name: '所在地区',
-          minWidth: '180'
+          minWidth: '180',
+          render: (h, { row }) =>
+            h('span', `${row.province}/${row.city}/${row.area}`)
         },
         {
           key: 'type',
@@ -97,7 +115,7 @@ export default {
                   },
                   on: {
                     click: () =>
-                      this.$BannerItemModal({
+                      this.$SceneItemModal({
                         id: row.id
                       })
                   }

+ 294 - 0
src/views/sceneManagement/sceneList/modal/ItemModal.vue

@@ -0,0 +1,294 @@
+<template>
+  <el-dialog
+    :title="title"
+    :visible.sync="modal"
+    width="80%"
+    :close-on-click-modal="false"
+    @close="
+      res => {
+        $emit('cancel');
+      }
+    "
+  >
+    <el-form ref="form" :model="form" :rules="rules" label-width="100px">
+      <el-form-item label="机构名称" prop="name"
+        ><el-input v-model="form.name" placeholder="请输入机构名称" />
+      </el-form-item>
+      <el-form-item label="机构类型" prop="type">
+        <el-radio-group v-model="form.type">
+          <el-radio
+            v-for="(item, index) in TypeOptions"
+            :key="index"
+            :label="item.value"
+          >
+            {{ item.label }}
+          </el-radio>
+        </el-radio-group>
+      </el-form-item>
+      <el-form-item label="所在地区">
+        <!-- TODO 联动select -->
+        {{ form.area ? form.province + '/' + form.city + '/' + form.area : '' }}
+      </el-form-item>
+      <el-form-item label="详细地址" prop="type">
+        <el-input v-model="form.address" placeholder="请输入详细地址" />
+      </el-form-item>
+      <el-form-item label="机构logo">
+        <!-- TODO 图片上传组件 -->
+        <upload v-model="form.logo" params="prefix=/kindergraten" />
+      </el-form-item>
+      <el-form-item label="门店图片">
+        <!-- TODO 图片上传组件 -->
+        <upload v-model="form.frontDoor" params="prefix=/kindergraten" />
+      </el-form-item>
+      <el-form-item label="营业执照">
+        <!-- TODO 图片上传组件 -->
+        <upload v-model="form.businessLicense" params="prefix=/kindergraten" />
+      </el-form-item>
+      <el-form-item label="证照号码" prop="idCardNumber">
+        <el-input v-model="form.idCardNumber" placeholder="请输入证照号码" />
+      </el-form-item>
+      <el-form-item label="办公电话" prop="phonenumber">
+        <el-input v-model="form.phonenumber" placeholder="请输入办公电话" />
+      </el-form-item>
+      <el-form-item label="场景介绍" prop="brief">
+        <el-input
+          v-model="form.brief"
+          type="textarea"
+          :rows="2"
+          placeholder="请输入场景介绍"
+        />
+      </el-form-item>
+      <el-form-item label="申请人姓名" prop="realName">
+        <el-input v-model="form.realName" placeholder="请输入申请人姓名" />
+      </el-form-item>
+      <el-form-item label="手机号" prop="personPhonenumber">
+        <el-input v-model="form.personPhonenumber" placeholder="请输入手机号" />
+      </el-form-item>
+      <el-form-item label="半身照">
+        <!-- TODO 图片上传组件 -->
+        <upload v-model="form.bodyPhoto" params="prefix=/kindergraten" />
+      </el-form-item>
+      <el-form-item label="证件正面">
+        <!-- TODO 图片上传组件 -->
+        <upload v-model="form.idCardFront" params="prefix=/kindergraten" />
+      </el-form-item>
+      <el-form-item label="证件背面">
+        <!-- TODO 图片上传组件 -->
+        <upload v-model="form.idCardBack" params="prefix=/kindergraten" />
+      </el-form-item>
+      <el-form-item label="状态" prop="isShow">
+        <el-radio-group v-model="form.isShow">
+          <el-radio :label="true">显示</el-radio>
+          <el-radio :label="false">隐藏</el-radio>
+        </el-radio-group>
+      </el-form-item>
+    </el-form>
+    <span slot="footer" class="dialog-footer">
+      <el-button @click="modal = false">取消</el-button>
+      <el-button type="primary" @click="handleConfirm">确定</el-button>
+    </span>
+  </el-dialog>
+</template>
+
+<script>
+import SCENETYPE from '@/const/sceneType';
+import { getItem, saveItem } from '@/api/scene';
+
+export default {
+  name: 'SceneItemModal',
+
+  props: {
+    id: {
+      type: String,
+      default: ''
+    }
+  },
+
+  data() {
+    return {
+      title: '场景详情',
+      modal: true,
+
+      TypeOptions: SCENETYPE,
+
+      form: {
+        name: '',
+        address: '',
+        idCardNumber: '',
+        phonenumber: '',
+        brief: '',
+        realName: '',
+        personPhonenumber: '',
+        type: '',
+        // TODO 未对接接口字段
+        province: '广东',
+        city: '中山',
+        area: '大涌',
+        logo: [],
+        frontDoor: [],
+        businessLicense: [],
+        bodyPhoto: [],
+        idCardFront: [],
+        idCardBack: [],
+
+        isShow: false
+      },
+      rules: {
+        name: [
+          { required: true, message: '请输入机构名称', trigger: 'change' }
+        ],
+        address: [
+          { required: true, message: '请输入详细地址', trigger: 'change' }
+        ],
+        idCardNumber: [
+          { required: true, message: '请输入证照号码', trigger: 'change' }
+        ],
+        phonenumber: [
+          { required: true, message: '请输入办公电话', trigger: 'change' }
+        ],
+        brief: [
+          { required: true, message: '请输入场景介绍', trigger: 'change' }
+        ],
+        realName: [
+          { required: true, message: '请输入申请人姓名', trigger: 'change' }
+        ],
+        personPhonenumber: [
+          { required: true, message: '请输入手机号', trigger: 'change' }
+        ],
+        type: [
+          { required: true, message: '请输入机构类型', trigger: 'change' }
+        ],
+        logo: [
+          {
+            type: 'array',
+            required: true,
+            message: '请上传图片',
+            trigger: 'change'
+          }
+        ],
+        frontDoor: [
+          {
+            type: 'array',
+            required: true,
+            message: '请上传图片',
+            trigger: 'change'
+          }
+        ],
+        businessLicense: [
+          {
+            type: 'array',
+            required: true,
+            message: '请上传图片',
+            trigger: 'change'
+          }
+        ],
+        bodyPhoto: [
+          {
+            type: 'array',
+            required: true,
+            message: '请上传图片',
+            trigger: 'change'
+          }
+        ],
+        idCardFront: [
+          {
+            type: 'array',
+            required: true,
+            message: '请上传图片',
+            trigger: 'change'
+          }
+        ],
+        idCardBack: [
+          {
+            type: 'array',
+            required: true,
+            message: '请上传图片',
+            trigger: 'change'
+          }
+        ]
+      }
+    };
+  },
+
+  watch: {
+    id: {
+      handler(id) {
+        id && this.loadData();
+      },
+      immediate: true
+    }
+  },
+
+  mounted() {},
+
+  methods: {
+    async loadData() {
+      const { success, data, msg } = await getItem({
+        id: this.id
+      });
+      if (success) {
+        let result = data;
+        result.logo = [
+          {
+            url: data.logo
+          }
+        ];
+        result.frontDoor = [
+          {
+            url: data.frontDoor
+          }
+        ];
+        result.businessLicense = [
+          {
+            url: data.businessLicense
+          }
+        ];
+        result.bodyPhoto = [
+          {
+            url: data.bodyPhoto
+          }
+        ];
+        result.idCardFront = [
+          {
+            url: data.idCardFront
+          }
+        ];
+        result.idCardBack = [
+          {
+            url: data.idCardBack
+          }
+        ];
+        this.form = result;
+      }
+    },
+
+    handleConfirm() {
+      this.$refs.form.validate(async valid => {
+        if (valid) {
+          let params = Object.assign({}, this.form);
+          params.logo = this.form.logo[0].url;
+          params.frontDoor = this.form.frontDoor[0].url;
+          params.businessLicense = this.form.businessLicense[0].url;
+          params.bodyPhoto = this.form.bodyPhoto[0].url;
+          params.idCardFront = this.form.idCardFront[0].url;
+          params.idCardBack = this.form.idCardBack[0].url;
+
+          if (this.id) params.id = this.id;
+          const { success, msg } = await saveItem(params);
+          if (success) {
+            this.$success('保存成功!');
+            this.modal = false;
+            this.$g_emit('scene_reload');
+          }
+        }
+      });
+    }
+  }
+};
+</script>
+
+<style lang="scss" scoped>
+.pre-img {
+  height: 80px;
+}
+</style>

+ 3 - 1
src/views/sceneManagement/sceneList/toolbar.vue

@@ -4,6 +4,7 @@
 
 <script>
 import TYPE from '@/const/type';
+import SCENETYPE from '@/const/sceneType';
 
 export default {
   name: 'sceneListToolbar',
@@ -31,7 +32,8 @@ export default {
         {
           type: 'select',
           name: 'type',
-          label: '机构类型'
+          label: '机构类型',
+          options: SCENETYPE
         },
         {
           type: 'text',

+ 20 - 2
src/views/sceneManagement/sceneVerify/index.vue

@@ -44,12 +44,30 @@ export default {
         {
           key: 'logo',
           name: 'Logo',
-          width: '120'
+          width: '120',
+          render: (h, { row }) =>
+            h('image', {
+              style: {
+                width: '120px',
+                height: '90px'
+              },
+              attrs: {
+                src: row.logo
+              },
+              on: {
+                click: () =>
+                  this.$AdvanceViewImageModal({
+                    items: [{ src: row.logo }]
+                  })
+              }
+            })
         },
         {
           key: 'region',
           name: '所在地区',
-          minWidth: '180'
+          minWidth: '180',
+          render: (h, { row }) =>
+            h('span', `${row.province}/${row.city}/${row.area}`)
         },
         {
           key: 'type',

+ 27 - 7
src/views/sceneManagement/sceneVerify/modal/ItemModal.vue

@@ -2,7 +2,7 @@
   <el-dialog
     :title="title"
     :visible.sync="modal"
-    width="500px"
+    width="80%"
     :close-on-click-modal="false"
     @close="
       res => {
@@ -70,12 +70,32 @@
           "
         />
       </el-form-item>
-      <el-form-item label="审核状态">
-        <el-radio-group
-          v-if="auditStatus !== 1"
-          v-model="form.auditStatus"
-          prop="auditStatus"
-        >
+      <el-form-item label="证件正面"
+        ><img
+          :src="form.idCardFront"
+          class="pre-img"
+          @click="
+            () =>
+              this.$AdvanceViewImageModal({
+                items: [{ src: form.idCardFront }]
+              })
+          "
+        />
+      </el-form-item>
+      <el-form-item label="证件背面"
+        ><img
+          :src="form.idCardBack"
+          class="pre-img"
+          @click="
+            () =>
+              this.$AdvanceViewImageModal({
+                items: [{ src: form.idCardBack }]
+              })
+          "
+        />
+      </el-form-item>
+      <el-form-item label="审核状态" prop="auditStatus">
+        <el-radio-group v-if="auditStatus !== 1" v-model="form.auditStatus">
           <el-radio :label="1">通过</el-radio>
           <el-radio :label="-1">不通过</el-radio>
         </el-radio-group>

+ 3 - 1
src/views/sceneManagement/sceneVerify/toolbar.vue

@@ -4,6 +4,7 @@
 
 <script>
 import TYPE from '@/const/type';
+import SCENETYPE from '@/const/sceneType';
 
 export default {
   name: 'SceneVerifyToolbar',
@@ -31,7 +32,8 @@ export default {
         {
           type: 'select',
           name: 'type',
-          label: '机构类型'
+          label: '机构类型',
+          options: SCENETYPE
         },
         {
           type: 'text',