linwe
2024-05-15 c92000780bc0929dd21642e236cdadf02bb5f8bc
E呼即办2
2 files added
908 ■■■■■ changed files
src/api/task/eCallEventTwo.js 49 ●●●●● patch | view | raw | blame | history
src/views/cGovernance/taskECallTwo.vue 859 ●●●●● patch | view | raw | blame | history
src/api/task/eCallEventTwo.js
New file
@@ -0,0 +1,49 @@
import request from '@/router/axios';
export const getList = (current, size, params) => {
  return request({
    url: '/api/blade-eCallEventTwo/eCallEventTwo/page',
    method: 'get',
    params: {
      ...params,
      current,
      size,
    }
  })
}
export const getDetail = (id) => {
  return request({
    url: '/api/blade-eCallEventTwo/eCallEventTwo/detail',
    method: 'get',
    params: {
      id
    }
  })
}
export const remove = (ids) => {
  return request({
    url: '/api/blade-eCallEventTwo/eCallEventTwo/remove',
    method: 'post',
    params: {
      ids,
    }
  })
}
export const add = (row) => {
  return request({
    url: '/api/blade-eCallEventTwo/eCallEventTwo/submit',
    method: 'post',
    data: row
  })
}
export const update = (row) => {
  return request({
    url: '/api/blade-eCallEventTwo/eCallEventTwo/submit',
    method: 'post',
    data: row
  })
}
src/views/cGovernance/taskECallTwo.vue
New file
@@ -0,0 +1,859 @@
<!-- e 呼即办 -->
<template>
  <basic-container>
    <avue-crud :option="option" :table-loading="loading" :data="data" :page.sync="page" ref="crud" @row-del="rowDel"
      v-model="form" :permission="permissionList" @row-update="rowUpdate" @row-save="rowSave" :before-open="beforeOpen"
      @search-change="searchChange" @search-reset="searchReset" @selection-change="selectionChange"
      @current-change="currentChange" @size-change="sizeChange" @refresh-change="refreshChange" @on-load="onLoad">
      <template slot="menuLeft">
        <el-button size="small" icon="el-icon-delete" plain v-if="permission.article_delete" @click="handleDelete">删
          除
        </el-button>
      </template>
      <!-- <template slot="menu" slot-scope="{row, size, index}">
        <el-button size="small" type="text" icon="el-icon-share" plain @click="share(row)">分享
        </el-button>
      </template> -->
      <template slot-scope="{row, size}" slot="phone">
        <el-button :size="size" type="text" @click="showStringDispose(row, 'phoneflag')"
          v-text="textDispose(row, 'phoneflag', 'phone')">
        </el-button>
      </template>
    </avue-crud>
    <el-dialog title="分享" append-to-body :visible.sync="sharePopup" center @close="popupClose">
      <div style="display: flex; justify-content: center; ">
        <el-radio-group v-model="circleRadio">
          <el-radio :label="0">邻里圈</el-radio>
          <el-radio :label="1">协同圈</el-radio>
        </el-radio-group>
      </div>
      <span slot="footer" class="dialog-footer">
        <el-button @click="sharePopup = false">取 消</el-button>
        <el-button type="primary" @click="shareCircle()">确 定</el-button>
      </span>
    </el-dialog>
  </basic-container>
</template>
<script>
  import {
    getList,
    remove,
    update,
    add,
    getDetail
  } from "@/api/task/eCallEventTwo"
  import {
    add as circleAdd,
  } from "@/api/circle/circle"
  import {
    getList as getHouseList,
    getDetatil as getHouseDetail
  } from "@/api/doorplateAddress/doorplateAddress.js"
  import {
    mapGetters
  } from "vuex"
  import website from '@/config/website'
  //   import AvueMap from "avue-plugin-map";
  export default {
    data() {
      //手机号格式校验
      let validatorPhone = function(rule, value, callback) {
        if (value) {
          if (!/^1[3456789]\d{9}$/.test(value)) {
            callback(new Error('手机号格式有误!'))
          } else {
            callback()
          }
        }
        callback()
      }
      return {
        form: {},
        query: {},
        loading: true,
        page: {
          pageSize: 10,
          currentPage: 1,
          total: 0,
        },
        datetime: "",
        selectionList: [],
        sharePopup: false,
        circleRadio: 0,
        shareCircleRow: {},
        option: {
          labelWidth: 96,
          // searchLabelWidth: 96,
          searchShow: true,
          searchMenuSpan: 3,
          menuWidth: 310,
          height: "auto",
          calcHeight: 54,
          dialogWidth: 950,
          tip: false,
          border: true,
          //stripe:true,
          index: true,
          viewBtn: true,
          selection: true,
          // excelBtn: true,
          dialogClickModal: false,
          column: [{
              label: "工单号",
              prop: "orderCode",
              span: 12,
              searchSpan: 4,
              width: 100,
              search: true,
              searchLabelWidth: 76,
              rules: [{
                required: true,
                message: "请输入工单号",
                trigger: "blur",
              }, ],
            },
            {
              width: 100,
              label: "诉求来源",
              prop: "issueOrigin",
              span: 12,
              searchSpan: 4,
              dataType: "number",
              type: "select",
              dicData: [{
                label: "热线",
                value: 0
              }, {
                label: "公安110",
                value: 1
              }, {
                label: "微信",
                value: 2
              }, {
                label: "微博",
                value: 3
              }],
              rules: [{
                required: true,
                message: "请选择诉求来源",
                trigger: "blur",
              }, ],
              // search: true,
            },
            {
              width: 156,
              overHidden: true,
              label: "诉求主题",
              addDisplay: false,
              editDisplay: false,
              viewDisplay: false,
              prop: "issueTitle",
              search: true,
              searchSpan: 4,
              rules: [{
                required: true,
                message: "请选择诉求主题",
                trigger: "blur",
              }],
            },
            {
              label: "诉求内容",
              parent: false,
              prop: "issueContent",
              search: false,
              rules: [{
                required: true,
                message: "请选择诉求内容",
                trigger: "blur",
              }, ],
            },
            {
              label: "诉求用户类别",
              prop: "applicantType",
              span: 12,
              searchSpan: 4,
              width: 100,
              labelWidth: 120,
              type: "select",
              dicData: [{
                label: "个人",
                value: 0
              }, {
                label: "企业",
                value: 1
              }],
              // hide: true,
              // search: true,
            },
            {
              width: 110,
              label: "诉求人姓名",
              prop: "applicantName",
              span: 12,
              searchSpan: 4,
              searchLabelWidth: 66,
              search: true,
              rules: [{
                required: false,
                message: "请输入诉求人姓名",
                trigger: "blur",
              }, ],
            },
            {
              width: 120,
              label: "诉求人性别",
              prop: "applicantGender",
              span: 12,
              searchSpan: 4,
              type: "select",
              dicData: [{
                label: "男",
                value: 0
              }, {
                label: "女",
                value: 1
              }],
              rules: [{
                  required: false,
                  message: "请输入诉求人性别",
                  trigger: "blur",
                },
                {
                  validator: validatorPhone,
                  trigger: 'blur'
                }
              ],
              slot: true
            },
            {
              label: "诉求人住址",
              prop: "applicantHomeaddr",
              overHidden: true,
              rules: [{
                required: true,
                message: "请输入诉求人住址",
                trigger: "blur",
              }, ],
            },
            {
              width: 100,
              label: "现场联系电话",
              prop: "applicantPhone",
              labelWidth: 120,
              // type: "date",
              // format: "yyyy-MM-dd",
              // valueFormat: "yyyy-MM-dd",
              rules: [{
                required: true,
                message: "请选择现场联系电话",
                trigger: "blur",
              }, ],
            },
            {
              label: "网格",
              prop: "applicantGrid",
              submitBtn: "保存",
              hide: true,
              // type: 'map',
              dataType: "string",
              // span: 24,
              // value: [117.966460, 28.431002, ""]
            },
            {
              width: 110,
              label: "诉求人行政区划",
              labelWidth: 120,
              prop: "applicantDistrict",
              // type: "upload",
              listType: "picture-card",
              dataType: "string",
              multiple: true,
              row: true,
              // span: 24,
            },
            {
              label: "事发地址",
              prop: "sceneAddr",
              // type: "textarea",
              submitBtn: "保存",
              hide: true,
              type: 'map',
              dataType: "string",
              span: 24,
              value: [117.966460, 28.431002, ""]
            },
            {
              label: "事发地址网格",
              prop: "sceneAddrGrid",
              labelWidth: 120,
              // type: "textarea",
              // hide: true,
              // span: 24,
            },
            {
              label: "事发所属行政区划",
              prop: "sceneDistrict",
              labelWidth: 130,
              // type: "textarea",
              hide: true,
              // span: 24,
            },
            {
              label: "事发场所",
              prop: "scenePlace",
              // type: "textarea",
              // hide: true,
              // span: 24,
            },
            // {
            //   label: "事发地点-经度",
            //   prop: "sceneGeoLat",
            //   type: "select",
            //   hide: true,
            // },
            // {
            //   label: "事发地点-维度",
            //   prop: "sceneGeoLng",
            //   type: "select",
            //   hide: true,
            // },
            {
              label: "诉求类别",
              prop: "issueType",
              type: "select",
              dicData: [{
                label: "咨询",
                value: 0
              }, {
                label: "投诉",
                value: 1
              }, {
                label: "求助",
                value: 2
              }, {
                label: "举报",
                value: 3
              }, {
                label: "建议",
                value: 4
              }],
              // hide: true,
            },
            {
              label: "归口类型",
              prop: "issueClazz",
              // type: "select",
              // hide: true,
            },
            {
              label: "紧急程度",
              prop: "issueLevel",
              type: "select",
              dicData: [{
                label: "一般",
                value: 0
              }, {
                label: "即办",
                value: 1
              }],
              // hide: true,
            },
            {
              label: "办理时限(分钟)",
              prop: "deadline",
              labelWidth: 130,
              // type: "select",
              // hide: true,
            },
            {
              label: "关联工单ID",
              prop: "linkOrders",
              // type: "select",
              // hide: true,
            },
            {
              label: "关联工单号",
              prop: "linkOrdersCode",
              // type: "select",
              // hide: true,
            },
            {
              label: "知识引用",
              prop: "wikiRef",
              // type: "select",
              // hide: true,
            },
            // {
            // label: "受理单位",
            // prop: "acptOrgCode",
            // type: "select",
            // hide: true,
            // },
            {
              label: "受理单位",
              prop: "acptOrgName",
              // type: "select",
              // hide: true,
            },
            {
              label: "处办方式",
              prop: "handleWay",
              type: "select",
              dicData: [{
                label: "方式一",
                value: 0
              }, {
                label: "方式二",
                value: 1
              }, {
                label: "方式三",
                value: 2
              }],
              // type: "select",
              // hide: true,
            },
            {
              label: "外部处办方式",
              prop: "externalHandleWay",
              labelWidth: 120,
              // type: "select",
              // hide: true,
            },
            {
              label: "直接答复内容",
              prop: "directFeed",
              labelWidth: 120,
              // type: "select",
              // hide: true,
            },
            {
              label: "直接答复人员",
              prop: "directFeedHandler",
              labelWidth: 120,
              // type: "select",
              // hide: true,
            },
            {
              label: "直接答复时间",
              prop: "directFeedTime",
              type: "date",
              format: "yyyy-MM-dd",
              valueFormat: "yyyy-MM-dd",
              labelWidth: 120,
              // type: "select",
              // hide: true,
            },
            {
              label: "工单附件",
              prop: "images",
              type: "upload",
              // listType: "picture-card",
              dataType: "string",
              multiple: true,
              action: "/api/blade-resource/oss/endpoint/put-file-attach",
              propsHttp: {
                res: "data",
                name: 'name',
                url: "link",
              },
              // hide: true,
            },
            {
              label: "工单状态",
              prop: "status",
              type: "select",
              dicData: [{
                label: "受理",
                value: 0
              }, {
                label: "处理中",
                value: 1
              }, {
                label: "已归档",
                value: 2
              }],
              // hide: true,
            },
            {
              label: "交办标签",
              prop: "tagApply",
              type: "select",
              dicData: [{
                label: "未交办",
                value: "N"
              }, {
                label: "已交办",
                value: "Y"
              }, {
                label: "已退回",
                value: "R"
              }],
              // hide: true,
            },
            {
              label: "已延期",
              prop: "tagDelay",
              type: "select",
              dicData: [{
                label: "否",
                value: "N"
              }, {
                label: "是",
                value: "Y"
              }],
              // hide: true,
            },
            {
              label: "已反馈",
              prop: "tagDoing",
              type: "select",
              dicData: [{
                label: "否",
                value: "N"
              }, {
                label: "是",
                value: "Y"
              }],
              // hide: true,
            },
            {
              label: "已答复",
              prop: "tagResp",
              type: "select",
              dicData: [{
                label: "否",
                value: "N"
              }, {
                label: "是",
                value: "Y"
              }],
            },
            {
              label: "已办结",
              prop: "tagDone",
              type: "select",
              dicData: [{
                label: "否",
                value: "N"
              }, {
                label: "是",
                value: "Y"
              }],
            },
            {
              label: "已回访",
              prop: "tagCheck",
              type: "select",
              dicData: [{
                label: "否",
                value: "N"
              }, {
                label: "是",
                value: "Y"
              }],
            },
            {
              label: "已电话回访",
              prop: "tagChkTel",
              type: "select",
              dicData: [{
                label: "否",
                value: "N"
              }, {
                label: "是",
                value: "Y"
              }],
            },
            {
              label: "核实/督办",
              prop: "tagRedo",
              type: "select",
              dicData: [{
                label: "否",
                value: "N"
              }, {
                label: "是",
                value: "Y"
              }],
            },
          ],
        },
        data: [],
      }
    },
    watch: {
      "form.location": {
        // form是表单或者表格绑定的数据集,v-model='form'
        handler(val) {
          if (typeof val == "string") {
            var arr = val.split(",")
            //经纬度替换
            this.form.lat = arr[1]
            this.form.lng = arr[0]
            this.form.address = arr[2]
          }
        },
        immediate: true,
      },
    },
    computed: {
      ...mapGetters(["permission", "userInfo"]),
      permissionList() {
        return {
          addBtn: this.vaildData(this.permission.eCallEvent_add, true),
          viewBtn: this.vaildData(this.permission.eCallEvent_view, true),
          delBtn: this.vaildData(this.permission.eCallEvent_delete, true),
          editBtn: this.vaildData(this.permission.eCallEvent_edit, true),
        }
      },
      ids() {
        let ids = []
        this.selectionList.forEach((ele) => {
          ids.push(ele.id)
        })
        return ids.join(",")
      },
      textDispose() {
        return (row, flag, type) => {
          if (row[flag] || row[type] == null) {
            return row[type]
          } else {
            if (type == 'principalIdCard') {
              return row[type].replace(/^(.{6})(?:\d+)(.{4})$/, "$1******$2")
            } else {
              return row[type].replace(/^(.{3})(?:\d+)(.{4})$/, "$1****$2")
            }
          }
        }
      }
    },
    methods: {
      showStringDispose(row, type) {
        row[type] = !row[type]
      },
      rowSave(row, done, loading) {
        // if (row.imageUrls.length > 0) {
        //   var urls = []
        //   var split = row.imageUrls.split(",")
        //   split.forEach(url => {
        //     var names = url.split("jczz/")
        //     urls.push(names[1])
        //   })
        //   row.imageUrls = urls.join(",")
        // }
        add(row).then(
          () => {
            this.onLoad(this.page)
            this.$message({
              type: "success",
              message: "操作成功!",
            })
            done()
          },
          (error) => {
            window.console.log(error)
            loading()
          }
        )
      },
      rowUpdate(row, index, done, loading) {
        if (row.imageUrls.length > 0) {
          var urls = []
          var split = row.imageUrls.split(",")
          split.forEach(url => {
            var names = url.split("jczz/")
            urls.push(names[1])
          })
          row.imageUrls = urls.join(",")
        }
        update(row).then(
          () => {
            this.onLoad(this.page)
            this.$message({
              type: "success",
              message: "操作成功!",
            })
            done()
          },
          (error) => {
            window.console.log(error)
            loading()
          }
        )
      },
      rowDel(row) {
        this.$confirm("确定将选择数据删除?", {
            confirmButtonText: "确定",
            cancelButtonText: "取消",
            type: "warning",
          })
          .then(() => {
            return remove(row.id)
          })
          .then(() => {
            this.onLoad(this.page)
            this.$message({
              type: "success",
              message: "操作成功!",
            })
          })
      },
      searchReset() {
        this.query = {}
        this.onLoad(this.page)
      },
      searchChange(params, done) {
        this.query = params
        this.page.currentPage = 1
        this.onLoad(this.page, params)
        done()
      },
      selectionChange(list) {
        this.selectionList = list
      },
      selectionClear() {
        this.selectionList = []
        this.$refs.crud.toggleSelection()
      },
      share(row) {
        console.table(row)
        this.shareCircleRow = row
        this.sharePopup = true
      },
      // 分享圈子
      shareCircle() {
        this.sharePopup = false
        let param = {}
        param.circleType = this.circleRadio
        param.houseCode = this.shareCircleRow.addressCode
        param.circleImages = this.shareCircleRow.imageUrls
        param.communityCode = this.shareCircleRow.communityCode
        param.circleText = this.shareCircleRow.remark
        param.evenType = 2
        param.eventId = this.shareCircleRow.id
        circleAdd(param).then(
          () => {
            this.onLoad(this.page)
            this.$message({
              type: "success",
              message: "操作成功!",
            })
            done()
          },
          (error) => {
            window.console.log(error)
            loading()
          }
        )
      },
      popupClose() {
        this.sharePopup = false
      },
      handleDelete() {
        if (this.selectionList.length === 0) {
          this.$message.warning("请选择至少一条数据")
          return
        }
        this.$confirm("确定将选择数据删除?", {
            confirmButtonText: "确定",
            cancelButtonText: "取消",
            type: "warning",
          })
          .then(() => {
            return remove(this.ids)
          })
          .then(() => {
            this.onLoad(this.page)
            this.$message({
              type: "success",
              message: "操作成功!",
            })
            this.$refs.crud.toggleSelection()
          })
      },
      beforeOpen(done, type) {
        if (["edit", "view"].includes(type)) {
          getDetail(this.form.id).then((res) => {
            this.form = res.data.data
            // if (this.form.imageUrls.length > 0) {
            //   var urls = []
            //   var names = this.form.imageUrls.split(",")
            //   names.forEach(name => {
            //     urls.push(website.minioUrl + name)
            //   })
            //   this.form.imageUrls = urls.join(",")
            // }
          })
        }
        // con
        done()
      },
      currentChange(currentPage) {
        this.page.currentPage = currentPage
      },
      sizeChange(pageSize) {
        this.page.pageSize = pageSize
      },
      refreshChange() {
        this.onLoad(this.page, this.query)
      },
      onLoad(page, params = {}) {
        const {
          dateTime
        } = this.query
        let values = {
          ...params,
        }
        if (dateTime) {
          values = {
            ...params,
            startTime: dateTime[0],
            endTime: dateTime[1],
            ...this.query,
          }
          values.dateTime = null
        }
        this.loading = true
        getList(page.currentPage, page.pageSize, values).then((res) => {
          const data = res.data.data
          this.page.total = data.total
          this.data = data.records
          this.data.forEach(item => {
            // this.$set(item, 'phoneflag', false)
            // if (item.imageUrls) {
            //   if (item.imageUrls.length > 0) {
            //     var urls = []
            //     var names = item.imageUrls.split(",")
            //     names.forEach(name => {
            //       urls.push(website.minioUrl + name)
            //     })
            //     item.imageUrls = urls.join(",")
            //   }
            // }
          })
          this.loading = false
          this.selectionClear()
        })
      }
    },
  }
</script>
<style>
  .avue-upload__icon {
    line-height: 6;
  }
</style>