index.vue 13.8 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
          <el-option v-for="dict in this.getDictDatas(DICT_TYPE.ECW_MESSAGE_LEAVE_TYPE)"
邓春圆's avatar
邓春圆 committed
12
                       :key="dict.value" :label="isChinese ? dict.label : dict.labelEn" :value="dict.value"/>
yanghao's avatar
yanghao committed
13 14
        </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
          <el-option v-for="dict in this.getDictDatas(DICT_TYPE.ECW_MESSAGE_LEAVE_STATUS)"
18
                       :key="dict.value" :label="isChinese ? dict.label : dict.labelEn" :value="dict.value"/>
yanghao's avatar
yanghao committed
19 20 21
        </el-select>
      </el-form-item>

dcy's avatar
dcy committed
22
      <el-form-item :label="$t('创建时间')">
23 24
        <el-date-picker v-model="dateRangeCreateTime" style="width: 240px" value-format="yyyy-MM-dd HH:mm:ss" label-format="yyyy-MM-dd HH:mm:ss"
                        type="datetimerange" 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
            <el-option v-for="dict in this.getDictDatas(DICT_TYPE.ECW_MESSAGE_LEAVE_TYPE)"
邓春圆's avatar
邓春圆 committed
95
                       :key="dict.value" :label="isChinese ? dict.label : dict.labelEn" :value="parseInt(dict.value)" />
yanghao's avatar
yanghao committed
96 97 98
          </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
    <!-- 留言详情-->
Marcus's avatar
Marcus committed
123
    <el-dialog :title="$t('留言详情')" :visible.sync="leavingShow" width="500px" append-to-body>
124
      <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">
邓春圆's avatar
邓春圆 committed
131
        <el-col :span="4">{{$t('当前状态')}}:</el-col><el-col :span="12">{{messageVal.status === 1 ? $t('待回复') : $t('已回复')}}</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">
邓春圆's avatar
邓春圆 committed
137
        <el-col :span="4">{{$t('留言类型')}}:</el-col><el-col :span="12">{{messageVal.type === 1 ? $t('咨询'):$t('建议')}}</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
  </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: {

邓春圆's avatar
邓春圆 committed
172 173 174 175 176
  },
  computed:{
    isChinese(){
      return this.$i18n.locale === 'zh_CN'
    },
yanghao's avatar
yanghao committed
177 178 179
  },
  data() {
    return {
180
        leavingShow:false,//留言详请弹窗
yanghao's avatar
yanghao committed
181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207
      // 遮罩层
      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: {},
208 209 210 211 212 213 214 215 216 217 218 219 220
      messageVal:{
        content: "",
        createTime: "",
        id: undefined,
        name: "",
        orderCode: "",
        phone: "",
        replyContent: "",
        replyTime: "",
        replyUserId: undefined,
        status: 0,
        type: 0
      },
yanghao's avatar
yanghao committed
221 222 223 224 225 226 227 228 229 230 231 232 233 234
      // 表单校验
      rules: {
      }
    };
  },
  created() {
    this.getList();
  },
  methods: {
    /** 查询列表 */
    getList() {
      this.loading = true;
      // 处理查询参数
      let params = {...this.queryParams};
235
      this.addBeginAndEndTime(params, this.dateRangeCreateTime, 'createTime',false);
yanghao's avatar
yanghao committed
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 274 275 276 277 278
      // 执行查询
      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
279
      this.title = this.$t('添加留言');
yanghao's avatar
yanghao committed
280 281 282 283 284 285 286
    },
    /** 修改按钮操作 */
    handleUpdate(row) {
      this.reset();
      const id = row.id;
      getMessageLeave(id).then(response => {
        this.form = response.data;
287 288
        this.messageVal = response.data;
        this.leavingShow = true;
yanghao's avatar
yanghao committed
289 290 291 292 293 294 295 296 297 298
      });
    },
    /** 提交按钮 */
    submitForm() {
      this.$refs["form"].validate(valid => {
        if (!valid) {
          return;
        }
        // 添加的提交
        createMessageLeave(this.form).then(response => {
dcy's avatar
dcy committed
299
          this.$modal.msgSuccess(this.$t('新增成功'));
yanghao's avatar
yanghao committed
300 301 302 303 304 305 306 307
          this.open = false;
          this.getList();
        });
      });
    },
    /** 删除按钮操作 */
    handleDelete(row) {
      const id = row.id;
dcy's avatar
dcy committed
308
      this.$modal.confirm(this.$t('是否确认删除留言编号为"') + id + this.$t('"的数据项?')).then(function() {
yanghao's avatar
yanghao committed
309 310 311
          return deleteMessageLeave(id);
        }).then(() => {
          this.getList();
dcy's avatar
dcy committed
312
          this.$modal.msgSuccess(this.$t('删除成功'));
yanghao's avatar
yanghao committed
313 314 315 316 317 318 319 320 321 322
        }).catch(() => {});
    },
    /** 导出按钮操作 */
    handleExport() {
      // 处理查询参数
      let params = {...this.queryParams};
      params.pageNo = undefined;
      params.pageSize = undefined;
      this.addBeginAndEndTime(params, this.dateRangeCreateTime, 'createTime');
      // 执行导出
dcy's avatar
dcy committed
323
      this.$modal.confirm(this.$t('是否确认导出所有留言数据项?')).then(() => {
yanghao's avatar
yanghao committed
324 325 326 327 328 329
          this.exportLoading = true;
          return exportMessageLeaveExcel(params);
        }).then(response => {
          this.$download.excel(response, '${table.classComment}.xls');
          this.exportLoading = false;
        }).catch(() => {});
330 331 332
    },
    replyFn(){
      replyMessageLeave({id:this.messageVal.id, replyContent:this.messageVal.replyContent,}).then(response => {
dcy's avatar
dcy committed
333
        this.$modal.msgSuccess(this.$t('修改成功'));
334 335 336
       this.leavingShow = false;
        this.getList();
      });
yanghao's avatar
yanghao committed
337 338 339 340
    }
  }
};
</script>
341 342 343 344 345
<style lang="scss" scoped>
 .el-row-leaving{
 margin-bottom: 10px;
}
</style>