Files
dvcp_v2_webapp/packages/wechat/AppWhereabouts/AppWhereabouts.vue
aixianling a8dff862d2 初始化
2021-12-14 18:36:19 +08:00

279 lines
9.1 KiB
Vue
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<template>
<section class="AppWhereabouts">
<ai-list>
<ai-title slot="title" title="工作去向" isShowBottomBorder/>
<template #custom>
<el-row type="flex" class="staDataPane">
<div class="boxItem" v-for="(op,i) in staData" :key="i">
<div>{{ op.name }}</div>
<b>{{ op.v1 }}</b>
</div>
</el-row>
<div class="mainPane">
<ai-search-bar>
<template #left>
<!-- <el-select v-model="search.village" placeholder="请选择联村" size="small"-->
<!-- @change="page.current=1,getTableData()" clearable>-->
<!-- <el-option v-for="(op,i) in dict.getDict('villageCadresDirectionArea')" :key="i" :label="op.dictName"-->
<!-- :value="op.dictValue"/>-->
<!-- </el-select>-->
<ai-select placeholder="请选择工作去向" v-model="search.direction"
:selectList="dict.getDict('villageCadresDirectionChoice')"
@change="page.current=1,getTableData()"/>
</template>
<template #right>
<el-input suffix-icon="iconfont iconSearch" v-model="search.name" placeholder="姓名/手机号码" clearable
@change="page.current=1,getTableData()" size="small"/>
</template>
</ai-search-bar>
<ai-search-bar>
<template #left>
<el-button type="primary" icon="iconfont iconAdd" size="small" @click="dialog=true">添加</el-button>
<el-button icon="iconfont iconDelete" size="small" @click="handleDelete()" :disabled="ids.length==0">删除
</el-button>
</template>
<template #right>
<ai-import :instance="instance" :dict="dict" type="appvillagecadresdirection" name="工作去向"
@success="getTableData()">
<el-button icon="iconfont iconImport">导入</el-button>
</ai-import>
<ai-download :instance="instance" url="/app/appvillagecadresdirection/listExport" :params="params"
fileName="工作去向数据导出"/>
</template>
</ai-search-bar>
<ai-table :tableData="tableData" :colConfigs="colConfigs" :total="page.total"
@selection-change="v=>ids=v.map(e=>e.id)"
:current.sync="page.current" :size.sync="page.size" @getList="getTableData">
<el-table-column slot="options" label="操作" align="center">
<div class="tableOptions" slot-scope="{row}">
<el-button type="text" @click="editItem(row)">编辑</el-button>
<el-button type="text" @click="handleDelete(row.id)">删除</el-button>
</div>
</el-table-column>
</ai-table>
</div>
</template>
</ai-list>
<ai-dialog :visible.sync="dialog" title="工作去向" @closed="form={},getTableData(),getStaData()"
@onConfirm="submitForm" @opened="$refs.WhereaboutsConfigForm.clearValidate()">
<el-form size="small" ref="WhereaboutsConfigForm" :model="form" :rules="rules" label-suffix=""
label-width="100px">
<el-row type="flex" class="WhereaboutsConfigForm" justify="space-between">
<el-form-item v-for="(op,i) in colConfigs.slice(1,9)" :key="i" v-bind="op" style="width: 48%">
<!-- <el-select v-if="op.prop=='village'" v-model="form[op.prop]" placeholder="请选择联村" clearable multiple>-->
<!-- <el-option v-for="(op,i) in dict.getDict('villageCadresDirectionArea')" :key="i" :label="op.dictName"-->
<!-- :value="op.dictValue"/>-->
<!-- </el-select>-->
<ai-select v-if="op.prop=='direction'" placeholder="请选择工作去向" v-model="form[op.prop]"
:selectList="dict.getDict('villageCadresDirectionChoice')"/>
<el-input v-else v-model="form[op.prop]" placeholder="请输入"/>
</el-form-item>
</el-row>
</el-form>
</ai-dialog>
</section>
</template>
<script>
export default {
name: "AppWhereabouts",
label: "工作去向",
props: {
instance: Function,
dict: Object,
permissions: Function
},
computed: {
colConfigs() {
const required = true
return [
{type: "selection"},
{label: "姓名", prop: "name", align: "center", required},
{
label: "联村", prop: "village", align: "center", required,
render: (h, {row}) => h('span', null, row?.village?.split(",")
?.map(e => this.dict.getLabel("villageCadresDirectionArea", e)).join(","))
},
{label: "联系片", prop: "connect", align: "center"},
{label: "包保网络", prop: "net", align: "center"},
{label: "手机号码", prop: "phone", align: "center", required},
{label: "备注", prop: "remark", align: "center"},
{
label: "工作去向", prop: "direction", align: "center", required,
render: (h, {row}) => h('span', null, this.dict.getLabel("villageCadresDirectionChoice", row?.direction))
},
{label: "排序编号", prop: "sort", align: "center"},
{slot: "options"},
]
},
params() {
let params = {}
//导出搜索条件
if (this.ids.length) {
params = {
...params,
ids: this.ids
}
} else {
params = {
...params,
...this.search
}
}
return params
},
formConfigs() {
return this.colConfigs.slice(1, 9).map(e => ({
...e, comp: ['village', 'direction'].includes(e.prop) ? 'select' : 'input'
}))
},
rules() {
let rules = {}
//调整columns要慎重
this.formConfigs.filter(e => e.required).map(e => {
rules[e.prop] = [
{message: `请${e.comp == 'select' ? '选择' : '输入'}${e.label}`, required: true}
]
if (e.prop == 'phone') {
rules[e.prop]?.push({pattern: /^1[1356789][0-9]\d{8}$/, message: '手机格式有误!'})
}
})
return rules
}
},
data() {
return {
staData: [],
search: {name: null, direction: null, village: null},
page: {size: 10, current: 1, total: 0},
dialog: false,
tableData: [],
form: {},
ids: []
}
},
methods: {
getStaData() {
this.instance.post("/app/appvillagecadresdirection/queryDataStatistics").then(res => {
if (res?.data) {
this.staData = res.data
}
})
},
getTableData() {
this.instance.post("/app/appvillagecadresdirection/list", null, {
params: {...this.search, ...this.page}
}).then(res => {
if (res?.data) {
this.tableData = res.data.records
this.page.total = res.data.total
}
})
},
submitForm() {
this.$refs.WhereaboutsConfigForm.validate(v => {
if (v) {
this.instance.post("/app/appvillagecadresdirection/addOrUpdate", {
...this.form
}).then(res => {
if (res?.code == 0) {
this.$message.success("提交成功!")
this.dialog = false
}
})
}
})
},
handleDelete(id) {
this.$confirm("是否删除该联村镇干?").then(() => {
this.instance.post("/app/appvillagecadresdirection/delete", null, {
params: {ids: id || this.ids.join(",")}
}).then(res => {
if (res?.code == 0) {
this.$message.success("删除成功!")
this.getTableData()
this.getStaData()
}
})
}).catch(() => 0)
},
editItem(row) {
this.dialog = true
this.form = JSON.parse(JSON.stringify({...row}))
}
},
created() {
this.dict.load("villageCadresDirectionChoice", "villageCadresDirectionArea")
this.getStaData()
this.getTableData()
}
}
</script>
<style lang="scss" scoped>
.AppWhereabouts {
height: 100%;
::v-deep .ai-list__content {
padding: 0 16px 16px !important;
box-sizing: border-box;
.ai-list__content--wrapper {
display: flex;
flex-direction: column;
gap: 10px;
}
}
::v-deep .staDataPane {
width: 100%;
gap: 16px;
padding-top: 16px;
.boxItem {
flex: 1;
min-width: 0;
height: 64px;
display: flex;
justify-content: space-between;
align-items: center;
padding: 0 16px;
font-size: 14px;
color: #333;
border: 1px solid #eee;
background: #fff;
b {
font-size: 20px;
font-family: DINAlternate-Bold, DINAlternate, serif;
}
}
}
::v-deep .mainPane {
background: #fff;
border: 1px solid #eee;
padding: 12px 16px;
}
.WhereaboutsConfigForm {
flex-wrap: wrap;
.el-select {
width: 100%;
::v-deep .el-tag__close.el-icon-close {
background: transparent;
}
}
}
}
</style>