index.vue 13.5 KB
Newer Older
yanghao's avatar
yanghao committed
1 2 3 4 5
<template>
  <div class="app-container">

    <!-- 搜索工作栏 -->
    <el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" label-width="68px">
dcy's avatar
dcy committed
6 7
      <el-form-item :label="$t('订单号')" prop="orderCode">
        <el-input v-model="queryParams.orderCode" :placeholder="$t('请输入订单号')" clearable @keyup.enter.native="handleQuery"/>
yanghao's avatar
yanghao committed
8
      </el-form-item>
dcy's avatar
dcy committed
9 10
      <el-form-item :label="$t('咨询类型')" prop="type">
        <el-select v-model="queryParams.type" :placeholder="$t('请选择咨询类型')" clearable size="small">
yanghao's avatar
yanghao committed
11 12 13 14
          <el-option v-for="dict in this.getDictDatas(DICT_TYPE.ECW_MESSAGE_LEAVE_TYPE)"
                       :key="dict.value" :label="dict.label" :value="dict.value"/>
        </el-select>
      </el-form-item>
dcy's avatar
dcy committed
15 16
      <el-form-item :label="$t('状态')" prop="status">
        <el-select v-model="queryParams.status" :placeholder="$t('请选择状态')" clearable size="small">
yanghao's avatar
yanghao committed
17 18 19 20 21
          <el-option v-for="dict in this.getDictDatas(DICT_TYPE.ECW_MESSAGE_LEAVE_STATUS)"
                       :key="dict.value" :label="dict.label" :value="dict.value"/>
        </el-select>
      </el-form-item>

dcy's avatar
dcy committed
22
      <el-form-item :label="$t('创建时间')">
yanghao's avatar
yanghao committed
23
        <el-date-picker v-model="dateRangeCreateTime" style="width: 240px" value-format="yyyy-MM-dd"
dcy's avatar
dcy committed
24
                        type="daterange" range-separator="-" :start-placeholder="$t('开始日期')" :end-placeholder="$t('结束日期')" />
yanghao's avatar
yanghao committed
25 26
      </el-form-item>
      <el-form-item>
dcy's avatar
dcy committed
27 28
        <el-button type="primary" icon="el-icon-search" @click="handleQuery">{{$t('搜索')}}</el-button>
        <el-button icon="el-icon-refresh" @click="resetQuery">{{$t('重置')}}</el-button>
yanghao's avatar
yanghao committed
29 30 31 32 33 34 35
      </el-form-item>
    </el-form>

    <!-- 操作工具栏 -->
    <el-row :gutter="10" class="mb8">
      <el-col :span="1.5">
        <el-button type="primary" plain icon="el-icon-plus" size="mini" @click="handleAdd"
dcy's avatar
dcy committed
36
                   v-hasPermi="['ecw:message-leave:create']">{{$t('新增')}}</el-button>
yanghao's avatar
yanghao committed
37 38 39
      </el-col>
      <el-col :span="1.5">
        <el-button type="warning" plain icon="el-icon-download" size="mini" @click="handleExport" :loading="exportLoading"
dcy's avatar
dcy committed
40
                   v-hasPermi="['ecw:message-leave:export']">{{$t('导出')}}</el-button>
yanghao's avatar
yanghao committed
41 42 43 44 45 46
      </el-col>
      <right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
    </el-row>

    <!-- 列表 -->
    <el-table v-loading="loading" :data="list">
dcy's avatar
dcy committed
47 48 49 50 51 52
      <el-table-column :label="$t('主键')" align="center" prop="id" />
      <el-table-column :label="$t('姓名')" align="center" prop="name" />
      <el-table-column :label="$t('联系方式')" align="center" prop="phone" />
      <el-table-column :label="$t('订单号')" align="center" prop="orderCode" />
      <el-table-column :label="$t('留言内容')" align="center" prop="content" />
      <el-table-column :label="$t('咨询类型')" align="center" prop="type">
yanghao's avatar
yanghao committed
53 54 55 56
        <template slot-scope="scope">
          <dict-tag :type="DICT_TYPE.ECW_MESSAGE_LEAVE_TYPE" :value="scope.row.type" />
        </template>
      </el-table-column>
dcy's avatar
dcy committed
57
      <el-table-column :label="$t('状态')" align="center" prop="status">
yanghao's avatar
yanghao committed
58 59 60 61
        <template slot-scope="scope">
          <dict-tag :type="DICT_TYPE.ECW_MESSAGE_LEAVE_STATUS" :value="scope.row.status" />
        </template>
      </el-table-column>
dcy's avatar
dcy committed
62
      <el-table-column :label="$t('咨询时间')" align="center" prop="createTime" width="180">
yanghao's avatar
yanghao committed
63 64 65 66
        <template slot-scope="scope">
          <span>{{ parseTime(scope.row.createTime) }}</span>
        </template>
      </el-table-column>
dcy's avatar
dcy committed
67
      <el-table-column :label="$t('操作')" align="center" class-name="small-padding fixed-width">
yanghao's avatar
yanghao committed
68 69
        <template slot-scope="scope">
          <el-button size="mini" type="text" icon="el-icon-edit" @click="handleUpdate(scope.row)"
dcy's avatar
dcy committed
70
                     v-hasPermi="['ecw:message-leave:update']">{{$t('查看')}}</el-button>
yanghao's avatar
yanghao committed
71
          <el-button size="mini" type="text" icon="el-icon-delete" @click="handleDelete(scope.row)"
dcy's avatar
dcy committed
72
                     v-hasPermi="['ecw:message-leave:delete']">{{$t('删除')}}</el-button>
yanghao's avatar
yanghao committed
73 74 75 76 77 78 79 80 81 82
        </template>
      </el-table-column>
    </el-table>
    <!-- 分页组件 -->
    <pagination v-show="total > 0" :total="total" :page.sync="queryParams.pageNo" :limit.sync="queryParams.pageSize"
                @pagination="getList"/>

    <!-- 对话框(添加 / 修改) -->
    <el-dialog :title="title" :visible.sync="open" width="500px" append-to-body>
      <el-form ref="form" :model="form" :rules="rules" label-width="80px">
dcy's avatar
dcy committed
83 84
        <el-form-item :label="$t('姓名')" prop="name">
          <el-input v-model="form.name" :placeholder="$t('请输入姓名')" :disabled="form.id ? true : false"/>
yanghao's avatar
yanghao committed
85
        </el-form-item>
dcy's avatar
dcy committed
86 87
        <el-form-item :label="$t('联系方式')" prop="phone">
          <el-input v-model="form.phone" :placeholder="$t('请输入联系方式')" :disabled="form.id ? true : false"/>
yanghao's avatar
yanghao committed
88
        </el-form-item>
dcy's avatar
dcy committed
89 90
        <el-form-item :label="$t('订单号')" prop="orderCode">
          <el-input v-model="form.orderCode" :placeholder="$t('请输入订单号')" :disabled="form.id ? true : false"/>
yanghao's avatar
yanghao committed
91
        </el-form-item>
dcy's avatar
dcy committed
92 93
        <el-form-item :label="$t('咨询类型')" prop="type">
          <el-select v-model="form.type" :placeholder="$t('请选择咨询类型')" :disabled="form.id ? true : false">
yanghao's avatar
yanghao committed
94 95 96 97 98
            <el-option v-for="dict in this.getDictDatas(DICT_TYPE.ECW_MESSAGE_LEAVE_TYPE)"
                       :key="dict.value" :label="dict.label" :value="parseInt(dict.value)" />
          </el-select>
        </el-form-item>

dcy's avatar
dcy committed
99
        <el-form-item :label="$t('留言内容')">
yanghao's avatar
yanghao committed
100 101 102 103
          <el-input
            v-model="form.content" :disabled="form.id ? true : false"
            type="textarea"
            :rows="4"
dcy's avatar
dcy committed
104
            :placeholder="$t('请输入留言内容')">
yanghao's avatar
yanghao committed
105 106 107
          </el-input>
        </el-form-item>

dcy's avatar
dcy committed
108
        <el-form-item :label="$t('回复内容')" :hidden="form.id ? false : true">
yanghao's avatar
yanghao committed
109 110 111 112
          <el-input
            v-model="form.replyContent"
            type="textarea"
            :rows="4"
dcy's avatar
dcy committed
113
            :placeholder="$t('请输入留言内容')">
yanghao's avatar
yanghao committed
114 115 116 117
          </el-input>
        </el-form-item>
      </el-form>
      <div slot="footer" class="dialog-footer">
dcy's avatar
dcy committed
118 119
        <el-button type="primary" @click="submitForm">{{$t('确 定')}}</el-button>
        <el-button @click="cancel">{{$t('取 消')}}</el-button>
yanghao's avatar
yanghao committed
120 121
      </div>
    </el-dialog>
122 123 124
    <!-- 留言详情-->
    <el-dialog title="留言详情" :visible.sync="leavingShow" width="500px" append-to-body>
      <el-row class="el-row-leaving" :gutter="10">
dcy's avatar
dcy committed
125
        <el-col :span="4">{{$t('姓名')}}:</el-col><el-col :span="12">{{messageVal.name ? messageVal.name : ''}}</el-col>
126 127
      </el-row>
      <el-row class="el-row-leaving" :gutter="10">
dcy's avatar
dcy committed
128
        <el-col :span="4">{{$t('联系方式')}}:</el-col><el-col :span="12">{{messageVal.phone}}</el-col>
129 130
      </el-row>
      <el-row class="el-row-leaving" :gutter="10">
dcy's avatar
dcy committed
131
        <el-col :span="4">{{$t('当前状态')}}:</el-col><el-col :span="12">{{messageVal.status === 1 ? '待回复' : '已回复'}}</el-col>
132 133
      </el-row>
      <el-row class="el-row-leaving" :gutter="10">
dcy's avatar
dcy committed
134
        <el-col :span="4">{{$t('订单编号')}}:</el-col><el-col :span="12">{{messageVal.orderCode}}</el-col>
135 136
      </el-row>
      <el-row class="el-row-leaving" :gutter="10">
dcy's avatar
dcy committed
137
        <el-col :span="4">{{$t('留言类型')}}:</el-col><el-col :span="12">{{messageVal.type === 1 ? '咨询':'建议'}}</el-col>
138 139 140
      </el-row>
       <div style="background-color:#cccccc;padding:10px 20px;">
         <el-row class="el-row-leaving" :gutter="10">
dcy's avatar
dcy committed
141
           <el-col :span="4">{{messageVal.type === 1 ? $t('咨询'):$t('建议')}}{{$t('时间')}}:</el-col><el-col :span="12">{{parseTime(messageVal.createTime)}}</el-col>
142 143
         </el-row>
         <el-row class="el-row-leaving" :gutter="10">
dcy's avatar
dcy committed
144
           <el-col :span="4">{{messageVal.type === 1 ? $t('咨询'):$t('建议')}}{{$t('内容')}}:</el-col><el-col :span="12">{{messageVal.content}}</el-col>
145 146 147 148
         </el-row>
       </div>
      <div style="background-color:#f6f6f6;padding:10px 20px;margin-top: 20px;">
        <el-row v-if="messageVal.status === 2" class="el-row-leaving" :gutter="10">
dcy's avatar
dcy committed
149
          <el-col :span="4">{{$t('回复人')}}:</el-col><el-col :span="12">{{messageVal.replyUserId}}</el-col>
150 151
        </el-row>
        <el-row v-if="messageVal.status === 2" class="el-row-leaving" :gutter="10">
dcy's avatar
dcy committed
152
          <el-col :span="4">{{$t('回复时间')}}:</el-col><el-col :span="12">{{parseTime(messageVal.replyTime)}}</el-col>
153 154
        </el-row>
        <el-row class="el-row-leaving" :gutter="10">
dcy's avatar
dcy committed
155
          <el-col :span="4">{{$t('回复内容')}}:</el-col><el-col :span="12"><el-input type="textarea" v-model="messageVal.replyContent" :disabled="messageVal.status === 2"></el-input></el-col><el-col :span="4"><el-button v-if="messageVal.status === 1" @click="replyFn">{{$t('回复')}}</el-button></el-col>
156 157 158
        </el-row>
      </div>
      <div slot="footer" style="text-align: center;">
dcy's avatar
dcy committed
159
        <el-button type="primary" @click="leavingShow = false;">{{$t('关 闭')}}</el-button>
160 161
      </div>
    </el-dialog>
yanghao's avatar
yanghao committed
162 163 164 165 166 167 168 169 170 171 172 173 174
  </div>
</template>

<script>
import { createMessageLeave, replyMessageLeave, updateReply, deleteMessageLeave, getMessageLeave, getMessageLeavePage, exportMessageLeaveExcel } from "@/api/ecw/messageLeave"
import { getDictDatas, DICT_TYPE } from '@/utils/dict'
export default {
  name: "MessageLeave",
  components: {

  },
  data() {
    return {
175
        leavingShow:false,//留言详请弹窗
yanghao's avatar
yanghao committed
176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202
      // 遮罩层
      loading: true,
      // 导出遮罩层
      exportLoading: false,
      // 显示搜索条件
      showSearch: true,
      // 总条数
      total: 0,
      // 留言列表
      list: [],
      // 弹出层标题
      title: "",
      // 是否显示弹出层
      open: false,
      dateRangeCreateTime: [],
      // 查询参数
      queryParams: {
        pageNo: 1,
        pageSize: 10,
        orderCode: null,
        content: null,
        type: null,
        status: null,
        replyUserId: null,
      },
      // 表单参数
      form: {},
203 204 205 206 207 208 209 210 211 212 213 214 215
      messageVal:{
        content: "",
        createTime: "",
        id: undefined,
        name: "",
        orderCode: "",
        phone: "",
        replyContent: "",
        replyTime: "",
        replyUserId: undefined,
        status: 0,
        type: 0
      },
yanghao's avatar
yanghao committed
216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273
      // 表单校验
      rules: {
      }
    };
  },
  created() {
    this.getList();
  },
  methods: {
    /** 查询列表 */
    getList() {
      this.loading = true;
      // 处理查询参数
      let params = {...this.queryParams};
      this.addBeginAndEndTime(params, this.dateRangeCreateTime, 'createTime');
      // 执行查询
      getMessageLeavePage(params).then(response => {
        this.list = response.data.list;
        this.total = response.data.total;
        this.loading = false;
      });
    },
    /** 取消按钮 */
    cancel() {
      this.open = false;
      this.reset();
    },
    /** 表单重置 */
    reset() {
      this.form = {
        id: undefined,
        name: undefined,
        phone: undefined,
        orderCode: undefined,
        content: undefined,
        type: undefined,
        status: undefined,
        replyUserId: undefined,
        replyContent: undefined,
        replyTime: undefined,
      };
      this.resetForm("form");
    },
    /** 搜索按钮操作 */
    handleQuery() {
      this.queryParams.pageNo = 1;
      this.getList();
    },
    /** 重置按钮操作 */
    resetQuery() {
      this.dateRangeCreateTime = [];
      this.resetForm("queryForm");
      this.handleQuery();
    },
    /** 新增按钮操作 */
    handleAdd() {
      this.reset();
      this.open = true;
dcy's avatar
dcy committed
274
      this.title = this.$t('添加留言');
yanghao's avatar
yanghao committed
275 276 277 278 279 280 281
    },
    /** 修改按钮操作 */
    handleUpdate(row) {
      this.reset();
      const id = row.id;
      getMessageLeave(id).then(response => {
        this.form = response.data;
282 283
        this.messageVal = response.data;
        this.leavingShow = true;
yanghao's avatar
yanghao committed
284 285 286 287 288 289 290 291 292 293
      });
    },
    /** 提交按钮 */
    submitForm() {
      this.$refs["form"].validate(valid => {
        if (!valid) {
          return;
        }
        // 添加的提交
        createMessageLeave(this.form).then(response => {
dcy's avatar
dcy committed
294
          this.$modal.msgSuccess(this.$t('新增成功'));
yanghao's avatar
yanghao committed
295 296 297 298 299 300 301 302
          this.open = false;
          this.getList();
        });
      });
    },
    /** 删除按钮操作 */
    handleDelete(row) {
      const id = row.id;
dcy's avatar
dcy committed
303
      this.$modal.confirm(this.$t('是否确认删除留言编号为"') + id + this.$t('"的数据项?')).then(function() {
yanghao's avatar
yanghao committed
304 305 306
          return deleteMessageLeave(id);
        }).then(() => {
          this.getList();
dcy's avatar
dcy committed
307
          this.$modal.msgSuccess(this.$t('删除成功'));
yanghao's avatar
yanghao committed
308 309 310 311 312 313 314 315 316 317
        }).catch(() => {});
    },
    /** 导出按钮操作 */
    handleExport() {
      // 处理查询参数
      let params = {...this.queryParams};
      params.pageNo = undefined;
      params.pageSize = undefined;
      this.addBeginAndEndTime(params, this.dateRangeCreateTime, 'createTime');
      // 执行导出
dcy's avatar
dcy committed
318
      this.$modal.confirm(this.$t('是否确认导出所有留言数据项?')).then(() => {
yanghao's avatar
yanghao committed
319 320 321 322 323 324
          this.exportLoading = true;
          return exportMessageLeaveExcel(params);
        }).then(response => {
          this.$download.excel(response, '${table.classComment}.xls');
          this.exportLoading = false;
        }).catch(() => {});
325 326 327
    },
    replyFn(){
      replyMessageLeave({id:this.messageVal.id, replyContent:this.messageVal.replyContent,}).then(response => {
dcy's avatar
dcy committed
328
        this.$modal.msgSuccess(this.$t('修改成功'));
329 330 331
       this.leavingShow = false;
        this.getList();
      });
yanghao's avatar
yanghao committed
332 333 334 335
    }
  }
};
</script>
336 337 338 339 340
<style lang="scss" scoped>
 .el-row-leaving{
 margin-bottom: 10px;
}
</style>