guhongwei324 1 mese fa
parent
commit
e8e3262254

BIN
public/inwater1.png


BIN
public/mess1.png


BIN
public/mess10.png


BIN
public/mess2.png


BIN
public/mess3.png


BIN
public/mess4.png


BIN
public/mess5.png


BIN
public/mess6.png


BIN
public/mess7.png


BIN
public/mess8.png


BIN
public/mess9.png


BIN
public/noData.png


BIN
public/poll1.png


BIN
public/popu1.png


BIN
public/water1.png


+ 1 - 1
src/views/win/introduceParts/fengmaoIndex.vue

@@ -71,7 +71,7 @@ const list = ref([
                   }
 
                   .title {
-                        padding: 22px 10px;
+                        padding: 16px 5px;
                         text-align: center;
 
                         color: rgb(25, 25, 26);

+ 1 - 1
src/views/win/inwaterIndex.vue

@@ -48,7 +48,7 @@ import footIndex from '../../components/windows/footIndex.vue'
       .bigImage {
             height: 480px;
             overflow: hidden;
-            background-image: url('/mess0.png');
+            background-image: url('/inwater1.png');
             background-repeat: no-repeat;
             background-size: 100% 100%;
       }

+ 1 - 1
src/views/win/messParts/commessIndex.vue

@@ -85,7 +85,7 @@ const list = ref<any[]>([
       }
 
       .title {
-        padding: 18px 0;
+        padding: 5px 0;
         text-align: center;
         color: rgb(25, 25, 26);
         font-family: '黑体';

+ 70 - 7
src/views/win/popularwillIndex.vue

@@ -1,18 +1,81 @@
 <template>
-      <el-row class="popularwillIndex animate__animated animate__backInRight">
-            <el-col :span="24" class="menusInfo">
-                  <menusIndex />
-            </el-col>
+      <el-row class="inwater animate__animated animate__backInRight">
+            <el-col :span="24" class="bigImage"></el-col>
             <el-col :span="24" class="info">
-                  民意征集
+                  <el-col :span="24" class="menus">
+                        <menusIndex />
+                  </el-col>
+                  <el-col :span="24" class="bottom">
+                        <el-col :span="24" class="zero top">
+                              <top-index :info="{ title: '民意征集', enTitle: 'poll' }" />
+                        </el-col>
+                        <el-col :span="24" class="zero">
+                              <form-index />
+                        </el-col>
+                        <el-col :span="24" class="foot">
+                              <foot-index />
+                        </el-col>
+                  </el-col>
             </el-col>
       </el-row>
 
 </template>
 
 <script setup lang="ts">
-defineOptions({ name: 'popularwillIndex' })
+defineOptions({ name: 'introduceIndex' })
 /* 菜单 */
 import menusIndex from '../../components/windows/menusIndex.vue'
+
+/* 顶部信息 */
+import topIndex from '../../components/windows/topIndex.vue'
+
+/* 民意征集 */
+import formIndex from './popularwillParts/formIndex.vue'
+
+/* 底部信息 */
+import footIndex from '../../components/windows/footIndex.vue'
 </script>
-<style scoped lang="scss"></style>
+<style scoped lang="scss">
+.inwater {
+      position: relative;
+
+      .bigImage {
+            height: 480px;
+            overflow: hidden;
+            background-image: url('/popu1.png');
+            background-repeat: no-repeat;
+            background-size: 100% 100%;
+      }
+
+      .info {
+            position: absolute;
+            top: 0;
+            width: 100%;
+            height: 100vh;
+            overflow: hidden;
+
+            .menus {
+                  height: 66px;
+                  overflow: hidden;
+            }
+
+            .bottom {
+                  height: calc(100vh - 66px);
+                  overflow-y: auto;
+                  margin: 0 auto;
+
+
+                  .zero {
+                        margin: 0 0 40px 0;
+
+                  }
+
+                  .top {
+                        padding: 0 17%;
+                  }
+
+            }
+      }
+
+}
+</style>

+ 240 - 0
src/views/win/popularwillParts/formIndex.vue

@@ -0,0 +1,240 @@
+<template>
+      <el-row class="main animate__animated animate__backInLeft">
+            <el-col :span="24" class="info">
+                  <el-col :span="24" class="tab">
+                        <el-col :span="8" :class="['list', item.id == tabActive ? 'tabActive' : '']"
+                              v-for="(item, index) in tabList" :key="index" @click="tabChange(item)">
+                              <span>{{ item.title }}</span>
+                              <span></span>
+                        </el-col>
+                  </el-col>
+                  <el-col :span="24" class="infoForm">
+                        <el-col :span="24" class="form" v-if="tabActive == '1'">
+                              <el-col :span="24" class="formMess">
+                                    <el-form ref="formRef" :model="form" :rules="rules" label-width="auto"
+                                          label-position="top">
+                                          <el-form-item label="问题类型" prop="type">
+                                                <el-radio-group v-model="form.type" size="large">
+                                                      <el-radio-button label="投诉反馈" value="1" />
+                                                      <el-radio-button label="意见建议" value="2" />
+                                                      <el-radio-button label="咨询反馈" value="3" />
+                                                </el-radio-group>
+                                          </el-form-item>
+                                          <el-row :gutter="20">
+                                                <el-col :span="12">
+                                                      <el-form-item label="姓名" prop="name">
+                                                            <el-input v-model="form.name" placeholder="请输入姓名" />
+                                                      </el-form-item>
+                                                      <el-form-item label="电话" prop="mobile">
+                                                            <el-input v-model="form.mobile" placeholder="请输入电话" />
+                                                      </el-form-item>
+                                                      <el-form-item label="邮箱" prop="email">
+                                                            <el-input v-model="form.email" placeholder="请输入电子邮箱" />
+                                                      </el-form-item>
+                                                </el-col>
+                                                <el-col :span="12">
+                                                      <el-form-item label="地址" prop="address">
+                                                            <el-row :gutter="20" class="addressStyle">
+                                                                  <el-col :span="12">
+                                                                        <el-input v-model="form.address"
+                                                                              placeholder="街或路" />
+                                                                  </el-col>
+                                                                  <el-col :span="12">
+                                                                        <el-input v-model="form.address2"
+                                                                              placeholder="小区" />
+                                                                  </el-col>
+                                                            </el-row>
+                                                            <el-row :gutter="20">
+                                                                  <el-col :span="8">
+                                                                        <el-input v-model="form.address3"
+                                                                              placeholder="楼栋" />
+                                                                  </el-col>
+                                                                  <el-col :span="8">
+                                                                        <el-input v-model="form.address4"
+                                                                              placeholder="单元" />
+                                                                  </el-col>
+                                                                  <el-col :span="8">
+                                                                        <el-input v-model="form.address5"
+                                                                              placeholder="室" />
+                                                                  </el-col>
+                                                            </el-row>
+                                                      </el-form-item>
+                                                      <el-form-item>
+                                                            <el-input v-model="textarea" type="textarea" rows="4"
+                                                                  placeholder="点击粘贴地址" />
+                                                      </el-form-item>
+                                                </el-col>
+                                          </el-row>
+                                          <el-form-item label="反馈详情" prop="content">
+                                                <el-input v-model="form.content" placeholder="请输入反馈详情" type="textarea"
+                                                      :autosize="{ minRows: 6, maxRows: 8 }" />
+                                          </el-form-item>
+                                          <el-form-item>
+                                                <el-button type="primary" @click="toSubmit">提交反馈</el-button>
+                                                <el-button type="primary" plain @click="toRest">清空内容</el-button>
+                                          </el-form-item>
+                                    </el-form>
+                              </el-col>
+                        </el-col>
+                        <el-col :span="24" class="list" v-else-if="tabActive == '2'">
+                              <suggestion-index />
+                        </el-col>
+                        <el-col :span="24" class="back" v-else-if="tabActive == '3'">
+                              <respond-index />
+                        </el-col>
+                  </el-col>
+
+            </el-col>
+      </el-row>
+</template>
+
+<script setup lang="ts">
+
+import { ref, reactive } from "vue";
+
+/* 意见记录 */
+import suggestionIndex from './suggestionIndex.vue'
+/* 热点回应 */
+import respondIndex from './respondIndex.vue'
+
+
+const tabList = ref([
+      {
+            id: '1',
+            title: '投诉与建议'
+      },
+      {
+            id: '2',
+            title: '投诉与建议记录'
+      },
+      {
+            id: '3',
+            title: '热点回应'
+      }
+])
+const tabActive = ref('1')
+
+const form = ref({ type: '1', name: '', mobile: '', email: '', address: '', content: '', address2: '', address3: '', address4: '', address5: '' })
+
+const rules = reactive({
+      type: [{ required: true, message: '请选择问题类型', trigger: 'changge' },],
+      name: [{ required: true, message: '请输入姓名', trigger: 'blur' },],
+      mobile: [{ required: true, message: '请输入电话', trigger: 'blur' },],
+      email: [{ required: true, message: '请输入电子邮箱 ', trigger: 'blur' },],
+      address: [{ required: true, message: '请输入地址 ', trigger: 'blur' },],
+      content: [{ required: true, message: '请输入反馈详情 ', trigger: 'blur' },],
+})
+
+const textarea = ref('')
+
+const formRef = ref()
+
+/* 选择 */
+const tabChange = (event: { id: string }) => {
+      tabActive.value = event.id
+}
+
+/* 提交 */
+const toSubmit = async () => {
+      await formRef.value.validate((valid: boolean, fields: object) => {
+            if (valid) {
+                  console.log('submit!')
+            } else {
+                  console.log('error submit!', fields)
+            }
+      })
+}
+/* 清空内容 */
+const toRest = () => {
+      resetForm()
+}
+
+/* 重置表单 */
+const resetForm = () => {
+      form.value = {
+            type: '1', name: '', mobile: '', email: '', address: '', content: '', address2: '', address3: '', address4: '', address5: ''
+      }
+}
+
+</script>
+<style scoped lang="scss">
+.main {
+      padding: 0 17%;
+
+      .info {
+            .tab {
+                  display: flex;
+                  align-items: center;
+                  justify-content: center;
+                  padding: 0 15%;
+                  margin: 0 0 40px 0;
+
+                  .list {
+                        display: flex;
+                        flex-direction: column;
+                        align-items: center;
+                        justify-content: center;
+                        text-align: center;
+
+                        span {
+                              display: inline-block;
+                        }
+
+                        span:first-child {
+                              color: rgb(102, 102, 102);
+                              font-family: '黑体';
+                              font-size: 18px;
+                              font-weight: 500;
+                              line-height: 26px;
+                              letter-spacing: 0px;
+                              margin: 0 0 10px 0;
+                        }
+
+                        span:last-child {
+                              width: 180px;
+                              border-bottom: 4px solid transparent;
+                        }
+                  }
+
+                  .list:hover {
+                        cursor: pointer;
+
+                        span:first-child {
+                              color: rgb(25, 25, 26);
+                        }
+
+                        span:last-child {
+                              border-bottom: 4px solid rgb(21, 134, 255);
+                        }
+                  }
+
+                  .tabActive {
+                        span:first-child {
+                              color: rgb(25, 25, 26);
+                        }
+
+                        span:last-child {
+                              border-bottom: 4px solid rgb(21, 134, 255);
+                        }
+                  }
+            }
+
+            .infoForm {
+                  .form {
+                        padding: 0 10%;
+
+                        .formMess {
+                              border-radius: 10px;
+                              background: rgba(238, 250, 255, 0.5);
+                              padding: 40px 70px;
+                        }
+
+                        .addressStyle {
+                              margin: 0 0 10px 0;
+                        }
+
+                  }
+            }
+      }
+}
+</style>

+ 145 - 0
src/views/win/popularwillParts/respondIndex.vue

@@ -0,0 +1,145 @@
+<template>
+      <el-col :span="24" class="info">
+            <el-col :span="24" class="infoList">
+                  <el-row :gutter="40" class="list" v-for="(item, index) in list" :key="index">
+                        <el-col :span="8" class="imgs">
+                              <el-image class="images" :src="item.url" />
+                        </el-col>
+                        <el-col :span="16" class="mess">
+                              <el-col :span="24" class="title">
+                                    {{ item.title }}
+                              </el-col>
+                              <el-col :span="24" class="brief">
+                                    {{ item.brief }}
+                              </el-col>
+                              <el-col :span="24" class="other">
+                                    <span>发布时间:<span>{{ item.pubilcDate }}</span></span>
+                                    <span>作者:<span>{{ item.person }}</span></span>
+                                    <span>来源:<span>{{ item.orgin }}</span></span>
+                                    <span>浏览次数:<span>{{ item.showNum }}</span></span>
+                              </el-col>
+                        </el-col>
+                  </el-row>
+            </el-col>
+            <el-col :span="24" class="foot">
+                  <pages-index :total="total" @search="toSearch" />
+
+            </el-col>
+      </el-col>
+</template>
+
+<script setup lang="ts">
+
+import { ref } from "vue";
+/* 分页 */
+import pagesIndex from '../../../components/windows/pagesIndex.vue'
+
+
+/* 列表 */
+const list = ref([
+      {
+            id: '1',
+            title: '为什么停水?',
+            brief: '停水会影响用户正常的生产生活,是广大用户十分关切的问题。那么哪些原因会造成停水呢? 水从水源地到用户终端,除了要经过取水泵站、水厂净化处理、区域加压站加压、 二次供水泵站加压等过程,还要经过源水管线、 市政供水管网、二次供水管网等不同尺寸的管道长距离',
+            pubilcDate: '2024-12-12 12:12:12',
+            person: '作者',
+            orgin: '本站编辑',
+            showNum: '2',
+            url: '/poll1.png'
+      },
+      {
+            id: '1',
+            title: '为什么停水?',
+            brief: '停水会影响用户正常的生产生活,是广大用户十分关切的问题。那么哪些原因会造成停水呢? 水从水源地到用户终端,除了要经过取水泵站、水厂净化处理、区域加压站加压、 二次供水泵站加压等过程,还要经过源水管线、 市政供水管网、二次供水管网等不同尺寸的管道长距离',
+            pubilcDate: '2024-12-12 12:12:12',
+            person: '作者',
+            orgin: '本站编辑',
+            showNum: '2',
+            url: '/poll1.png'
+
+      }
+])
+const total = ref(0)
+
+
+/* 查询列表 */
+const toSearch = ({ skip = 0, limit = 10, ...info } = {}) => {
+      console.log(skip, limit);
+      console.log(info);
+}
+
+</script>
+<style scoped lang="scss">
+.info {
+      .infoList {
+            .list {
+                  margin: 0 0 20px 0;
+
+                  .imgs {
+                        height: 230px;
+                        border-radius: 5px;
+
+                        .images {
+                              width: 100%;
+                              height: 230px;
+                              border-radius: 5px;
+
+                        }
+                  }
+
+                  .mess {
+
+                        .title {
+                              color: rgb(25, 25, 26);
+                              font-family: '黑体';
+                              font-size: 24px;
+                              font-weight: 500;
+                              line-height: 35px;
+                              letter-spacing: 0px;
+                              margin: 0 0 30px 0;
+                        }
+
+                        .brief {
+                              color: rgb(102, 102, 102);
+                              font-family: '黑体';
+                              font-size: 18px;
+                              font-weight: 400;
+                              line-height: 32px;
+                              letter-spacing: 0px;
+
+                              margin: 0 0 30px 0;
+
+
+                              overflow: hidden;
+                              text-overflow: ellipsis;
+                              -webkit-line-clamp: 3;
+                              word-break: break-all;
+                              display: -webkit-box;
+                              -webkit-box-orient: vertical;
+                        }
+
+                        .other {
+
+
+                              span {
+                                    display: inline-block;
+                                    margin: 0 10px 0 0;
+
+                                    font-family: '黑体';
+                                    font-size: 18px;
+                                    font-weight: 400;
+                                    line-height: 32px;
+                                    letter-spacing: 0px;
+                                    color: #666666;
+
+                                    span {
+                                          color: #000000;
+
+                                    }
+                              }
+                        }
+                  }
+            }
+      }
+}
+</style>

+ 44 - 0
src/views/win/popularwillParts/suggestionIndex.vue

@@ -0,0 +1,44 @@
+<template>
+      <el-table :data="list" :border="true" :show-overflow-tooltip="true">
+            <el-table-column prop="type" label="问题分类" align="center" min-width="100" />
+            <el-table-column prop="name" label="用户名称" align="center" min-width="100" />
+            <el-table-column prop="reposn" label="所在区域" align="center" min-width="100" />
+            <el-table-column prop="address" label="地址" align="center" min-width="100" />
+            <el-table-column prop="pubilcDate" label="发布时间" align="center" min-width="100" />
+            <el-table-column prop="handleData" label="处理时间" align="center" min-width="100" />
+            <el-table-column prop="status" label="处理状态" align="center" min-width="100" />
+            <template #empty>
+                  <el-image class="noData" :src="noData"></el-image>
+                  <p>暂无数据</p>
+            </template>
+      </el-table>
+      <pages-index :total="total" @search="toSearch" />
+</template>
+
+<script setup lang="ts">
+
+import { ref } from "vue";
+/* 分页 */
+import pagesIndex from '../../../components/windows/pagesIndex.vue'
+
+const noData = ref('/noData.png')
+
+/* 列表 */
+const list = ref([])
+const total = ref(0)
+
+
+/* 查询列表 */
+const toSearch = ({ skip = 0, limit = 10, ...info } = {}) => {
+      console.log(skip, limit);
+      console.log(info);
+}
+
+</script>
+<style scoped lang="scss">
+.noData {
+      width: 300px;
+      height: 200px;
+      margin: 40px 0 0 0;
+}
+</style>