From 47da3431e83b716ec9e82623b30a80be962e87c2 Mon Sep 17 00:00:00 2001
From: zhongrj <646384940@qq.com>
Date: Mon, 25 Mar 2024 11:22:06 +0800
Subject: [PATCH] Merge branch 'master' of http://s16s652780.51mypc.cn:49896/r/jczz_web

---
 src/views/propertySupervision/components/done.vue |  473 +++---
 src/views/property/components/todo.vue            |  742 +++++-----
 src/views/wel/index.vue                           |    9 
 vue.config.js                                     |    2 
 src/views/article/rotation.vue                    |   21 
 src/views/article/components/deitDiscussion.vue   |  957 +++++++------
 src/views/property/components/done.vue            |  473 +++---
 src/views/gzll/components/todo.vue                |   45 
 src/views/gzll/components/done.vue                |  473 +++---
 src/views/propertySupervision/components/todo.vue |  744 +++++-----
 10 files changed, 2,149 insertions(+), 1,790 deletions(-)

diff --git a/src/views/article/components/deitDiscussion.vue b/src/views/article/components/deitDiscussion.vue
index a706041..0489a82 100644
--- a/src/views/article/components/deitDiscussion.vue
+++ b/src/views/article/components/deitDiscussion.vue
@@ -45,59 +45,69 @@
 </template>
 
 <script>
-  import {
-    getListPd,
-    getDetailPd,
-    addPd,
-    updatePd,
-    removePd
-  } from "@/api/discuss/publicDiscuss"
+import {
+  getListPd,
+  getDetailPd,
+  addPd,
+  updatePd,
+  removePd
+} from "@/api/discuss/publicDiscuss"
 
-  import {
-    getPage
-  } from "@/api/discuss/userTopics"
-  import NProgress from 'nprogress'
-  import 'nprogress/nprogress.css'
-  import Qs from "qs"
-  import {
-    exportBlob
-  } from "@/api/common"
-  import {
-    getToken
-  } from '@/util/auth'
-  import {
-    downloadXls
-  } from "@/util/util"
-  import {
-    dateNow
-  } from "@/util/date"
-  import website from '@/config/website'
+import {
+  getPage
+} from "@/api/discuss/userTopics"
+import NProgress from 'nprogress'
+import 'nprogress/nprogress.css'
+import Qs from "qs"
+import {
+  exportBlob
+} from "@/api/common"
+import {
+  getToken
+} from '@/util/auth'
+import {
+  downloadXls
+} from "@/util/util"
+import {
+  dateNow
+} from "@/util/date"
+import website from '@/config/website'
 
 
-  import {
-    getLists,
-    getList,
-    getDetail,
-    add,
-    update,
-    remove
-  } from "@/api/discuss/topics"
+import {
+  getLists,
+  getList,
+  getDetail,
+  add,
+  update,
+  remove
+} from "@/api/discuss/topics"
 
-  export default {
-    data() {
-      return {
-        popupTableShow: false,
-        popupTableUserShow: false,
+export default {
+  data() {
+    return {
+      popupTableShow: false,
+      popupTableUserShow: false,
 
-        loading: true,
+      loading: true,
 
-        ontitle: '编辑议题',
-        editFlag: false,
-        disCussFromListClone: {},
-        disCussFrom: {
-          discussContent: '',
-          optionRange: 0,
-          sort: 1,
+      ontitle: '编辑议题',
+      editFlag: false,
+      disCussFromListClone: {},
+      disCussFrom: {
+        discussContent: '',
+        optionRange: 0,
+        sort: 1,
+        optionContent: '',
+        optionDetail: '',
+        number: '',
+        createTime: '',
+        updateTime: '',
+        deleteFlag: '',
+        articleId: '',
+        parentId: '',
+        level: '',
+        children: [{
           optionContent: '',
           optionDetail: '',
           number: '',
@@ -107,438 +117,511 @@
           articleId: '',
           parentId: '',
           level: '',
-          children: [{
-            optionContent: '',
-            optionDetail: '',
-            number: '',
-            createTime: '',
-            updateTime: '',
-            deleteFlag: '',
-            articleId: '',
-            parentId: '',
-            level: '',
-          }]
+        }]
+      },
+      optionDiscuss: {
+        emptyText: '取消',
+        column: [{
+          label: '议题',
+          prop: 'discussContent',
+          type: 'input',
+          row: true,
+          rules: [{
+            required: true,
+            message: '请输入议题',
+            trigger: 'blur'
+          }],
         },
-        optionDiscuss: {
-          emptyText: '取消',
-          column: [{
-              label: '议题',
-              prop: 'discussContent',
-              type: 'input',
-              row: true,
-              rules: [{
-                required: true,
-                message: '请输入议题',
-                trigger: 'blur'
-              }],
-            },
-            {
-              label: '选项范围',
-              prop: 'optionRange',
-              type: 'radio',
-              value: 0,
-              button: true,
-              row: true,
-              dicData: [{
-                label: '多选',
-                value: 1
-              }, {
-                label: '单选',
-                value: 0
-              }],
-              rules: [{
-                required: true,
-                message: '请选项范围',
-                trigger: 'blur'
-              }],
-            },
-            {
-              label: '最多选择数',
-              prop: 'optionNumber',
-              display: false,
-              min: 1,
-              type: 'number',
-              step: 1,
-              value: 1
-            },
-            {
-              label: '选项内容',
-              prop: 'children',
-              type: 'dynamic',
-              span: 24,
-              children: {
-                column: [{
-                  label: '选项标题',
-                  prop: 'optionContent',
-                  type: 'input',
-                  rules: [{
-                    required: true,
-                    message: '请输入选项标题',
-                    trigger: 'blur'
-                  }]
-                }, {
-                  label: '选项说明',
-                  prop: 'optionDetail',
-                  type: 'input',
-                }]
-              }
-            },
-          ]
+        {
+          label: '议题必填',
+          prop: 'mandatoryFlag',
+          type: 'radio',
+          value: 1,
+          button: true,
+          row: true,
+          dicData: [{
+            label: '否',
+            value: 1
+          }, {
+            label: '是',
+            value: 2
+          }],
+          rules: [{
+            required: true,
+            message: '请选择是否必填',
+            trigger: 'blur'
+          }],
+        },
+        {
+          label: '选项范围',
+          prop: 'optionRange',
+          type: 'radio',
+          value: 0,
+          button: true,
+          row: true,
+          dicData: [{
+            label: '单选',
+            value: 0
+          }, {
+            label: '多选',
+            value: 1
+          }],
+          rules: [{
+            required: true,
+            message: '请选项范围',
+            trigger: 'blur'
+          }],
         },
 
-        // 表单数据
-        form: {
-          optionRange: 0,
+        {
+          label: '最多可选',
+          prop: 'optionNumber',
+          display: false,
+          min: 1,
+          type: 'number',
+          step: 1,
+          value: 1,
+          rules: [{
+            required: true,
+            message: '请输入最多可选择数量',
+            trigger: 'blur'
+          }],
+          span: 4,
         },
-        data: [],
-        optionList: {
-          headerAlign: 'center',
-          align: 'center',
-          border: true,
-          addBtn: false,
-          editBtn: false,
-          delBtn: false,
-          defaultExpandAll: true,
-          rowKey: 'id',
-          rowParentKey: 'parentId',
-          column: [{
-              label: '标题',
-              prop: 'discussContent',
-            },
-            {
-              label: '选项内容',
+
+        {
+          width: 110,
+          labelWidth: 100,
+          label: "附件",
+          prop: "attachment",
+          type: "upload",
+          listType: "text",
+          action: "/api/blade-resource/oss/endpoint/put-pdfFile",
+          accept: "application/pdf",
+          propsHttp: {
+            res: "data",
+            name: 'name',
+            url: "link",
+          },
+          span: 24,
+        },
+        {
+          label: '选项内容',
+          prop: 'children',
+          type: 'dynamic',
+          span: 24,
+          children: {
+            column: [{
+              label: '选项标题',
               prop: 'optionContent',
-            }
-          ]
-        },
-
-        articleId: '',
-
-        userData: [],
-        userOption: {
-          labelWidth: 96,
-          searchLabelWidth: 96,
-          searchShow: true,
-          searchMenuSpan: 3,
-          // menuWidth: 500,
-          menu: false,
-          height: "auto",
-          calcHeight: 54,
-          dialogWidth: 950,
-          tip: false,
-          border: true,
-          //stripe:true,
-          index: true,
-          editBtn: false,
-          addBtn: false,
-          viewBtn: false,
-          selection: true,
-          delBtn: false,
-          excelBtn: true,
-          dialogClickModal: false,
-          header: true,
-          column: [{
-            label: '姓名',
-            prop: 'name',
-            searchSpan: 4,
-            search: true,
-            searchLabelWidth: 46,
-          }, {
-            label: '头像',
-            type: 'upload',
-            listType: "picture-img",
-            prop: 'avatar'
-          }, {
-            label: '手机',
-            prop: 'phone',
-            searchSpan: 4,
-            search: true,
-          }, {
-            label: '小区',
-            prop: 'aoiName'
-          }, {
-            label: '地址',
-            prop: 'addressName'
-          }, {
-            label: '签名',
-            type: 'upload',
-            listType: "picture-img",
-            prop: 'signaturePath'
-          }, {
-            label: '投票项',
-            prop: 'optionContent'
-          }, {
-            label: '时间',
-            prop: 'createTime'
-          }]
-        },
-        // 分页信息
-        userPage: {
-          pageSize: 10,
-          pageSizes: [10, 20, 30, 50, 100],
-          currentPage: 1,
-          total: 0
-        },
-        query: {},
-        type: '',
-        newData: {},
-        articleRange: {},
-        tops: {},
-      }
-    },
-
-    watch: {
-      'disCussFrom.optionRange': {
-        handler(newData) {
-          // console.log('** ** ** ** ** ** **', newData)
-          const column = this.findObject(this.optionDiscuss.column, "optionNumber")
-          if (newData == 1) {
-            column.display = true
-          } else {
-            column.display = false
+              type: 'input',
+              rules: [{
+                required: true,
+                message: '请输入选项标题',
+                trigger: 'blur'
+              }]
+            }, {
+              label: '选项说明',
+              prop: 'optionDetail',
+              type: 'input',
+            }]
           }
         },
+        ]
+      },
+
+      // 表单数据
+      form: {
+        optionRange: 0,
+      },
+      data: [],
+      optionList: {
+        headerAlign: 'center',
+        align: 'center',
+        border: true,
+        addBtn: false,
+        editBtn: false,
+        delBtn: false,
+        defaultExpandAll: true,
+        rowKey: 'id',
+        rowParentKey: 'parentId',
+        column: [{
+          label: '标题',
+          prop: 'discussContent',
+        },
+        {
+          label: '选项内容',
+          prop: 'optionContent',
+        }
+        ]
+      },
+
+      articleId: '',
+
+      userData: [],
+      userOption: {
+        labelWidth: 96,
+        searchLabelWidth: 96,
+        searchShow: true,
+        searchMenuSpan: 3,
+        // menuWidth: 500,
+        menu: false,
+        height: "auto",
+        calcHeight: 54,
+        dialogWidth: 950,
+        tip: false,
+        border: true,
+        //stripe:true,
+        index: true,
+        editBtn: false,
+        addBtn: false,
+        viewBtn: false,
+        selection: true,
+        delBtn: false,
+        excelBtn: true,
+        dialogClickModal: false,
+        header: true,
+        column: [{
+          label: '姓名',
+          prop: 'name',
+          searchSpan: 4,
+          search: true,
+          searchLabelWidth: 46,
+        }, {
+          label: '头像',
+          type: 'upload',
+          listType: "picture-img",
+          prop: 'avatar'
+        }, {
+          label: '手机',
+          prop: 'phone',
+          searchSpan: 4,
+          search: true,
+        }, {
+          label: '小区',
+          prop: 'aoiName'
+        }, {
+          label: '地址',
+          prop: 'addressName'
+        }, {
+          label: '签名',
+          type: 'upload',
+          listType: "picture-img",
+          prop: 'signaturePath'
+        }, {
+          label: '投票项',
+          prop: 'optionContent'
+        }, {
+          label: '时间',
+          prop: 'createTime'
+        }]
+      },
+      // 分页信息
+      userPage: {
+        pageSize: 10,
+        pageSizes: [10, 20, 30, 50, 100],
+        currentPage: 1,
+        total: 0
+      },
+      query: {},
+      type: '',
+      newData: {},
+      articleRange: {},
+      tops: {},
+    }
+  },
+
+  watch: {
+    'disCussFrom.optionRange': {
+      handler(newData) {
+        // console.log('** ** ** ** ** ** **', newData)
+        const column = this.findObject(this.optionDiscuss.column, "optionNumber")
+        if (newData == 1) {
+          column.display = true
+        } else {
+          column.display = false
+        }
       },
     },
+  },
 
-    methods: {
+  methods: {
 
-      handleExport() {
-        this.$confirm("是否导出投票人员数据?", "提示", {
-          confirmButtonText: "确定",
-          cancelButtonText: "取消",
-          type: "warning"
-        }).then(() => {
-          NProgress.start()
-          this.query = {}
-          this.query.districtId = this.newData.articleRange
-          if (this.type == 0) {
-            this.query.articleId = this.articleId
-          } else {
-            this.query.topicsId = this.tops.id
-          }
-          var data = {
-            ...this.query
-          }
-          data = Qs.stringify(data)
-          exportBlob(
-            `/api/blade-userTopics/userTopics/exportUser?${this.website.tokenHeader}=${getToken()}&` + data).then(
+    handleExport() {
+      this.$confirm("是否导出投票人员数据?", "提示", {
+        confirmButtonText: "确定",
+        cancelButtonText: "取消",
+        type: "warning"
+      }).then(() => {
+        NProgress.start()
+        this.query = {}
+        this.query.districtId = this.newData.articleRange
+        if (this.type == 0) {
+          this.query.articleId = this.articleId
+        } else {
+          this.query.topicsId = this.tops.id
+        }
+        var data = {
+          ...this.query
+        }
+        data = Qs.stringify(data)
+        exportBlob(
+          `/api/blade-userTopics/userTopics/exportUser?${this.website.tokenHeader}=${getToken()}&` + data).then(
             res => {
               downloadXls(res.data, `投票人员${dateNow()}.xlsx`)
               NProgress.done()
             })
-        })
-      },
+      })
+    },
 
-      userHandleClose() {
+    userHandleClose() {
 
-        this.popupTableUserShow = false
-      },
+      this.popupTableUserShow = false
+    },
 
-      searchReset() {
-        this.query.districtId = this.newData.articleRange
-        if (this.type == 0) {
-          this.query.articleId = this.articleId
-        } else {
-          this.query.topicsId = this.tops.id
-        }
-        this.userPage.currentPage = 1
-        this.getUserPage(this.userPage, this.query)
-      },
-
-      searchChange(params, done) {
-        this.query = params
-        this.query.districtId = this.newData.articleRange
-        if (this.type == 0) {
-          this.query.articleId = this.articleId
-        } else {
-          this.query.topicsId = this.tops.id
-        }
-        this.userPage.currentPage = 1
-        this.getUserPage(this.userPage, this.query)
-        done()
-      },
-
-      openUser(row, type = 0) {
-        this.type = type
-        this.popupTableUserShow = true
-        this.query = {}
-        this.articleId = row.id
-        let districtId
-        if (type == 0) {
-          this.newData = row
-          districtId = this.newData.articleRange
-          this.userParams = {
-            articleId: row.id,
-            districtId: districtId
-          }
-        } else {
-          districtId = this.newData.articleRange
-          this.tops = row
-          this.userParams = {
-            topicsId: row.id,
-            districtId: districtId
-          }
-        }
-        this.getUserPage(this.userPage, this.userParams)
-      },
-
-      initData(newData) {
-        this.editFlag = false
-        this.popupTableShow = true
-        this.articleId = newData.id
-        this.query.level = 1
+    searchReset() {
+      this.query.districtId = this.newData.articleRange
+      if (this.type == 0) {
         this.query.articleId = this.articleId
-        this.newData = newData
-        this.query.districtId = newData.articleRange
-        this.onLoad(this.userPage, this.query)
-      },
+      } else {
+        this.query.topicsId = this.tops.id
+      }
+      this.userPage.currentPage = 1
+      this.getUserPage(this.userPage, this.query)
+    },
 
-      handleClose() {
-        this.popupTableShow = false
-        this.disCussFrom = {}
-      },
+    searchChange(params, done) {
+      this.query = params
+      this.query.districtId = this.newData.articleRange
+      if (this.type == 0) {
+        this.query.articleId = this.articleId
+      } else {
+        this.query.topicsId = this.tops.id
+      }
+      this.userPage.currentPage = 1
+      this.getUserPage(this.userPage, this.query)
+      done()
+    },
 
-      handleSubmit(form, done) {
-        done()
-        form.articleId = this.articleId
-        if (this.disCussFromListClone.length > 0) {
-          this.disCussFromListClone.forEach(item => {
-            if (form.children.length > 0) {
-              let same = form.children.find(array => array.id === item.id)
-              if (!same) {
-                item.deleteFlag = 1
-                form.children.push(item)
-              }
-            }
-          })
+    openUser(row, type = 0) {
+      this.type = type
+      this.popupTableUserShow = true
+      this.query = {}
+      this.articleId = row.id
+      let districtId
+      if (type == 0) {
+        this.newData = row
+        districtId = this.newData.articleRange
+        this.userParams = {
+          articleId: row.id,
+          districtId: districtId
         }
-        add(form).then(
-          () => {
-            this.$message({
-              type: "success",
-              message: "操作成功!",
-            })
-            form = {}
-            this.editFlag = false
-            let params = {
-              level: 1,
-              articleId: this.articleId
+      } else {
+        districtId = this.newData.articleRange
+        this.tops = row
+        this.userParams = {
+          topicsId: row.id,
+          districtId: districtId
+        }
+      }
+      this.getUserPage(this.userPage, this.userParams)
+    },
+
+    initData(newData) {
+      console.log("======>",  newData);
+      this.editFlag = false
+      this.popupTableShow = true
+      this.articleId = newData.id
+      this.query.level = 1
+      this.query.articleId = this.articleId
+      this.newData = newData
+      this.query.districtId = newData.articleRange
+      this.onLoad(this.userPage, this.query)
+    },
+
+    handleClose() {
+      this.popupTableShow = false
+      this.disCussFrom = {}
+    },
+
+    handleSubmit(form, done) {
+      done()
+      form.articleId = this.articleId
+      console.log("form===>", form);
+
+
+      if (this.editFlag && Array.isArray(form.attachment)) {
+        if (form.attachment.length > 0) {
+          var urls = []
+          // var split = form.attachment.split(",")
+          form.attachment.forEach(url => {
+            var names = url.split("jczz/")
+            urls.push(names[1])
+          })
+          form.attachment = urls.join(",")
+        }else {
+          form.attachment = "";
+        }
+      } else {
+        if (form.attachment) {
+          var urls = [];
+          var splits = form.attachment.split(",");
+          splits.forEach(url => {
+            var names = url.split("jczz/")
+            urls.push(names[1])
+          })
+          form.attachment = urls.join(",")
+        }
+      }
+
+      if (this.disCussFromListClone.length > 0) {
+        this.disCussFromListClone.forEach(item => {
+          if (form.children.length > 0) {
+            let same = form.children.find(array => array.id === item.id)
+            if (!same) {
+              item.deleteFlag = 1
+              form.children.push(item)
             }
-            getLists(1, 100, Object.assign(params, this.query)).then(res => {
-              const data = res.data.data
-              this.data = data
-            })
-          },
-          (error) => {
-            window.console.log(error)
           }
-        )
-      },
-
-      handleReset() {
-        this.editFlag = false
-      },
-
-      // 提交修改
-      rowUpdate(row, index, done, loading) {
-        done()
-        if (!row.id) {
-          addPd(row).then(() => {
-            this.onLoad()
-
-            this.$message({
-              type: "success",
-              message: "操作成功!"
-            })
+        })
+      }
+      add(form).then(
+        () => {
+          this.$message({
+            type: "success",
+            message: "操作成功!",
           })
-        } else {
-          updatePd(row).then(() => {
-            this.onLoad()
-
-            this.$message({
-              type: "success",
-              message: "操作成功!"
-            })
+          form = {}
+          this.editFlag = false
+          let params = {
+            level: 1,
+            articleId: this.articleId
+          }
+          getLists(1, 100, Object.assign(params, this.query)).then(res => {
+            const data = res.data.data
+            this.data = data
           })
+        },
+        (error) => {
+          window.console.log(error)
         }
-      },
+      )
+    },
 
-      rowDel(row) {
-        this.$confirm("确定将选择数据删除?", {
-            confirmButtonText: "确定",
-            cancelButtonText: "取消",
-            type: "warning"
-          })
-          .then(() => {
-            return remove(row.id)
-          })
-          .then(() => {
-            this.getUserPage(this.userPage)
+    handleReset() {
+      this.editFlag = false
+    },
 
-            this.$message({
-              type: "success",
-              message: "操作成功!"
-            })
-          })
-      },
+    // 提交修改
+    rowUpdate(row, index, done, loading) {
+      done()
 
-      add() {
-        this.editFlag = true
-      },
+      if (row.attachment.length > 0) {
+        var urls = []
+        var split = row.attachment.split(",")
+        split.forEach(url => {
+          var names = url.split("jczz/")
+          urls.push(names[1])
+        })
+        row.attachment = urls.join(",")
+      }
 
-      edit(row) {
-        this.disCussFrom = row
-        this.disCussFromListClone = [].concat(row.children)
-        this.editFlag = true
-      },
+      if (!row.id) {
+        addPd(row).then(() => {
+          this.onLoad()
 
-      deletes(row) {
-        this.$confirm("确定将选择数据删除?", {
-          confirmButtonText: "确定",
-          cancelButtonText: "取消",
-          type: "warning"
-        }).then(() => {
-          return remove(row.id)
-        }).then(() => {
-          let param = {}
-          this.onLoad(this.userPage, param)
           this.$message({
             type: "success",
             message: "操作成功!"
           })
         })
-      },
+      } else {
+        updatePd(row).then(() => {
+          this.onLoad()
 
-
-
-      getUserPage(page, params = {}) {
-        getPage(page.currentPage, page.pageSize, Object.assign(params, this.query)).then(res => {
-          const data = res.data.data
-          this.userPage.total = data.total
-          this.userData = data.records
-          this.userData.forEach(item => {
-            if (item.avatar.length > 0) {
-              item.avatar = website.minioUrl + item.avatar
-            }
-            if (item.signaturePath && item.signaturePath.length > 0) {
-              item.signaturePath = website.minioUrl + item.signaturePath
-              // console.log("=====>", item.signaturePath)
-            }
+          this.$message({
+            type: "success",
+            message: "操作成功!"
           })
-        })
-      },
-
-      onLoad(page, params = {}) {
-        this.loading = true
-        getLists(page.currentPage, page.pageSize, Object.assign(params, this.query)).then(res => {
-          const data = res.data.data
-          this.data = data
-          this.loading = false
         })
       }
     },
-  }
+
+    rowDel(row) {
+      this.$confirm("确定将选择数据删除?", {
+        confirmButtonText: "确定",
+        cancelButtonText: "取消",
+        type: "warning"
+      })
+        .then(() => {
+          return remove(row.id)
+        })
+        .then(() => {
+          this.getUserPage(this.userPage)
+
+          this.$message({
+            type: "success",
+            message: "操作成功!"
+          })
+        })
+    },
+
+    add() {
+      this.editFlag = true
+    },
+
+    edit(row) {
+      this.disCussFrom = row
+      this.disCussFromListClone = [].concat(row.children)
+      this.editFlag = true
+    },
+
+    deletes(row) {
+      this.$confirm("确定将选择数据删除?", {
+        confirmButtonText: "确定",
+        cancelButtonText: "取消",
+        type: "warning"
+      }).then(() => {
+        return remove(row.id)
+      }).then(() => {
+        let param = {}
+        this.onLoad(this.userPage, param)
+        this.$message({
+          type: "success",
+          message: "操作成功!"
+        })
+      })
+    },
+
+
+
+    getUserPage(page, params = {}) {
+      getPage(page.currentPage, page.pageSize, Object.assign(params, this.query)).then(res => {
+        const data = res.data.data
+        this.userPage.total = data.total
+        this.userData = data.records
+        this.userData.forEach(item => {
+          if (item.avatar.length > 0) {
+            item.avatar = website.minioUrl + item.avatar
+          }
+          if (item.signaturePath && item.signaturePath.length > 0) {
+            item.signaturePath = website.minioUrl + item.signaturePath
+            // console.log("=====>", item.signaturePath)
+          }
+        })
+      })
+    },
+
+    onLoad(page, params = {}) {
+      this.loading = true
+      getLists(page.currentPage, page.pageSize, Object.assign(params, this.query)).then(res => {
+        const data = res.data.data
+        this.data = data
+        this.loading = false
+      })
+    }
+  },
+}
 </script>
 
 <style lang="scss" scoped></style>
\ No newline at end of file
diff --git a/src/views/article/rotation.vue b/src/views/article/rotation.vue
index 29b02be..195193e 100644
--- a/src/views/article/rotation.vue
+++ b/src/views/article/rotation.vue
@@ -102,6 +102,7 @@
               prop: "publicFlag",
               span: 12,
               searchSpan: 4,
+              type: "select",
               // search: true,
               // cascader: ["communityCode"],
               type: "select",
@@ -270,6 +271,13 @@
     },
     methods: {
       rowSave(row, done, loading) {
+        if (row.rotationRange) {
+          row.rotationRange = JSON.stringify(row.rotationRange)
+        }
+        if (row.publicFlag == 2) {
+          row.rotationRange = []
+          row.rotationRange = JSON.stringify(row.rotationRange)
+        }
         if (row.url.length > 0) {
           var urls = []
           var split = row.url.split(",")
@@ -295,6 +303,13 @@
         )
       },
       rowUpdate(row, index, done, loading) {
+        if (row.rotationRange) {
+          row.rotationRange = JSON.stringify(row.rotationRange)
+        }
+        if (row.publicFlag == 2) {
+          row.rotationRange = []
+          row.rotationRange = JSON.stringify(row.rotationRange)
+        }
         if (row.url.length > 0) {
           var urls = []
           var split = row.url.split(",")
@@ -379,6 +394,9 @@
         if (["edit", "view"].includes(type)) {
           getRotation(this.form.id).then((res) => {
             this.form = res.data.data
+            if (this.form.rotationRange) {
+              this.form.rotationRange = JSON.parse(this.form.rotationRange)
+            }
             if (this.form.url.length > 0) {
               var urls = []
               var names = this.form.url.split(",")
@@ -432,6 +450,9 @@
           this.page.total = data.total
           this.data = data.records
           this.data.forEach(item => {
+            if (item.rotationRange) {
+              item.rotationRange = JSON.parse(item.rotationRange)
+            }
             if (item.url.length > 0) {
               var urls = []
               var names = item.url.split(",")
diff --git a/src/views/gzll/components/done.vue b/src/views/gzll/components/done.vue
index 9d502e0..8384b6d 100644
--- a/src/views/gzll/components/done.vue
+++ b/src/views/gzll/components/done.vue
@@ -1,238 +1,281 @@
 <template>
-    <div>
-        <avue-crud :option="option" :table-loading="loading" :data="data" ref="crud" v-model="form" :page.sync="page"
-            @search-change="searchChange" @search-reset="searchReset" @selection-change="selectionChange"
-            @current-change="currentChange" @size-change="sizeChange" @refresh-change="refreshChange" @on-load="onLoad">
-            <template slot-scope="{row, size, index}" slot="menu">
-                <el-button type="text" :size="size" icon="el-icon-info" v-if="permission.gzll_todo_detail"
-                    @click.stop="handleDetail(row)">详情
-                </el-button>
-                <el-button type="text" :size="size" icon="el-icon-search" v-if="permission.gzll_todo_follow"
-                    @click.stop="handleImage(row, index)">流程图
-                </el-button>
-            </template>
-            <template slot-scope="{row, size}" slot="processDefinitionVersion">
-                <el-tag :size="size">v{{ row.processDefinitionVersion }}</el-tag>
-            </template>
-            <template slot-scope="{row, size}" slot="linkPhone">
-                <el-button :size="size" type="text" @click="showStringDispose(row, 'linkPhoneflag')"
-                    v-text="textDispose(row, 'linkPhoneflag', 'linkPhone')">
-                </el-button>
-            </template>
-        </avue-crud>
-        <flow-design is-dialog :is-display.sync="flowBox" :process-instance-id="processInstanceId"></flow-design>
-    </div>
+  <div>
+    <avue-crud :option="option" :table-loading="loading" :data="data" ref="crud" v-model="form" :page.sync="page"
+      @search-change="searchChange" @search-reset="searchReset" @selection-change="selectionChange"
+      @current-change="currentChange" @size-change="sizeChange" @refresh-change="refreshChange" @on-load="onLoad">
+      <template slot-scope="{row, size, index}" slot="menu">
+        <el-button type="text" :size="size" icon="el-icon-info" v-if="permission.gzll_todo_detail"
+          @click.stop="handleDetail(row)">详情
+        </el-button>
+        <el-button type="text" :size="size" icon="el-icon-search" v-if="permission.gzll_todo_follow"
+          @click.stop="handleImage(row, index)">流程图
+        </el-button>
+      </template>
+      <template slot-scope="{row, size}" slot="processDefinitionVersion">
+        <el-tag :size="size">v{{ row.processDefinitionVersion }}</el-tag>
+      </template>
+      <template slot-scope="{row, size}" slot="linkPhone">
+        <el-button :size="size" type="text" @click="showStringDispose(row, 'linkPhoneflag')"
+          v-text="textDispose(row, 'linkPhoneflag', 'linkPhone')">
+        </el-button>
+      </template>
+    </avue-crud>
+    <flow-design is-dialog :is-display.sync="flowBox" :process-instance-id="processInstanceId"></flow-design>
+  </div>
 </template>
 
 <script>
-import {
+  import {
     mapGetters
-} from "vuex"
-import {
+  } from "vuex"
+  import {
     doneList
-} from "@/api/work/work"
-import {
+  } from "@/api/work/work"
+  import {
     flowCategory,
     flowRoute
-} from "@/util/flow"
+  } from "@/util/flow"
 
-export default {
-    data () {
-        return {
-            form: {},
-            selectionId: '',
-            selectionList: [],
-            query: {},
-            loading: true,
-            page: {
-                pageSize: 10,
-                currentPage: 1,
-                total: 0
-            },
-            processInstanceId: '',
-            flowBox: false,
-            workBox: false,
-            option: {
-                labelWidth: 120,
-                searchLabelWidth: 96,
-                searchShow: true,
-                searchMenuSpan: 3,
-                menuWidth: 140,
+  export default {
+    data() {
+      return {
+        datetime: "",
+        form: {},
+        selectionId: '',
+        selectionList: [],
+        query: {},
+        loading: true,
+        page: {
+          pageSize: 10,
+          currentPage: 1,
+          total: 0
+        },
+        processInstanceId: '',
+        flowBox: false,
+        workBox: false,
+        option: {
+          labelWidth: 120,
+          searchLabelWidth: 96,
+          searchShow: true,
+          searchMenuSpan: 3,
+          menuWidth: 140,
 
-                height: 'auto',
-                calcHeight: 30,
-                tip: false,
-                border: true,
-                index: true,
-                // selection: true,
-                editBtn: false,
-                addBtn: false,
-                viewBtn: false,
-                delBtn: false,
-                columnBtn: false,
-                dialogWidth: 900,
-                dialogClickModal: false,
-                header: false,
-                column: [
-                    {
-                        label: "流程分类",
-                        type: "select",
-                        row: true,
-                        dicUrl: "/api/blade-system/dict/dictionary?code=flow",
-                        props: {
-                            label: "dictValue",
-                            value: "dictKey"
-                        },
-                        dataType: "number",
-                        slot: true,
-                        prop: "category",
-                        // search: true,
-                        hide: true,
-                        width: 100,
-                    },
-                    {
-                        width: 100,
-                        label: '申请类型',
-                        prop: 'categoryName',
-                        // search: true,
-                    }, {
-                        width: 220,
-                        overHidden: true,
-                        label: "小区",
-                        prop: "districtId",
-                        searchSpan: 5,
-                        // search: true,
-                        type: 'tree',
-                        dicUrl: `/api/blade-district/district/getDistrictTree`,
-                        props: {
-                            label: "name",
-                            value: "id"
-                        },
-                        defaultExpandedKeys: ["361102003"],
-                        span: 12,
-                    }, {
-                        width: 110,
-                        label: '联系人',
-                        prop: 'linkman',
-                        // search: true,
-                    }, {
-                        width: 120,
-                        label: '联系电话',
-                        prop: 'linkPhone',
-                        // search: true,
-                        slot: true
-                    }, {
-                        label: '项目名称',
-                        prop: 'name',
-                        // search: true,
-                    },
-                    {
-                        label: '当前步骤',
-                        prop: 'taskName',
-                    },
-                    // {
-                    //     label: '流程版本',
-                    //     prop: 'processDefinitionVersion',
-                    //     slot: true,
-                    //     width: 80,
-                    // },
-                    {
-                        width: 144,
-                        label: '申请时间',
-                        prop: 'createTime',
-                    },
-                ]
+          height: 'auto',
+          calcHeight: 30,
+          tip: false,
+          border: true,
+          index: true,
+          // selection: true,
+          editBtn: false,
+          addBtn: false,
+          viewBtn: false,
+          delBtn: false,
+          columnBtn: false,
+          dialogWidth: 900,
+          dialogClickModal: false,
+          header: false,
+          column: [{
+              label: "流程分类",
+              type: "select",
+              row: true,
+              dicUrl: "/api/blade-system/dict/dictionary?code=flow",
+              props: {
+                label: "dictValue",
+                value: "dictKey"
+              },
+              dataType: "number",
+              slot: true,
+              prop: "category",
+              // search: true,
+              hide: true,
+              width: 100,
             },
-            data: []
-        }
+            {
+              width: 110,
+              label: '小区名称',
+              prop: 'districtName',
+              search: true,
+              hide: true,
+            }, {
+              label: '项目名称',
+              prop: 'name',
+              search: true,
+            },
+            {
+              label: "申请时间",
+              prop: "dateTime",
+              type: "datetimerange",
+              defaultTime: ['00:00:00', '23:59:59'],
+              format: 'yyyy-MM-dd HH:mm:ss',
+              valueFormat: 'yyyy-MM-dd HH:mm:ss',
+              startPlaceholder: '开始范围自定义',
+              endPlaceholder: '结束范围自定义',
+              searchSpan: 5,
+              searchRange: true,
+              hide: true,
+              addDisplay: false,
+              editDisplay: false,
+              viewDisplay: false,
+              search: true,
+              rules: [{
+                required: true,
+                message: "请选择申请时间",
+                trigger: "blur",
+              }, ],
+            },
+            {
+              width: 100,
+              label: '申请类型',
+              prop: 'categoryName',
+              // search: true,
+            }, {
+              width: 220,
+              overHidden: true,
+              label: "小区",
+              prop: "districtId",
+              searchSpan: 5,
+              // search: true,
+              type: 'tree',
+              dicUrl: `/api/blade-district/district/getDistrictTree`,
+              props: {
+                label: "name",
+                value: "id"
+              },
+              defaultExpandedKeys: ["361102003"],
+              span: 12,
+            }, {
+              width: 110,
+              label: '联系人',
+              prop: 'linkman',
+              // search: true,
+            }, {
+              width: 120,
+              label: '联系电话',
+              prop: 'linkPhone',
+              // search: true,
+              slot: true
+            }, {
+              label: '项目名称',
+              prop: 'name',
+              // search: true,
+            },
+            {
+              label: '当前步骤',
+              prop: 'taskName',
+            },
+            // {
+            //     label: '流程版本',
+            //     prop: 'processDefinitionVersion',
+            //     slot: true,
+            //     width: 80,
+            // },
+            {
+              width: 144,
+              label: '申请时间',
+              prop: 'createTime',
+            },
+          ]
+        },
+        data: []
+      }
     },
 
     computed: {
-        ...mapGetters(["permission", "flowRoutes"]),
-        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")
-                    }
-                }
+      ...mapGetters(["permission", "flowRoutes"]),
+      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]
-        },
+      showStringDispose(row, type) {
+        row[type] = !row[type]
+      },
 
-        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()
-        },
-        handleDetail (row) {
-            this.$router.push({
-                path: `/gzll/process/${flowRoute(this.flowRoutes, row.category)}/detail/${row.processInstanceId}/${row.businessId}`
-            })
-        },
-        handleImage (row) {
-            this.processInstanceId = row.processInstanceId
-            this.flowBox = true
-        },
-        currentChange (currentPage) {
-            this.page.currentPage = currentPage
-        },
-        sizeChange (pageSize) {
-            this.page.pageSize = pageSize
-        },
-        refreshChange () {
-            this.onLoad(this.page, this.query)
-        },
-        onLoad (page, params = {}) {
-            const query = {
-                ...this.query,
-                category: (params.category) ? flowCategory(params.category) : null
-            }
-            this.loading = true
-            doneList(page.currentPage, page.pageSize, Object.assign(params, query)).then(res => {
-                const data = {
-                    ...res.data.data,
-                    records: res.data.data.records.map(item => {
-                        return {
-                            ...item,
-                            'linkPhoneflag': false
-                        }
-                    })
-                }
-                this.page.total = data.total
-                this.data = data.records
-                this.loading = false
-                this.selectionClear()
-            })
+      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()
+      },
+      handleDetail(row) {
+        this.$router.push({
+          path: `/gzll/process/${flowRoute(this.flowRoutes, row.category)}/detail/${row.processInstanceId}/${row.businessId}`
+        })
+      },
+      handleImage(row) {
+        this.processInstanceId = row.processInstanceId
+        this.flowBox = true
+      },
+      currentChange(currentPage) {
+        this.page.currentPage = currentPage
+      },
+      sizeChange(pageSize) {
+        this.page.pageSize = pageSize
+      },
+      refreshChange() {
+        this.onLoad(this.page, this.query)
+      },
+      onLoad(page, params = {}) {
+        let query = {
+          ...this.query,
+          category: (params.category) ? flowCategory(params.category) : null
         }
+        const {
+          dateTime
+        } = query
+
+        if (dateTime) {
+          query = {
+            startTimes: dateTime[0],
+            endTimes: dateTime[1],
+          }
+        }
+        this.loading = true
+        doneList(page.currentPage, page.pageSize, Object.assign(params, query)).then(res => {
+          const data = {
+            ...res.data.data,
+            records: res.data.data.records.map(item => {
+              return {
+                ...item,
+                'linkPhoneflag': false
+              }
+            })
+          }
+          this.page.total = data.total
+          this.data = data.records
+          this.loading = false
+          this.selectionClear()
+        })
+      }
     }
-}
+  }
 </script>
\ No newline at end of file
diff --git a/src/views/gzll/components/todo.vue b/src/views/gzll/components/todo.vue
index 1eb60ac..0f911ff 100644
--- a/src/views/gzll/components/todo.vue
+++ b/src/views/gzll/components/todo.vue
@@ -43,6 +43,7 @@
   export default {
     data() {
       return {
+        datetime: "",
         typeStatus: 1,
         form: {},
         selectionId: '',
@@ -123,6 +124,32 @@
               prop: 'districtName',
               search: true,
               hide: true,
+            }, {
+              label: '项目名称',
+              prop: 'name',
+              search: true,
+            },
+            {
+              label: "申请时间",
+              prop: "dateTime",
+              type: "datetimerange",
+              defaultTime: ['00:00:00', '23:59:59'],
+              format: 'yyyy-MM-dd HH:mm:ss',
+              valueFormat: 'yyyy-MM-dd HH:mm:ss',
+              startPlaceholder: '开始范围自定义',
+              endPlaceholder: '结束范围自定义',
+              searchSpan: 5,
+              searchRange: true,
+              hide: true,
+              addDisplay: false,
+              editDisplay: false,
+              viewDisplay: false,
+              search: true,
+              rules: [{
+                required: true,
+                message: "请选择申请时间",
+                trigger: "blur",
+              }, ],
             },
             {
               width: 110,
@@ -137,11 +164,7 @@
               // search: true,
               slot: true
             },
-            {
-              label: '项目名称',
-              prop: 'name',
-              search: true,
-            },
+
             {
               label: '当前步骤',
               prop: 'taskName',
@@ -239,10 +262,20 @@
         this.onLoad(this.page, this.query)
       },
       onLoad(page, params = {}) {
-        const query = {
+        let query = {
           ...this.query,
           category: (params.category) ? flowCategory(params.category) : null
         }
+        const {
+          dateTime
+        } = query
+
+        if (dateTime) {
+          query = {
+            startTimes: dateTime[0],
+            endTimes: dateTime[1],
+          }
+        }
         this.loading = true
         todoList(page.currentPage, page.pageSize, Object.assign(params, query)).then(res => {
           const data = {
diff --git a/src/views/property/components/done.vue b/src/views/property/components/done.vue
index 0d4451d..5bcca53 100644
--- a/src/views/property/components/done.vue
+++ b/src/views/property/components/done.vue
@@ -1,236 +1,279 @@
 <template>
-    <div>
-        <avue-crud :option="option" :table-loading="loading" :data="data" ref="crud" v-model="form" :page.sync="page"
-            @search-change="searchChange" @search-reset="searchReset" @selection-change="selectionChange"
-            @current-change="currentChange" @size-change="sizeChange" @refresh-change="refreshChange" @on-load="onLoad">
-            <template slot-scope="{row, size, index}" slot="menu">
-                <el-button type="text" :size="size" icon="el-icon-info" v-if="permission.property_todo_detail"
-                    @click.stop="handleDetail(row)">详情
-                </el-button>
-                <el-button type="text" :size="size" icon="el-icon-search" v-if="permission.property_todo_follow"
-                    @click.stop="handleImage(row, index)">流程图
-                </el-button>
-            </template>
-            <template slot-scope="{row, size}" slot="processDefinitionVersion">
-                <el-tag :size="size">v{{ row.processDefinitionVersion }}</el-tag>
-            </template>
-            <template slot-scope="{row, size}" slot="linkPhone">
-                <el-button :size="size" type="text" @click="showStringDispose(row, 'linkPhoneflag')"
-                    v-text="textDispose(row, 'linkPhoneflag', 'linkPhone')">
-                </el-button>
-            </template>
-        </avue-crud>
-        <flow-design is-dialog :is-display.sync="flowBox" :process-instance-id="processInstanceId"></flow-design>
-    </div>
+  <div>
+    <avue-crud :option="option" :table-loading="loading" :data="data" ref="crud" v-model="form" :page.sync="page"
+      @search-change="searchChange" @search-reset="searchReset" @selection-change="selectionChange"
+      @current-change="currentChange" @size-change="sizeChange" @refresh-change="refreshChange" @on-load="onLoad">
+      <template slot-scope="{row, size, index}" slot="menu">
+        <el-button type="text" :size="size" icon="el-icon-info" v-if="permission.property_todo_detail"
+          @click.stop="handleDetail(row)">详情
+        </el-button>
+        <el-button type="text" :size="size" icon="el-icon-search" v-if="permission.property_todo_follow"
+          @click.stop="handleImage(row, index)">流程图
+        </el-button>
+      </template>
+      <template slot-scope="{row, size}" slot="processDefinitionVersion">
+        <el-tag :size="size">v{{ row.processDefinitionVersion }}</el-tag>
+      </template>
+      <template slot-scope="{row, size}" slot="linkPhone">
+        <el-button :size="size" type="text" @click="showStringDispose(row, 'linkPhoneflag')"
+          v-text="textDispose(row, 'linkPhoneflag', 'linkPhone')">
+        </el-button>
+      </template>
+    </avue-crud>
+    <flow-design is-dialog :is-display.sync="flowBox" :process-instance-id="processInstanceId"></flow-design>
+  </div>
 </template>
 
 <script>
-import {
+  import {
     mapGetters
-} from "vuex"
-import {
+  } from "vuex"
+  import {
     doneList
-} from "@/api/work/work"
-import {
+  } from "@/api/work/work"
+  import {
     flowCategory,
     flowRoute
-} from "@/util/flow"
+  } from "@/util/flow"
 
-export default {
-    data () {
-        return {
-            form: {},
-            selectionId: '',
-            selectionList: [],
-            query: {},
-            loading: true,
-            page: {
-                pageSize: 10,
-                currentPage: 1,
-                total: 0
-            },
-            processInstanceId: '',
-            flowBox: false,
-            workBox: false,
-            option: {
-                labelWidth: 120,
-                searchLabelWidth: 96,
-                searchShow: true,
-                searchMenuSpan: 3,
-                menuWidth: 140,
+  export default {
+    data() {
+      return {
+        datetime: "",
+        form: {},
+        selectionId: '',
+        selectionList: [],
+        query: {},
+        loading: true,
+        page: {
+          pageSize: 10,
+          currentPage: 1,
+          total: 0
+        },
+        processInstanceId: '',
+        flowBox: false,
+        workBox: false,
+        option: {
+          labelWidth: 120,
+          searchLabelWidth: 96,
+          searchShow: true,
+          searchMenuSpan: 3,
+          menuWidth: 140,
 
-                height: 'auto',
-                calcHeight: 30,
-                tip: false,
-                border: true,
-                index: true,
-                // selection: true,
-                editBtn: false,
-                addBtn: false,
-                viewBtn: false,
-                delBtn: false,
-                columnBtn: false,
-                dialogWidth: 900,
-                dialogClickModal: false,
-                header: false,
-                column: [
-                    {
-                        label: "流程分类",
-                        type: "select",
-                        row: true,
-                        dicUrl: "/api/blade-system/dict/dictionary?code=flow",
-                        props: {
-                            label: "dictValue",
-                            value: "dictKey"
-                        },
-                        dataType: "number",
-                        slot: true,
-                        prop: "category",
-                        // search: true,
-                        hide: true,
-                        width: 100,
-                    },
-                    {
-                        width: 100,
-                        label: '申请类型',
-                        prop: 'categoryName',
-                        // search: true,
-                    }, {
-                        width: 220,
-                        overHidden: true,
-                        label: "小区",
-                        prop: "districtId",
-                        searchSpan: 5,
-                        // search: true,
-                        type: 'tree',
-                        dicUrl: `/api/blade-district/district/getDistrictTree`,
-                        props: {
-                            label: "name",
-                            value: "id"
-                        },
-                        defaultExpandedKeys: ["361102003"],
-                        span: 12,
-                    }, {
-                        width: 110,
-                        label: '联系人',
-                        prop: 'linkman',
-                        // search: true,
-                    }, {
-                        width: 120,
-                        label: '联系电话',
-                        prop: 'linkPhone',
-                        // search: true,
-                        slot: true
-                    }, {
-                        label: '项目名称',
-                        prop: 'name',
-                        // search: true,
-                    },
-                    {
-                        label: '当前步骤',
-                        prop: 'taskName',
-                    },
-                    // {
-                    //     label: '流程版本',
-                    //     prop: 'processDefinitionVersion',
-                    //     slot: true,
-                    //     width: 80,
-                    // },
-                    {
-                        width: 144,
-                        label: '申请时间',
-                        prop: 'createTime',
-                    },
-                ]
+          height: 'auto',
+          calcHeight: 30,
+          tip: false,
+          border: true,
+          index: true,
+          // selection: true,
+          editBtn: false,
+          addBtn: false,
+          viewBtn: false,
+          delBtn: false,
+          columnBtn: false,
+          dialogWidth: 900,
+          dialogClickModal: false,
+          header: false,
+          column: [{
+              label: "流程分类",
+              type: "select",
+              row: true,
+              dicUrl: "/api/blade-system/dict/dictionary?code=flow",
+              props: {
+                label: "dictValue",
+                value: "dictKey"
+              },
+              dataType: "number",
+              slot: true,
+              prop: "category",
+              // search: true,
+              hide: true,
+              width: 100,
             },
-            data: []
-        }
+            {
+              width: 100,
+              label: '申请类型',
+              prop: 'categoryName',
+              // search: true,
+            }, {
+              width: 220,
+              overHidden: true,
+              label: "小区",
+              prop: "districtId",
+              searchSpan: 5,
+              // search: true,
+              type: 'tree',
+              dicUrl: `/api/blade-district/district/getDistrictTree`,
+              props: {
+                label: "name",
+                value: "id"
+              },
+              defaultExpandedKeys: ["361102003"],
+              span: 12,
+            },
+            {
+              width: 110,
+              label: '小区名称',
+              prop: 'districtName',
+              search: true,
+              hide: true,
+            }, {
+              label: '项目名称',
+              prop: 'name',
+              search: true,
+            },
+            {
+              label: "申请时间",
+              prop: "dateTime",
+              type: "datetimerange",
+              defaultTime: ['00:00:00', '23:59:59'],
+              format: 'yyyy-MM-dd HH:mm:ss',
+              valueFormat: 'yyyy-MM-dd HH:mm:ss',
+              startPlaceholder: '开始范围自定义',
+              endPlaceholder: '结束范围自定义',
+              searchSpan: 5,
+              searchRange: true,
+              hide: true,
+              addDisplay: false,
+              editDisplay: false,
+              viewDisplay: false,
+              search: true,
+              rules: [{
+                required: true,
+                message: "请选择申请时间",
+                trigger: "blur",
+              }, ],
+            }, {
+              width: 110,
+              label: '联系人',
+              prop: 'linkman',
+              // search: true,
+            }, {
+              width: 120,
+              label: '联系电话',
+              prop: 'linkPhone',
+              // search: true,
+              slot: true
+            }, {
+              label: '项目名称',
+              prop: 'name',
+              // search: true,
+            },
+            {
+              label: '当前步骤',
+              prop: 'taskName',
+            },
+            // {
+            //     label: '流程版本',
+            //     prop: 'processDefinitionVersion',
+            //     slot: true,
+            //     width: 80,
+            // },
+            {
+              width: 144,
+              label: '申请时间',
+              prop: 'createTime',
+            },
+          ]
+        },
+        data: []
+      }
     },
     computed: {
-        ...mapGetters(["permission", "flowRoutes"]),
-        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")
-                    }
-                }
+      ...mapGetters(["permission", "flowRoutes"]),
+      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]
-        },
+      showStringDispose(row, type) {
+        row[type] = !row[type]
+      },
 
-        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()
-        },
-        handleDetail (row) {
-            this.$router.push({
-                path: `/property/process/${flowRoute(this.flowRoutes, row.category)}/detail/${row.processInstanceId}/${row.businessId}`
-            })
-        },
-        handleImage (row) {
-            this.processInstanceId = row.processInstanceId
-            this.flowBox = true
-        },
-        currentChange (currentPage) {
-            this.page.currentPage = currentPage
-        },
-        sizeChange (pageSize) {
-            this.page.pageSize = pageSize
-        },
-        refreshChange () {
-            this.onLoad(this.page, this.query)
-        },
-        onLoad (page, params = {}) {
-            const query = {
-                ...this.query,
-                category: (params.category) ? flowCategory(params.category) : null
-            }
-            this.loading = true
-            doneList(page.currentPage, page.pageSize, Object.assign(params, query)).then(res => {
-                const data = {
-                    ...res.data.data,
-                    records: res.data.data.records.map(item => {
-                        return {
-                            ...item,
-                            'linkPhoneflag': false
-                        }
-                    })
-                }
-                this.page.total = data.total
-                this.data = data.records
-                this.loading = false
-                this.selectionClear()
-            })
+      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()
+      },
+      handleDetail(row) {
+        this.$router.push({
+          path: `/property/process/${flowRoute(this.flowRoutes, row.category)}/detail/${row.processInstanceId}/${row.businessId}`
+        })
+      },
+      handleImage(row) {
+        this.processInstanceId = row.processInstanceId
+        this.flowBox = true
+      },
+      currentChange(currentPage) {
+        this.page.currentPage = currentPage
+      },
+      sizeChange(pageSize) {
+        this.page.pageSize = pageSize
+      },
+      refreshChange() {
+        this.onLoad(this.page, this.query)
+      },
+      onLoad(page, params = {}) {
+        let query = {
+          ...this.query,
+          category: (params.category) ? flowCategory(params.category) : null
         }
+        const {
+          dateTime
+        } = query
+
+        if (dateTime) {
+          query = {
+            startTimes: dateTime[0],
+            endTimes: dateTime[1],
+          }
+        }
+        this.loading = true
+        doneList(page.currentPage, page.pageSize, Object.assign(params, query)).then(res => {
+          const data = {
+            ...res.data.data,
+            records: res.data.data.records.map(item => {
+              return {
+                ...item,
+                'linkPhoneflag': false
+              }
+            })
+          }
+          this.page.total = data.total
+          this.data = data.records
+          this.loading = false
+          this.selectionClear()
+        })
+      }
     }
-}
+  }
 </script>
\ No newline at end of file
diff --git a/src/views/property/components/todo.vue b/src/views/property/components/todo.vue
index 16d83fa..6a43049 100644
--- a/src/views/property/components/todo.vue
+++ b/src/views/property/components/todo.vue
@@ -1,268 +1,312 @@
 <template>
-    <div>
-        <avue-crud :option="option" :table-loading="loading" :data="data" ref="crud" v-model="form"
-            @search-change="searchChange" @search-reset="searchReset" @selection-change="selectionChange"
-            @current-change="currentChange" @size-change="sizeChange" @refresh-change="refreshChange" @on-load="onLoad">
-            <template slot-scope="{row, size, index}" slot="menu">
-                <el-button type="text" :size="size" icon="el-icon-s-check" v-if="permission.property_todo_handle"
-                    @click.stop="handleWork(row)">处理
-                </el-button>
-                <el-button type="text" :size="size" icon="el-icon-info" v-if="permission.property_todo_detail"
-                    @click.stop="handleDetail(row)">详情
-                </el-button>
-                <el-button type="text" :size="size" icon="el-icon-search" v-if="permission.property_todo_follow"
-                    @click.stop="handleImage(row, index)">流程图
-                </el-button>
-            </template>
+  <div>
+    <avue-crud :option="option" :table-loading="loading" :data="data" ref="crud" v-model="form"
+      @search-change="searchChange" @search-reset="searchReset" @selection-change="selectionChange"
+      @current-change="currentChange" @size-change="sizeChange" @refresh-change="refreshChange" @on-load="onLoad">
+      <template slot-scope="{row, size, index}" slot="menu">
+        <el-button type="text" :size="size" icon="el-icon-s-check" v-if="permission.property_todo_handle"
+          @click.stop="handleWork(row)">处理
+        </el-button>
+        <el-button type="text" :size="size" icon="el-icon-info" v-if="permission.property_todo_detail"
+          @click.stop="handleDetail(row)">详情
+        </el-button>
+        <el-button type="text" :size="size" icon="el-icon-search" v-if="permission.property_todo_follow"
+          @click.stop="handleImage(row, index)">流程图
+        </el-button>
+      </template>
 
-            <template slot-scope="{row, size}" slot="processDefinitionVersion">
-                <el-tag :size="size">v{{ row.processDefinitionVersion }}</el-tag>
-            </template>
-            <template slot-scope="{row, size}" slot="linkPhone">
-                <el-button :size="size" type="text" @click="showStringDispose(row, 'linkPhoneflag')"
-                    v-text="textDispose(row, 'linkPhoneflag', 'linkPhone')">
-                </el-button>
-            </template>
-        </avue-crud>
-        <flow-design is-dialog :is-display.sync="flowBox" :process-instance-id="processInstanceId"></flow-design>
-    </div>
+      <template slot-scope="{row, size}" slot="processDefinitionVersion">
+        <el-tag :size="size">v{{ row.processDefinitionVersion }}</el-tag>
+      </template>
+      <template slot-scope="{row, size}" slot="linkPhone">
+        <el-button :size="size" type="text" @click="showStringDispose(row, 'linkPhoneflag')"
+          v-text="textDispose(row, 'linkPhoneflag', 'linkPhone')">
+        </el-button>
+      </template>
+    </avue-crud>
+    <flow-design is-dialog :is-display.sync="flowBox" :process-instance-id="processInstanceId"></flow-design>
+  </div>
 </template>
-  
+
 <script>
-import {
+  import {
     mapGetters
-} from "vuex"
-import {
+  } from "vuex"
+  import {
     todoList
-} from "@/api/work/work"
-import {
+  } from "@/api/work/work"
+  import {
     flowCategory,
     flowRoute
-} from "@/util/flow"
+  } from "@/util/flow"
 
-export default {
-    data () {
-        return {
-            typeStatus: 1,
-            form: {},
-            selectionId: '',
-            selectionList: [],
-            query: {},
-            loading: true,
-            page: {
-                pageSize: 10,
-                currentPage: 1,
-                total: 0
-            },
-            processInstanceId: '',
-            flowBox: false,
-            workBox: false,
-            option: {
-                labelWidth: 120,
-                searchLabelWidth: 96,
-                searchShow: true,
-                searchMenuSpan: 3,
-                menuWidth: 210,
+  export default {
+    data() {
+      return {
+        datetime: "",
+        typeStatus: 1,
+        form: {},
+        selectionId: '',
+        selectionList: [],
+        query: {},
+        loading: true,
+        page: {
+          pageSize: 10,
+          currentPage: 1,
+          total: 0
+        },
+        processInstanceId: '',
+        flowBox: false,
+        workBox: false,
+        option: {
+          labelWidth: 120,
+          searchLabelWidth: 96,
+          searchShow: true,
+          searchMenuSpan: 3,
+          menuWidth: 210,
 
-                height: 'auto',
-                calcHeight: 30,
-                tip: false,
-                simplePage: true,
-                border: true,
-                index: true,
-                // selection: true,
-                editBtn: false,
-                addBtn: false,
-                viewBtn: false,
-                delBtn: false,
-                columnBtn: false,
-                dialogWidth: 900,
-                dialogClickModal: false,
-                header: false,
-                column: [{
-                    label: "流程分类",
-                    type: "select",
-                    row: true,
-                    dicUrl: "/api/blade-system/dict/dictionary?code=flow",
-                    props: {
-                        label: "dictValue",
-                        value: "dictKey"
-                    },
-                    dataType: "number",
-                    slot: true,
-                    prop: "category",
-                    // search: true,
-                    hide: true,
-                    width: 100,
-                },
-                {
-                    width: 100,
-                    label: '申请类型',
-                    prop: 'categoryName',
-                    // search: true,
-                },
-                {
-                    width: 220,
-                    overHidden: true,
-                    label: "小区",
-                    prop: "districtId",
-                    // search: true,
-                    type: 'tree',
-                    dicUrl: `/api/blade-district/district/getDistrictTree`,
-                    props: {
-                        label: "name",
-                        value: "id"
-                    },
-                    defaultExpandedKeys: ["361102003"],
-                    searchSpan: 5,
-                    span: 12,
-                },
-                {
-                    width: 110,
-                    label: '联系人',
-                    prop: 'linkman',
-                    // search: true,
-                },
-                {
-                    width: 120,
-                    label: '联系电话',
-                    prop: 'linkPhone',
-                    // search: true,
-                    slot: true
-                },
-                {
-                    label: '项目名称',
-                    prop: 'name',
-                    // search: true,
-                },
-                {
-                    label: '当前步骤',
-                    prop: 'taskName',
-                },
-                // {
-                //   label: '流程版本',
-                //   prop: 'processDefinitionVersion',
-                //   // slot: true,
-                //   width: 80,
-                // },
-                {
-                    width: 144,
-                    label: '申请时间',
-                    prop: 'createTime',
-                },
-                ]
+          height: 'auto',
+          calcHeight: 30,
+          tip: false,
+          simplePage: true,
+          border: true,
+          index: true,
+          // selection: true,
+          editBtn: false,
+          addBtn: false,
+          viewBtn: false,
+          delBtn: false,
+          columnBtn: false,
+          dialogWidth: 900,
+          dialogClickModal: false,
+          header: false,
+          column: [{
+              label: "流程分类",
+              type: "select",
+              row: true,
+              dicUrl: "/api/blade-system/dict/dictionary?code=flow",
+              props: {
+                label: "dictValue",
+                value: "dictKey"
+              },
+              dataType: "number",
+              slot: true,
+              prop: "category",
+              // search: true,
+              hide: true,
+              width: 100,
             },
-            data: []
-        }
+            {
+              width: 110,
+              label: '小区名称',
+              prop: 'districtName',
+              search: true,
+              hide: true,
+            }, {
+              label: '项目名称',
+              prop: 'name',
+              search: true,
+            },
+            {
+              label: "申请时间",
+              prop: "dateTime",
+              type: "datetimerange",
+              defaultTime: ['00:00:00', '23:59:59'],
+              format: 'yyyy-MM-dd HH:mm:ss',
+              valueFormat: 'yyyy-MM-dd HH:mm:ss',
+              startPlaceholder: '开始范围自定义',
+              endPlaceholder: '结束范围自定义',
+              searchSpan: 5,
+              searchRange: true,
+              hide: true,
+              addDisplay: false,
+              editDisplay: false,
+              viewDisplay: false,
+              search: true,
+              rules: [{
+                required: true,
+                message: "请选择申请时间",
+                trigger: "blur",
+              }, ],
+            },
+            {
+              width: 100,
+              label: '申请类型',
+              prop: 'categoryName',
+              // search: true,
+            },
+            {
+              width: 220,
+              overHidden: true,
+              label: "小区",
+              prop: "districtId",
+              // search: true,
+              type: 'tree',
+              dicUrl: `/api/blade-district/district/getDistrictTree`,
+              props: {
+                label: "name",
+                value: "id"
+              },
+              defaultExpandedKeys: ["361102003"],
+              searchSpan: 5,
+              span: 12,
+            },
+            {
+              width: 110,
+              label: '联系人',
+              prop: 'linkman',
+              // search: true,
+            },
+            {
+              width: 120,
+              label: '联系电话',
+              prop: 'linkPhone',
+              // search: true,
+              slot: true
+            },
+            {
+              label: '项目名称',
+              prop: 'name',
+              // search: true,
+            },
+            {
+              label: '当前步骤',
+              prop: 'taskName',
+            },
+            // {
+            //   label: '流程版本',
+            //   prop: 'processDefinitionVersion',
+            //   // slot: true,
+            //   width: 80,
+            // },
+            {
+              width: 144,
+              label: '申请时间',
+              prop: 'createTime',
+            },
+          ]
+        },
+        data: []
+      }
     },
     computed: {
-        ...mapGetters(["permission", "flowRoutes"]),
-        ids () {
-            let ids = []
-            this.selectionList.forEach(ele => {
-                ids.push(ele.id)
-            })
-            return ids.join(",")
-        },
+      ...mapGetters(["permission", "flowRoutes"]),
+      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")
-                    }
-                }
+      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: {
 
-        changeType (type) {
-            this.typeStatus = type
-            this.page.currentPage = 1
-            // this.onLoad(this.page)
-        },
-        showStringDispose (row, type) {
-            row[type] = !row[type]
-        },
+      changeType(type) {
+        this.typeStatus = type
+        this.page.currentPage = 1
+        // this.onLoad(this.page)
+      },
+      showStringDispose(row, type) {
+        row[type] = !row[type]
+      },
 
-        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()
-        },
-        handleWork (row) {
-            this.$router.push({
-                path: `/property/process/${flowRoute(this.flowRoutes, row.category)}/handle/${row.taskId}/${row.processInstanceId}/${row.businessId}`
-            })
-        },
-        handleDetail (row) {
-            this.$router.push({
-                path: `/property/process/${flowRoute(this.flowRoutes, row.category)}/detail/${row.processInstanceId}/${row.businessId}`
-            })
-        },
-        handleImage (row) {
-            this.processInstanceId = row.processInstanceId
-            this.flowBox = true
-        },
-        currentChange (currentPage) {
-            this.page.currentPage = currentPage
-        },
-        sizeChange (pageSize) {
-            this.page.pageSize = pageSize
-        },
-        refreshChange () {
-            this.onLoad(this.page, this.query)
-        },
-        onLoad (page, params = {}) {
-            const query = {
-                ...this.query,
-                category: (params.category) ? flowCategory(params.category) : null
-            }
-            this.loading = true
-            todoList(page.currentPage, page.pageSize, Object.assign(params, query)).then(res => {
-                const data = {
-                    ...res.data.data,
-                    records: res.data.data.records.map(item => {
-                        return {
-                            ...item,
-                            'linkPhoneflag': false
-                        }
-                    })
-                }
-                this.page.total = data.total
-                this.data = data.records
-                this.loading = false
-                this.selectionClear()
-            })
+      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()
+      },
+      handleWork(row) {
+        this.$router.push({
+          path: `/property/process/${flowRoute(this.flowRoutes, row.category)}/handle/${row.taskId}/${row.processInstanceId}/${row.businessId}`
+        })
+      },
+      handleDetail(row) {
+        this.$router.push({
+          path: `/property/process/${flowRoute(this.flowRoutes, row.category)}/detail/${row.processInstanceId}/${row.businessId}`
+        })
+      },
+      handleImage(row) {
+        this.processInstanceId = row.processInstanceId
+        this.flowBox = true
+      },
+      currentChange(currentPage) {
+        this.page.currentPage = currentPage
+      },
+      sizeChange(pageSize) {
+        this.page.pageSize = pageSize
+      },
+      refreshChange() {
+        this.onLoad(this.page, this.query)
+      },
+      onLoad(page, params = {}) {
+        let query = {
+          ...this.query,
+          category: (params.category) ? flowCategory(params.category) : null
         }
-    }
-}
-</script>
-  
-  
-<style lang="scss" scoped>
-.avue-upload__icon {
-    line-height: 6;
-}
+        const {
+          dateTime
+        } = query
 
-.tab-list {
+        if (dateTime) {
+          query = {
+            startTimes: dateTime[0],
+            endTimes: dateTime[1],
+          }
+        }
+        this.loading = true
+        todoList(page.currentPage, page.pageSize, Object.assign(params, query)).then(res => {
+          const data = {
+            ...res.data.data,
+            records: res.data.data.records.map(item => {
+              return {
+                ...item,
+                'linkPhoneflag': false
+              }
+            })
+          }
+          this.page.total = data.total
+          this.data = data.records
+          this.loading = false
+          this.selectionClear()
+        })
+      }
+    }
+  }
+</script>
+
+
+<style lang="scss" scoped>
+  .avue-upload__icon {
+    line-height: 6;
+  }
+
+  .tab-list {
     display: flex;
     margin-right: 6px;
     border: 1px solid #dcdfe6;
@@ -272,55 +316,55 @@
     width: 121px;
 
     &>div {
-        display: flex;
-        align-items: center;
-        justify-content: center;
-        width: 60px;
-        cursor: pointer;
-        font-size: 12px;
+      display: flex;
+      align-items: center;
+      justify-content: center;
+      width: 60px;
+      cursor: pointer;
+      font-size: 12px;
     }
 
     &>div:nth-child(2) {
-        border-left: 1px solid #dcdfe6;
-        // border-right: 1px solid #dcdfe6;
+      border-left: 1px solid #dcdfe6;
+      // border-right: 1px solid #dcdfe6;
     }
 
     .choose {
-        color: #FFF;
-        background-color: #409dfe;
+      color: #FFF;
+      background-color: #409dfe;
     }
-}
+  }
 
-:deep(.avue-crud__left) {
+  :deep(.avue-crud__left) {
     display: flex;
     align-items: center;
-}
+  }
 
-:deep(.el-drawer__header) {
+  :deep(.el-drawer__header) {
     margin-bottom: 10px;
-}
+  }
 
-:deep(.el-radio__input.is-disabled+span.el-radio__label) {
+  :deep(.el-radio__input.is-disabled+span.el-radio__label) {
     color: #000;
-}
+  }
 
-:deep(.el-radio__input.is-checked+.el-radio__label) {
+  :deep(.el-radio__input.is-checked+.el-radio__label) {
     color: #409EFF !important;
-}
+  }
 
-:deep(.el-radio__input.is-checked .el-radio__inner::after) {
+  :deep(.el-radio__input.is-checked .el-radio__inner::after) {
     background-color: #FFF;
-}
+  }
 
-:deep(.el-radio__input.is-checked .el-radio__inner) {
+  :deep(.el-radio__input.is-checked .el-radio__inner) {
     background-color: #409EFF;
-}
+  }
 
-:deep(.el-radio) {
+  :deep(.el-radio) {
     margin-right: 20px;
-}
+  }
 
-.title {
+  .title {
     margin: 10px;
     height: 40px;
     background-color: #eee;
@@ -328,119 +372,119 @@
     align-items: center;
 
     .icon {
-        width: 4px;
-        height: 18px;
-        background-color: #409dfe;
-        margin: 0 10px;
-        color: transparent;
+      width: 4px;
+      height: 18px;
+      background-color: #409dfe;
+      margin: 0 10px;
+      color: transparent;
     }
-}
+  }
 
-.basic-info {
+  .basic-info {
     padding: 0 20px;
     font-size: 14px;
 
     .info-item {
+      display: flex;
+      padding: 10px;
+
+      .info-name {
+        width: 100px;
         display: flex;
-        padding: 10px;
+        align-items: center;
+      }
 
-        .info-name {
-            width: 100px;
-            display: flex;
-            align-items: center;
-        }
-
-        .info-value {
-            display: flex;
-            align-items: center;
-        }
+      .info-value {
+        display: flex;
+        align-items: center;
+      }
     }
-}
+  }
 
-.question-list {
+  .question-list {
     padding: 0 20px;
     font-size: 14px;
 
     .question-type {
-        height: 60px;
-        display: flex;
-        align-items: center;
-        cursor: pointer;
-        justify-content: space-between;
-        padding-right: 20px;
+      height: 60px;
+      display: flex;
+      align-items: center;
+      cursor: pointer;
+      justify-content: space-between;
+      padding-right: 20px;
 
-        .type-name {}
+      .type-name {}
 
-        .icon-box {}
+      .icon-box {}
     }
 
     .question-item {
-        margin-bottom: 20px;
-        padding: 10px;
-        background: #f5f7fa;
-        border-radius: 8px;
+      margin-bottom: 20px;
+      padding: 10px;
+      background: #f5f7fa;
+      border-radius: 8px;
 
-        &>div {
-            margin: 14px 0;
+      &>div {
+        margin: 14px 0;
+      }
+
+      .question-name {
+        display: flex;
+
+        .key {
+          width: 80%;
+          padding-right: 20px;
+          word-break: break-all;
         }
 
-        .question-name {
-            display: flex;
+        .value {
+          width: 20%;
+          display: flex;
+          align-items: center;
+          justify-content: center;
+        }
+      }
 
-            .key {
-                width: 80%;
-                padding-right: 20px;
-                word-break: break-all;
-            }
+      .yh-pic-box {
+        display: flex;
+        height: 100px;
 
-            .value {
-                width: 20%;
-                display: flex;
-                align-items: center;
-                justify-content: center;
-            }
+        .yh-pic-name {
+          width: 100px;
+          display: flex;
+          align-items: center;
+          justify-content: left;
         }
 
-        .yh-pic-box {
-            display: flex;
-            height: 100px;
+        .yh-pic-list {
+          width: 0;
+          flex: 1;
+          display: flex;
+        }
+      }
 
-            .yh-pic-name {
-                width: 100px;
-                display: flex;
-                align-items: center;
-                justify-content: left;
-            }
+      .yh-remark {
+        display: flex;
 
-            .yh-pic-list {
-                width: 0;
-                flex: 1;
-                display: flex;
-            }
+        .yh-remark-name {
+          width: 100px;
+          display: flex;
+          align-items: center;
+          justify-content: left;
         }
 
-        .yh-remark {
-            display: flex;
-
-            .yh-remark-name {
-                width: 100px;
-                display: flex;
-                align-items: center;
-                justify-content: left;
-            }
-
-            .yh-remark-value {
-                word-break: break-all;
-            }
+        .yh-remark-value {
+          word-break: break-all;
         }
+      }
     }
 
     .remark-box {
-        padding: 10px;
-        background-color: #f5f7fa;
-        border-radius: 8px;
-        min-height: 40px;
-        margin-bottom: 20px;
+      padding: 10px;
+      background-color: #f5f7fa;
+      border-radius: 8px;
+      min-height: 40px;
+      margin-bottom: 20px;
     }
-}
+  }
 </style>
\ No newline at end of file
diff --git a/src/views/propertySupervision/components/done.vue b/src/views/propertySupervision/components/done.vue
index dffa3b8..114be8a 100644
--- a/src/views/propertySupervision/components/done.vue
+++ b/src/views/propertySupervision/components/done.vue
@@ -1,236 +1,279 @@
 <template>
-    <div>
-        <avue-crud :option="option" :table-loading="loading" :data="data" ref="crud" v-model="form" :page.sync="page"
-            @search-change="searchChange" @search-reset="searchReset" @selection-change="selectionChange"
-            @current-change="currentChange" @size-change="sizeChange" @refresh-change="refreshChange" @on-load="onLoad">
-            <template slot-scope="{row, size, index}" slot="menu">
-                <el-button type="text" :size="size" icon="el-icon-info" v-if="permission.work_done_detail"
-                    @click.stop="handleDetail(row)">详情
-                </el-button>
-                <el-button type="text" :size="size" icon="el-icon-search" v-if="permission.work_done_follow"
-                    @click.stop="handleImage(row, index)">流程图
-                </el-button>
-            </template>
-            <template slot-scope="{row, size}" slot="processDefinitionVersion">
-                <el-tag :size="size">v{{ row.processDefinitionVersion }}</el-tag>
-            </template>
-            <template slot-scope="{row, size}" slot="linkPhone">
-                <el-button :size="size" type="text" @click="showStringDispose(row, 'linkPhoneflag')"
-                    v-text="textDispose(row, 'linkPhoneflag', 'linkPhone')">
-                </el-button>
-            </template>
-        </avue-crud>
-        <flow-design is-dialog :is-display.sync="flowBox" :process-instance-id="processInstanceId"></flow-design>
-    </div>
+  <div>
+    <avue-crud :option="option" :table-loading="loading" :data="data" ref="crud" v-model="form" :page.sync="page"
+      @search-change="searchChange" @search-reset="searchReset" @selection-change="selectionChange"
+      @current-change="currentChange" @size-change="sizeChange" @refresh-change="refreshChange" @on-load="onLoad">
+      <template slot-scope="{row, size, index}" slot="menu">
+        <el-button type="text" :size="size" icon="el-icon-info" v-if="permission.work_done_detail"
+          @click.stop="handleDetail(row)">详情
+        </el-button>
+        <el-button type="text" :size="size" icon="el-icon-search" v-if="permission.work_done_follow"
+          @click.stop="handleImage(row, index)">流程图
+        </el-button>
+      </template>
+      <template slot-scope="{row, size}" slot="processDefinitionVersion">
+        <el-tag :size="size">v{{ row.processDefinitionVersion }}</el-tag>
+      </template>
+      <template slot-scope="{row, size}" slot="linkPhone">
+        <el-button :size="size" type="text" @click="showStringDispose(row, 'linkPhoneflag')"
+          v-text="textDispose(row, 'linkPhoneflag', 'linkPhone')">
+        </el-button>
+      </template>
+    </avue-crud>
+    <flow-design is-dialog :is-display.sync="flowBox" :process-instance-id="processInstanceId"></flow-design>
+  </div>
 </template>
 
 <script>
-import {
+  import {
     mapGetters
-} from "vuex"
-import {
+  } from "vuex"
+  import {
     doneList
-} from "@/api/work/work"
-import {
+  } from "@/api/work/work"
+  import {
     flowCategory,
     flowRoute
-} from "@/util/flow"
+  } from "@/util/flow"
 
-export default {
-    data () {
-        return {
-            form: {},
-            selectionId: '',
-            selectionList: [],
-            query: {},
-            loading: true,
-            page: {
-                pageSize: 10,
-                currentPage: 1,
-                total: 0
-            },
-            processInstanceId: '',
-            flowBox: false,
-            workBox: false,
-            option: {
-                labelWidth: 120,
-                searchLabelWidth: 96,
-                searchShow: true,
-                searchMenuSpan: 3,
-                menuWidth: 140,
+  export default {
+    data() {
+      return {
+        form: {},
+        datetime: "",
+        selectionId: '',
+        selectionList: [],
+        query: {},
+        loading: true,
+        page: {
+          pageSize: 10,
+          currentPage: 1,
+          total: 0
+        },
+        processInstanceId: '',
+        flowBox: false,
+        workBox: false,
+        option: {
+          labelWidth: 120,
+          searchLabelWidth: 96,
+          searchShow: true,
+          searchMenuSpan: 3,
+          menuWidth: 140,
 
-                height: 'auto',
-                calcHeight: 30,
-                tip: false,
-                border: true,
-                index: true,
-                // selection: true,
-                editBtn: false,
-                addBtn: false,
-                viewBtn: false,
-                delBtn: false,
-                columnBtn: false,
-                dialogWidth: 900,
-                dialogClickModal: false,
-                header: false,
-                column: [
-                    {
-                        label: "流程分类",
-                        type: "select",
-                        row: true,
-                        dicUrl: "/api/blade-system/dict/dictionary?code=flow",
-                        props: {
-                            label: "dictValue",
-                            value: "dictKey"
-                        },
-                        dataType: "number",
-                        slot: true,
-                        prop: "category",
-                        // search: true,
-                        hide: true,
-                        width: 100,
-                    },
-                    {
-                        width: 100,
-                        label: '申请类型',
-                        prop: 'categoryName',
-                        // search: true,
-                    }, {
-                        width: 220,
-                        overHidden: true,
-                        label: "小区",
-                        prop: "districtId",
-                        searchSpan: 5,
-                        // search: true,
-                        type: 'tree',
-                        dicUrl: `/api/blade-district/district/getDistrictTree`,
-                        props: {
-                            label: "name",
-                            value: "id"
-                        },
-                        defaultExpandedKeys: ["361102003"],
-                        span: 12,
-                    }, {
-                        width: 110,
-                        label: '联系人',
-                        prop: 'linkman',
-                        // search: true,
-                    }, {
-                        width: 120,
-                        label: '联系电话',
-                        prop: 'linkPhone',
-                        // search: true,
-                        slot: true
-                    }, {
-                        label: '项目名称',
-                        prop: 'name',
-                        // search: true,
-                    },
-                    {
-                        label: '当前步骤',
-                        prop: 'taskName',
-                    },
-                    // {
-                    //     label: '流程版本',
-                    //     prop: 'processDefinitionVersion',
-                    //     slot: true,
-                    //     width: 80,
-                    // },
-                    {
-                        width: 144,
-                        label: '申请时间',
-                        prop: 'createTime',
-                    },
-                ]
+          height: 'auto',
+          calcHeight: 30,
+          tip: false,
+          border: true,
+          index: true,
+          // selection: true,
+          editBtn: false,
+          addBtn: false,
+          viewBtn: false,
+          delBtn: false,
+          columnBtn: false,
+          dialogWidth: 900,
+          dialogClickModal: false,
+          header: false,
+          column: [{
+              label: "流程分类",
+              type: "select",
+              row: true,
+              dicUrl: "/api/blade-system/dict/dictionary?code=flow",
+              props: {
+                label: "dictValue",
+                value: "dictKey"
+              },
+              dataType: "number",
+              slot: true,
+              prop: "category",
+              // search: true,
+              hide: true,
+              width: 100,
             },
-            data: []
-        }
+            {
+              width: 110,
+              label: '小区名称',
+              prop: 'districtName',
+              search: true,
+              hide: true,
+            }, {
+              label: '项目名称',
+              prop: 'name',
+              search: true,
+            },
+            {
+              label: "申请时间",
+              prop: "dateTime",
+              type: "datetimerange",
+              defaultTime: ['00:00:00', '23:59:59'],
+              format: 'yyyy-MM-dd HH:mm:ss',
+              valueFormat: 'yyyy-MM-dd HH:mm:ss',
+              startPlaceholder: '开始范围自定义',
+              endPlaceholder: '结束范围自定义',
+              searchSpan: 5,
+              searchRange: true,
+              hide: true,
+              addDisplay: false,
+              editDisplay: false,
+              viewDisplay: false,
+              search: true,
+              rules: [{
+                required: true,
+                message: "请选择申请时间",
+                trigger: "blur",
+              }, ],
+            },
+            {
+              width: 100,
+              label: '申请类型',
+              prop: 'categoryName',
+              // search: true,
+            }, {
+              width: 220,
+              overHidden: true,
+              label: "小区",
+              prop: "districtId",
+              searchSpan: 5,
+              // search: true,
+              type: 'tree',
+              dicUrl: `/api/blade-district/district/getDistrictTree`,
+              props: {
+                label: "name",
+                value: "id"
+              },
+              defaultExpandedKeys: ["361102003"],
+              span: 12,
+            }, {
+              width: 110,
+              label: '联系人',
+              prop: 'linkman',
+              // search: true,
+            }, {
+              width: 120,
+              label: '联系电话',
+              prop: 'linkPhone',
+              // search: true,
+              slot: true
+            }, {
+              label: '项目名称',
+              prop: 'name',
+              // search: true,
+            },
+            {
+              label: '当前步骤',
+              prop: 'taskName',
+            },
+            // {
+            //     label: '流程版本',
+            //     prop: 'processDefinitionVersion',
+            //     slot: true,
+            //     width: 80,
+            // },
+            {
+              width: 144,
+              label: '申请时间',
+              prop: 'createTime',
+            },
+          ]
+        },
+        data: []
+      }
     },
     computed: {
-        ...mapGetters(["permission", "flowRoutes"]),
-        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")
-                    }
-                }
+      ...mapGetters(["permission", "flowRoutes"]),
+      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]
-        },
+      showStringDispose(row, type) {
+        row[type] = !row[type]
+      },
 
-        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()
-        },
-        handleDetail (row) {
-            this.$router.push({
-                path: `/propertySupervision/process/${flowRoute(this.flowRoutes, row.category)}/detail/${row.processInstanceId}/${row.businessId}`
-            })
-        },
-        handleImage (row) {
-            this.processInstanceId = row.processInstanceId
-            this.flowBox = true
-        },
-        currentChange (currentPage) {
-            this.page.currentPage = currentPage
-        },
-        sizeChange (pageSize) {
-            this.page.pageSize = pageSize
-        },
-        refreshChange () {
-            this.onLoad(this.page, this.query)
-        },
-        onLoad (page, params = {}) {
-            const query = {
-                ...this.query,
-                category: (params.category) ? flowCategory(params.category) : null
-            }
-            this.loading = true
-            doneList(page.currentPage, page.pageSize, Object.assign(params, query)).then(res => {
-                const data = {
-                    ...res.data.data,
-                    records: res.data.data.records.map(item => {
-                        return {
-                            ...item,
-                            'linkPhoneflag': false
-                        }
-                    })
-                }
-                this.page.total = data.total
-                this.data = data.records
-                this.loading = false
-                this.selectionClear()
-            })
+      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()
+      },
+      handleDetail(row) {
+        this.$router.push({
+          path: `/propertySupervision/process/${flowRoute(this.flowRoutes, row.category)}/detail/${row.processInstanceId}/${row.businessId}`
+        })
+      },
+      handleImage(row) {
+        this.processInstanceId = row.processInstanceId
+        this.flowBox = true
+      },
+      currentChange(currentPage) {
+        this.page.currentPage = currentPage
+      },
+      sizeChange(pageSize) {
+        this.page.pageSize = pageSize
+      },
+      refreshChange() {
+        this.onLoad(this.page, this.query)
+      },
+      onLoad(page, params = {}) {
+        let query = {
+          ...this.query,
+          category: (params.category) ? flowCategory(params.category) : null
         }
+        const {
+          dateTime
+        } = query
+
+        if (dateTime) {
+          query = {
+            startTimes: dateTime[0],
+            endTimes: dateTime[1],
+          }
+        }
+        this.loading = true
+        doneList(page.currentPage, page.pageSize, Object.assign(params, query)).then(res => {
+          const data = {
+            ...res.data.data,
+            records: res.data.data.records.map(item => {
+              return {
+                ...item,
+                'linkPhoneflag': false
+              }
+            })
+          }
+          this.page.total = data.total
+          this.data = data.records
+          this.loading = false
+          this.selectionClear()
+        })
+      }
     }
-}
+  }
 </script>
\ No newline at end of file
diff --git a/src/views/propertySupervision/components/todo.vue b/src/views/propertySupervision/components/todo.vue
index 5ce4198..e042765 100644
--- a/src/views/propertySupervision/components/todo.vue
+++ b/src/views/propertySupervision/components/todo.vue
@@ -1,268 +1,314 @@
 <template>
-    <div>
-        <avue-crud :option="option" :table-loading="loading" :data="data" ref="crud" v-model="form"
-            @search-change="searchChange" @search-reset="searchReset" @selection-change="selectionChange"
-            @current-change="currentChange" @size-change="sizeChange" @refresh-change="refreshChange" @on-load="onLoad">
-            <template slot-scope="{row, size, index}" slot="menu">
-                <el-button type="text" :size="size" icon="el-icon-s-check" v-if="permission.work_todo_handle"
-                    @click.stop="handleWork(row)">处理
-                </el-button>
-                <el-button type="text" :size="size" icon="el-icon-info" v-if="permission.work_todo_detail"
-                    @click.stop="handleDetail(row)">详情
-                </el-button>
-                <el-button type="text" :size="size" icon="el-icon-search" v-if="permission.work_todo_follow"
-                    @click.stop="handleImage(row, index)">流程图
-                </el-button>
-            </template>
+  <div>
+    <avue-crud :option="option" :table-loading="loading" :data="data" ref="crud" v-model="form"
+      @search-change="searchChange" @search-reset="searchReset" @selection-change="selectionChange"
+      @current-change="currentChange" @size-change="sizeChange" @refresh-change="refreshChange" @on-load="onLoad">
+      <template slot-scope="{row, size, index}" slot="menu">
+        <el-button type="text" :size="size" icon="el-icon-s-check" v-if="permission.work_todo_handle"
+          @click.stop="handleWork(row)">处理
+        </el-button>
+        <el-button type="text" :size="size" icon="el-icon-info" v-if="permission.work_todo_detail"
+          @click.stop="handleDetail(row)">详情
+        </el-button>
+        <el-button type="text" :size="size" icon="el-icon-search" v-if="permission.work_todo_follow"
+          @click.stop="handleImage(row, index)">流程图
+        </el-button>
+      </template>
 
-            <template slot-scope="{row, size}" slot="processDefinitionVersion">
-                <el-tag :size="size">v{{ row.processDefinitionVersion }}</el-tag>
-            </template>
-            <template slot-scope="{row, size}" slot="linkPhone">
-                <el-button :size="size" type="text" @click="showStringDispose(row, 'linkPhoneflag')"
-                    v-text="textDispose(row, 'linkPhoneflag', 'linkPhone')">
-                </el-button>
-            </template>
-        </avue-crud>
-        <flow-design is-dialog :is-display.sync="flowBox" :process-instance-id="processInstanceId"></flow-design>
-    </div>
+      <template slot-scope="{row, size}" slot="processDefinitionVersion">
+        <el-tag :size="size">v{{ row.processDefinitionVersion }}</el-tag>
+      </template>
+      <template slot-scope="{row, size}" slot="linkPhone">
+        <el-button :size="size" type="text" @click="showStringDispose(row, 'linkPhoneflag')"
+          v-text="textDispose(row, 'linkPhoneflag', 'linkPhone')">
+        </el-button>
+      </template>
+    </avue-crud>
+    <flow-design is-dialog :is-display.sync="flowBox" :process-instance-id="processInstanceId"></flow-design>
+  </div>
 </template>
-  
+
 <script>
-import {
+  import {
     mapGetters
-} from "vuex"
-import {
+  } from "vuex"
+  import {
     todoList
-} from "@/api/work/work"
-import {
+  } from "@/api/work/work"
+  import {
     flowCategory,
     flowRoute
-} from "@/util/flow"
+  } from "@/util/flow"
 
-export default {
-    data () {
-        return {
-            typeStatus: 1,
-            form: {},
-            selectionId: '',
-            selectionList: [],
-            query: {},
-            loading: true,
-            page: {
-                pageSize: 10,
-                currentPage: 1,
-                total: 0
-            },
-            processInstanceId: '',
-            flowBox: false,
-            workBox: false,
-            option: {
-                labelWidth: 120,
-                searchLabelWidth: 96,
-                searchShow: true,
-                searchMenuSpan: 3,
-                menuWidth: 210,
+  export default {
+    data() {
+      return {
+        datetime: "",
+        typeStatus: 1,
+        form: {},
+        selectionId: '',
+        selectionList: [],
+        query: {},
+        loading: true,
+        page: {
+          pageSize: 10,
+          currentPage: 1,
+          total: 0
+        },
+        processInstanceId: '',
+        flowBox: false,
+        workBox: false,
+        option: {
+          labelWidth: 120,
+          searchLabelWidth: 96,
+          searchShow: true,
+          searchMenuSpan: 3,
+          menuWidth: 210,
 
-                height: 'auto',
-                calcHeight: 30,
-                tip: false,
-                simplePage: true,
-                border: true,
-                index: true,
-                // selection: true,
-                editBtn: false,
-                addBtn: false,
-                viewBtn: false,
-                delBtn: false,
-                columnBtn: false,
-                dialogWidth: 900,
-                dialogClickModal: false,
-                header: false,
-                column: [{
-                    label: "流程分类",
-                    type: "select",
-                    row: true,
-                    dicUrl: "/api/blade-system/dict/dictionary?code=flow",
-                    props: {
-                        label: "dictValue",
-                        value: "dictKey"
-                    },
-                    dataType: "number",
-                    slot: true,
-                    prop: "category",
-                    // search: true,
-                    hide: true,
-                    width: 100,
-                },
-                {
-                    width: 100,
-                    label: '申请类型',
-                    prop: 'categoryName',
-                    // search: true,
-                },
-                {
-                    width: 220,
-                    overHidden: true,
-                    label: "小区",
-                    prop: "districtId",
-                    // search: true,
-                    type: 'tree',
-                    dicUrl: `/api/blade-district/district/getDistrictTree`,
-                    props: {
-                        label: "name",
-                        value: "id"
-                    },
-                    defaultExpandedKeys: ["361102003"],
-                    searchSpan: 5,
-                    span: 12,
-                },
-                {
-                    width: 110,
-                    label: '联系人',
-                    prop: 'linkman',
-                    // search: true,
-                },
-                {
-                    width: 120,
-                    label: '联系电话',
-                    prop: 'linkPhone',
-                    // search: true,
-                    slot: true
-                },
-                {
-                    label: '项目名称',
-                    prop: 'name',
-                    // search: true,
-                },
-                {
-                    label: '当前步骤',
-                    prop: 'taskName',
-                },
-                // {
-                //   label: '流程版本',
-                //   prop: 'processDefinitionVersion',
-                //   // slot: true,
-                //   width: 80,
-                // },
-                {
-                    width: 144,
-                    label: '申请时间',
-                    prop: 'createTime',
-                },
-                ]
+          height: 'auto',
+          calcHeight: 30,
+          tip: false,
+          simplePage: true,
+          border: true,
+          index: true,
+          // selection: true,
+          editBtn: false,
+          addBtn: false,
+          viewBtn: false,
+          delBtn: false,
+          columnBtn: false,
+          dialogWidth: 900,
+          dialogClickModal: false,
+          header: false,
+          column: [{
+              label: "流程分类",
+              type: "select",
+              row: true,
+              dicUrl: "/api/blade-system/dict/dictionary?code=flow",
+              props: {
+                label: "dictValue",
+                value: "dictKey"
+              },
+              dataType: "number",
+              slot: true,
+              prop: "category",
+              // search: true,
+              hide: true,
+              width: 100,
             },
-            data: []
-        }
+            {
+              width: 100,
+              label: '申请类型',
+              prop: 'categoryName',
+              // search: true,
+            },
+            {
+              width: 220,
+              overHidden: true,
+              label: "小区",
+              prop: "districtId",
+              // search: true,
+              type: 'tree',
+              dicUrl: `/api/blade-district/district/getDistrictTree`,
+              props: {
+                label: "name",
+                value: "id"
+              },
+              defaultExpandedKeys: ["361102003"],
+              searchSpan: 5,
+              span: 12,
+            },
+            {
+              width: 110,
+              label: '小区名称',
+              prop: 'districtName',
+              search: true,
+              hide: true,
+            },
+            // {
+            //   label: '项目名称',
+            //   prop: 'name',
+            //   search: true,
+            // },
+            {
+              label: "申请时间",
+              prop: "dateTime",
+              type: "datetimerange",
+              defaultTime: ['00:00:00', '23:59:59'],
+              format: 'yyyy-MM-dd HH:mm:ss',
+              valueFormat: 'yyyy-MM-dd HH:mm:ss',
+              startPlaceholder: '开始范围自定义',
+              endPlaceholder: '结束范围自定义',
+              searchSpan: 5,
+              searchRange: true,
+              hide: true,
+              addDisplay: false,
+              editDisplay: false,
+              viewDisplay: false,
+              search: true,
+              rules: [{
+                required: true,
+                message: "请选择申请时间",
+                trigger: "blur",
+              }, ],
+            },
+
+            {
+              width: 110,
+              label: '联系人',
+              prop: 'linkman',
+              // search: true,
+            },
+            {
+              width: 120,
+              label: '联系电话',
+              prop: 'linkPhone',
+              // search: true,
+              slot: true
+            },
+            {
+              label: '项目名称',
+              prop: 'name',
+              // search: true,
+            },
+            {
+              label: '当前步骤',
+              prop: 'taskName',
+            },
+            // {
+            //   label: '流程版本',
+            //   prop: 'processDefinitionVersion',
+            //   // slot: true,
+            //   width: 80,
+            // },
+            {
+              width: 144,
+              label: '申请时间',
+              prop: 'createTime',
+            },
+          ]
+        },
+        data: []
+      }
     },
     computed: {
-        ...mapGetters(["permission", "flowRoutes"]),
-        ids () {
-            let ids = []
-            this.selectionList.forEach(ele => {
-                ids.push(ele.id)
-            })
-            return ids.join(",")
-        },
+      ...mapGetters(["permission", "flowRoutes"]),
+      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")
-                    }
-                }
+      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: {
 
-        changeType (type) {
-            this.typeStatus = type
-            this.page.currentPage = 1
-            // this.onLoad(this.page)
-        },
-        showStringDispose (row, type) {
-            row[type] = !row[type]
-        },
+      changeType(type) {
+        this.typeStatus = type
+        this.page.currentPage = 1
+        // this.onLoad(this.page)
+      },
+      showStringDispose(row, type) {
+        row[type] = !row[type]
+      },
 
-        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()
-        },
-        handleWork (row) {
-            this.$router.push({
-                path: `/propertySupervision/process/${flowRoute(this.flowRoutes, row.category)}/handle/${row.taskId}/${row.processInstanceId}/${row.businessId}`
-            })
-        },
-        handleDetail (row) {
-            this.$router.push({
-                path: `/propertySupervision/process/${flowRoute(this.flowRoutes, row.category)}/detail/${row.processInstanceId}/${row.businessId}`
-            })
-        },
-        handleImage (row) {
-            this.processInstanceId = row.processInstanceId
-            this.flowBox = true
-        },
-        currentChange (currentPage) {
-            this.page.currentPage = currentPage
-        },
-        sizeChange (pageSize) {
-            this.page.pageSize = pageSize
-        },
-        refreshChange () {
-            this.onLoad(this.page, this.query)
-        },
-        onLoad (page, params = {}) {
-            const query = {
-                ...this.query,
-                category: (params.category) ? flowCategory(params.category) : null
-            }
-            this.loading = true
-            todoList(page.currentPage, page.pageSize, Object.assign(params, query)).then(res => {
-                const data = {
-                    ...res.data.data,
-                    records: res.data.data.records.map(item => {
-                        return {
-                            ...item,
-                            'linkPhoneflag': false
-                        }
-                    })
-                }
-                this.page.total = data.total
-                this.data = data.records
-                this.loading = false
-                this.selectionClear()
-            })
+      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()
+      },
+      handleWork(row) {
+        this.$router.push({
+          path: `/propertySupervision/process/${flowRoute(this.flowRoutes, row.category)}/handle/${row.taskId}/${row.processInstanceId}/${row.businessId}`
+        })
+      },
+      handleDetail(row) {
+        this.$router.push({
+          path: `/propertySupervision/process/${flowRoute(this.flowRoutes, row.category)}/detail/${row.processInstanceId}/${row.businessId}`
+        })
+      },
+      handleImage(row) {
+        this.processInstanceId = row.processInstanceId
+        this.flowBox = true
+      },
+      currentChange(currentPage) {
+        this.page.currentPage = currentPage
+      },
+      sizeChange(pageSize) {
+        this.page.pageSize = pageSize
+      },
+      refreshChange() {
+        this.onLoad(this.page, this.query)
+      },
+      onLoad(page, params = {}) {
+        let query = {
+          ...this.query,
+          category: (params.category) ? flowCategory(params.category) : null
         }
-    }
-}
-</script>
-  
-  
-<style lang="scss" scoped>
-.avue-upload__icon {
-    line-height: 6;
-}
+        const {
+          dateTime
+        } = query
 
-.tab-list {
+        if (dateTime) {
+          query = {
+            startTimes: dateTime[0],
+            endTimes: dateTime[1],
+          }
+        }
+        this.loading = true
+        todoList(page.currentPage, page.pageSize, Object.assign(params, query)).then(res => {
+          const data = {
+            ...res.data.data,
+            records: res.data.data.records.map(item => {
+              return {
+                ...item,
+                'linkPhoneflag': false
+              }
+            })
+          }
+          this.page.total = data.total
+          this.data = data.records
+          this.loading = false
+          this.selectionClear()
+        })
+      }
+    }
+  }
+</script>
+
+
+<style lang="scss" scoped>
+  .avue-upload__icon {
+    line-height: 6;
+  }
+
+  .tab-list {
     display: flex;
     margin-right: 6px;
     border: 1px solid #dcdfe6;
@@ -272,55 +318,55 @@
     width: 121px;
 
     &>div {
-        display: flex;
-        align-items: center;
-        justify-content: center;
-        width: 60px;
-        cursor: pointer;
-        font-size: 12px;
+      display: flex;
+      align-items: center;
+      justify-content: center;
+      width: 60px;
+      cursor: pointer;
+      font-size: 12px;
     }
 
     &>div:nth-child(2) {
-        border-left: 1px solid #dcdfe6;
-        // border-right: 1px solid #dcdfe6;
+      border-left: 1px solid #dcdfe6;
+      // border-right: 1px solid #dcdfe6;
     }
 
     .choose {
-        color: #FFF;
-        background-color: #409dfe;
+      color: #FFF;
+      background-color: #409dfe;
     }
-}
+  }
 
-:deep(.avue-crud__left) {
+  :deep(.avue-crud__left) {
     display: flex;
     align-items: center;
-}
+  }
 
-:deep(.el-drawer__header) {
+  :deep(.el-drawer__header) {
     margin-bottom: 10px;
-}
+  }
 
-:deep(.el-radio__input.is-disabled+span.el-radio__label) {
+  :deep(.el-radio__input.is-disabled+span.el-radio__label) {
     color: #000;
-}
+  }
 
-:deep(.el-radio__input.is-checked+.el-radio__label) {
+  :deep(.el-radio__input.is-checked+.el-radio__label) {
     color: #409EFF !important;
-}
+  }
 
-:deep(.el-radio__input.is-checked .el-radio__inner::after) {
+  :deep(.el-radio__input.is-checked .el-radio__inner::after) {
     background-color: #FFF;
-}
+  }
 
-:deep(.el-radio__input.is-checked .el-radio__inner) {
+  :deep(.el-radio__input.is-checked .el-radio__inner) {
     background-color: #409EFF;
-}
+  }
 
-:deep(.el-radio) {
+  :deep(.el-radio) {
     margin-right: 20px;
-}
+  }
 
-.title {
+  .title {
     margin: 10px;
     height: 40px;
     background-color: #eee;
@@ -328,119 +374,119 @@
     align-items: center;
 
     .icon {
-        width: 4px;
-        height: 18px;
-        background-color: #409dfe;
-        margin: 0 10px;
-        color: transparent;
+      width: 4px;
+      height: 18px;
+      background-color: #409dfe;
+      margin: 0 10px;
+      color: transparent;
     }
-}
+  }
 
-.basic-info {
+  .basic-info {
     padding: 0 20px;
     font-size: 14px;
 
     .info-item {
+      display: flex;
+      padding: 10px;
+
+      .info-name {
+        width: 100px;
         display: flex;
-        padding: 10px;
+        align-items: center;
+      }
 
-        .info-name {
-            width: 100px;
-            display: flex;
-            align-items: center;
-        }
-
-        .info-value {
-            display: flex;
-            align-items: center;
-        }
+      .info-value {
+        display: flex;
+        align-items: center;
+      }
     }
-}
+  }
 
-.question-list {
+  .question-list {
     padding: 0 20px;
     font-size: 14px;
 
     .question-type {
-        height: 60px;
-        display: flex;
-        align-items: center;
-        cursor: pointer;
-        justify-content: space-between;
-        padding-right: 20px;
+      height: 60px;
+      display: flex;
+      align-items: center;
+      cursor: pointer;
+      justify-content: space-between;
+      padding-right: 20px;
 
-        .type-name {}
+      .type-name {}
 
-        .icon-box {}
+      .icon-box {}
     }
 
     .question-item {
-        margin-bottom: 20px;
-        padding: 10px;
-        background: #f5f7fa;
-        border-radius: 8px;
+      margin-bottom: 20px;
+      padding: 10px;
+      background: #f5f7fa;
+      border-radius: 8px;
 
-        &>div {
-            margin: 14px 0;
+      &>div {
+        margin: 14px 0;
+      }
+
+      .question-name {
+        display: flex;
+
+        .key {
+          width: 80%;
+          padding-right: 20px;
+          word-break: break-all;
         }
 
-        .question-name {
-            display: flex;
+        .value {
+          width: 20%;
+          display: flex;
+          align-items: center;
+          justify-content: center;
+        }
+      }
 
-            .key {
-                width: 80%;
-                padding-right: 20px;
-                word-break: break-all;
-            }
+      .yh-pic-box {
+        display: flex;
+        height: 100px;
 
-            .value {
-                width: 20%;
-                display: flex;
-                align-items: center;
-                justify-content: center;
-            }
+        .yh-pic-name {
+          width: 100px;
+          display: flex;
+          align-items: center;
+          justify-content: left;
         }
 
-        .yh-pic-box {
-            display: flex;
-            height: 100px;
+        .yh-pic-list {
+          width: 0;
+          flex: 1;
+          display: flex;
+        }
+      }
 
-            .yh-pic-name {
-                width: 100px;
-                display: flex;
-                align-items: center;
-                justify-content: left;
-            }
+      .yh-remark {
+        display: flex;
 
-            .yh-pic-list {
-                width: 0;
-                flex: 1;
-                display: flex;
-            }
+        .yh-remark-name {
+          width: 100px;
+          display: flex;
+          align-items: center;
+          justify-content: left;
         }
 
-        .yh-remark {
-            display: flex;
-
-            .yh-remark-name {
-                width: 100px;
-                display: flex;
-                align-items: center;
-                justify-content: left;
-            }
-
-            .yh-remark-value {
-                word-break: break-all;
-            }
+        .yh-remark-value {
+          word-break: break-all;
         }
+      }
     }
 
     .remark-box {
-        padding: 10px;
-        background-color: #f5f7fa;
-        border-radius: 8px;
-        min-height: 40px;
-        margin-bottom: 20px;
+      padding: 10px;
+      background-color: #f5f7fa;
+      border-radius: 8px;
+      min-height: 40px;
+      margin-bottom: 20px;
     }
-}
+  }
 </style>
\ No newline at end of file
diff --git a/src/views/wel/index.vue b/src/views/wel/index.vue
index 09a7699..9eceab5 100644
--- a/src/views/wel/index.vue
+++ b/src/views/wel/index.vue
@@ -12,7 +12,7 @@
         </div>
     </div>
 </template>
-  
+
 <script>
 import { getToken } from '@/util/auth'
 import { getStore } from "@/util/store"
@@ -105,7 +105,10 @@
                 }
             ]
 
-            if (this.globalUserInfo.role_name == 'administrator' || this.globalUserInfo.role_name.split(',').find(item => item == 'admin')) {
+            if (this.globalUserInfo.role_name == 'administrator' ||
+                this.globalUserInfo.role_name.indexOf('jdgly') != -1 ||
+                this.globalUserInfo.role_name.indexOf('sqgly') != -1 ||
+                this.globalUserInfo.role_name.split(',').find(item => item == 'admin')) {
                 this.homeMenuData.push({
                     imageUrl: 'img/jsc.png',
                     url: `http://srgdjczzxtpt.com:2181/uniform-auth/login?app=app_smart_aoi&Blade-Auth=bearer ${getToken()}`,
@@ -128,7 +131,7 @@
     mouted () { },
 }
 </script>
-  
+
 <style lang="scss">
 #homeL {
     display: flex;
diff --git a/vue.config.js b/vue.config.js
index 80cb24d..8d63659 100644
--- a/vue.config.js
+++ b/vue.config.js
@@ -38,7 +38,7 @@
         proxy: {
             "/api": {
                 //本地服务接口地址
-                target:"http://192.168.2.140:9528",
+                target:"http://192.168.2.111:9528",
                 // target: "https://srgdjczzxtpt.com:2080/api",
                 // target: "https://kt39592615.goho.co",
                 // target: "http://z4042833u6.wicp.vip",

--
Gitblit v1.9.3