Files
dvcp_v2_webapp/project/sass/apps/AppAskForm/components/Template.vue
2022-07-19 14:55:51 +08:00

284 lines
7.6 KiB
Vue

<template>
<ai-list class="template" isTabs>
<template slot="content">
<ai-search-bar bottomBorder>
<template #left>
<ai-select
v-model="search.type"
@change="search.current = 1, getList()"
placeholder="项目类型"
:selectList="$dict.getDict('questionnaireType')">
</ai-select>
</template>
<template #right>
<el-input
v-model="search.title"
size="small"
placeholder="请输入模板名称"
clearable
v-throttle="() => {search.current = 1, getList()}"
@clear="search.current = 1, search.title = '', getList()"
suffix-icon="iconfont iconSearch">
</el-input>
</template>
</ai-search-bar>
<ai-search-bar style="margin-top: 12px;">
<template #left>
<el-button type="primary" @click="isShow = true">新建模板</el-button>
</template>
</ai-search-bar>
<ai-table
:tableData="tableData"
:col-configs="colConfigs"
:total="total"
style="margin-top: 6px;"
:current.sync="search.current"
:size.sync="search.size"
@getList="getList">
<el-table-column slot="type" width="120px" label="项目类型" align="center">
<template slot-scope="{ row }">
<div class="tags-wrapper">
<span class="tags" :class="'type-' + row.type">{{ dict.getLabel('questionnaireType', row.type) }}</span>
</div>
</template>
</el-table-column>
<el-table-column slot="options" width="160px" fixed="right" label="操作" align="center">
<template slot-scope="{ row }">
<div class="table-options">
<el-button type="text" @click="toEdit(row.id, row.type)">编辑</el-button>
<el-button type="text" @click="quote(row.id, row.type)">引用</el-button>
<el-button type="text" @click="remove(row.id)">删除</el-button>
</div>
</template>
</el-table-column>
</ai-table>
<ai-dialog
:visible.sync="isShow"
width="800px"
title="请选择新建模板类型"
@onConfirm="onConfirm">
<div class="type-list">
<div class="type-item" @click="currIndex = 0" :class="[currIndex === 0 ? 'active' : '']">
<svg class="icon" aria-hidden="true">
<use xlink:href="#iconwenjuandiaocha"></use>
</svg>
<span>问卷调查</span>
</div>
<div class="type-item" @click="currIndex = 1" :class="[currIndex === 1 ? 'active' : '']">
<svg class="icon" aria-hidden="true">
<use xlink:href="#iconkaoshiceping"></use>
</svg>
<span>考试测评</span>
</div>
<div class="type-item" @click="currIndex = 2" :class="[currIndex === 2 ? 'active' : '']">
<svg class="icon" aria-hidden="true">
<use xlink:href="#iconbaomingdengji"></use>
</svg>
<span>报名登记</span>
</div>
<div class="type-item" @click="currIndex = 3" :class="[currIndex === 3 ? 'active' : '']">
<svg class="icon" aria-hidden="true">
<use xlink:href="#iconmanyidiaocha"></use>
</svg>
<span>满意调查</span>
</div>
<div class="type-item" @click="currIndex = 4" :class="[currIndex === 4 ? 'active' : '']">
<svg class="icon" aria-hidden="true">
<use xlink:href="#icontoupiaopingxuan"></use>
</svg>
<span>投票评选</span>
</div>
</div>
</ai-dialog>
</template>
</ai-list>
</template>
<script>
export default {
name: 'Template',
props: {
instance: Function,
dict: Object
},
data () {
return {
search: {
current: 1,
status: '',
type: '',
size: 10,
templateType: 1,
title: ''
},
currIndex: 0,
isShow: false,
total: 10,
colConfigs: [
{ prop: 'title', label: '模板名称', align: 'left' },
{ slot: 'type', label: '项目类型', align: 'center' },
{ prop: 'quoteCount', label: '引用次数', align: 'center' },
{ prop: 'createUserName', label: '创建人', align: 'center', openType: 'userName' },
{ prop: 'createUnitName', label: '创建单位', align: 'center', openType: 'departmentName' },
{ prop: 'createTime', label: '创建时间', align: 'center' }
],
tableData: []
}
},
mounted () {
this.getList()
},
methods: {
getList () {
this.instance.post(`/app/appquestionnairetemplate/list`, null, {
params: {
...this.search
}
}).then(res => {
if (res.code == 0) {
this.tableData = res.data.records
this.total = res.data.total
this.$store.dispatch('initOpenData')
}
})
},
quote (id, type) {
this.$emit('change', {
type: 'add',
params: {
id,
type,
isQuote: true,
templateType: 0
}
})
},
remove (id) {
this.$confirm('确定删除该数据?').then(() => {
this.instance.post(`/app/appquestionnairetemplate/deleteShareTemplate?ids=${id}`).then(res => {
if (res.code == 0) {
this.$message.success('删除成功!')
this.getList()
}
})
})
},
toAdd (id) {
this.$emit('change', {
type: 'Add',
params: {
id
}
})
},
toEdit (id, type) {
this.$emit('change', {
type: 'add',
params: {
id,
type,
templateType: 1
}
})
},
onConfirm () {
this.$emit('change', {
type: 'add',
params: {
id: '',
templateType: 1,
type: this.currIndex
}
})
}
}
}
</script>
<style lang="scss" scoped>
.template {
.tags-wrapper {
display: flex;
justify-content: center;
}
.type-list {
display: flex;
align-items: center;
.type-item {
display: flex;
align-items: center;
justify-content: center;
width: 128px;
height: 64px;
margin-right: 20px;
background: #FFFFFF;
border-radius: 2px;
// box-shadow: 0px 4px 8px 0px rgba(0, 0, 0, 0.08);
border-radius: 2px;
cursor: pointer;
border: 1px solid #E4E8EF;
svg {
width: 24px;
height: 24px;
margin-right: 8px;
}
&.active {
border: 1px solid #2266FF;
}
&:last-child {
margin-right: 0;
}
}
}
.tags {
display: block;
width: 64px;
height: 24px;
line-height: 24px;
text-align: center;
border-radius: 4px;
font-size: 12px;
}
.type-0 {
color: #2266FF;
background: rgba(34, 102, 255, 0.1);
}
.type-1 {
color: rgba(34, 170, 153, 1);
background: rgba(34, 170, 153, 0.1);
}
.type-2 {
color: rgba(248, 180, 37, 1);
background: rgba(248, 180, 37, 0.1);
}
.type-3 {
color: rgba(102, 119, 187, 1);
background: rgba(102, 119, 187, 0.1);
}
.type-4 {
color: rgba(236, 68, 97, 1);
background: rgba(236, 68, 97, 0.1);
}
}
</style>