guoshilong
2024-01-06 b2df14c3f2779b972e5dd1eeb42efcbe8cca8ee4
党组织及党成员
2 files modified
5 files added
1350 ■■■■■ changed files
src/api/partyOrganization/partyOrganization.js 49 ●●●●● patch | view | raw | blame | history
src/api/partyOrganization/partyOrganizationMember.js 49 ●●●●● patch | view | raw | blame | history
src/api/userHouse/list/houseHold.js 12 ●●●●● patch | view | raw | blame | history
src/util/validate.js 16 ●●●● patch | view | raw | blame | history
src/views/cGovernance/littleThing.vue 173 ●●●●● patch | view | raw | blame | history
src/views/property/components/partyOrganizationMember.vue 572 ●●●●● patch | view | raw | blame | history
src/views/property/partyOrganization.vue 479 ●●●●● patch | view | raw | blame | history
src/api/partyOrganization/partyOrganization.js
New file
@@ -0,0 +1,49 @@
import request from '@/router/axios';
export const getList = (current, size, params) => {
  return request({
    url: '/api/partyOrganization/partyOrganization/page',
    method: 'get',
    params: {
      ...params,
      current,
      size,
    }
  })
}
export const getDetail = (id) => {
  return request({
    url: '/api/partyOrganization/partyOrganization/detail',
    method: 'get',
    params: {
      id
    }
  })
}
export const remove = (ids) => {
  return request({
    url: '/api/partyOrganization/partyOrganization/remove',
    method: 'post',
    params: {
      ids,
    }
  })
}
export const add = (row) => {
  return request({
    url: '/api/partyOrganization/partyOrganization/submit',
    method: 'post',
    data: row
  })
}
export const update = (row) => {
  return request({
    url: '/api/partyOrganization/partyOrganization/submit',
    method: 'post',
    data: row
  })
}
src/api/partyOrganization/partyOrganizationMember.js
New file
@@ -0,0 +1,49 @@
import request from '@/router/axios';
export const getList = (current, size, params) => {
  return request({
    url: '/api/partyOrganizationMember/partyOrganizationMember/page',
    method: 'get',
    params: {
      ...params,
      current,
      size,
    }
  })
}
export const getDetail = (id) => {
  return request({
    url: '/api/partyOrganizationMember/partyOrganizationMember/detail',
    method: 'get',
    params: {
      id
    }
  })
}
export const remove = (ids) => {
  return request({
    url: '/api/partyOrganizationMember/partyOrganizationMember/delete',
    method: 'post',
    params: {
      ids,
    }
  })
}
export const add = (row) => {
  return request({
    url: '/api/partyOrganizationMember/partyOrganizationMember/add',
    method: 'post',
    data: row
  })
}
export const update = (row) => {
  return request({
    url: '/api/partyOrganizationMember/partyOrganizationMember/edit',
    method: 'post',
    data: row
  })
}
src/api/userHouse/list/houseHold.js
@@ -12,6 +12,16 @@
  })
}
export const getAllHouseHold = ( params) => {
  return request({
    url: '/api/blade-household/household/getAllHouseHold',
    method: 'get',
    params: {
      ...params,
    }
  })
}
export const getPageList = (current, size, params) => {
  return request({
    url: '/api/blade-household/household/page',
@@ -78,4 +88,4 @@
      type
    }
  })
}
}
src/util/validate.js
@@ -29,6 +29,18 @@
}
/**
 * 手机号码校验
 */
export function validatePhone(rule, value, callback) {
  let reg = /^1[3456789]\d{9}$/
  if (!reg.test(value)) {
    return callback(new Error('输入的手机号码格式错误'))
  }
  return callback()
}
/**
 * 电话号码
 * @param {*} s
 */
@@ -179,7 +191,7 @@
    let result = true;
    let msg = '';
    var isPhone = /^0\d{2,3}-?\d{7,8}$/;
    //增加134 减少|1349[0-9]{7},增加181,增加145,增加17[678]
    //增加134 减少|1349[0-9]{7},增加181,增加145,增加17[678]
    if (!validatenull(phone)) {
        if (phone.length == 11) {
            if (isPhone.test(phone)) {
@@ -250,4 +262,4 @@
        return false;
    }
    return false;
}
}
src/views/cGovernance/littleThing.vue
New file
@@ -0,0 +1,173 @@
<template>
<!--微小事-->
  <basic-container>
    <avue-crud :option="option" :table-loading="loading" :data="data" :page.sync="page" ref="crud" v-model="form"
               :permission="permissionList" @search-change="searchChange" @search-reset="searchReset"
               @selection-change="selectionChange" @current-change="currentChange" @size-change="sizeChange"
               @refresh-change="refreshChange" @on-load="onLoad">
    </avue-crud>
  </basic-container>
</template>
<script>
import {mapGetters} from "vuex";
import {getList} from "@/api/punch_card";
import website from "@/config/website";
export default {
  name: "littleThing",
  data () {
    return {
      form: {},
      query: {},
      loading: true,
      page: {
        pageSize: 10,
        currentPage: 1,
        total: 0,
      },
      datetime: "",
      selectionList: [],
      option: {
        border: true,
        index: true,
        selection: false,
        height: "auto",
        calcHeight: 54,
        dialogWidth: 950,
        tip: false,
        searchShow: true,
        searchMenuSpan: 3,
        //stripe:true,
        viewBtn: true,
        excelBtn: true,
        dialogClickModal: false,
        column: [
          {
            label: "所属街道",
            prop: "name",
          },
          {
            label: "所属社区",
            prop: "name",
          },
          {
            label: "微小事内容",
            prop: "name",
          },
          {
            label: "相关材料",
            prop: "name",
          },
          {
            label: "上报来源",
            prop: "name",
          },
          {
            label: "提交人",
            prop: "name",
          },
          {
            label: "联系方式",
            prop: "name",
          },
          {
            label: "回复状态",
            prop: "name",
          },
        ],
      },
      data: [],
    }
  },
  watch: {
  },
  computed: {
    ...mapGetters(["permission", "userInfo"]),
    permissionList () {
      return {
        addBtn: this.vaildData(this.permission.gridWorkLog_add, true),
        viewBtn: this.vaildData(this.permission.gridWorkLog_view, true),
        delBtn: this.vaildData(this.permission.gridWorkLog_delete, true),
        editBtn: this.vaildData(this.permission.gridWorkLog_edit, true),
      }
    },
    ids () {
      let ids = []
      this.selectionList.forEach((ele) => {
        ids.push(ele.id)
      })
      return ids.join(",")
    },
  },
  methods: {
    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()
    },
    currentChange (currentPage) {
      this.page.currentPage = currentPage
    },
    sizeChange (pageSize) {
      this.page.pageSize = pageSize
    },
    refreshChange () {
      this.onLoad(this.page, this.query)
    },
    onLoad (page, params = {}) {
      this.loading = true
      const { dateTime } = this.query
      if (dateTime) {
        this.query = {
          startTime: dateTime[0],
          endTime: dateTime[1],
        }
      }
      getList(page.currentPage, page.pageSize, Object.assign(params, this.query)).then(res => {
        const data = res.data.data
        this.page.total = data.total
        this.data = data.records.map(item => {
          if (item.img && item.img.length > 0) {
            var urls = []
            var names = item.img.split(",")
            names.forEach(name => {
              urls.push(website.minioUrl + name)
            })
            item.img = urls.join(",")
          }
          item.lat = Number(item.lat).toFixed(6)
          item.lng = Number(item.lng).toFixed(6)
          return item
        })
        this.loading = false
        this.selectionClear()
      })
    }
  },
}
</script>
<style scoped>
</style>
src/views/property/components/partyOrganizationMember.vue
New file
@@ -0,0 +1,572 @@
<template>
  <basic-container>
    <avue-crud :option="option" :search.sync="search" :table-loading="loading" :data="data" ref="crud" v-model="form"
               :permission="permissionList" @row-del="rowDel" @row-update="rowUpdate" @row-save="rowSave"
               :before-open="beforeOpen" :page.sync="page" @search-change="searchChange" @search-reset="searchReset"
               @selection-change="selectionChange" @current-change="currentChange" @size-change="sizeChange"
               @refresh-change="refreshChange">
      <template slot="menuLeft">
        <el-button type="danger" size="small" plain icon="el-icon-delete" v-if="permission.household_delete"
                   @click="handleDelete">删 除
        </el-button>
      </template>
      <template slot="householdIdType" slot-scope="{item,value,label}">
        <span>{{ item.name }}({{item.phoneNumber}})</span>
      </template>
      <template slot-scope="{row}" slot="phoneNumber">
        <el-button type="text" @click="showStringDispose(row, 'phoneNumberflag')">
          {{ textDispose(row, 'phoneNumberflag', 'phoneNumber') }}
        </el-button>
      </template>
      <template slot-scope="{row}" slot="idCard">
        <el-button type="text" @click="showStringDispose(row, 'idCardflag')"
                   v-text="textDispose(row, 'idCardflag', 'idCard')"></el-button>
      </template>
    </avue-crud>
  </basic-container>
</template>
<script>
import {mapGetters} from "vuex";
import {add, getDetail, getList, remove, update} from "@/api/partyOrganization/partyOrganizationMember";
import {validatePhone} from "@/util/validate";
import {getAllHouseHold,getDetatils as householdDetail} from "@/api/userHouse/list/houseHold";
import func from "@/util/func";
import website from "@/config/website";
const labelWidth = 100;
const searchSpan = 5;
export default {
  name: "partyOrganizationMember",
  data () {
    return {
      row: {},
      userList: [],
      form: {},
      search: {},
      excelBox: false,
      selectionList: [],
      query: {},
      loading: true,
      page: {
        pageSize: 10,
        currentPage: 1,
        total: 0
      },
      option: {
        height: 680,
        calcHeight: 54,
        tip: false,
        searchShow: true,
        border: true,
        index: true,
        selection: true,
        dialogClickModal: false,
        searchMenuSpan: 6,
        menuWidth: 280,
        column: [
          {
            label:"姓名",
            labelWidth: labelWidth,
            prop: "houseHoldName",
            display:false,
            searchSpan: searchSpan,
            search:true,
          },
          {
            label: "姓名",
            labelWidth:labelWidth,
            prop: "householdId",
            type: 'select',
            remote: true,
            hide:true,
            dicUrl:"",
            props: {
              label: 'name',
              value: 'id',
            },
            dicData:[],
            rules: [
              {
                required: true,
                message: '请输入姓名',
                trigger: 'blur'
              }
            ],
          },
          {
            label: "手机号",
            labelWidth:labelWidth,
            prop: "phoneNumber",
            search:true,
            searchSpan: searchSpan,
            rules: [{
              required: false,
              message: "请输入手机号",
              validator: validatePhone,
              trigger: ["blur","change"],
            }],
            disabled:true,
          },
          {
            label: "性别",
            labelWidth:labelWidth,
            prop: "gender",
            type: "select",
            hide: true,
            disabled:true,
            dicUrl: "/api/blade-system/dict-biz/dictionary?code=sex",
            dataType: "number",
            props: {
              label: "dictValue",
              value: "dictKey",
            },
          },
          {
            label: "生日",
            labelWidth:labelWidth,
            prop: "birthday",
            type: "date",
            format: "yyyy-MM-dd",
            valueFormat: "yyyy-MM-dd",
            hide: true,
            disabled: true,
          },
          {
            label: "证件类型",
            labelWidth:labelWidth,
            prop: "cardType",
            type: "select",
            dicUrl: "/api/blade-system/dict-biz/dictionary?code=cardType",
            props: {
              label: "dictValue",
              value: "dictKey",
            },
            disabled:true
          },
          {
            label: "证件号码",
            labelWidth:labelWidth,
            prop: "idCard",
            disabled: true
          },
          {
            label: "党员类型",
            labelWidth:labelWidth,
            prop: "partyMemberType",
            type: "select",
            dicUrl: "/api/blade-label/label/getLabelList?parentId=104",
            props: {
              label: "name",
              value: "id",
            },
            hide:true,
            rules: [{
              required: true,
              message: "请选择党员类型",
              trigger: ["blur","change"],
            },],
          },
          {
            label: "党员职务",
            labelWidth:labelWidth,
            prop: "partyMemberPost",
            type: "select",
            dicUrl: "/api/blade-system/dict-biz/dictionary?code=partyMemberPost",
            props: {
              label: "dictValue",
              value: "dictKey",
            },
            hide:true,
            rules: [{
              required: true,
              message: "请选择党员职务",
              trigger: ["blur","change"],
            },],
          },
          {
            label: "入党日期",
            labelWidth:labelWidth,
            prop: "joinDate",
            type: "date",
            format: "yyyy-MM-dd",
            valueFormat: "yyyy-MM-dd",
            hide: true,
            rules: [{
              required: true,
              message: "请选择入党日期",
              trigger: ["blur","change"],
            },],
          },
          {
            label: "转入日期",
            labelWidth:labelWidth,
            prop: "transferDate",
            type: "date",
            format: "yyyy-MM-dd",
            valueFormat: "yyyy-MM-dd",
            hide: true,
            rules: [{
              required: true,
              message: "请选择转入日期",
              trigger: ["blur","change"],
            },],
          },
          {
            label: "签入社区日",
            labelWidth:labelWidth,
            prop: "signInDate",
            type: "date",
            format: "yyyy-MM-dd",
            valueFormat: "yyyy-MM-dd",
            hide: true,
            rules: [{
              required: true,
              message: "请选择签入社区日",
              trigger: ["blur","change"],
            },],
          },
          {
            label: "是否先锋岗",
            labelWidth:labelWidth,
            prop: 'isPioneer',
            type: 'radio',
            button:true,
            value:2,
            dicData: [
              {
                label: "是",
                value: 1
              },
              {
                label: "否",
                value:2
              },
            ],
            hide:true,
            rules: [{
              required: true,
              message: "请选择是否先锋岗",
              trigger: ["blur","change"],
            },],
          },
          {
            label: "家庭住址",
            labelWidth:labelWidth,
            prop: 'address',
            hide:true,
            span:24,
          },
          {
            label: "图片",
            labelWidth:labelWidth,
            prop: "urls",
            hide:true,
            type: "upload",
            listType: "picture-img",
            action: "/api/blade-resource/oss/endpoint/put-file",
            propsHttp: {
              res: "data",
              name: 'name',
              url: "link",
            },
            row:true
          },
          {
            label: "排序",
            labelWidth:labelWidth,
            prop: "sort",
            hide:true,
            type: 'number',
            value:999,
            rules: [{
              required: true,
              message: "请输入排序",
              trigger: ["blur","change"],
            },],
          },
          {
            label: "状态",
            labelWidth:labelWidth,
            hide:true,
            prop: "status",
            type: 'radio',
            dicData: [
              {
                label: "正常",
                value: 1
              },
              {
                label: "关闭",
                value:2
              },
            ],
            button:true,
            value:1,
            rules: [{
              required: true,
              message: "请输入排序",
              trigger: ["blur","change"]
            },],
          },
          {
            label: "简介",
            labelWidth:labelWidth,
            prop: "profile",
            span:24,
            component: "AvueUeditor",
            options: {
              action: "/api/blade-resource/oss/endpoint/put-file",
              props: {
                res: "data",
                url: "link",
              },
            },
            hide: true,
            minRows: 6,
          },
        ]
      },
      data: [],
    }
  },
  watch: {
    "form.householdId":{
      handler(val){
        if(val){
          householdDetail(val).then(res=>{
            let data = res.data.data
            this.form.phoneNumber = data.phoneNumber
            this.form.gender = data.gender
            this.form.birthday = data.birthday
            this.form.cardType = data.cardType
            this.form.idCard = data.idCard
            this.form.houseCode = data.houseCode
          })
        }
      }
    }
  },
  computed: {
    ...mapGetters(["userInfo", "permission"]),
    permissionList () {
      return {
        addBtn: this.vaildData(this.permission.household_add, true),
        viewBtn: this.vaildData(this.permission.household_view, true),
        delBtn: this.vaildData(this.permission.household_delete, true),
        editBtn: this.vaildData(this.permission.household_edit, true)
      }
    },
    textDispose () {
      return (row, flag, type) => {
        if (row[flag] || row[type] == null) {
          return row[type]
        } else {
          if (type == 'idCard') {
            return row[type].replace(/^(.{6})(?:\d+)(.{4})$/, "$1******$2")
          } else {
            return row[type].replace(/^(.{3})(?:\d+)(.{4})$/, "$1****$2")
          }
        }
      }
    },
    ids () {
      let ids = []
      this.selectionList.forEach(ele => {
        ids.push(ele.id)
      })
      return ids.join(",")
    },
  },
  mounted () { },
  methods: {
    showStringDispose (row, type) {
      row[type] = !row[type]
    },
     init (data) {
      this.row = data
       this.getUserList()
      this.onLoad(this.page)
    },
    getUserList(param){
      let dicUrl =  `/api/blade-household/household/getAllHouseHold?name={{key}}&regionCode=${this.row.areaId}`
      const column = this.findObject(this.option.column, "householdId");
      column.dicUrl = dicUrl
    },
    rowSave (row, done, loading) {
      row['organizationId'] = this.row.id
      row.urls = func.join(row.urls)
      if (row.urls.length > 0) {
        var urls = []
        var split = row.urls.split(",")
        split.forEach(url => {
          var names = url.split("jczz/")
          urls.push(names[1])
        })
        row.urls = urls.join(",")
      }
      add(row).then(() => {
        this.initFlag = false
        this.onLoad(this.page)
        this.$message({
          type: "success",
          message: "操作成功!"
        })
        done()
      }, error => {
        // window.console.log(error);
        loading()
      })
    },
    rowUpdate (row, index, done, loading) {
      if (row.urls.length > 0) {
        var urls = []
        var split = row.urls.split(",")
        split.forEach(url => {
          var names = url.split("jczz/")
          urls.push(names[1])
        })
        row.urls = urls.join(",")
      }
      update(row).then(() => {
        this.initFlag = false
        this.onLoad(this.page)
        this.$message({
          type: "success",
          message: "操作成功!"
        })
        done()
      }, error => {
        // window.console.log(error);
        loading()
      })
    },
    rowDel (row) {
      this.$confirm("确定将选择数据删除?", {
        confirmButtonText: "确定",
        cancelButtonText: "取消",
        type: "warning"
      })
        .then(() => {
          return remove(row.id)
        })
        .then(() => {
          this.onLoad(this.page)
          this.$message({
            type: "success",
            message: "操作成功!"
          })
        })
    },
    searchReset () {
      this.query = {}
      this.treeDeptId = ''
      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();
    },
    handleDelete () {
      if (this.selectionList.length === 0) {
        this.$message.warning("请选择至少一条数据")
        return
      }
      this.$confirm("确定将选择数据删除?", {
        confirmButtonText: "确定",
        cancelButtonText: "取消",
        type: "warning"
      })
        .then(() => {
          return remove(this.ids)
        })
        .then(() => {
          this.onLoad(this.page)
          this.$message({
            type: "success",
            message: "操作成功!"
          })
          this.$refs.crud.toggleSelection()
        })
    },
    handleImport () {
      this.excelBox = true
    },
    uploadAfter (res, done, loading, column) {
      this.excelBox = false
      this.refreshChange()
      done()
    },
    beforeOpen (done, type) {
      if (["edit", "view"].includes(type)) {
        getDetail(this.form.id).then(res => {
          this.form = res.data.data
          this.form.urls = website.minioUrl + this.form.urls
          let params = {
            id:this.form.householdId
          }
          getAllHouseHold(params).then(res=>{
            const column = this.findObject(this.option.column, "householdId");
            column.dicData = res.data.data
          })
        })
      }
      this.initFlag = true
      done()
    },
    currentChange (currentPage) {
      this.page.currentPage = currentPage
    },
    sizeChange (pageSize) {
      this.page.pageSize = pageSize
    },
    refreshChange () {
      this.onLoad(this.page, this.query)
    },
    onLoad (page, params = {}) {
      this.loading = true
      params.organizationId = this.row.id
      getList(page.currentPage, page.pageSize, Object.assign(params, this.query)).then(res => {
        const data = {
          ...res.data.data,
          records: res.data.data.records.map(item => {
            return {
              ...item,
              'phoneNumberflag': false,
              'idCardflag': false
            }
          })
        }
        this.page.total = data.total
        this.data = data.records
        this.loading = false
        this.selectionClear()
      })
    }
  }
}
</script>
<style scoped>
</style>
src/views/property/partyOrganization.vue
New file
@@ -0,0 +1,479 @@
<template>
  <basic-container>
    <avue-crud :option="option" :table-loading="loading" :data="data" :page.sync="page" ref="crud" v-model="form"
               :permission="permissionList" @search-change="searchChange" @search-reset="searchReset"
               @row-update="rowUpdate" @row-save="rowSave" @row-del="rowDel"
               :before-open="beforeOpen"
               @selection-change="selectionChange" @current-change="currentChange" @size-change="sizeChange"
               @refresh-change="refreshChange" @on-load="onLoad">
      <template slot-scope="{row}" slot="phone">
        <el-button type="text" @click="showStringDispose(row, 'phoneNumberflag')">
          {{ textDispose(row, 'phoneNumberflag', 'phone') }}
        </el-button>
      </template>
      <template slot-scope="scope" slot="menu">
        <el-button type="text" icon="el-icon-circle-plus-outline" size="small"
                   @click="manageMember(scope.row)">党成员
        </el-button>
      </template>
    </avue-crud>
    <el-drawer title="党成员" size="60%" append-to-body :visible.sync="memberFlag" :direction="'rtl'">
      <PartyOrganizationMember ref="partyOrganizationMember" />
    </el-drawer>
  </basic-container>
</template>
<script>
import {mapGetters} from "vuex";
import {getDetail,getList,add,update,remove} from "@/api/partyOrganization/partyOrganization";
import website from "@/config/website";
import func from "@/util/func";
import {validatePhone} from "@/util/validate";
import PartyOrganizationMember from "@/views/property/components/partyOrganizationMember.vue";
const searchSpan = 4
export default {
  name: "partyOrganization",
  components: {PartyOrganizationMember},
  data () {
    return {
      form: {},
      query: {},
      loading: true,
      page: {
        pageSize: 10,
        currentPage: 1,
        total: 0,
      },
      datetime: "",
      selectionList: [],
      memberFlag: false,
      option: {
        // menu: false,
        // addBtn: false,
        border: true,
        index: true,
        selection: false,
        height: "auto",
        calcHeight: 54,
        dialogWidth: 950,
        tip: false,
        searchShow: true,
        searchMenuSpan: 3,
        //stripe:true,
        viewBtn: true,
        excelBtn: true,
        dialogClickModal: false,
        column: [
          {
            parent: false,
            label: "所属社区",
            prop: "areaId",
            search: true,
            searchSpan: searchSpan,
            width: 150,
            type: "tree",
            dicUrl: "/api/blade-system/region/tree",
            props: {
              label: "name",
              value: "id"
            },
            rules: [
              {
                required: true,
                message: "请选择所属社区",
                trigger: ["blur","change"]
              },
            ],
          },
          {
            label: "组织名称",
            prop: "organizationName",
            searchSpan: searchSpan,
            search: true,
            rules: [{
              required: true,
              message: "请输入组织名称",
              trigger: ["blur","change"]
            },],
          },
          {
            label: "组织类型",
            prop: "organizationType",
            checkStrictly: true,
            hide:true,
            dicUrl: "/api/blade-system/dict-biz/dictionary?code=organizationType",
            props: {
              label: "dictValue",
              value: "dictKey",
            },
            type: "select",
            rules: [{
              required: true,
              message: "请选择组织类型",
              trigger: ["blur","change"]
            }, ],
          },
          {
            label: "支部类型",
            prop: "branchType",
            checkStrictly: true,
            dicUrl: "/api/blade-system/dict-biz/dictionary?code=branchType",
            props: {
              label: "dictValue",
              value: "dictKey",
            },
            type: "select",
            rules: [{
              required: true,
              message: "请选择支部类型",
              trigger: ["blur","change"]
            }, ],
          },
          {
            label: "负责人",
            prop: "chargePerson",
            rules: [{
              required: true,
              message: "请输入负责人",
              trigger: ["blur","change"]
            }]
          },
          {
            label: "姓名",
            prop: "name",
            searchSpan: searchSpan,
            searchPlaceholder:"请输入负责人或党成员",
            hide:true,
            display: false,
            search: true
          },
          {
            label: "手机号",
            prop: "phone",
            slot: true,
            rules: [{
              required: true,
              message: "请输入手机号",
              validator: validatePhone,
              trigger: ["blur","change"],
            }]
          },
          {
            label: "成立时间",
            prop: "establishmentDate",
            hide:true,
            type: "date",
            format: "yyyy-MM-dd",
            valueFormat: "yyyy-MM-dd",
            row:true,
            rules: [{
              required: true,
              message: "请选择成立时间",
              trigger: ["blur","change"]
            }]
          },
          {
            label: "图片",
            prop: "urls",
            hide:true,
            type: "upload",
            listType: "picture-img",
            action: "/api/blade-resource/oss/endpoint/put-file",
            propsHttp: {
              res: "data",
              name: 'name',
              url: "link",
            },
            row:true
          },
          {
            label: "排序",
            prop: "sort",
            hide:true,
            type: 'number',
            value:999,
            rules: [{
              required: true,
              message: "请输入排序",
              trigger: ["blur","change"],
            },],
          },
          {
            label: "状态",
            hide:true,
            prop: "status",
            type: 'radio',
            button:true,
            activeColor: "#13ce66",
            inactiveColor: "#ccc",
            dicData: [
              {
                label: "正常",
                value: 1
              },
              {
                label: "关闭",
                value:2
              },
            ],
            value:1,
            rules: [{
              required: true,
              message: "请输入排序",
              trigger: ["blur","change"]
            },],
          },
          {
            label: "简介",
            prop: "profile",
            span:24,
            component: "AvueUeditor",
            options: {
              action: "/api/blade-resource/oss/endpoint/put-file",
              props: {
                res: "data",
                url: "link",
              },
            },
            hide: true,
            minRows: 6,
          },
          {
            label: "党成员数",
            prop: "memberCount",
            display:false,
          },
        ],
      },
      data: [],
    }
  },
  watch: {},
  computed: {
    ...mapGetters(["permission", "userInfo"]),
    permissionList () {
      return {
        addBtn: this.vaildData(this.permission.gridWorkLog_add, true),
        viewBtn: this.vaildData(this.permission.gridWorkLog_view, true),
        delBtn: this.vaildData(this.permission.gridWorkLog_delete, true),
        editBtn: this.vaildData(this.permission.gridWorkLog_edit, true),
      }
    },
    ids () {
      let ids = []
      this.selectionList.forEach((ele) => {
        ids.push(ele.id)
      })
      return ids.join(",")
    },
    textDispose () {
      return (row, flag, type) => {
        if (row[flag] || row[type] == null) {
          return row[type]
        } else {
          if (type == 'idCard') {
            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]
    },
    manageMember (row) {
      this.memberFlag = true
      var that = this
      this.$nextTick(() => {
        that.$refs.partyOrganizationMember.init(row)
      })
    },
    rowSave (row, done, loading) {
      row.urls = func.join(row.urls)
      if (row.urls.length > 0) {
        var urls = []
        var split = row.urls.split(",")
        split.forEach(url => {
          var names = url.split("jczz/")
          urls.push(names[1])
        })
        row.urls = urls.join(",")
      }
      add(row).then(
        () => {
          this.onLoad(this.page)
          this.$message({
            type: "success",
            message: "操作成功!",
          })
          done()
        },
        (error) => {
          window.console.log(error)
          loading()
        }
      )
    },
    rowUpdate (row, index, done, loading) {
      if (row.urls.length > 0) {
        var urls = []
        var split = row.urls.split(",")
        split.forEach(url => {
          var names = url.split("jczz/")
          urls.push(names[1])
        })
        row.urls = urls.join(",")
      }
      update(row).then(
        () => {
          this.onLoad(this.page)
          this.$message({
            type: "success",
            message: "操作成功!",
          })
          done()
        },
        (error) => {
          window.console.log(error)
          loading()
        }
      )
    },
    rowDel (row) {
      this.$confirm("确定将选择数据删除?", {
        confirmButtonText: "确定",
        cancelButtonText: "取消",
        type: "warning",
      })
        .then(() => {
          return remove(row.id)
        })
        .then(() => {
          this.onLoad(this.page)
          this.$message({
            type: "success",
            message: "操作成功!",
          })
        })
    },
    // handleDelete() {
    //   if (this.selectionList.length === 0) {
    //     this.$message.warning("请选择至少一条数据");
    //     return;
    //   }
    //   this.$confirm("确定将选择数据删除?", {
    //       confirmButtonText: "确定",
    //       cancelButtonText: "取消",
    //       type: "warning",
    //     })
    //     .then(() => {
    //       return remove(this.ids);
    //     })
    //     .then(() => {
    //       this.onLoad(this.page);
    //       this.$message({
    //         type: "success",
    //         message: "操作成功!",
    //       });
    //       this.$refs.crud.toggleSelection();
    //     });
    // },
    beforeOpen (done, type) {
      if (["edit", "view"].includes(type)) {
        getDetail(this.form.id).then((res) => {
          this.form = res.data.data
            const column = this.findObject(this.option.column, "principalId")
            let arr = []
            this.form.urls = website.minioUrl + this.form.urls
            arr.push(this.form.areaId)
            column.defaultExpandedKeys = arr
        })
      }
      // con
      done()
    },
    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()
    },
    currentChange (currentPage) {
      this.page.currentPage = currentPage
    },
    sizeChange (pageSize) {
      this.page.pageSize = pageSize
    },
    refreshChange () {
      this.onLoad(this.page, this.query)
    },
    onLoad (page, params = {}) {
      this.loading = true
      getList(page.currentPage, page.pageSize, Object.assign(params, this.query)).then(res => {
        const data = {
          ...res.data.data,
          records: res.data.data.records.map(item => {
            return {
              ...item,
              'phoneNumberflag': false,
              'idCardflag': false
            }
          })
        }
        this.page.total = data.total
        this.data = data.records.map(item => {
          if (item.imageUrl && item.imageUrl.length > 0) {
            var urls = []
            var names = item.imageUrl.split(",")
            names.forEach(name => {
              urls.push(website.minioUrl + name)
            })
            item.imageUrl = urls.join(",")
          }
          return item
        })
        this.loading = false
        this.selectionClear()
      })
    }
  },
}
</script>
<style scoped>
</style>