diff --git a/anrui-base/anrui-base-api/src/main/java/com/yxt/anrui/base/api/baseoutsourcingapplication/BaseOutsourcingApplicationVo.java b/anrui-base/anrui-base-api/src/main/java/com/yxt/anrui/base/api/baseoutsourcingapplication/BaseOutsourcingApplicationVo.java index 498d335b1a..a8f439fca6 100644 --- a/anrui-base/anrui-base-api/src/main/java/com/yxt/anrui/base/api/baseoutsourcingapplication/BaseOutsourcingApplicationVo.java +++ b/anrui-base/anrui-base-api/src/main/java/com/yxt/anrui/base/api/baseoutsourcingapplication/BaseOutsourcingApplicationVo.java @@ -65,5 +65,12 @@ public class BaseOutsourcingApplicationVo implements Vo { private String guidedPrice; // 销售指导价 @ApiModelProperty("节点状态") private String nodeState; // 节点状态 - + @ApiModelProperty("流程定义的id") + private String procDefId; + @ApiModelProperty("环节定义的sid") + private String taskDefKey; + @ApiModelProperty("流程实例的sid") + private String procInstSid; + @ApiModelProperty("任务id") + private String taskId; } diff --git a/anrui-fin/anrui-fin-api/src/main/java/com/yxt/anrui/fin/api/kingdee/Data.java b/anrui-fin/anrui-fin-api/src/main/java/com/yxt/anrui/fin/api/kingdee/Data.java new file mode 100644 index 0000000000..21535f84cd --- /dev/null +++ b/anrui-fin/anrui-fin-api/src/main/java/com/yxt/anrui/fin/api/kingdee/Data.java @@ -0,0 +1,111 @@ +package com.yxt.anrui.fin.api.kingdee; + +import com.alibaba.fastjson.annotation.JSONField; +import com.alibaba.fastjson.annotation.JSONType; + +import java.util.List; + +@JSONType(orders={"Creator","NeedUpDateFields","NeedReturnFields","IsDeleteEntry","SubSystemId", + "IsVerifyBaseDataField","IsEntryBatchFill","ValidateFlag","NumberSearch","InterationFlags","Model"}) +public class Data { + @JSONField(name = "Creator") + private String Creator; + @JSONField(name = "NeedUpDateFields") + private List NeedUpDateFields; + @JSONField(name = "NeedReturnFields") + private List NeedReturnFields; + @JSONField(name = "IsDeleteEntry") + private String IsDeleteEntry; + @JSONField(name = "SubSystemId") + private String SubSystemId; + @JSONField(name = "IsVerifyBaseDataField") + private String IsVerifyBaseDataField; + @JSONField(name = "IsEntryBatchFill") + private String IsEntryBatchFill; + @JSONField(name = "ValidateFlag") + private String ValidateFlag; + @JSONField(name = "NumberSearch") + private String NumberSearch; + @JSONField(name = "InterationFlags") + private String InterationFlags; + /* @JSONField(name = "Model") + private Model Model;*/ + public void setCreator(String Creator) { + this.Creator = Creator; + } + public String getCreator() { + return Creator; + } + + public void setNeedUpDateFields(List NeedUpDateFields) { + this.NeedUpDateFields = NeedUpDateFields; + } + public List getNeedUpDateFields() { + return NeedUpDateFields; + } + + public void setNeedReturnFields(List NeedReturnFields) { + this.NeedReturnFields = NeedReturnFields; + } + public List getNeedReturnFields() { + return NeedReturnFields; + } + + public void setIsDeleteEntry(String IsDeleteEntry) { + this.IsDeleteEntry = IsDeleteEntry; + } + public String getIsDeleteEntry() { + return IsDeleteEntry; + } + + public void setSubSystemId(String SubSystemId) { + this.SubSystemId = SubSystemId; + } + public String getSubSystemId() { + return SubSystemId; + } + + public void setIsVerifyBaseDataField(String IsVerifyBaseDataField) { + this.IsVerifyBaseDataField = IsVerifyBaseDataField; + } + public String getIsVerifyBaseDataField() { + return IsVerifyBaseDataField; + } + + public void setIsEntryBatchFill(String IsEntryBatchFill) { + this.IsEntryBatchFill = IsEntryBatchFill; + } + public String getIsEntryBatchFill() { + return IsEntryBatchFill; + } + + public void setValidateFlag(String ValidateFlag) { + this.ValidateFlag = ValidateFlag; + } + public String getValidateFlag() { + return ValidateFlag; + } + + public void setNumberSearch(String NumberSearch) { + this.NumberSearch = NumberSearch; + } + public String getNumberSearch() { + return NumberSearch; + } + + public void setInterationFlags(String InterationFlags) { + this.InterationFlags = InterationFlags; + } + public String getInterationFlags() { + return InterationFlags; + } + + /*public void setModel(Model model) { + this.Model = model; + } + public Model getModel() { + return Model; + }*/ + +} + diff --git a/anrui-fin/anrui-fin-api/src/main/java/com/yxt/anrui/fin/api/kingdee/FinKingDeeFeign.java b/anrui-fin/anrui-fin-api/src/main/java/com/yxt/anrui/fin/api/kingdee/FinKingDeeFeign.java new file mode 100644 index 0000000000..d02b4f4cb0 --- /dev/null +++ b/anrui-fin/anrui-fin-api/src/main/java/com/yxt/anrui/fin/api/kingdee/FinKingDeeFeign.java @@ -0,0 +1,29 @@ +package com.yxt.anrui.fin.api.kingdee; + +import com.yxt.anrui.fin.api.kingdee.entrybill.EntryBillDto; +import com.yxt.common.core.result.ResultBean; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.springframework.cloud.openfeign.FeignClient; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; + +/** + * 财务模块调用金蝶保存业务单据的接口 + */ +@Api(tags = "财务模块调用金蝶保存业务单据的接口") +@FeignClient( + contextId = "anrui-fin-FinKingDeeFeign", + name = "anrui-kingdee", + path = "v1/finKingDee", + fallback =FinKingDeeFeignFallBack.class +) +public interface FinKingDeeFeign { + /** + * 入账保存应付单的接口 + * @return + */ + @ApiOperation("入账保存应付单的接口") + @PostMapping("/draftEntryBill") + ResultBean draftEntryBill(@RequestBody EntryBillDto entryBillDto); +} diff --git a/anrui-fin/anrui-fin-api/src/main/java/com/yxt/anrui/fin/api/kingdee/FinKingDeeFeignFallBack.java b/anrui-fin/anrui-fin-api/src/main/java/com/yxt/anrui/fin/api/kingdee/FinKingDeeFeignFallBack.java new file mode 100644 index 0000000000..076275762c --- /dev/null +++ b/anrui-fin/anrui-fin-api/src/main/java/com/yxt/anrui/fin/api/kingdee/FinKingDeeFeignFallBack.java @@ -0,0 +1,12 @@ +package com.yxt.anrui.fin.api.kingdee; + +import com.yxt.anrui.fin.api.kingdee.entrybill.EntryBillDto; +import com.yxt.common.core.result.ResultBean; + +public class FinKingDeeFeignFallBack +implements FinKingDeeFeign{ + @Override + public ResultBean draftEntryBill(EntryBillDto entryBillDto) { + return null; + } +} diff --git a/anrui-fin/anrui-fin-api/src/main/java/com/yxt/anrui/fin/api/kingdee/entrybill/EntryBillDto.java b/anrui-fin/anrui-fin-api/src/main/java/com/yxt/anrui/fin/api/kingdee/entrybill/EntryBillDto.java new file mode 100644 index 0000000000..ffbaab7ac8 --- /dev/null +++ b/anrui-fin/anrui-fin-api/src/main/java/com/yxt/anrui/fin/api/kingdee/entrybill/EntryBillDto.java @@ -0,0 +1,116 @@ +package com.yxt.anrui.fin.api.kingdee.entrybill; + +import com.yxt.common.core.dto.Dto; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import javax.validation.constraints.NotBlank; +import javax.validation.constraints.Pattern; +import java.math.BigDecimal; +import java.util.List; + +@Data +public class EntryBillDto { + + @ApiModelProperty("车辆入账单sid") + private String sid; + + @ApiModelProperty("用户sid") + @NotBlank(message = "用户sid不能为空") + private String userSid; + + @ApiModelProperty("申请编号") + @NotBlank(message = "申请编号不能为空") + private String applicationCode; + + @ApiModelProperty("申请人sid") + @NotBlank(message = "申请人不能为空") + private String applicationSid; + + @ApiModelProperty("申请人名称") + @NotBlank(message = "申请人不能为空") + private String applicationName; + + @ApiModelProperty("申请日期") + @Pattern(regexp = "^(\\s*)|([1-9]\\d{3}-(0[1-9]|1[0-2])-(0[1-9]|[1-2][0-9]|3[0-1]))$", message = "申请日期日期格式不正确") + private String applicationDate; + + @ApiModelProperty("采购订单sid") + @NotBlank(message = "采购订单不能为空") + private String vehicleOrderSid; + + @ApiModelProperty("采购订单编号") + @NotBlank(message = "采购订单编号不能为空") + private String purchaseOrderNo; + + @ApiModelProperty("车型sid ") + @NotBlank(message = "车型不能为空") + private String modelSid; + + @ApiModelProperty("车型名称 ") + @NotBlank(message = "车型名称不能为空") + private String modelName; + + @ApiModelProperty("常用配置 ") + private String configName; + @ApiModelProperty("常用配置Sid") + private String configSid; + + @ApiModelProperty("厂家合同价") + private BigDecimal contractPrice; + @ApiModelProperty("其中上装价格") + private BigDecimal amongSzPrice; + @ApiModelProperty("上装价格计算依据") + private String szPriceCalBasis; + @ApiModelProperty("一次运费") + private BigDecimal onceFreight; + @ApiModelProperty("二次运费") + private BigDecimal secondaryFreight; + @ApiModelProperty("下浮比例") + private String lowerProportion; + @ApiModelProperty("下浮金额") + private BigDecimal lowerMoney; + @ApiModelProperty("下浮合计") + private BigDecimal lowerTotal; + @ApiModelProperty("下浮备注") + private String lowerRemarks; + @ApiModelProperty("厂家结算价") + private BigDecimal costPrice; + @ApiModelProperty("内部编码") + private String insideCode; + + @ApiModelProperty("厂家入库日期") + private String priceDate; + @ApiModelProperty("厂家发车日期") + private String departureDate; + + @ApiModelProperty("备注") + private String remarks; + + @ApiModelProperty("流程状态") + private String nodeState; + + @ApiModelProperty("车辆台数") + private String num; + + @ApiModelProperty("车辆列表") + private List vehicleList; + + class ScmApplyInboundVehicleDto implements Dto { + + @ApiModelProperty("车辆信息sid") + private String sid; + + @ApiModelProperty("车辆入库单sid") + private String applySid; + + @ApiModelProperty("车型sid") + private String modelSid; + + @ApiModelProperty("车架号(VIN)") + private String vinNo; + + @ApiModelProperty("备注") + private String remarks; + } +} diff --git a/anrui-fin/anrui-fin-biz/src/main/java/com/yxt/anrui/fin/biz/kingdee/FinKingDeeFeignRest.java b/anrui-fin/anrui-fin-biz/src/main/java/com/yxt/anrui/fin/biz/kingdee/FinKingDeeFeignRest.java new file mode 100644 index 0000000000..84e764a555 --- /dev/null +++ b/anrui-fin/anrui-fin-biz/src/main/java/com/yxt/anrui/fin/biz/kingdee/FinKingDeeFeignRest.java @@ -0,0 +1,21 @@ +package com.yxt.anrui.fin.biz.kingdee; + +import com.yxt.anrui.fin.api.kingdee.FinKingDeeFeign; +import com.yxt.anrui.fin.api.kingdee.FinKingDeeFeignFallBack; +import com.yxt.anrui.fin.api.kingdee.entrybill.EntryBillDto; +import com.yxt.common.core.result.ResultBean; +import io.swagger.annotations.Api; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +@Api(tags = "单据调用金蝶的保存接口") +@RestController("com.yxt.anrui.fin.biz.kingdee.FinKingDeeFeignRest") +@RequestMapping("/finKingDee") +public class FinKingDeeFeignRest implements FinKingDeeFeign { + + @Override + public ResultBean draftEntryBill(EntryBillDto entryBillDto) { + + return null; + } +} diff --git a/anrui-flowable/anrui-flowable-biz/src/main/java/com/yxt/anrui/flowable/biz/flowtask/FlowTaskService.java b/anrui-flowable/anrui-flowable-biz/src/main/java/com/yxt/anrui/flowable/biz/flowtask/FlowTaskService.java index 11279a7733..8bc7cbc4b3 100644 --- a/anrui-flowable/anrui-flowable-biz/src/main/java/com/yxt/anrui/flowable/biz/flowtask/FlowTaskService.java +++ b/anrui-flowable/anrui-flowable-biz/src/main/java/com/yxt/anrui/flowable/biz/flowtask/FlowTaskService.java @@ -1586,6 +1586,9 @@ public class FlowTaskService extends MybatisBaseService rb1 = flowableFeign.handleProsess(bv); + if (!rb1.getSuccess()){ + return rb.setMsg(rb1.getMsg()); + } + String taskDefKey = rb1.getData().getTaskDefKey(); Map stringObjectMap = BeanUtil.beanToMap(rb1.getData()); updateFlowFiled(stringObjectMap); + if("Event_end".equals(taskDefKey)){ + + } return rb1; } else { return ResultBean.fireFail().setMsg("操作失败,提交的数据不一致!"); diff --git a/anrui-scm/anrui-scm-ui/src/views/baseoutsourcingapplication/baseoutsourcingapplication.vue b/anrui-scm/anrui-scm-ui/src/views/baseoutsourcingapplication/baseoutsourcingapplication.vue index d0397bcd45..8ffd32d5be 100644 --- a/anrui-scm/anrui-scm-ui/src/views/baseoutsourcingapplication/baseoutsourcingapplication.vue +++ b/anrui-scm/anrui-scm-ui/src/views/baseoutsourcingapplication/baseoutsourcingapplication.vue @@ -45,7 +45,7 @@ @@ -77,6 +77,18 @@ + + + @@ -87,7 +99,7 @@ import Pagination from '@/components/pagination' import pageye from '@/components/pagination/pageye' import divAdd from './baseoutsourcingapplicationAdd' import divInfo from './baseoutsourcingapplicationInfo' - +import {getStorage,setStorage} from "@/utils/auth"; export default { name: 'baseoutsourcingapplication', components: { @@ -99,6 +111,9 @@ export default { }, data() { return { + url:'', + dialogHeight: '80%', + centerDialogVisible: false, btndisabled: false, viewState: 1, // 1、列表 2、添加 3、修改 4、查看 isSearchShow: false, @@ -138,10 +153,40 @@ export default { row:{} } }, - created() { + mounted() { + // 在外部vue的window上添加postMessage的监听,而且绑定处理函数handleMessage + window.addEventListener('message', this.handleMessage) + }, + created() { this.loadList() }, methods: { + async handleMessage (event) { + var code= event.data.params.code; + if(code==1){ + this.init() + this.centerDialogVisible=false + } else if (code==2){ + this.dialogHeight = event.data.params.data + this.setIframeHeight(document.getElementById('iframe')); + } + }, + closeIt() { + this.url = '' + this.centerDialogVisible = false + }, + setIframeHeight(iframe) { + iframe.height = this.dialogHeight;//iframeWin.document.documentElement.scrollHeight || iframeWin.document.body.scrollHeight; + }, + flowRecord(row){ + this.centerDialogVisible = true + var params = { + deployId: row.procDefId, + procInsId: row.procInstSid, + token : getStorage() + } + this.url = 'http://127.0.0.1:9530/portal/#/flow/flowRecordForBusiness?data=' + encodeURI((JSON.stringify(params))) + }, resetState() { this.viewState = 1 }, @@ -234,7 +279,7 @@ export default { } var b=false; this.multipleSelection.forEach(row => { - if(!(row.nodeState == '待提交' || (row.nodeState!='待提交'&&row.nodeState=='外采申请'))){ + if(!(row.nodeState === '待提交' || (row.nodeState!='待提交'&&row.nodeState=='外采申请'))){ b=true } }) diff --git a/anrui-scm/anrui-scm-ui/src/views/ruzhang/ruzhangguanli/ruzhangguanli.vue b/anrui-scm/anrui-scm-ui/src/views/ruzhang/ruzhangguanli/ruzhangguanli.vue index 0a40a94ff0..07e636d344 100644 --- a/anrui-scm/anrui-scm-ui/src/views/ruzhang/ruzhangguanli/ruzhangguanli.vue +++ b/anrui-scm/anrui-scm-ui/src/views/ruzhang/ruzhangguanli/ruzhangguanli.vue @@ -104,6 +104,7 @@ export default { tableLoading: false, // 列表数据 dataList: [], + multipleSelection :[], // sid数组 sids: [], // 用于导出的时候保存已选择SID sides: '', // 一条数据的sid @@ -128,6 +129,7 @@ export default { methods: { // 获取数据sid handleSelectionChange(row) { + this.multipleSelection = row const aa = [] row.forEach(element => { aa.push(element.sid) @@ -203,6 +205,16 @@ export default { this.$message({ showClose: true, type: 'error', message: '请选择至少一条记录进行删除操作' }) return } + var b=false; + this.multipleSelection.forEach(row => { + if(!(row.nodeState === '待提交' || (row.nodeState!='待提交'&&row.nodeState==='入账申请'))){ + b=true + } + }) + if(b){ + this.$message({showClose: true, type: 'error', message: '提交流程审批的记录不能进行删除!'}) + return + } const tip = '请确认是否删除所选 ' + this.sids.length + ' 条记录?' this.$confirm(tip, '提示', { confirmButtonText: '确定', diff --git a/anrui-scm/anrui-scm-ui/src/views/supplychain/caigoutuiku/caigoutuiku.vue b/anrui-scm/anrui-scm-ui/src/views/supplychain/caigoutuiku/caigoutuiku.vue index 3bf202b7f3..8e8e0b70b7 100644 --- a/anrui-scm/anrui-scm-ui/src/views/supplychain/caigoutuiku/caigoutuiku.vue +++ b/anrui-scm/anrui-scm-ui/src/views/supplychain/caigoutuiku/caigoutuiku.vue @@ -288,7 +288,7 @@ export default { console.log(this.multipleSelection); var b=false; this.multipleSelection.forEach(row => { - if(row.nodeState == '待提交'){ + if(!(row.nodeState === '待提交' || (row.nodeState!='待提交'&&row.nodeState==='采购退库申请'))){ b=true } }) diff --git a/anrui-scm/anrui-scm-ui/vue.config.js b/anrui-scm/anrui-scm-ui/vue.config.js index a9f5c6132a..e2c3a4e3c6 100644 --- a/anrui-scm/anrui-scm-ui/vue.config.js +++ b/anrui-scm/anrui-scm-ui/vue.config.js @@ -25,7 +25,7 @@ module.exports = { *详细信息:https://cli.vuejs.org/config/#publicpath */ publicPath: process.env.NODE_ENV === 'production' ? '/scm/' : '/', - outputDir: 'System', + outputDir: 'scm-ui', assetsDir: 'static', lintOnSave: process.env.NODE_ENV === 'development', productionSourceMap: false, diff --git a/anrui-system-ui/src/api/flow/todo.js b/anrui-system-ui/src/api/flow/todo.js index 784aac4adc..e8d4bdae36 100644 --- a/anrui-system-ui/src/api/flow/todo.js +++ b/anrui-system-ui/src/api/flow/todo.js @@ -1,17 +1,19 @@ import request from '@/utils/request' import qs from 'qs' // 读取xml文件 -export function readXml (deployId) { +export function readXml (deployId,token) { return request({ url: '/portal/v1/flow/readXml/' + deployId, - method: 'get' + method: 'get', + params: token }) } // 读取image文件 -export function getFlowViewer (procInsId) { +export function getFlowViewer (procInsId,token) { return request({ url: '/portal/v1/flow/flowViewer/' + procInsId, - method: 'get' + method: 'get', + params: token }) } // 查看总代办列表 diff --git a/anrui-system-ui/src/api/flow/todoForBusiness.js b/anrui-system-ui/src/api/flow/todoForBusiness.js new file mode 100644 index 0000000000..45727fc8e1 --- /dev/null +++ b/anrui-system-ui/src/api/flow/todoForBusiness.js @@ -0,0 +1,24 @@ +import request from '@/utils/request' +import qs from 'qs' +// 读取xml文件 +export function readXml (deployId) { + return request({ + url: '/portal/v1/flow/readXml/' + deployId, + method: 'get' + }) +} +// 读取image文件 +export function getFlowViewer (procInsId) { + return request({ + url: '/portal/v1/flow/flowViewer/' + procInsId, + method: 'get' + }) +} +// 任务流转记录 +export function flowRecord(query) { + return request({ + url: '/portal/v1/flow/task/flowRecord/' + query.procInsId + "/" + query.deployId, + method: 'get', + params: query + }) +} diff --git a/anrui-system-ui/src/views/flow/flow.vue b/anrui-system-ui/src/components/flow/flow.vue similarity index 100% rename from anrui-system-ui/src/views/flow/flow.vue rename to anrui-system-ui/src/components/flow/flow.vue diff --git a/anrui-system-ui/src/components/flow/flowRecord.vue b/anrui-system-ui/src/components/flow/flowRecord.vue new file mode 100644 index 0000000000..a3cf005cbf --- /dev/null +++ b/anrui-system-ui/src/components/flow/flowRecord.vue @@ -0,0 +1,91 @@ + + diff --git a/anrui-system-ui/src/router/index.js b/anrui-system-ui/src/router/index.js index fd7a16d144..033274bc18 100644 --- a/anrui-system-ui/src/router/index.js +++ b/anrui-system-ui/src/router/index.js @@ -260,7 +260,17 @@ export const constantRoutes = [ component: () => import('@/views/404'), hidden: true - } + }, + { + path: '/flow/flowRecordForBusiness', + component: ()=> import('@/views/flow/flowRecordForBusiness'), + name: 'flowRecordForBusiness' + }/*, + { + path: '/portal/flow/flowRecord', + component: ()=> import('@/views/flow/flowRecord'), + name: 'flowRecord' + }*/ // 404 page must be placed at the end !!! // { path: '*', redirect: '/404', hidden: true } ] diff --git a/anrui-system-ui/src/views/Home/Home.vue b/anrui-system-ui/src/views/Home/Home.vue index 0a19fcba47..f19e6fc4b4 100644 --- a/anrui-system-ui/src/views/Home/Home.vue +++ b/anrui-system-ui/src/views/Home/Home.vue @@ -264,8 +264,8 @@ } else if (index == '8') { let myPopup = window.open('http://120.46.131.15/message/#/' + '?token=' + getStorage(), '_blank') } else if (index == '1') { - let myPopup = window.open('http://120.46.131.15/scm/#/' + '?token=' + getStorage(), '_blank') - // let myPopup = window.open('http://127.0.0.1:9531/scm/#/' + '?token=' + getStorage(), '_blank') + //let myPopup = window.open('http://120.46.131.15/scm/#/' + '?token=' + getStorage(), '_blank') + let myPopup = window.open('http://127.0.0.1:9531/scm/#/' + '?token=' + getStorage(), '_blank') } else if (index == '4') { let myPopup = window.open('http://120.46.131.15/fin/#/' + '?token=' + getStorage(), '_blank') } else if (index == '5') { diff --git a/anrui-system-ui/src/views/flow/doneList.vue b/anrui-system-ui/src/views/flow/doneList.vue index 0f5d43d734..29c5bcaa99 100644 --- a/anrui-system-ui/src/views/flow/doneList.vue +++ b/anrui-system-ui/src/views/flow/doneList.vue @@ -109,60 +109,29 @@ - - -
- - -

{{item.taskName}}

- - -
-
-
- -

- {{item.comment.comment}} - {{item.comment.comment}} - {{item.comment.comment}} - {{item.comment.comment}} - {{item.comment.comment}} -

-
-
-
-
-
-
+
diff --git a/anrui-system-ui/src/views/flow/todoList.vue b/anrui-system-ui/src/views/flow/todoList.vue index fe2a830bd6..1c185d0ac7 100644 --- a/anrui-system-ui/src/views/flow/todoList.vue +++ b/anrui-system-ui/src/views/flow/todoList.vue @@ -107,59 +107,16 @@ - - - -
-
- 流程图 - -
-
- - -

{{item.taskName}}

- - -
-
- -
- - -

- {{item.comment.comment}} - {{item.comment.comment}} - {{item.comment.comment}} - {{item.comment.comment}} - {{item.comment.comment}} -

-
-
-
-
-
-
-
+