210 lines
7.1 KiB
Vue
210 lines
7.1 KiB
Vue
<template>
|
|
<section class="AppIntegralRule">
|
|
<ai-list>
|
|
<template slot="content">
|
|
<ai-search-bar>
|
|
<template #left>
|
|
<ai-select v-model="search.category" @change="(page.current = 1), getList()" placeholder="请选择事件" :selectList="$dict.getDict('srCategory')">
|
|
</ai-select>
|
|
<ai-select v-model="search.type" @change="(page.current = 1), getList()" placeholder="请选择类型" :selectList="$dict.getDict('srType')">
|
|
</ai-select>
|
|
<ai-select v-model="search.status" @change="(page.current = 1), getList()" placeholder="请选择状态" :selectList="$dict.getDict('srStatus')">
|
|
</ai-select>
|
|
</template>
|
|
</ai-search-bar>
|
|
<ai-table :tableData="tableData" :col-configs="colConfigs" :total="page.total" :dict="dict" :current.sync="page.current" :size.sync="page.size"
|
|
@getList="getList()">
|
|
<el-table-column slot="integral" label="分值" align="center">
|
|
<template slot-scope="{ row }">
|
|
<!-- <span v-if="row.integralValueType == 1">
|
|
{{ row.integralStart > 0 ? "+" + row.integralStart : row.integralStart }}~{{ row.integralEnd > 0 ? "+" + row.integralEnd : row.integralEnd }}
|
|
</span> -->
|
|
<span>{{ row.integral > 0 ? "+" : "" }}{{ row.integral }}</span>
|
|
</template>
|
|
</el-table-column>
|
|
<el-table-column slot="options" label="操作" align="center" fixed="right" width="160">
|
|
<template slot-scope="{ row }">
|
|
<div class="table-options">
|
|
<el-button type="text" @click="changeStatus(row.id, row.status)" v-if="row.status == 1">停用</el-button>
|
|
<el-button type="text" @click="changeStatus(row.id, row.status)" v-else>启用</el-button>
|
|
<el-button type="text" @click="set(row)" v-if="row.type == 11 || row.type == 12 || row.type == 13 ">配置</el-button>
|
|
</div>
|
|
</template>
|
|
</el-table-column>
|
|
</ai-table>
|
|
</template>
|
|
</ai-list>
|
|
<ai-dialog title="配置成员" :visible.sync="dialog" :destroyOnClose="true" customFooter width="720px">
|
|
<ai-wrapper label-width="120px" v-if="!isSetEdit">
|
|
<ai-info-item label="成员" isLine>
|
|
<span v-for="(item, index) in chooseUserList" :key="index">
|
|
<span>{{item.name}}</span>
|
|
<span v-if="index < chooseUserList.length-1">,</span>
|
|
</span>
|
|
</ai-info-item>
|
|
</ai-wrapper>
|
|
<el-form ref="form" :model="form" :rules="rules" label-width="80px" v-else>
|
|
<el-form-item label="选择人员">
|
|
<ai-user-selecter v-model="chooseUserList" :instance="instance" :isMultiple="true" :props="{label: 'name', id: 'sysUserId'}"></ai-user-selecter>
|
|
</el-form-item>
|
|
</el-form>
|
|
<template #footer>
|
|
<el-button type="primary" @click="isSetEdit=true" v-if="!isSetEdit">编辑</el-button>
|
|
<el-button type="primary" @click="setConfirm" v-else>保存</el-button>
|
|
</template>
|
|
</ai-dialog>
|
|
<!-- <ai-empty v-else>暂无应用权限</ai-empty> -->
|
|
</section>
|
|
</template>
|
|
|
|
<script>
|
|
export default {
|
|
name: "AppIntegralRule",
|
|
label: "积分规则(黔西南)",
|
|
props: {
|
|
instance: Function,
|
|
dict: Object,
|
|
permissions: Function,
|
|
},
|
|
data() {
|
|
var validcode = (rule, value, callback) => {
|
|
if (value) {
|
|
if (value != 0) {
|
|
if (!/^([+-]?([1-9]{1}\d*)|(0{1}))(\.\d{1,2})?$/.test(value)) {
|
|
callback(new Error('请输入积分分值,可输入正数、负数、最多保留两位小数'))
|
|
} else {
|
|
callback();
|
|
}
|
|
} else {
|
|
callback(new Error('请输入有效的积分分值'));
|
|
}
|
|
} else {
|
|
callback(new Error('请输入积分分值'));
|
|
}
|
|
}
|
|
return {
|
|
search: {
|
|
status: '',
|
|
category: '',
|
|
type: '',
|
|
},
|
|
page: {current: 1, size: 10, total: 0},
|
|
colConfigs: [
|
|
{prop: "type", label: "类型", dict: "srType", width: 220},
|
|
{prop: "category", label: "事件", dict: "srCategory", align: "center", width: 200},
|
|
{prop: "remark", label: "规则"},
|
|
{prop: "cycle", label: "周期范围", dict: "srCycle", align: "center", width: 100},
|
|
{prop: "status", label: "状态", align: "center", width: 100, dict: "srStatus",
|
|
render: (h, {row}) => {
|
|
return h('span', {style: {color: this.dict.getColor('srStatus', row.status)}}, this.dict.getLabel('srStatus', row.status))
|
|
}
|
|
},
|
|
{slot: "options", label: "操作", align: "center", width: 100},
|
|
],
|
|
tableData: [],
|
|
dialog: false,
|
|
setInfo: {},
|
|
isSetEdit: false,
|
|
chooseUserList: [],
|
|
personList: []
|
|
};
|
|
},
|
|
created() {
|
|
this.$dict.load('srStatus', 'srCategory', 'srType', 'srCycle').then(() => {
|
|
this.getList();
|
|
});
|
|
},
|
|
methods: {
|
|
getList() {
|
|
this.instance.post(`/app/appscorerule/list`, null, {
|
|
params: {
|
|
...this.search,
|
|
...this.page,
|
|
},
|
|
}).then((res) => {
|
|
if (res?.data) {
|
|
this.tableData = res.data.records;
|
|
this.page.total = res.data.total;
|
|
}
|
|
});
|
|
},
|
|
changeStatus(id, status) {
|
|
let text = status == 1 ? "停用" : "启用"
|
|
this.$confirm(`确定${text}该条规则?`).then(() => {
|
|
this.instance.post(`/app/appscorerule/enable?id=${id}`).then((res) => {
|
|
if (res.code == 0) {
|
|
this.$message.success(`${text}成功!`);
|
|
this.getList();
|
|
}
|
|
});
|
|
});
|
|
},
|
|
set(row) {
|
|
this.chooseUserList = []
|
|
this.isSetEdit = false
|
|
this.instance.post(`/app/appscorerule/queryDetailById?id=${row.id}`).then((res) => {
|
|
if (res?.data) {
|
|
if(res.data.massSendingConfigs && res.data.massSendingConfigs.length) {
|
|
res.data.massSendingConfigs.map((item) => {
|
|
item.id = item.wxUserId
|
|
})
|
|
this.chooseUserList = res.data.massSendingConfigs
|
|
}
|
|
}
|
|
});
|
|
this.dialog = true
|
|
this.setInfo = {...row}
|
|
},
|
|
|
|
setConfirm() {
|
|
if(!this.chooseUserList.length) {
|
|
return this.$message.error("请选择成员!")
|
|
}
|
|
this.chooseUserList.map((item) => {
|
|
item.wxUserId = item.id
|
|
})
|
|
var params = {
|
|
id: this.setInfo.id,
|
|
massSendingConfigs: this.chooseUserList,
|
|
}
|
|
this.instance.post(`/app/appscorerule/editMassSendingConfig`, params).then((res) => {
|
|
if (res.code == 0) {
|
|
this.dialog = false
|
|
this.$message.success(`配置成功!`);
|
|
this.getList();
|
|
}
|
|
});
|
|
}
|
|
},
|
|
};
|
|
</script>
|
|
|
|
<style lang="scss" scoped>
|
|
.AppIntegralRule {
|
|
height: 100%;
|
|
background: #f3f6f9;
|
|
|
|
:deep( .ai-list__content--right ){
|
|
width: 100%;
|
|
}
|
|
|
|
// :deep( .searchRightZone ){
|
|
// display: flex;
|
|
// }
|
|
|
|
:deep( .ai-dialog ){
|
|
.el-cascader {
|
|
width: 100%;
|
|
}
|
|
|
|
.tableInput {
|
|
& > input {
|
|
text-align: center;
|
|
border: none;
|
|
background: transparent;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
</style>
|