染尘落幕 hai 8 meses
pai
achega
f0402ca064

+ 4 - 0
components.d.ts

@@ -8,6 +8,8 @@ export {}
 declare module 'vue' {
   export interface GlobalComponents {
     GridAddress: typeof import('./src/components/address/gridAddress/index.vue')['default']
+    RouterLink: typeof import('vue-router')['RouterLink']
+    RouterView: typeof import('vue-router')['RouterView']
     VanButton: typeof import('vant/es')['Button']
     VanCascader: typeof import('vant/es')['Cascader']
     VanCell: typeof import('vant/es')['Cell']
@@ -17,7 +19,9 @@ declare module 'vue' {
     VanForm: typeof import('vant/es')['Form']
     VanIcon: typeof import('vant/es')['Icon']
     VanList: typeof import('vant/es')['List']
+    VanNavBar: typeof import('vant/es')['NavBar']
     VanPopup: typeof import('vant/es')['Popup']
+    VanSearch: typeof import('vant/es')['Search']
     VanTab: typeof import('vant/es')['Tab']
     VanTabs: typeof import('vant/es')['Tabs']
     VanTag: typeof import('vant/es')['Tag']

+ 20 - 0
src/api/questionsApi/index.ts

@@ -0,0 +1,20 @@
+import { service } from '@/utils/request'
+import { getPageDataReq, getPageDataRes } from './types'
+import { ApiResponse, PageResp } from '../types'
+
+export enum reportAPi {
+  /** 问答库列表 */
+  GETPAGE_LIST = '/ystlbusinessservice/bTProblemBase/getPage',
+  /** 问答库详情 **/
+  GET_DETAIL = '/ystlbusinessservice/bTProblemBase/getById',
+}
+
+/** 问答库列表 */
+export const getPageData = (params: getPageDataReq) => {
+  return service.get<ApiResponse<PageResp<getPageDataRes>>>(reportAPi.GETPAGE_LIST, { params })
+}
+
+/** 问答库详情 */
+export const getDetail = (uuid: string) => {
+  return service.get<getPageDataRes>(reportAPi.GET_DETAIL, { params: { uuid } })
+}

+ 42 - 0
src/api/questionsApi/types.ts

@@ -0,0 +1,42 @@
+import { PageReq } from '../types'
+
+
+/** 问答库列表req */
+export interface getPageDataReq extends PageReq {
+
+  title?: string
+  typeId?: string
+  /**
+   * 当前页码
+   */
+  pageNumber?: number
+  /**
+   * 每 1 页的数据量
+   */
+  pageSize?: number
+  /**
+   * 发布人
+   */
+  creatorName?: string
+  /**
+   * 通知时间
+   */
+  releaseTime?: string
+}
+
+
+/** 问答库列表resp */
+export interface getPageDataRes {
+    content?: string;
+    createTime?: number;
+    createUser?: string;
+    creatorName?: string;
+    isDelete?: number;
+    releaseTime?: string;
+    title?: string;
+    typeId?: string;
+    typeName?: string;
+    updateTime?: number;
+    updateUser?: string;
+    uuid?: string;
+}

+ 1 - 1
src/config/proxy.ts

@@ -12,7 +12,7 @@ const proxy: Record<string, string | ProxyOptions> = {
     // target: 'http://192.168.3.72:8081/',
     target: 'http://10.68.191.169:9080',
     changeOrigin: true,
-    rewrite: (path) => path.replace(/^\/api/, ''),
+    // rewrite: (path) => path.replace(/^\/api/, 'api'),
   },
 }
 

+ 12 - 0
src/pages.json

@@ -36,6 +36,18 @@
           }
         },
         {
+          "path": "pages/questions/index",
+          "style": {
+            "navigationBarTitleText": "问答库"
+          }
+        },
+        {
+          "path": "pages/questions/detail",
+          "style": {
+            "navigationBarTitleText": "问答库详情"
+          }
+        },
+        {
           "path": "pages/inspectionResults/index",
           "style": {
             "navigationBarTitleText": "检查结果"

+ 3 - 2
src/pages/index/index.vue

@@ -2,8 +2,9 @@
 
 <template>
   <view class="container">
-    <navigator url="/subPages/pages/reportProblems/index" class="shadow">上报问题</navigator>
-    <navigator url="/subPages/pages/reportServer/index" class="shadow">上报服务</navigator>
+    <navigator url="/subPages/pages/reportProblems/index" class="shadow">事项咨询</navigator>
+    <navigator url="/subPages/pages/reportServer/index" class="shadow">服务事项</navigator>
+    <navigator url="/subPages/pages/questions/index" class="shadow">问答库</navigator>
     <!-- <navigator url="/subPages/pages/inspectionResults/index" class="shadow">店铺/企业检查结果</navigator>
     <navigator url="/subPages/pages/my/index" class="shadow">我的管理</navigator> -->
   </view>

+ 43 - 0
src/subPages/pages/questions/detail.vue

@@ -0,0 +1,43 @@
+<template>
+    <div>
+        <!-- 导航栏 -->
+        <van-nav-bar  title="问答库详情" left-text="返回" left-arrow @click-left="onClickLeft" />
+
+        <!-- 问答库详情 -->
+        <van-cell-group>
+            <van-cell title="标题" :value="questDetail?.title || '-'" />
+            <van-cell title="问题类型" :value="questDetail?.typeName || '-'" />
+            <van-cell title="发布人" :value="questDetail?.creatorName || '-'" />
+            <van-cell title="通知时间" :value="questDetail?.releaseTime || '-'" />
+            <van-cell title="内容:"/>
+        </van-cell-group>
+        <div style="margin: 10px; max-width: 100%; word-wrap: break-word; overflow-wrap: break-word;">
+            <div v-html="questDetail?.content || '-'"></div>
+        </div>
+
+
+    </div>
+</template>
+
+<script lang="ts" setup>
+import { getDetail } from '@/api/questionsApi';
+import { getPageDataRes } from '@/api/questionsApi/types';
+import { onLoad } from '@dcloudio/uni-app';
+import { ref } from 'vue';
+
+const onClickLeft = () => history.back();
+
+const questDetail = ref<getPageDataRes>()
+onLoad(async (option) => {
+  if (option && option.id) {
+    const { id } = option;
+    const { data } = await getDetail(id);
+    questDetail.value = data;
+  }
+})
+
+</script>
+
+<style lang="scss" scoped>
+
+</style>

+ 105 - 0
src/subPages/pages/questions/index.vue

@@ -0,0 +1,105 @@
+<template>
+    <div>
+        <!-- 导航栏 -->
+        <van-nav-bar  title="问答库" left-text="返回" left-arrow @click-left="onClickLeft" />
+        <!-- 搜索框 -->
+        <van-search v-model="title" :clearable="false" placeholder="请输入内容" @search="onSearch" />
+        <div v-if="isShow" style="padding: 10px;font-size: 14px;color: #979797;">暂无数据,是否进行 <i style="color: #2196F3;font-style: normal;" @click="handleGoKnowledge">自动咨询</i> ?</div>
+        <!-- 列表 -->
+        <van-list v-model:loading="loading" :finished="finished" finished-text="没有更多了" @load="onLoad">
+            <!-- <van-cell v-for="item in list" :key="item" :title="item" /> -->
+            <div class="vanlist-box" v-for="item in list" :key="item">
+                <div class="vanlist-box_top">
+                    <div class="title">{{ item.title }}</div>
+                    <van-button size="mini" type="primary" round @click = "handleGoDetail(item)">查看详情</van-button>
+                </div>
+                <van-tag type="primary">{{item.typeName}}</van-tag>
+            </div>
+        </van-list>
+
+    </div>
+</template>
+
+<script lang="ts" setup>
+import { onMounted, ref } from 'vue'
+import { getPageData } from '@/api/questionsApi'
+
+const onClickLeft = () => history.back();
+const isShow = ref(false);
+// 搜索
+const title = ref('');
+const onSearch = (val) => {
+    title.value = val;
+    pageInfo.value.pageNumber = 1;
+    list.value = [];
+    loading.value = true;
+    getPage();
+}
+// 列表
+const list = ref([]);
+const loading = ref(false);
+const finished = ref(false);
+
+const onLoad = () => {
+    getPage()
+};
+
+const pageInfo = ref({
+  pageNumber: 1,
+  pageSize: 10,
+})
+const getPage = async() => {
+    const { data } = await getPageData({
+        pageNumber: pageInfo.value.pageNumber,
+        pageSize: pageInfo.value.pageSize,
+        title: title.value,
+    })
+    list.value = list.value.concat(data.records)
+    pageInfo.value.pageNumber++
+    loading.value = false
+    finished.value = data.records.length < pageInfo.value.pageSize
+    if (data.records.length === 0 || !data.records) {
+        finished.value = true
+    }
+
+    if(list.value.length === 0){
+        isShow.value = true
+    }else{
+        isShow.value = false
+    }
+}
+
+/** 跳转问题详情 */
+const handleGoDetail = (item:any) => {
+  uni.navigateTo({
+    url: `/subPages/pages/questions/detail?id=${item.uuid}`,
+  })
+}
+
+const handleGoKnowledge = () => {
+  uni.navigateTo({
+    url: `/subPages/pages/reportProblems/index`,
+  })
+}
+
+</script>
+
+<style lang="scss" scoped>
+.vanlist-box{
+    padding: 10px;
+    margin: 10px;
+    border-bottom: 1px solid #9e9e9e42;
+    &_top{
+        display: flex;
+        justify-content: space-between;
+        align-items: center;
+        padding: 10px;
+        .title{
+            width: 80%;
+            white-space: nowrap;
+            overflow: hidden;
+            text-overflow: ellipsis;
+        }
+    }
+}
+</style>