隐私协议菜单,店铺详情店铺详情非空判断,自定义logo

master
mhhhh 2022-05-17 09:19:36 +08:00
parent 727d240715
commit 3cd57a6915
15 changed files with 531 additions and 139 deletions

View File

@ -6,9 +6,31 @@
<script>
import storage from '@/plugins/storage';
import { getLogoImg} from '@/api/common.js';
export default {
name: 'App',
mounted(){
//LOGO
getLogoImg().then(res => {
if(res.success&&res.result.settingValue){
let data = JSON.parse(res.result.settingValue);
this.$store.commit("SET_LOGOIMG", data.buyerSideLogo);
this.$store.commit("SET_SITENAME", data.siteName);
storage.setItem("siteName", data.siteName);
window.document.title = data.siteName;
//icon
let link =
document.querySelector("link[rel*='icon']") ||
document.createElement("link");
link.type = "image/x-icon";
link.href = data.buyerSideLogo;
link.rel = "shortcut icon";
document.getElementsByTagName("head")[0].appendChild(link);
}
})
}
};
</script>
<style lang="scss">

View File

@ -92,3 +92,13 @@ export function getIMDetail () {
method: Method.GET
});
}
//获取图片logo
export function getLogoImg(){
return request ({
url:`${commonUrl}/common/common/logo`,
method: Method.GET,
needToken: false
})
}

View File

@ -1,5 +1,7 @@
var storage = require('@/plugins/storage');
module.exports = {
title: "lili-shop", //配置显示在浏览器标签的title、底部信息、部分信息展示的值
//title: "lili-shop", //配置显示在浏览器标签的title、底部信息、部分信息展示的值
title:storage.default.getItem('siteName'),
icpCard: "", // icp证
company: {
href: "https://pickmall.cn",

View File

@ -12,3 +12,9 @@ export const SET_CARTNUM = (state, data) => {
export const SET_HOTWORDS = (state, data) => {
state.hotWordsList = data
}
export const SET_LOGOIMG = (state, data) => {
state.logoImg = data
}
export const SET_SITENAME = (state, data) => {
state.siteName = data
}

View File

@ -11,7 +11,8 @@ export default new Vuex.Store({
state: {
navList: [], // 首页快捷导航
cartNum: storage.getItem('cartNum') || 0,
logoImg: require('@/assets/images/logo2.png'),
logoImg: storage.getItem('logoImg') || require('@/assets/images/logo2.png'),
siteName:storage.getItem('siteName')|| null,
hotWordsList: storage.getItem('hotWordsList'),
category: JSON.parse(localStorage.getItem('category'))
},

View File

@ -6,7 +6,11 @@ var BASE = {
common: "https://common-api.pickmall.cn",
buyer: "https://buyer-api.pickmall.cn",
seller: "https://store-api.pickmall.cn",
manager: "https://admin-api.pickmall.cn"
manager: "https://admin-api.pickmall.cn",
// manager: "http://192.168.0.120:8887",
// common: "http://192.168.0.120:8890",
},
API_PROD: {
common: "https://common-api.pickmall.cn",

View File

@ -19,3 +19,7 @@ export const getVerifyImg = (verificationEnums) => {
export const postVerifyImg = (params) => {
return postRequestWithNoToken(`${commonUrl}/common/common/slider/${params.verificationEnums}`, params);
};
//获取LOGO
export const getLogo = ()=>{
return getRequest (`${commonUrl}/common/common/logo`);
};

View File

@ -105,3 +105,14 @@ export const getArticle = (params) => {
export const delArticle = (ids) => {
return deleteRequest(`/other/article/delByIds/${ids}`)
}
//获取隐私协议数据
export const getPrivacy = (type) => {
return getRequest(`/other/article/type/${type}`)
}
//修改隐私协议数据
export const updatePrivacy = (id,type,params) => {
return putRequest(`/other/article/updateArticle/${type}?id=${id}`, params, {"Content-Type": "application/json"})
}

View File

@ -6,7 +6,8 @@
<!-- 左侧菜单 -->
<div class="sidebar-menu-con menu-bar">
<div class="logo-con">
<img src="../assets/logo.png" key="max-logo" />
<!-- <img src="../assets/logo.png" key="max-logo" /> -->
<img :src="domainLogo" key="max-logo" />
</div>
<shrinkable-menu></shrinkable-menu>
</div>
@ -23,8 +24,17 @@
<message-tip v-if="tipsMessage" :res="tipsMessage"></message-tip>
<!-- 用户头像 -->
<div class="user-dropdown-menu-con">
<Row type="flex" justify="end" align="middle" class="user-dropdown-innercon">
<Dropdown transfer trigger="hover" @on-click="handleClickUserDropdown">
<Row
type="flex"
justify="end"
align="middle"
class="user-dropdown-innercon"
>
<Dropdown
transfer
trigger="hover"
@on-click="handleClickUserDropdown"
>
<div class="dropList">
<span class="main-user-name">{{ userInfo.nickName }}</span>
<Icon type="md-arrow-dropdown" />
@ -37,8 +47,12 @@
<DropdownItem name="personalCenter">{{
$t("userCenter")
}}</DropdownItem>
<DropdownItem name="changePass">{{ $t("changePass") }}</DropdownItem>
<DropdownItem name="loginOut" divided>{{ $t("logout") }}</DropdownItem>
<DropdownItem name="changePass">{{
$t("changePass")
}}</DropdownItem>
<DropdownItem name="loginOut" divided>{{
$t("logout")
}}</DropdownItem>
</DropdownMenu>
</Dropdown>
</Row>
@ -69,7 +83,8 @@ import messageTip from "./main-components/message-tip.vue";
import circleLoading from "@/views/my-components/lili/circle-loading.vue";
import Cookies from "js-cookie";
import util from "@/libs/util.js";
import { getNoticePage, logout } from "@/api/index";
import { getNoticePage, logout, getSetting } from "@/api/index";
import {getLogo} from "@/api/common"
var client;
export default {
@ -85,6 +100,7 @@ export default {
userInfo: "", //
navType: 1, // nav
tipsMessage: "", //
domainLogo: "",
};
},
computed: {
@ -113,6 +129,31 @@ export default {
if (currWidth <= 1200) {
this.sliceNum = 2;
}
//domainLogo
getSetting("BASE_SETTING").then((res) => {
if (res.success) {
//icon
this.setStore("icon", res.result.domainLogo);
this.domainLogo = res.result.domainLogo;
let link =
document.querySelector("link[rel*='icon']") ||
document.createElement("link");
link.type = "image/x-icon";
link.href = res.result.domainLogo;
link.rel = "shortcut icon";
document.getElementsByTagName("head")[0].appendChild(link);
//siteName
this.setStore("title", res.result.siteName);
window.document.title = res.result.siteName + " - 运营后台";
}
});
getLogo().then((res)=>{
if(res.success&&res.result.settingValue){
let data = JSON.parse(res.result.settingValue);
console.log(data);
}
})
//
getNoticePage({}).then((res) => {
if (res.success) {

View File

@ -0,0 +1,261 @@
<template>
<div class="wrapper">
<Row>
<Col span="24">
<Card class="article-detail">
<Table :loading="loading" border :columns="columns" :data="data" ref="table">
</Table>
</Card>
</Col>
</Row>
<template v-if="!selected">
<Modal :title="modalTitle" v-model="modalVisible" :mask-closable="false" :width="1100">
<Form ref="form" :model="form.article" :label-width="100">
<FormItem label="文章标题" prop="title">
<Input v-model="form.article.title" clearable style="width: 40%" />
</FormItem>
<FormItem label="文章分类" prop="categoryId">
<Select v-model="treeValue" placeholder="请选择" clearable style="width: 180px">
<Option :value="treeValue" style="display: none">{{
treeValue
}}
</Option>
<Tree :data="treeDataDefault" @on-select-change="handleCheckChange"></Tree>
</Select>
</FormItem>
<FormItem label="文章排序" prop="sort">
<Input type="number" v-model="form.article.sort" clearable style="width: 10%" />
</FormItem>
<FormItem class="form-item-view-el" label="文章内容" prop="content">
<editor openXss v-model="form.article.content"></editor>
</FormItem>
<FormItem label="是否展示" prop="openStatus">
<i-switch size="large" v-model="form.article.openStatus" >
<span slot="open">展示</span>
<span slot="close">隐藏</span>
</i-switch>
</FormItem>
</Form>
<div slot="footer">
<Button type="text" @click="modalVisible = false">取消</Button>
<Button type="primary" :loading="submitLoading" @click="handleSubmit"></Button>
</div>
</Modal>
</template>
</div>
</template>
<script>
import {
getArticleCategory,
updatePrivacy,
getPrivacy,
} from "@/api/pages";
import editor from "@/views/my-components/lili/editor";
export default {
name: "privacy",
components: {
editor,
},
props: {
selected: {
type: Boolean,
default: false,
},
},
data() {
return {
loading: false, //
modalVisible: false, //
treeDataDefault: [],
list: [], //
treeValue: "", //
//
treeData: [],
submitLoading: false, //
modalTitle:'',
currindex:'',
form: {
type:'',
article:{
openStatus: false,
title: '',
categoryId: '',
sort: 1,
content: '',
type:''
},
id:''
},
columns: [
//
{
title:"协议名称",
key: "name",
width: 150,
},
//
{
title:"协议类型",
key: "type",
width: 150,
},
{
title: "操作",
key: "action",
align: "center",
width: 230,
render: (h, params) => {
return h("div", [
h(
"Button",
{
props: {
size: "small",
type: "info",
},
style: {
marginRight: "5px",
},
on: {
click: () => {
this.edit(params.row);
},
},
},
"编辑"
)
]);
},
},
],
data: [
{
name:'店铺入驻协议',
type:'STORE_REGISTER'
},
{
name:'用户协议',
type:'USER_AGREEMENT'
},
{
name:'证照信息',
type:'LICENSE_INFORMATION'
},
{
name:'关于我们',
type:'ABOUT'
},
{
name:'隐私策略',
type:'PRIVACY_POLICY'
},
], //
};
},
methods: {
//
init() {
this.getAllList(0);
},
//
handleCheckChange(data) {
let value = "";
let title = "";
this.list = [];
data.forEach((item, index) => {
value += `${item.value},`;
title += `${item.title},`;
});
value = value.substring(0, value.length - 1);
title = title.substring(0, title.length - 1);
this.list.push({
value,
title,
});
this.form.article.categoryId = value;
},
//
getAllList(parent_id) {
this.loading = true;
getArticleCategory(parent_id).then((res) => {
this.loading = false;
if (res.success) {
this.treeData = this.getTree(res.result);
this.treeDataDefault = this.getTree(res.result);
this.treeData.unshift({
title: "全部",
level: 0,
children: [],
id: "0",
categoryId: 0,
});
}
});
},
//
getTree(tree = []) {
let arr = [];
if (!!tree && tree.length !== 0) {
tree.forEach((item) => {
let obj = {};
obj.title = item.articleCategoryName;
obj.value = item.id;
obj.attr = item.articleCategoryName; //
obj.expand = false;
obj.selected = false;
obj.children = this.getTree(item.children); //
arr.push(obj);
});
}
return arr;
},
// modal
edit(data) {
this.modalType = 1;
this.modalTitle = "编辑协议";
this.form.article = {
content:''
};
this.$refs.form.resetFields();
this.loading = true;
getPrivacy(data.type).then((res) => {
this.loading = false;
if(res.result){
this.modalVisible = true;
this.form.article.categoryId = res.result.categoryId;
console.log(this.treeDataDefault);
this.form.id = res.result.id;
this.form.article.content =res.result.content;
this.form.article.title = res.result.title;
this.form.article.sort = res.result.sort;
this.form.article.openStatus = res.result.openStatus;
this.form.article.type = res.result.type;
this.form.type = res.result.type;
}
});
this.loading = false;
},
//
handleSubmit() {
this.$refs.form.validate((valid) => {
if (valid) {
this.submitLoading = true;
//
updatePrivacy(this.form.id,this.form.type,this.form.article).then((res) => {
this.submitLoading = false;
if (res.success) {
this.$Message.success("操作成功");
this.modalVisible = false;
}
});
}
});
},
},
mounted() {
this.init();
},
};
</script>

View File

@ -14,66 +14,86 @@
<p slot="title">账单详细</p>
<div class="tips-status">
<span>账单状态</span>
<span class="theme_color">{{bill.billStatus | unixSellerBillStatus}}</span>
<span>账单状态 </span>
<span class="theme_color">{{
bill.billStatus | unixSellerBillStatus
}}</span>
<Button
v-if="bill.billStatus == 'CHECK'"
size="mini"
type="primary"
@click="pass()"
>付款</Button>
>付款</Button
>
</div>
<table>
<tbody>
<tr v-for="(item,index) in data" :key="index">
<td>{{item.name}}</td><td>{{item.value}}</td>
<tr v-for="(item, index) in data" :key="index">
<td>{{ item.name }}</td>
<td>{{ item.value }}</td>
</tr>
</tbody>
</table>
<div>
<h3 class="ml_10">结算详细</h3>
<h3 class="ml_10" style="padding:10px;">结算详细</h3>
<div class="bill-detail-price">
<span>
<p>积分结算金额</p>
<p class="increase-color">
+{{ bill.pointSettlementPrice || 0 | unitPrice("¥") }}
</p>
</span>
<span>
<p>平台优惠券补贴</p>
<p class="increase-color">
+{{ bill.siteCouponCommission || 0 | unitPrice("¥") }}
</p>
</span>
<span>
<p>砍价商品结算金额</p>
<p class="increase-color">
+{{ bill.kanjiaSettlementPrice || 0 | unitPrice("¥") }}
</p>
</span>
<span>
<p>退单分销返现返还</p>
<p class="increase-color">
+{{ bill.distributionRefundCommission || 0 | unitPrice("¥") }}
</p>
</span>
<span>
<p>退单产生退还佣金金额</p>
<p class="increase-color">
+{{ bill.refundCommissionPrice || 0 | unitPrice("¥") }}
</p>
</span>
<span>
<p>退单金额</p>
<p class="theme_color">-{{bill.refundPrice || 0 | unitPrice('¥')}}</p>
<p class="theme_color">
-{{ bill.refundPrice || 0 | unitPrice("¥") }}
</p>
</span>
<span>
<p>平台收取佣金</p>
<p class="theme_color">-{{bill.commissionPrice || 0 | unitPrice('¥')}}</p>
<p class="theme_color">
-{{ bill.commissionPrice || 0 | unitPrice("¥") }}
</p>
</span>
<span>
<p>退单产生退还佣金金额</p>
<p class="increase-color">+{{bill.refundCommissionPrice || 0 | unitPrice('¥')}}</p>
</span>
<span>
<p>分销返现支出</p>
<p class="theme_color">-{{bill.distributionCommission || 0 | unitPrice('¥')}}</p>
<p class="theme_color">
-{{ bill.distributionCommission || 0 | unitPrice("¥") }}
</p>
</span>
<span>
<p>退单分销返现返还</p>
<p class="increase-color">+{{bill.distributionRefundCommission || 0 | unitPrice('¥')}}</p>
</span>
<span>
<p>退单平台优惠券补贴返还</p>
<p class="theme_color">-{{bill.siteCouponRefundCommission || 0 | unitPrice('¥')}}</p>
</span>
<span>
<p>平台优惠券补贴</p>
<p class="increase-color">+{{bill.siteCouponCommission || 0 | unitPrice('¥')}}</p>
</span>
<span>
<p>积分结算金额</p>
<p class="increase-color">+{{bill.pointSettlementPrice || 0 | unitPrice('¥')}}</p>
</span>
<span>
<p>砍价商品结算金额</p>
<p class="increase-color">+{{bill.kanjiaSettlementPrice || 0 | unitPrice('¥')}}</p>
<p class="theme_color">
-{{ bill.siteCouponRefundCommission || 0 | unitPrice("¥") }}
</p>
</span>
</div>
</div>
@ -135,8 +155,9 @@ export default {
name: "bill-detail",
data() {
return {
loading:false,
columns: [ //
loading: false,
columns: [
//
{
title: "项目",
key: "name",
@ -147,7 +168,8 @@ export default {
key: "value",
},
],
data: [ //
data: [
//
{
name: "计算中",
value: 0,
@ -176,15 +198,16 @@ export default {
name: "计算中",
value: 0,
},
{
{
name: "计算中",
value: 0,
}
},
],
id: "", // id
bill: {}, //
order: [], //
orderParam: { //
orderParam: {
//
pageNumber: 1, //
pageSize: 10, //
sort: "id", //
@ -193,18 +216,19 @@ export default {
startDate: null,
endDate: null,
},
orderColumns: [ //
orderColumns: [
//
{
title: "入账时间",
key: "createTime",
minWidth: 120,
tooltip: true
tooltip: true,
},
{
title: "订单编号",
key: "orderSn",
minWidth: 120,
tooltip: true
tooltip: true,
},
{
title: "订单金额",
@ -232,55 +256,52 @@ export default {
title: "平台优惠券",
key: "siteCouponPrice",
render: (h, params) => {
if(params.row.siteCouponPrice == null){
if (params.row.siteCouponPrice == null) {
return h("div", "-");
} else {
return h(
"div",
"-"
);
}else{
return h(
"div",
this.$options.filters.unitPrice(params.row.siteCouponPrice, "¥")
this.$options.filters.unitPrice(
params.row.siteCouponPrice,
"¥"
)
);
}
},
},
{
title: "平台优惠券补贴金额",
key: "siteCouponCommission",
render: (h, params) => {
if (params.row.siteCouponCommission == null) {
return h("div", "-");
} else {
return h(
"div",
this.$options.filters.unitPrice(
params.row.siteCouponCommission,
"¥"
)
);
}
},
},
{
title: "平台优惠券补贴金额",
key: "siteCouponCommission",
render: (h, params) => {
if(params.row.siteCouponCommission == null){
return h(
"div",
"-"
);
}else{
return h(
"div",
this.$options.filters.unitPrice(params.row.siteCouponCommission, "¥")
);
}
},
},
{
title: "分销金额",
key: "distributionRebate",
width: 120,
render: (h, params) => {
if(params.row.distributionRebate == null){
if (params.row.distributionRebate == null) {
return h("div", "-");
} else {
return h(
"div",
"-"
);
}else{
return h(
"div",
this.$options.filters.unitPrice(params.row.distributionRebate, "¥")
this.$options.filters.unitPrice(
params.row.distributionRebate,
"¥"
)
);
}
},
},
{
@ -294,10 +315,10 @@ export default {
);
},
},
],
refund: [], // 退
refundParam: { //
refundParam: {
//
flowTypeEnum: "PAY",
pageNumber: 1, //
pageSize: 10, //
@ -307,30 +328,31 @@ export default {
startDate: null,
endDate: null,
},
refundColumns: [ // 退
refundColumns: [
// 退
{
title: "退款时间",
key: "createTime",
minWidth: 120,
tooltip: true
tooltip: true,
},
{
title: "退款流水编号",
key: "sn",
minWidth: 120,
tooltip: true
tooltip: true,
},
{
title: "订单编号",
key: "orderSn",
minWidth: 120,
tooltip: true
tooltip: true,
},
{
title: "售后编号",
key: "refundSn",
minWidth: 120,
tooltip: true
tooltip: true,
},
{
title: "退款金额",
@ -358,25 +380,24 @@ export default {
{
title: "退还平台优惠券",
key: "siteCouponCommission",
minWidth: 110
minWidth: 110,
},
{
title: "退还分销",
key: "distributionRebate",
minWidth: 120,
render: (h, params) => {
if(params.row.distributionRebate == null){
if (params.row.distributionRebate == null) {
return h("div", "-");
} else {
return h(
"div",
"-"
);
}else{
return h(
"div",
this.$options.filters.unitPrice(params.row.distributionRebate, "¥")
this.$options.filters.unitPrice(
params.row.distributionRebate,
"¥"
)
);
}
},
},
@ -385,22 +406,16 @@ export default {
key: "billPrice",
minWidth: 120,
render: (h, params) => {
if(params.row.billPrice == null){
return h(
"div",
"-"
);
}else{
if (params.row.billPrice == null) {
return h("div", "-");
} else {
return h(
"div",
this.$options.filters.unitPrice(params.row.billPrice, "¥")
);
}
},
},
],
orderTotal: 0, //
refundTotal: 0, // 退
@ -421,12 +436,12 @@ export default {
//退
refundOrderChangePage(v) {
this.refundParam.pageNumber = v;
this.getRefund()
this.getRefund();
},
//退
refundOrderChangePageSize(v) {
this.refundParam.pageSize = v;
tthis.getRefund()
tthis.getRefund();
},
clickTabs(index) {
if (index == 1) {
@ -438,7 +453,6 @@ export default {
}
},
pass() {
API_Shop.pay(this.id).then((res) => {
if (res.success) {
@ -487,10 +501,15 @@ export default {
this.data[5].name = "平台打款时间";
this.data[5].value = bill.payTime === null ? "未付款" : bill.payTime;
this.data[6].name = "订单付款总金额";
this.data[6].value = filters.unitPrice(bill.orderPrice?bill.orderPrice:0, "¥");
this.data[6].value = filters.unitPrice(
bill.orderPrice ? bill.orderPrice : 0,
"¥"
);
this.data[7].name = "结算金额";
this.data[7].value = filters.unitPrice(bill.billPrice?bill.billPrice:0, "¥");
this.data[7].value = filters.unitPrice(
bill.billPrice ? bill.billPrice : 0,
"¥"
);
},
getOrder() {
API_Shop.getStoreFlow(this.id, this.orderParam).then((res) => {
@ -541,30 +560,36 @@ export default {
color: $theme_color;
}
}
table{
table {
font-size: 14px;
margin-left: 20px;
tr{
margin-left: 40px;
tr {
font-size: 12px;
height: 40px;
padding: 10px;
td:nth-child(1){
td:nth-child(1) {
width: 120px;
}
}
}
.bill-detail-price{
.bill-detail-price {
display: flex;
align-items: center;
flex-wrap: wrap;
padding: 10px;
>span{
> span {
font-size: 14px;
text-align: center;
width: 200px;
margin-bottom: 10px;
margin-bottom: 20px;
}
.increase-color{
.increase-color {
color: green;
margin-top:5px
}
.theme_color {
margin-top:5px
}
}
</style>

View File

@ -93,9 +93,9 @@
<p class="item">
<span class="label">退货地址</span>
<span class="info">
{{storeInfo.salesConsigneeName || storeInfo.salesConsigneeMobile || storeInfo.salesConsigneeAddressPath || storeInfo.salesConsigneeDetail?storeInfo.salesConsigneeName + storeInfo.salesConsigneeMobile +' '+ storeInfo.salesConsigneeAddressPath + storeInfo.salesConsigneeDetail:'暂未完善'}}
{{storeInfo.salesConsigneeName !== 'null' ? storeInfo.salesConsigneeName : '' || storeInfo.salesConsigneeMobile !=='null' ?storeInfo.salesConsigneeMobile:''|| storeInfo.salesConsigneeAddressPath !=='null'?storeInfo.salesConsigneeAddressPath:'' || storeInfo.salesConsigneeDetail !=='null'?storeInfo.salesConsigneeDetail:'' ?storeInfo.salesConsigneeName + storeInfo.salesConsigneeMobile +' '+ storeInfo.salesConsigneeAddressPath + storeInfo.salesConsigneeDetail:'暂未完善'}}
</span>
</p>
<p class="item">
<span class="label">店铺定位</span>

View File

@ -56,7 +56,10 @@ import { handleSubmit } from "./validate";
import ossManage from "@/views/sys/oss-manage/ossManage";
export default {
title: "基础设置",
props: ["res", "type"],
props: {
res:Object,
type:''
},
components: {
ossManage,
},
@ -104,6 +107,8 @@ export default {
setSetting(this.type, this.formValidate).then((res) => {
if (res.success) {
this.$Message.success("保存成功!");
localStorage.setItem("icon", this.formValidate.domainLogo);
window.document.title = this.formValidate.siteName + " - 运营后台";
} else {
this.$Message.error("保存失败!");
}

View File

@ -8,13 +8,13 @@
</Input>
</FormItem>
<FormItem label="积分抵扣付款" prop="money">
<!-- <FormItem label="积分抵扣付款" prop="money">
<Input type="number" v-model="formValidate.money">
<span slot="prepend">积分</span>
<span slot="append"> = 1 人民币</span>
</Input>
</FormItem>
</FormItem> -->
<FormItem label="注册账号" prop="register">
<Input type="number" v-model="formValidate.register">

View File

@ -432,15 +432,15 @@ export const result = [{
component: "shop/shopSetting",
children: null,
},
{
name: "shopAddress",
level: 2,
type: 0,
title: "自提管理",
path: "shopAddress",
component: "shop/shopAddress",
children: null,
}
// {
// name: "shopAddress",
// level: 2,
// type: 0,
// title: "自提管理",
// path: "shopAddress",
// component: "shop/shopAddress",
// children: null,
// }
]
}
]