|
|
@@ -3,14 +3,14 @@
|
|
|
<div>
|
|
|
<!-- 模板内容 -->
|
|
|
<el-form ref="queryForm" :inline="true" :model="queryform" label-width="100px" class="top-search">
|
|
|
- <el-form-item label="SOP名称" prop="name">
|
|
|
- <el-input v-model="queryform.name" placeholder="请输入"></el-input>
|
|
|
+ <el-form-item label="SOP名称" >
|
|
|
+ <el-input v-model="queryform.sopName" placeholder="请输入"></el-input>
|
|
|
</el-form-item>
|
|
|
- <el-form-item label="启用状态" prop="name">
|
|
|
- <el-select v-model="queryform.labelName" placeholder="请选择,支持关键词搜索" clearable filterable>
|
|
|
- <el-option label="全部" value="1"></el-option>
|
|
|
- <el-option label="已绑定" value="2"></el-option>
|
|
|
- <el-option label="未绑定" value="3"></el-option>
|
|
|
+ <el-form-item label="状态" >
|
|
|
+ <el-select v-model="queryform.sopStatus" placeholder="请选择,支持关键词搜索" clearable filterable>
|
|
|
+ <el-option label="全部" value=" "></el-option>
|
|
|
+ <el-option label="启用" value="1"></el-option>
|
|
|
+ <el-option label="停用" value="2"></el-option>
|
|
|
</el-select>
|
|
|
</el-form-item>
|
|
|
<el-form-item>
|
|
|
@@ -24,62 +24,72 @@
|
|
|
新建
|
|
|
</el-button>
|
|
|
</div>
|
|
|
- <templateTable ref="commonTable" :operationWidth="200" :SerialShow="true" :showOperation="true"
|
|
|
+ <templateTable ref="commonTable" :operationWidth="200" :SerialShow="false" :showOperation="true"
|
|
|
:showBatchDelete="false" :data="Result" :columns="Columns" @findPage="findPage">
|
|
|
<template slot="buttonSlot" slot-scope="{ row }">
|
|
|
- <el-button type="text" @click="viewDetails(row)">编辑</el-button>
|
|
|
- <el-button type="text" @click="viewDetails(row)">复制</el-button>
|
|
|
- <el-button type="text" @click="viewDetails(row)">删除</el-button>
|
|
|
- <el-button type="text" @click="viewDetails(row)">停用</el-button>
|
|
|
+ <el-button type="text" @click="sopEdit(row)">编辑</el-button>
|
|
|
+ <el-button type="text" @click="viewCopy(row)">复制</el-button>
|
|
|
+ <el-button type="text" @click="viewDel(row)">删除</el-button>
|
|
|
+ <el-button type="text" @click="viewEditStatus(row)">{{row.sopStatus==2?'启用':'停用'}}</el-button>
|
|
|
</template>
|
|
|
</templateTable>
|
|
|
</div>
|
|
|
- <el-dialog title="新建SOP规则" :visible.sync="sopAddShow" width="30%">
|
|
|
+ <el-dialog :title='dialogtitle' :visible.sync="sopAddShow" width="30%">
|
|
|
<div>
|
|
|
- <el-form ref="form" :rules="rules" :model="form" label-width="120px">
|
|
|
- <el-form-item label="SOP名称" prop="labelName">
|
|
|
- <el-input v-model="form.name" placeholder="请输入行为类型编码"></el-input>
|
|
|
+ <el-form ref="form" :rules="rules" :model="form" label-width="120px">
|
|
|
+ <el-form-item label="SOP名称" prop="sopName">
|
|
|
+ <el-input v-model="form.sopName" placeholder="请输入SOP名称"></el-input>
|
|
|
</el-form-item>
|
|
|
- <el-form-item label="场景描述" prop="labelName">
|
|
|
- <el-input type="textarea" v-model="form.desc" maxlength="200" show-word-limit
|
|
|
+ <el-form-item label="场景描述" prop="sopDesc">
|
|
|
+ <el-input type="textarea" v-model="form.sopDesc" maxlength="200" show-word-limit
|
|
|
placeholder="请输入关键词"></el-input>
|
|
|
</el-form-item>
|
|
|
- <el-form-item label="触发类型" prop="labelName">
|
|
|
- <el-select v-model="queryform.labelName" placeholder="请选择" clearable filterable>
|
|
|
- <el-option label="行为触发" value="2"></el-option>
|
|
|
- <el-option label="时间触发" value="3"></el-option>
|
|
|
+ <el-form-item label="触发类型" prop="executeType">
|
|
|
+ <el-select v-model="form.executeType" placeholder="请选择" clearable filterable @change="executeTypeChange">
|
|
|
+ <el-option label="行为触发" :value="2"></el-option>
|
|
|
+ <el-option label="时间触发" :value="1"></el-option>
|
|
|
</el-select>
|
|
|
</el-form-item>
|
|
|
- <el-form-item label="行为类型编码" prop="labelName">
|
|
|
- <el-select v-model="queryform.labelName" placeholder="请选择" clearable filterable>
|
|
|
- <el-option label="行为触发" value="2"></el-option>
|
|
|
- <el-option label="时间触发" value="3"></el-option>
|
|
|
+ <el-form-item label="行为类型编码" :prop="form.executeType == '2' ? 'behaviorId' : ''">
|
|
|
+ <el-select v-model="form.behaviorId" placeholder="请选择" clearable filterable>
|
|
|
+ <el-option :label="item.name" :value="item.id" v-for="(item, index) in behaviorTypeList"
|
|
|
+ :key="index.id"></el-option>
|
|
|
</el-select>
|
|
|
</el-form-item>
|
|
|
- <el-form-item prop="labelName">
|
|
|
- <el-radio-group v-model="queryform.radio">
|
|
|
- <el-radio :label="3">相对时间</el-radio>
|
|
|
- <el-radio :label="6">绝对时间</el-radio>
|
|
|
+ <el-form-item label="时间类型" prop="timeType">
|
|
|
+ <el-radio-group v-model="form.timeType">
|
|
|
+ <el-radio :label="1">相对时间</el-radio>
|
|
|
+ <el-radio :label="2">绝对时间</el-radio>
|
|
|
</el-radio-group>
|
|
|
</el-form-item>
|
|
|
- <el-form-item label="时间间隔" prop="labelName">
|
|
|
- <el-input v-model="form.desc" placeholder="输入天数"></el-input>
|
|
|
+ <el-form-item label="时间间隔" prop="relativeTime" v-if="form.timeType == 1">
|
|
|
+ <el-time-select v-model="relativeTime" :picker-options="{
|
|
|
+ start: '00:00',
|
|
|
+ step: '00:15',
|
|
|
+ }" placeholder="选择时间">
|
|
|
+ </el-time-select>
|
|
|
</el-form-item>
|
|
|
- <el-form-item label="选择日期" prop="labelName">
|
|
|
- <el-date-picker v-model="form.value2" type="date" placeholder="选择日期"
|
|
|
- value-format="yyyy-MM-dd">
|
|
|
+ <el-form-item label="选择日期" prop="absoluteTime" v-if="form.timeType == 2">
|
|
|
+ <el-date-picker v-model="form.absoluteTime" type="date" placeholder="选择日期" value-format="yyyy-MM-dd"
|
|
|
+ style="width: 100%;">
|
|
|
</el-date-picker>
|
|
|
</el-form-item>
|
|
|
- <el-form-item label="关联标签" prop="labelName">
|
|
|
- <el-select v-model="queryform.labelName" placeholder="请选择,支持关键词搜索" clearable filterable>
|
|
|
- <el-option label="行为触发" value="2"></el-option>
|
|
|
- <el-option label="时间触发" value="3"></el-option>
|
|
|
+ <el-form-item label="关联标签" prop="tagGroupId">
|
|
|
+ <el-select v-model="form.tagGroupId" placeholder="请选择" clearable filterable @change="tagsArrayChange">
|
|
|
+ <el-option v-for="(item, index) in tagsArray" :key="index" :label="item.groupName"
|
|
|
+ :value="item.id"></el-option>
|
|
|
</el-select>
|
|
|
</el-form-item>
|
|
|
- <el-form-item label="关联素材" prop="labelName">
|
|
|
- <el-select v-model="queryform.labelName" placeholder="请选择,支持关键词搜索" clearable filterable>
|
|
|
- <el-option label="行为触发" value="2"></el-option>
|
|
|
- <el-option label="时间触发" value="3"></el-option>
|
|
|
+ <el-form-item label="关联标签" prop="tagId" v-if="form.tagGroupId">
|
|
|
+ <el-select v-model="form.tagIdlist" placeholder="请选择" clearable multiple>
|
|
|
+ <el-option :label="item.name" :value="item.id" v-for="(item, index) in tagsSubSet"
|
|
|
+ :key="index"></el-option>
|
|
|
+ </el-select>
|
|
|
+ </el-form-item>
|
|
|
+ <el-form-item label="关联素材" prop="materialId">
|
|
|
+ <el-select v-model="form.materialId" placeholder="请选择素材" clearable filterable>
|
|
|
+ <el-option :label="item.materialName" :value="item.id" v-for="(item, index) in aterialList"
|
|
|
+ :key="index"></el-option>
|
|
|
</el-select>
|
|
|
</el-form-item>
|
|
|
</el-form>
|
|
|
@@ -95,7 +105,9 @@
|
|
|
<!-- 行为区域 -->
|
|
|
<script>
|
|
|
import templateTable from "@/components/templateTable.vue";
|
|
|
-import { Row } from "element-ui";
|
|
|
+import * as userActionTypeApi from '@/api/customerManage/userActionTypeConfig'//获取行为类型数据
|
|
|
+import * as api from '@/api/sop/customerOperationsSop'
|
|
|
+
|
|
|
export default {
|
|
|
components: {
|
|
|
templateTable
|
|
|
@@ -103,56 +115,266 @@ export default {
|
|
|
// 数据存放区域
|
|
|
data() {
|
|
|
return {
|
|
|
+ dialogtitle: "新建SOP规则",
|
|
|
+ dialogtype: "add",
|
|
|
+ relativeTime: "",
|
|
|
+ aterialList: [],//素材列表
|
|
|
+ tagsArray: [],//标签组列表
|
|
|
+ tagsSubSet: [],//标签列表
|
|
|
+ behaviorTypeList: [],
|
|
|
sopAddShow: false,//转出弹窗
|
|
|
- queryform: {},//页面检索对象
|
|
|
- form: {},//提交表单
|
|
|
+ queryform: {
|
|
|
+ sopName:"",
|
|
|
+ sopStatus:"",
|
|
|
+ pageNum: 1,
|
|
|
+ pageSize: 20,
|
|
|
+ },//页面检索对象
|
|
|
+ form: {
|
|
|
+ id: "",
|
|
|
+ sopName: "",//名称
|
|
|
+ sopDesc: "",//场景描述
|
|
|
+ executeType: "",//触发类型
|
|
|
+ behaviorId: "",//类型编码
|
|
|
+ timeType: 1,//时间类型
|
|
|
+ relativeTime: "",// 时间间隔
|
|
|
+ absoluteTime: "",//日期
|
|
|
+ tagGroupId: "",//标签组id
|
|
|
+ tagIdlist: [],//标签id数组
|
|
|
+ tagId: "",//标签id字符串
|
|
|
+ materialId: "",//素材id
|
|
|
+ },//提交表单
|
|
|
rules: {
|
|
|
- labelName: [
|
|
|
+ sopName: [
|
|
|
+ {
|
|
|
+ required: true,
|
|
|
+ message: '请输入名称',
|
|
|
+ trigger: 'blur',
|
|
|
+ },
|
|
|
+ ],
|
|
|
+ sopDesc: [
|
|
|
+ {
|
|
|
+ required: true,
|
|
|
+ message: '请输入描述',
|
|
|
+ trigger: 'blur',
|
|
|
+ },
|
|
|
+ ],
|
|
|
+ executeType: [
|
|
|
{
|
|
|
required: true,
|
|
|
- message: '请选择员工',
|
|
|
+ message: '请选择触发类型',
|
|
|
trigger: 'chnage',
|
|
|
},
|
|
|
],
|
|
|
-
|
|
|
- },
|
|
|
- Result: {
|
|
|
- content: [
|
|
|
+ behaviorId: [
|
|
|
{
|
|
|
- name: "3232",
|
|
|
- status: true
|
|
|
+ required: true,
|
|
|
+ message: '请选择行为类型编码',
|
|
|
+ trigger: 'chnage',
|
|
|
},
|
|
|
+ ],
|
|
|
+ timeType: [
|
|
|
{
|
|
|
- name: "3232",
|
|
|
- status: false
|
|
|
- }
|
|
|
+ required: true,
|
|
|
+ message: '请选择时间类型',
|
|
|
+ trigger: 'chnage',
|
|
|
+ },
|
|
|
+ ],
|
|
|
+ relativeTime: [
|
|
|
+ {
|
|
|
+ required: true,
|
|
|
+ message: '请选择时间',
|
|
|
+ trigger: 'chnage',
|
|
|
+ },
|
|
|
],
|
|
|
- totalSize: 100,
|
|
|
+ absoluteTime: [
|
|
|
+ {
|
|
|
+ required: true,
|
|
|
+ message: '请选择时间',
|
|
|
+ trigger: 'chnage',
|
|
|
+ },
|
|
|
+ ],
|
|
|
+ tagGroupId: [
|
|
|
+ {
|
|
|
+ required: true,
|
|
|
+ message: '请选择标签',
|
|
|
+ trigger: 'chnage',
|
|
|
+ },
|
|
|
+ ],
|
|
|
+ materialId: [
|
|
|
+ {
|
|
|
+ required: true,
|
|
|
+ message: '请选择素材',
|
|
|
+ trigger: 'chnage',
|
|
|
+ },
|
|
|
+ ],
|
|
|
+ },
|
|
|
+ Result: {
|
|
|
+
|
|
|
},
|
|
|
Columns: [
|
|
|
- { prop: "name", label: "SOPID", minWidth: 180, },
|
|
|
- { prop: "name", label: "SOP名称", minWidth: 180, },
|
|
|
- { prop: "mobile", label: "场景描述", minWidth: 180 },
|
|
|
- { prop: "mobile", label: "触发类型", minWidth: 180 },
|
|
|
- { prop: "mobile", label: "关联标签", minWidth: 180 },
|
|
|
- { prop: "mobile", label: "启用状态", minWidth: 180 },
|
|
|
- { prop: "mobile", label: "创建时间", minWidth: 180 },
|
|
|
+ { prop: "id", label: "SOPID", minWidth: 180, },
|
|
|
+ { prop: "sopName", label: "SOP名称", minWidth: 180, },
|
|
|
+ { prop: "sopDesc", label: "场景描述", minWidth: 180 },
|
|
|
+ { prop: "executeType", label: "触发类型", minWidth: 180, formatter: this.executeTypeFormatter },
|
|
|
+ { prop: "tagName", label: "关联标签", minWidth: 180 },
|
|
|
+ { prop: "sopStatus", label: "启用状态", minWidth: 180, formatter: this.sopStatusFormatter },
|
|
|
+ { prop: "createTime", label: "创建时间", minWidth: 180 },
|
|
|
],
|
|
|
}
|
|
|
},
|
|
|
// 生命周期函数
|
|
|
created() {
|
|
|
+ this.userActionType();//获取行为类型
|
|
|
+ this.fetchTags();
|
|
|
+ this.materialListNew();
|
|
|
},
|
|
|
// 方法函数
|
|
|
+
|
|
|
methods: {
|
|
|
- // 查看详情
|
|
|
- viewDetails() {
|
|
|
+ //编辑
|
|
|
+ sopEdit(row) {
|
|
|
+ this.dialogtype = 'edit';
|
|
|
+ this.dialogtitle = '编辑SOP规则';
|
|
|
+ api.getSop(row.id).then((res) => {
|
|
|
+ if (res.code == 200) {
|
|
|
+ res.data.tagIdlist = res.data.tagId.split(',')
|
|
|
+ this.relativeTime = this.secondsToTimeFormat(res.data.relativeTime)
|
|
|
+ Object.keys(this.form).forEach(key => {
|
|
|
+ if (res.data.hasOwnProperty(key)) {
|
|
|
+ this.form[key] = res.data[key];
|
|
|
+ }
|
|
|
+ });
|
|
|
+ this.tagsSubSet = this.tagsArray.find(val => val.id == res.data.tagGroupId).weTags;//获取对应标签组标签列表
|
|
|
+ this.sopAddShow = true;
|
|
|
+ }
|
|
|
+ })
|
|
|
+ },
|
|
|
+ //删除
|
|
|
+ viewDel(row){
|
|
|
+ api.deleteSop(row.id).then((res) => {
|
|
|
+ if (res.code == 200) {
|
|
|
+ this.findPage();
|
|
|
+ this.$message({
|
|
|
+ type: 'success',
|
|
|
+ message: '删除成功!'
|
|
|
+ });
|
|
|
+ }else{
|
|
|
+ this.$message({
|
|
|
+ type: 'error',
|
|
|
+ message: res.msg,
|
|
|
+ });
|
|
|
+ }
|
|
|
+ })
|
|
|
+ },
|
|
|
+ //复制数据
|
|
|
+ viewCopy(row) {
|
|
|
+ api.copySop(row.id).then((res) => {
|
|
|
+ if (res.code == 200) {
|
|
|
+ this.findPage();
|
|
|
+ this.$message({
|
|
|
+ type: 'success',
|
|
|
+ message: '复制成功!'
|
|
|
+ });
|
|
|
+ }else{
|
|
|
+ this.$message({
|
|
|
+ type: 'error',
|
|
|
+ message: res.msg,
|
|
|
+ });
|
|
|
+ }
|
|
|
+ })
|
|
|
+ },
|
|
|
+ executeTypeFormatter(row) {
|
|
|
+ return row.executeType == 1 ? '时间触发' : '行为触发'
|
|
|
+ },
|
|
|
+ sopStatusFormatter(row) {
|
|
|
+ let sopStatus = row.sopStatus;
|
|
|
+ return sopStatus == 2 ? '停用' : '启用'
|
|
|
+ },
|
|
|
+ executeTypeChange() {
|
|
|
+ this.form.behaviorId = "";
|
|
|
+ },
|
|
|
+ //获取素材
|
|
|
+ materialListNew() {
|
|
|
+ api.materialListNew().then((res) => {
|
|
|
+ this.aterialList = res;
|
|
|
+ })
|
|
|
+ },
|
|
|
+ //获取对应标签组标签列表
|
|
|
+ tagsArrayChange(value) {
|
|
|
+ this.form.tagIdlist = [];//清空历史
|
|
|
+ this.tagsSubSet = this.tagsArray.find(val => val.id == value).weTags;
|
|
|
+ },
|
|
|
+ //获取标签组
|
|
|
+ fetchTags() {
|
|
|
+ api.tagList({
|
|
|
+ pageNum: 1,
|
|
|
+ pageSize: 100,
|
|
|
+ groupName: '',
|
|
|
+ groupTagType: 1,
|
|
|
+ }).then((res) => {
|
|
|
+ if (res.code == 200) {
|
|
|
+ this.tagsArray = res.rows;
|
|
|
+ }
|
|
|
+ })
|
|
|
+ },
|
|
|
+ userActionType() {
|
|
|
+ userActionTypeApi.behaviorList({
|
|
|
+ name: "",
|
|
|
+ delFlag: 0,
|
|
|
+ pageNum: 1,
|
|
|
+ pageSize: 10,
|
|
|
+ }).then((res) => {
|
|
|
+ if (res.code == 200) {
|
|
|
+ this.behaviorTypeList = res.rows;
|
|
|
+ }
|
|
|
+ })
|
|
|
+ },
|
|
|
+ // 启用/停用
|
|
|
+ viewEditStatus(row) {
|
|
|
+ api.disableStatus(row.id).then((res) => {
|
|
|
+ if (res.code == 200) {
|
|
|
+ this.findPage();
|
|
|
+ this.$message({
|
|
|
+ type: 'success',
|
|
|
+ message: '操作成功!'
|
|
|
+ });
|
|
|
+ }else{
|
|
|
+ this.$message({
|
|
|
+ type: 'error',
|
|
|
+ message: res.msg,
|
|
|
+ });
|
|
|
+ }
|
|
|
+ })
|
|
|
},
|
|
|
// 操作用户
|
|
|
userOperation() {
|
|
|
+ this.form.relativeTime = this.convertTimeToSeconds(this.relativeTime);
|
|
|
this.$refs['form'].validate((valid) => {
|
|
|
if (valid) {
|
|
|
- console.log(valid)
|
|
|
+ this.form.tagId = this.form.tagIdlist.join(',');
|
|
|
+ if (this.dialogtype == 'add') {
|
|
|
+ api.addSop(this.form).then((res) => {
|
|
|
+ if (res.code == 200) {
|
|
|
+ this.sopAddShow = false;
|
|
|
+ this.findPage();
|
|
|
+ this.$message({
|
|
|
+ type: 'success',
|
|
|
+ message: '添加成功!'
|
|
|
+ });
|
|
|
+ }
|
|
|
+ })
|
|
|
+ } else {
|
|
|
+ api.updateSop(this.form).then((res) => {
|
|
|
+ if (res.code == 200) {
|
|
|
+ this.sopAddShow = false;
|
|
|
+ this.findPage();
|
|
|
+ this.$message({
|
|
|
+ type: 'success',
|
|
|
+ message: '编辑成功!'
|
|
|
+ });
|
|
|
+ }
|
|
|
+ })
|
|
|
+ }
|
|
|
}
|
|
|
})
|
|
|
},
|
|
|
@@ -163,13 +385,76 @@ export default {
|
|
|
disableAction(row) {
|
|
|
|
|
|
}, //列表查询
|
|
|
- findPage() {
|
|
|
- console.log(1)
|
|
|
+ findPage(data) {
|
|
|
+ if (data && data.pageRequest) {
|
|
|
+ this.queryform.pageNum = data.pageRequest.pageNum;
|
|
|
+ this.queryform.pageSize = data.pageRequest.pageSize;
|
|
|
+ }
|
|
|
+ api.listSop(this.queryform).then((res) => {
|
|
|
+ if (res.code == 200) {
|
|
|
+ this.Result = res;
|
|
|
+ }
|
|
|
+ })
|
|
|
},
|
|
|
// 同步用户
|
|
|
sopAdd() {
|
|
|
this.sopAddShow = true;
|
|
|
+ this.dialogtype = 'add';
|
|
|
+ this.dialogtitle = '新建SOP规则';
|
|
|
+ this.form = {
|
|
|
+ id: "",
|
|
|
+ sopName: "",//名称
|
|
|
+ sopDesc: "",//场景描述
|
|
|
+ executeType: "",//触发类型
|
|
|
+ behaviorId: "",//类型编码
|
|
|
+ timeType: 1,//时间类型
|
|
|
+ relativeTime: "",// 时间间隔
|
|
|
+ absoluteTime: "",//日期
|
|
|
+ tagGroupId: "",//标签组id
|
|
|
+ tagIdlist: [],//标签id数组
|
|
|
+ tagId: "",//标签id字符串
|
|
|
+ materialId: "",//素材id
|
|
|
+ }
|
|
|
+ this.relativeTime = "";
|
|
|
+ },
|
|
|
+ resetForm(){
|
|
|
+ this.queryform={
|
|
|
+ sopName:"",
|
|
|
+ sopStatus:"",
|
|
|
+ pageNum: 1,
|
|
|
+ pageSize: 20,
|
|
|
+ }
|
|
|
+ },
|
|
|
+ // 时间转换成秒
|
|
|
+ convertTimeToSeconds(timeString) {
|
|
|
+ const [hours, minutes] = timeString.split(':').map(Number);//分解为时 和 分
|
|
|
+ // 计算总秒数
|
|
|
+ const totalSeconds = (hours * 3600) + (minutes * 60);
|
|
|
+ return totalSeconds;
|
|
|
},
|
|
|
+ //时分转换秒
|
|
|
+ secondsToTimeFormat(seconds) {
|
|
|
+ const hours = Math.floor(seconds / 3600); // 计算小时
|
|
|
+ const minutes = Math.floor((seconds % 3600) / 60); // 计算分钟
|
|
|
+ let timeString = '';
|
|
|
+ if (hours > 0 && hours < 10) {
|
|
|
+ timeString += `0${hours}:`;
|
|
|
+ } else if (hours > 10) {
|
|
|
+ timeString += `${hours}:`;
|
|
|
+ } else {
|
|
|
+ timeString += '00:'
|
|
|
+ }
|
|
|
+ if (minutes > 0 || hours > 0) {
|
|
|
+ if (minutes < 10) {
|
|
|
+ timeString += `0${minutes}`;
|
|
|
+
|
|
|
+ } else {
|
|
|
+ timeString += `${minutes}`;
|
|
|
+
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return timeString;
|
|
|
+ }
|
|
|
},
|
|
|
// 计算属性
|
|
|
computed: {
|