浏览代码

Merge branch 'master' of http://git.cc-lotus.info/article-system/article-mobile

guhongwei 4 年之前
父节点
当前提交
80cb4ed3df

+ 5 - 0
src/router/index.js

@@ -35,6 +35,11 @@ const admin = [
     meta: { title: '咨询服务', isleftarrow: false },
     component: () => import('../views/adminCenter/adminServe.vue'),
   },
+  {
+    path: '/adminServe/edit',
+    meta: { title: '咨询服务', isleftarrow: false },
+    component: () => import('../views/adminCenter/serve/edit.vue'),
+  },
 ];
 const routes = [
   {

+ 37 - 7
src/views/adminCenter/adminServe.vue

@@ -3,10 +3,19 @@
     <el-row>
       <el-col :span="24" class="main">
         <el-col :span="24" class="top">
-          <top topType="2" :leftArrow="false"></top>
+          <van-nav-bar :title="pageTitle">
+            <template #right>
+              <van-icon name="add" size="28" @click="toAdd" />
+            </template>
+          </van-nav-bar>
         </el-col>
-        <el-col :span="24" class="info" :style="{ height: clientHeight + 'px' }">
-          咨询服务
+        <el-col :span="24" class="info" :style="{ height: clientHeight + 'px' }" ref="list">
+          <!-- <template v-for="(i, index) in list">
+            <item :key="`list${index}`" :data="i"></item>
+          </template> -->
+          <van-sticky container="list" :offset-top="clientHeight">
+            <page :total="total" :limit="limit"></page>
+          </van-sticky>
         </el-col>
         <el-col :span="24" class="foot">
           <foot></foot>
@@ -17,29 +26,50 @@
 </template>
 
 <script>
-import top from '@/layout/common/top.vue';
 import foot from '@/layout/common/foot.vue';
+import page from '@/layout/common/page.vue';
 import { mapState, createNamespacedHelpers } from 'vuex';
+const { mapActions: service } = createNamespacedHelpers('service');
 export default {
   name: 'adminServe',
   props: {},
   components: {
-    top,
+    page,
     foot,
   },
   data: function() {
     return {
       clientHeight: '',
+      list: [],
+      total: 0,
+      limit: '5',
     };
   },
-  created() {},
+  created() {
+    this.search();
+  },
   mounted() {
     let clientHeight = (document.documentElement.clientHeight || document.body.clientHeight) - 90;
     this.$set(this, `clientHeight`, clientHeight);
   },
-  methods: {},
+  methods: {
+    ...service(['query']),
+    async search({ skip = 0 } = {}) {
+      const res = await this.query({ skip, limit: this.limit });
+      if (this.$checkRes(res)) {
+        this.$set(this, `list`, res.data);
+        this.$set(this, `total`, res.total);
+      }
+    },
+    toAdd() {
+      this.$router.push('/adminServe/edit');
+    },
+  },
   computed: {
     ...mapState(['user']),
+    pageTitle() {
+      return this.$route.meta.title;
+    },
   },
   metaInfo() {
     return { title: this.$route.meta.title };

+ 0 - 1
src/views/adminCenter/refute/edit.vue

@@ -73,7 +73,6 @@ export default {
       } else {
         // user_id,origin需要加进数据中
         dup.user_id = this.user._id;
-        dup.origin = this.user.name;
         res = await this.create(dup);
       }
       if (this.$checkRes(res, '保存成功', res.errmsg || '保存失败')) {

+ 147 - 0
src/views/adminCenter/serve/edit.vue

@@ -0,0 +1,147 @@
+<template>
+  <div id="edit">
+    <el-row>
+      <el-col :span="24" class="main">
+        <el-col :span="24" class="top">
+          <van-nav-bar :title="pageTitle" left-text="取消" @click-left="toCancel" :right-text="id ? '修改' : '发表'" @click-right="toSubmit" />
+        </el-col>
+        <el-col :span="24">
+          <van-form ref="form" style="margin-top:30px">
+            <van-field v-model="form.title" name="title" label="标题" placeholder="请输入标题" :rules="[{ required: true, message: '请填写标题' }]" />
+            <van-field v-model="form.origin" name="origin" label="信息来源" placeholder="请输入信息来源" />
+            <van-cell title="服务联系人" />
+            <van-field v-model="form.contact.name" name="contact.name" label="联系人姓名" placeholder="请输入联系人姓名" />
+            <van-field v-model="form.contact.phone" name="contact.phone" label="联系电话" placeholder="请输入联系电话" />
+            <van-field v-model="form.contact.email" name="contact.email" label="电子邮箱" placeholder="请输入电子邮箱" />
+            <van-field v-model="form.contact.address" name="contact.address" label="联系地址" placeholder="请输入联系地址" />
+            <van-field name="type" label="文章类型">
+              <template #input>
+                <van-radio-group v-model="form.type" direction="horizontal">
+                  <van-radio name="0">文字</van-radio>
+                  <van-radio name="1">图文</van-radio>
+                  <van-radio name="2">科普视频</van-radio>
+                  <van-radio name="3">培训视频</van-radio>
+                </van-radio-group>
+              </template>
+            </van-field>
+            <van-field v-if="form.type === '0' || form.type === '1'" v-model="form.content" rows="2" autosize type="textarea" placeholder="请输入本文内容" />
+            <van-field v-if="form.type === '1'" name="uploader" label="图片上传">
+              <template #input>
+                <van-uploader :fileList="form.imgUrl" :after-read="file => toUpload(file, 'imgUrl')" @delete="file => toDelete(file, 'imgUrl')" />
+              </template>
+            </van-field>
+            <van-field v-if="form.type === '2' || form.type === '3'" name="uploader" label="文章视频">
+              <template #input>
+                <van-uploader
+                  :fileList="form.fileUrl"
+                  :max-count="1"
+                  :after-read="file => toUpload(file, 'fileUrl')"
+                  accept=".mp4,.flv,.avi,.rmvb,.wmv"
+                  @delete="file => toDelete(file, 'fileUrl')"
+                  max-size="11534336"
+                  @oversize="onOversize"
+                />
+              </template>
+            </van-field>
+          </van-form>
+        </el-col>
+        <el-col :span="24" class="foot">
+          <foot></foot>
+        </el-col>
+      </el-col>
+    </el-row>
+  </div>
+</template>
+
+<script>
+const moment = require('moment');
+const _ = require('lodash');
+import Toast from 'vant';
+import foot from '@/layout/common/foot.vue';
+import { mapState, createNamespacedHelpers } from 'vuex';
+const { mapActions: upload } = createNamespacedHelpers('upload');
+const { mapActions: service } = createNamespacedHelpers('service');
+export default {
+  name: 'edit',
+  props: {},
+  components: { foot },
+  data: function() {
+    return {
+      form: {
+        imgUrl: [],
+        fileUrl: [],
+        contact: {},
+      },
+    };
+  },
+  created() {
+    if (this.id) this.search();
+  },
+  methods: {
+    ...upload(['upload']),
+    ...service(['create', 'fetch', 'update']),
+    async search() {
+      const res = await this.fetch(this.id);
+      if (this.$checkRes(res, null, res.errmsg || '未找到指定数据')) {
+        this.$set(this, `form`, res.data);
+      }
+    },
+    async toSubmit() {
+      // type:0=>只有文字;1=>文字+图片;2/3=>只有上传视频
+      let dup = _.cloneDeep(this.form);
+      if (dup.type == '0') delete dup.imgUrl, delete dup.fileUrl;
+      if (dup.type == '1') delete dup.fileUrl;
+      if (dup.type == '2' || dup.type == '3') delete dup.content, delete dup.imgUrl;
+      let res;
+      if (this.id) {
+        dup.renew_time = moment().format('YYYY-MM-DD HH:mm:ss');
+        res = await this.update(dup);
+      } else {
+        // user_id,origin需要加进数据中
+        dup.user_id = this.user._id;
+        res = await this.create(dup);
+      }
+      if (this.$checkRes(res, '保存成功', res.errmsg || '保存失败')) {
+        this.toCancel();
+      }
+    },
+    toCancel() {
+      this.$router.push('/adminServe');
+    },
+    onOversize() {
+      Toast('文件大小不能超过 10MB');
+    },
+  },
+  computed: {
+    ...mapState(['user', 'menuParams']),
+    pageTitle() {
+      return `${this.$route.meta.title}`;
+    },
+    id() {
+      return this.$route.query.id;
+    },
+  },
+  metaInfo() {
+    return { title: this.$route.meta.title };
+  },
+};
+</script>
+
+<style lang="less" scoped>
+.main {
+  .top {
+    height: 40px;
+    overflow: hidden;
+    border-bottom: 1px solid #f1f1f1;
+  }
+  .info {
+    overflow-x: hidden;
+    overflow-y: auto;
+  }
+  .foot {
+    height: 50px;
+    overflow: hidden;
+    border-top: 1px solid #f1f1f1;
+  }
+}
+</style>

+ 6 - 1
src/views/adminCenter/topic/edit.vue

@@ -28,6 +28,8 @@
                   :after-read="file => toUpload(file, 'fileUrl')"
                   accept=".mp4,.flv,.avi,.rmvb,.wmv"
                   max-size="11534336"
+                  @delete="file => toDelete(file, 'fileUrl')"
+                  @oversize="onOversize"
                 />
               </template>
             </van-field>
@@ -47,6 +49,7 @@
 <script>
 const moment = require('moment');
 const _ = require('lodash');
+import Toast from 'vant';
 import foot from '@/layout/common/foot.vue';
 import { mapState, createNamespacedHelpers } from 'vuex';
 const { mapActions: upload } = createNamespacedHelpers('upload');
@@ -87,7 +90,6 @@ export default {
       } else {
         // user_id,origin需要加进数据中
         dup.user_id = this.user._id;
-        dup.origin = this.user.name;
         res = await this.create(dup);
       }
       if (this.$checkRes(res, '保存成功', res.errmsg || '保存失败')) {
@@ -108,6 +110,9 @@ export default {
     toCancel() {
       this.$router.push('/adminCommunity');
     },
+    onOversize() {
+      Toast('文件大小不能超过 10MB');
+    },
   },
   computed: {
     ...mapState(['user', 'menuParams']),

+ 0 - 1
src/views/adminCenter/topic/item.vue

@@ -33,7 +33,6 @@
 </template>
 
 <script>
-import { ImagePreview } from 'vant';
 import { mapState, createNamespacedHelpers } from 'vuex';
 export default {
   name: 'item',