提交 06bb6295 authored 作者: 何忠建's avatar 何忠建

修复bug

上级 94cd6ba0
...@@ -131,7 +131,11 @@ ...@@ -131,7 +131,11 @@
loadColumnsInfo(){ loadColumnsInfo(){
httpGroupRequest(() => getAction(this.url)).then(res => { httpGroupRequest(() => getAction(this.url)).then(res => {
if(res.success){ if(res.success){
if(res.result.length > 0){
this.table.dataSource = res.result this.table.dataSource = res.result
}else if(res.result.records.length > 0){
this.table.dataSource = res.result.records
}
} else { } else {
this.$error({ this.$error({
title: '出错了', title: '出错了',
......
...@@ -5,8 +5,8 @@ ...@@ -5,8 +5,8 @@
<a-form layout="inline" @keyup.enter.native="searchQuery"> <a-form layout="inline" @keyup.enter.native="searchQuery">
<a-row :gutter="24"> <a-row :gutter="24">
<a-col :md="6" :sm="8"> <a-col :md="6" :sm="8">
<a-form-item label="姓名"> <a-form-item label="设备名称">
<a-input placeholder="请输入姓名" v-model="queryParam.assetName"></a-input> <j-input placeholder="请输入设备名称" v-model="queryParam.assetName"></j-input>
</a-form-item> </a-form-item>
</a-col> </a-col>
...@@ -144,6 +144,12 @@ ...@@ -144,6 +144,12 @@
key: 'assetPosition', key: 'assetPosition',
align: 'center' align: 'center'
}, },
{
title: '所属小区',
dataIndex: 'platformName',
key: 'platformName',
align: 'center'
},
{ {
title: '操作', title: '操作',
dataIndex: 'action', dataIndex: 'action',
......
...@@ -11,15 +11,15 @@ ...@@ -11,15 +11,15 @@
</a-col> </a-col>
<a-col :md="6" :sm="8"> <a-col :md="6" :sm="8">
<a-form-model-item label="房屋用途"> <a-form-model-item label="房屋用途">
<a-select style="width: 100%" v-model="queryParam.chargeType" placeholder="请选择房屋用途"> <a-select style="width: 100%" v-model="queryParam.useTo" placeholder="请选择房屋用途">
<a-select-option v-for="item in useOptions" :key="item.value" <a-select-option v-for="item in useOptions" :key="item.value"
:value="item.value">{{item.label}}</a-select-option> :value="item.value">{{item.label}}</a-select-option>
</a-select> </a-select>
</a-form-model-item> </a-form-model-item>
</a-col> </a-col>
<a-col :md="6" :sm="8"> <a-col :md="6" :sm="8">
<a-form-model-item label="认证状态"> <a-form-model-item label="审核状态">
<a-select style="width: 100%" v-model="queryParam.chargeType" placeholder="请选择认证状态"> <a-select style="width: 100%" v-model="queryParam.auditStatus" placeholder="请选择审核状态">
<a-select-option v-for="item in certificationOptions" :key="item.value" <a-select-option v-for="item in certificationOptions" :key="item.value"
:value="item.value">{{item.label}}</a-select-option> :value="item.value">{{item.label}}</a-select-option>
</a-select> </a-select>
...@@ -86,7 +86,7 @@ ...@@ -86,7 +86,7 @@
<a @click="onRoutetAdd(record.id)">审核</a> <a @click="onRoutetAdd(record.id)">审核</a>
</template> </template>
<template v-else-if="record.auditStatus === 'refuse'"> <template v-else-if="record.auditStatus === 'refuse'">
<a @click="handleEdit(record)">详情</a> <a @click="handleEdit(record)">编辑</a>
<a-divider type="vertical" /> <a-divider type="vertical" />
<a-popconfirm title="确定删除吗?" @confirm="() => handleDelete(record.id)" placement="topLeft"> <a-popconfirm title="确定删除吗?" @confirm="() => handleDelete(record.id)" placement="topLeft">
<a>删除</a> <a>删除</a>
......
...@@ -28,6 +28,14 @@ ...@@ -28,6 +28,14 @@
</a-select> </a-select>
</a-form-model-item> </a-form-model-item>
</a-col> </a-col>
<a-col :span="12">
<a-form-model-item label="性别" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="sex">
<a-select style="width: 100%" v-model="model.sex" placeholder="请选择性别">
<a-select-option :value="1"></a-select-option>
<a-select-option :value="2"></a-select-option>
</a-select>
</a-form-model-item>
</a-col>
</a-row> </a-row>
<a-row> <a-row>
...@@ -75,6 +83,7 @@ ...@@ -75,6 +83,7 @@
employeePhone: '', employeePhone: '',
employeeDuties: '', employeeDuties: '',
employeeStatus: '1', employeeStatus: '1',
sex: '',
employeeAvatar: '' employeeAvatar: ''
}, },
labelCol: { labelCol: {
...@@ -92,7 +101,8 @@ ...@@ -92,7 +101,8 @@
{ required: true, message: '请输入联系电话', trigger: 'blur' }, { required: true, message: '请输入联系电话', trigger: 'blur' },
{ validator: validateToNextPhone } { validator: validateToNextPhone }
], ],
employeeDuties: [{ required: true, message: '请选择员工职务', trigger: 'change' }] employeeDuties: [{ required: true, message: '请选择员工职务', trigger: 'change' }],
sex: [{ required: true, message: '请选择员工性别', trigger: 'change' }]
}, },
url: { url: {
add: "/property-company/employee/companyEmployee/add", add: "/property-company/employee/companyEmployee/add",
......
...@@ -54,9 +54,13 @@ ...@@ -54,9 +54,13 @@
class="j-table-force-nowrap" class="j-table-force-nowrap"
@change="handleTableChange" @change="handleTableChange"
> >
<span slot="sex" slot-scope="text, record">
<span>{{record.sex === 1 ? '男' :record.sex === 2 ? '女' : ''}}</span>
</span>
<span slot="employeeStatus" slot-scope="text, record"> <span slot="employeeStatus" slot-scope="text, record">
<span :style="{'color': record.employeeStatus === '1' ? 'green' : 'red'}">{{record.employeeStatus === '1' ? '在职' : '离职'}}</span> <span :style="{'color': record.employeeStatus === '1' ? 'green' : 'red'}">{{record.employeeStatus === '1' ? '在职' : '离职'}}</span>
</span> </span>
<span slot="action" slot-scope="text, record"> <span slot="action" slot-scope="text, record">
<a @click="handleEdit(record)">编辑</a> <a @click="handleEdit(record)">编辑</a>
...@@ -105,6 +109,13 @@ ...@@ -105,6 +109,13 @@
key: 'employeePhone', key: 'employeePhone',
align: 'center' align: 'center'
}, },
{
title: '性别',
dataIndex: 'sex',
scopedSlots: { customRender: 'sex' },
key: 'sex',
align: 'center'
},
{ {
title: '职务', title: '职务',
dataIndex: 'employeeDuties', dataIndex: 'employeeDuties',
......
...@@ -6,7 +6,7 @@ ...@@ -6,7 +6,7 @@
<a-row :gutter="24"> <a-row :gutter="24">
<a-col :md="6" :sm="8"> <a-col :md="6" :sm="8">
<a-form-item label="公告标题"> <a-form-item label="公告标题">
<a-input placeholder="请输入公告标题" v-model="queryParam.employeeName"></a-input> <j-input placeholder="请输入公告标题" v-model="queryParam.noticeTitle"></j-input>
</a-form-item> </a-form-item>
</a-col> </a-col>
...@@ -26,7 +26,7 @@ ...@@ -26,7 +26,7 @@
<!-- <a-button type="primary" icon="download" @click="handleExportXls('t_property_settled')">导出</a-button> --> <!-- <a-button type="primary" icon="download" @click="handleExportXls('t_property_settled')">导出</a-button> -->
<a-dropdown v-if="selectedRowKeys.length > 0"> <a-dropdown v-if="selectedRowKeys.length > 0">
<a-menu slot="overlay"> <a-menu slot="overlay">
<a-menu-item key="1" @click="batchDel"><a-icon type="delete"/>删除</a-menu-item> <a-menu-item key="1" @click="batchDel"><a-icon type="delete" />删除</a-menu-item>
</a-menu> </a-menu>
<a-button style="margin-left: 8px">批量操作 <a-icon type="down" /></a-button> <a-button style="margin-left: 8px">批量操作 <a-icon type="down" /></a-button>
</a-dropdown> </a-dropdown>
...@@ -40,30 +40,25 @@ ...@@ -40,30 +40,25 @@
<a style="margin-left: 24px" v-if="selectedRowKeys.length > 0" @click="onClearSelected">清空</a> <a style="margin-left: 24px" v-if="selectedRowKeys.length > 0" @click="onClearSelected">清空</a>
</div> </div>
<a-table <a-table ref="table" size="middle" :scroll="{x:true}" bordered rowKey="id" :columns="columns"
ref="table" :dataSource="dataSource" :pagination="ipagination" :loading="loading"
size="middle" :rowSelection="{selectedRowKeys: selectedRowKeys, onChange: onSelectChange}" class="j-table-force-nowrap"
:scroll="{x:true}" @change="handleTableChange">
bordered <span slot="noticeTitle" slot-scope="text, record"
rowKey="id" style=" width: 200px;display: block;overflow: hidden;white-space: nowrap;text-overflow: ellipsis;">
:columns="columns" <a-tooltip placement="topLeft" :title="record.noticeTitle">{{record.noticeTitle}}</a-tooltip>
:dataSource="dataSource" </span>
:pagination="ipagination"
:loading="loading"
:rowSelection="{selectedRowKeys: selectedRowKeys, onChange: onSelectChange}"
class="j-table-force-nowrap"
@change="handleTableChange"
>
<span slot="employeeStatus" slot-scope="text, record"> <span slot="employeeStatus" slot-scope="text, record">
<span :style="{'color': record.employeeStatus === '1' ? 'green' : 'red'}">{{record.employeeStatus === '1' ? '在职' : '离职'}}</span> <span
:style="{'color': record.employeeStatus === '1' ? 'green' : 'red'}">{{record.employeeStatus === '1' ? '在职' : '离职'}}</span>
</span> </span>
<span slot="action" slot-scope="text, record"> <span slot="action" slot-scope="text, record">
<a @click="handleEdit(record)">编辑</a> <a @click="handleEdit(record)">编辑</a>
<a-divider type="vertical"/> <a-divider type="vertical" />
<a-dropdown> <a-dropdown>
<a class="ant-dropdown-link"> <a class="ant-dropdown-link">
更多 <a-icon type="down"/> 更多 <a-icon type="down" />
</a> </a>
<a-menu slot="overlay"> <a-menu slot="overlay">
<a-menu-item> <a-menu-item>
...@@ -88,83 +83,85 @@ ...@@ -88,83 +83,85 @@
</template> </template>
<script> <script>
import { JeecgListMixin } from '@/mixins/JeecgListMixin' import { JeecgListMixin } from '@/mixins/JeecgListMixin'
import NoticeModal from './modules/NoticeModal' import NoticeModal from './modules/NoticeModal'
import {URGENT_DEGREE, SCHEDULED_RELEASE, NOTICE_STATUS, filterDictTextByStatic} from '@/assets/static.js' import { URGENT_DEGREE, SCHEDULED_RELEASE, NOTICE_STATUS, filterDictTextByStatic } from '@/assets/static.js'
const columns = [ const columns = [
{ {
title: '公告标题', title: '公告标题',
dataIndex: 'noticeTitle', dataIndex: 'noticeTitle',
scopedSlots: { customRender: 'noticeTitle' },
width: 100,
ellipsis: true,
key: 'noticeTitle', key: 'noticeTitle',
align: 'center'
}, },
{ {
title: '紧急程度', title: '紧急程度',
dataIndex: 'urgentDegree', dataIndex: 'urgentDegree',
key: 'urgentDegree', key: 'urgentDegree',
align: 'center', align: 'center',
customRender: function(text) { customRender: function (text) {
return filterDictTextByStatic(URGENT_DEGREE, text); return filterDictTextByStatic(URGENT_DEGREE, text)
} },
}, },
{ {
title: '是否定时发布', title: '是否定时发布',
dataIndex: 'isScheduledRelease', dataIndex: 'isScheduledRelease',
key: 'isScheduledRelease', key: 'isScheduledRelease',
align: 'center', align: 'center',
customRender: function(text) { customRender: function (text) {
return filterDictTextByStatic(SCHEDULED_RELEASE, text); return filterDictTextByStatic(SCHEDULED_RELEASE, text)
} },
}, },
{ {
title: '发布人', title: '发布人',
dataIndex: 'createBy', dataIndex: 'createBy',
key: 'createBy', key: 'createBy',
align: 'center' align: 'center',
}, },
{ {
title: '发布时间', title: '发布时间',
dataIndex: 'releaseTime', dataIndex: 'releaseTime',
key: 'releaseTime', key: 'releaseTime',
align: 'center' align: 'center',
}, },
{ {
title: '公告状态', title: '公告状态',
dataIndex: 'noticeStatus', dataIndex: 'noticeStatus',
key: 'noticeStatus', key: 'noticeStatus',
align: 'center', align: 'center',
customRender: function(text) { customRender: function (text) {
return filterDictTextByStatic(NOTICE_STATUS, text); return filterDictTextByStatic(NOTICE_STATUS, text)
} },
}, },
{ {
title: '操作', title: '操作',
dataIndex: 'action', dataIndex: 'action',
scopedSlots: { customRender: 'action' }, scopedSlots: { customRender: 'action' },
align: 'center', align: 'center',
width: 150 width: 150,
} },
] ]
export default { export default {
name: 'PermissionListAsync', name: 'PermissionListAsync',
mixins: [JeecgListMixin], mixins: [JeecgListMixin],
components: {NoticeModal}, components: { NoticeModal },
data() { data() {
return { return {
// 表头 // 表头
columns: columns, columns: columns,
url: { url: {
list: "/property-company/notice/companyNotice/list", list: '/property-company/notice/companyNotice/list',
delete: '/property-company/notice/companyNotice/delete', delete: '/property-company/notice/companyNotice/delete',
deleteBatch: '/property-company/notice/companyNotice/deleteBatch' deleteBatch: '/property-company/notice/companyNotice/deleteBatch',
}
}
}, },
methods: {}
} }
},
methods: {},
}
</script> </script>
<style scoped> <style scoped>
@import '~@assets/less/common.less'; @import '~@assets/less/common.less';
</style> </style>
\ No newline at end of file
...@@ -5,7 +5,7 @@ ...@@ -5,7 +5,7 @@
<a-row> <a-row>
<a-col :span="24"> <a-col :span="24">
<a-form-model-item label="标题" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="noticeTitle"> <a-form-model-item label="标题" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="noticeTitle">
<a-input v-model="model.noticeTitle" placeholder="请输入标题" style="width:70%"></a-input> <a-input v-model="model.noticeTitle" placeholder="请输入标题" style="width:100%" :maxLength="200"></a-input>
</a-form-model-item> </a-form-model-item>
</a-col> </a-col>
<a-col :span="24"> <a-col :span="24">
...@@ -17,7 +17,7 @@ ...@@ -17,7 +17,7 @@
</a-col> </a-col>
<a-col :span="24"> <a-col :span="24">
<a-form-model-item label="内容" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="noticeContent"> <a-form-model-item label="内容" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="noticeContent">
<j-editor placeholder="请输入内容" v-model="model.noticeContent"/> <j-editor placeholder="请输入内容" v-model="model.noticeContent" maxLength=""/>
</a-form-model-item> </a-form-model-item>
</a-col> </a-col>
<a-col :span="24"> <a-col :span="24">
......
...@@ -29,7 +29,8 @@ ...@@ -29,7 +29,8 @@
<a-form-model-item label="与业主关系" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="relationShip"> <a-form-model-item label="与业主关系" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="relationShip">
<!-- <a-input v-model="model.relationShip" placeholder="请输入"></a-input> --> <!-- <a-input v-model="model.relationShip" placeholder="请输入"></a-input> -->
<a-select v-model="model.relationShip" placeholder="请选择与业主关系"> <a-select v-model="model.relationShip" placeholder="请选择与业主关系">
<a-select-option v-for="item in relationShipList" :key="item.value" :value="item.value">{{item.label}}</a-select-option> <a-select-option v-for="item in relationShipList" :key="item.value"
:value="item.value">{{item.label}}</a-select-option>
</a-select> </a-select>
</a-form-model-item> </a-form-model-item>
</a-col> </a-col>
...@@ -39,7 +40,6 @@ ...@@ -39,7 +40,6 @@
</a-form-model-item> </a-form-model-item>
</a-col> </a-col>
<a-col :span="12"> <a-col :span="12">
<a-form-model-item label="收费标准" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="chargeTypeCodeName"> <a-form-model-item label="收费标准" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="chargeTypeCodeName">
<a-input v-model="model.chargeTypeCodeName" placeholder="请输入"></a-input> <a-input v-model="model.chargeTypeCodeName" placeholder="请输入"></a-input>
...@@ -48,7 +48,8 @@ ...@@ -48,7 +48,8 @@
<a-col :span="12"> <a-col :span="12">
<a-form-model-item label="收费周期" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="chargeCycle"> <a-form-model-item label="收费周期" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="chargeCycle">
<a-select style="width: 100%" v-model="model.chargeCycle" placeholder="请选择付费周期"> <a-select style="width: 100%" v-model="model.chargeCycle" placeholder="请选择付费周期">
<a-select-option v-for="item in dictOptions" :key="item.value" :value="item.value">{{item.label}}</a-select-option> <a-select-option v-for="item in dictOptions" :key="item.value"
:value="item.value">{{item.label}}</a-select-option>
</a-select> </a-select>
</a-form-model-item> </a-form-model-item>
</a-col> </a-col>
...@@ -72,7 +73,8 @@ ...@@ -72,7 +73,8 @@
</a-col> </a-col>
<a-col :span="12"> <a-col :span="12">
<a-form-model-item label="本期度数" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="currentDegrees"> <a-form-model-item label="本期度数" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="currentDegrees">
<a-input-number v-model="model.currentDegrees" placeholder="请输入本期度数" style="width:100%"></a-input-number> <a-input-number v-model="model.currentDegrees" placeholder="请输入本期度数"
style="width:100%"></a-input-number>
</a-form-model-item> </a-form-model-item>
</a-col> </a-col>
<a-col :span="12"> <a-col :span="12">
...@@ -92,8 +94,10 @@ ...@@ -92,8 +94,10 @@
</a-form-model-item> </a-form-model-item>
</a-col> </a-col>
<a-col :span="24"> <a-col :span="24">
<a-form-model-item label="抄表时间" :labelCol="{ xs: { span: 24 }, sm: { span: 2 } }" :wrapperCol="wrapperCol" prop="meterReadingTime"> <a-form-model-item label="抄表时间" :labelCol="{ xs: { span: 24 }, sm: { span: 2 } }" :wrapperCol="wrapperCol"
<j-date placeholder="请选择抄表时间" v-model="model.meterReadingTime" :showTime="true" dateFormat="YYYY-MM-DD HH:mm:ss" style="width: 50%;" /> prop="meterReadingTime">
<j-date placeholder="请选择抄表时间" v-model="model.meterReadingTime" :showTime="true"
dateFormat="YYYY-MM-DD HH:mm:ss" style="width: 50%;" />
</a-form-model-item> </a-form-model-item>
</a-col> </a-col>
</a-row> </a-row>
...@@ -106,18 +110,8 @@ ...@@ -106,18 +110,8 @@
<p style="padding-right:50px;color:#EC808D">总缴费金额: {{totalAmount}}</p> <p style="padding-right:50px;color:#EC808D">总缴费金额: {{totalAmount}}</p>
</div> </div>
<div> <div>
<a-table <a-table ref="table" size="middle" :scroll="{ x: 1500, y: 300 }" bordered rowKey="id" :columns="columns"
ref="table" :dataSource="dataSource" :pagination="pagination" :loading="loading" class="j-table-force-nowrap">
size="middle"
:scroll="{ x: 1500, y: 300 }"
bordered
rowKey="id"
:columns="columns"
:dataSource="dataSource"
:pagination="pagination"
:loading="loading"
class="j-table-force-nowrap"
>
<span slot="roomId" slot-scope="text, record"> <span slot="roomId" slot-scope="text, record">
<span>{{record.buildingName}}{{record.unitName}}{{record.roomName}}</span> <span>{{record.buildingName}}{{record.unitName}}{{record.roomName}}</span>
</span> </span>
...@@ -132,23 +126,23 @@ ...@@ -132,23 +126,23 @@
</template> </template>
<script> <script>
import { queryDetailByIdApi, ajaxGetDictItems, getDictItemsFromCache, getHistoryListdApi} from '@/api/api' import { queryDetailByIdApi, ajaxGetDictItems, getDictItemsFromCache, getHistoryListdApi } from '@/api/api'
import {RELATION_SHIP} from '@/assets/static.js' import { RELATION_SHIP } from '@/assets/static.js'
const columns = [ const columns = [
{ {
title: '收费类型', title: '收费类型',
dataIndex: 'chargeTypeName', dataIndex: 'chargeTypeName',
key: 'chargeTypeName', key: 'chargeTypeName',
width: 120, width: 120,
align: 'center' align: 'center',
}, },
{ {
title: '收费项目', title: '收费项目',
dataIndex: 'chargeItem', dataIndex: 'chargeItem',
key: 'chargeItem', key: 'chargeItem',
width: 120, width: 120,
align: 'center' align: 'center',
}, },
{ {
title: '房屋编号', title: '房屋编号',
...@@ -156,60 +150,60 @@ ...@@ -156,60 +150,60 @@
scopedSlots: { customRender: 'roomId' }, scopedSlots: { customRender: 'roomId' },
key: 'roomId', key: 'roomId',
width: 140, width: 140,
align: 'center' align: 'center',
}, },
{ {
title: '用量', title: '用量',
dataIndex: 'useAmount', dataIndex: 'useAmount',
key: 'useAmount', key: 'useAmount',
width: 120, width: 120,
align: 'center' align: 'center',
}, },
{ {
title: '金额(元)', title: '金额(元)',
dataIndex: 'totalAmount', dataIndex: 'totalAmount',
key: 'totalAmount', key: 'totalAmount',
width: 120, width: 120,
align: 'center' align: 'center',
}, },
{ {
title: '缴费单号', title: '缴费单号',
dataIndex: 'paymentNum', dataIndex: 'paymentNum',
key: 'paymentNum', key: 'paymentNum',
width: 120, width: 120,
align: 'center' align: 'center',
}, },
{ {
title: '缴费日期', title: '缴费日期',
dataIndex: 'paymentTime', dataIndex: 'paymentTime',
key: 'paymentTime', key: 'paymentTime',
width: 120, width: 120,
align: 'center' align: 'center',
}, },
{ {
title: '创建日期', title: '创建日期',
dataIndex: 'createTime', dataIndex: 'createTime',
key: 'createTime', key: 'createTime',
width: 120, width: 120,
align: 'center' align: 'center',
} },
] ]
export default { export default {
name: 'PropertyChargruleForm', name: 'PropertyChargruleForm',
inject:['closeCurrent'], inject: ['closeCurrent'],
props: { props: {
//表单禁用 //表单禁用
disabled: { disabled: {
type: Boolean, type: Boolean,
default: false, default: false,
required: false required: false,
} },
}, },
data () { data() {
return { return {
relationShipList: RELATION_SHIP, relationShipList: RELATION_SHIP,
dictOptions: [], dictOptions: [],
model:{ model: {
chargeCycle: '', chargeCycle: '',
chargeItem: '', chargeItem: '',
chargingStandardId: '', chargingStandardId: '',
...@@ -236,7 +230,7 @@ ...@@ -236,7 +230,7 @@
currentDegrees: '', currentDegrees: '',
useAmount: '', useAmount: '',
totalAmount: '', totalAmount: '',
meterReadingTime: '' meterReadingTime: '',
}, },
labelCol: { labelCol: {
xs: { span: 24 }, xs: { span: 24 },
...@@ -254,17 +248,17 @@ ...@@ -254,17 +248,17 @@
total: 0, total: 0,
current: 1, current: 1,
pageSize: 10, pageSize: 10,
showSizeChanger: true showSizeChanger: true,
}, },
loading: false, loading: false,
} }
}, },
computed: { computed: {
formDisabled(){ formDisabled() {
return this.disabled return this.disabled
}, },
}, },
created () { created() {
//备份model原始值 //备份model原始值
this.getDetail() this.getDetail()
this.initDictData() this.initDictData()
...@@ -272,29 +266,29 @@ ...@@ -272,29 +266,29 @@
methods: { methods: {
async getDetail() { async getDetail() {
this.confirmLoading = true this.confirmLoading = true
let {result} = await queryDetailByIdApi({id: this.$route.query.id}) let { result } = await queryDetailByIdApi({ id: this.$route.query.id })
result['chargeTypeCodeName'] = `${result.chargeTypeCode}-${result.chargeTypeName}` result['chargeTypeCodeName'] = `${result.chargeTypeCode}-${result.chargeTypeName}`
result['roomAllName'] = `${result.buildingName}${result.unitName}${result.roomName}` result['roomAllName'] = `${result.buildingName}${result.unitName}${result.roomName}`
this.model = {...result} this.model = { ...result }
this.confirmLoading = false this.confirmLoading = false
this.getHistoryList(this.model.ownerId) this.getHistoryList(this.model.ownerId)
}, },
initDictData() { initDictData() {
//优先从缓存中读取字典配置 //优先从缓存中读取字典配置
if(getDictItemsFromCache('chargingCycle')){ if (getDictItemsFromCache('chargingCycle')) {
this.dictOptions = getDictItemsFromCache('chargingCycle'); this.dictOptions = getDictItemsFromCache('chargingCycle')
return return
} }
// //根据字典Code, 初始化字典数组 // //根据字典Code, 初始化字典数组
ajaxGetDictItems('chargingCycle', null).then((res) => { ajaxGetDictItems('chargingCycle', null).then((res) => {
if (res.success) { if (res.success) {
this.dictOptions = res.result; this.dictOptions = res.result
} }
}) })
}, },
async getHistoryList(ownerId) { async getHistoryList(ownerId) {
this.loading = true this.loading = true
let {result} = await getHistoryListdApi({ownerId}) let { result } = await getHistoryListdApi({ ownerId })
this.totalAmount = result.totalAmount this.totalAmount = result.totalAmount
let data = result.pageList let data = result.pageList
this.pagination.total = data.total this.pagination.total = data.total
...@@ -308,10 +302,12 @@ ...@@ -308,10 +302,12 @@
// this.model.useAmount = (value - Number(this.model.lastDegrees)).toFixed(2) // this.model.useAmount = (value - Number(this.model.lastDegrees)).toFixed(2)
// this.model.totalAmount = (Number(this.model.useAmount) * this.amount).toFixed(2) // this.model.totalAmount = (Number(this.model.useAmount) * this.amount).toFixed(2)
// } // }
this.closeCurrent() //this.closeCurrent()
} this.$store.dispatch('tags/delView', this.$route.path)
} this.$router.go(-1)
} },
},
}
</script> </script>
<style scoped lang="less"> <style scoped lang="less">
......
...@@ -73,7 +73,7 @@ ...@@ -73,7 +73,7 @@
<a-divider type="vertical" /> <a-divider type="vertical" />
<a @click="onCallPay(record.id)">催缴</a> <a @click="onCallPay(record.id)">催缴</a>
<a-divider type="vertical" /> <a-divider type="vertical" />
<a @click="handleDelete(record)">删除</a> <a @click="handleDelete(record.id)">删除</a>
</template> </template>
</span> </span>
</a-table> </a-table>
......
...@@ -43,33 +43,37 @@ ...@@ -43,33 +43,37 @@
</a-form-model-item> </a-form-model-item>
</a-col> </a-col>
<a-col :span="24"> <a-col :span="24">
<a-form-model-item label="报修描述" :labelCol="{ xs: { span: 24 }, sm: { span: 2 } }" :wrapperCol="wrapperCol" prop="repairDesc"> <a-form-model-item label="报修描述" :labelCol="{ xs: { span: 24 }, sm: { span: 2 } }" :wrapperCol="wrapperCol"
prop="repairDesc">
<a-textarea v-model="model.repairDesc" placeholder="请输入" style="width:80%" /> <a-textarea v-model="model.repairDesc" placeholder="请输入" style="width:80%" />
</a-form-model-item> </a-form-model-item>
</a-col> </a-col>
<a-col :span="24"> <a-col :span="24">
<a-form-model-item label="报修图片" :labelCol="{ xs:{ span: 24 }, sm:{ span: 2 } }" :wrapperCol="wrapperCol" prop="repairPhotoList"> <a-form-model-item label="报修图片" :labelCol="{ xs:{ span: 24 }, sm:{ span: 2 } }" :wrapperCol="wrapperCol"
<j-image-upload :isMultiple="true" text="点击上传" bizPath="scott/pic" v-model="model.repairPhotoList"></j-image-upload> prop="repairPhotoList">
<j-image-upload :isMultiple="true" text="点击上传" bizPath="scott/pic"
v-model="model.repairPhotoList"></j-image-upload>
</a-form-model-item> </a-form-model-item>
</a-col> </a-col>
<template v-if="model.repairStatus === 'finishwaitAudit' || model.repairStatus === 'finishAuditPass'"> <template v-if="model.maintenanceName">
<a-col :span="12"> <a-col :span="12">
<a-form-model-item label="维修员" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="maintenanceName"> <a-form-model-item label="维修员" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="maintenanceName">
<a-input v-model="model.maintenanceName" placeholder="请输入"></a-input> <a-input v-model="model.maintenanceName" placeholder="请输入"></a-input>
</a-form-model-item> </a-form-model-item>
</a-col> </a-col>
<a-col :span="12"> <a-col :span="12">
<a-form-model-item label="工单状态" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="repairStatus"> <a-form-model-item label="工单状态" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="repairStatusName">
<a-input v-model="model.repairStatus" placeholder="请输入"></a-input> <a-input v-model="model.repairStatusName" placeholder="请输入"></a-input>
</a-form-model-item> </a-form-model-item>
</a-col> </a-col>
<a-col :span="24"> <a-col :span="24">
<a-form-model-item label="维修记录" :labelCol="{ xs:{ span: 24 }, sm:{ span: 2 } }" :wrapperCol="wrapperCol" prop="maintenancePhoto"> <a-form-model-item label="维修记录" :labelCol="{ xs:{ span: 24 }, sm:{ span: 2 } }" :wrapperCol="wrapperCol"
<j-image-upload :isMultiple="true" text="点击上传" bizPath="scott/pic" v-model="model.maintenancePhoto"></j-image-upload> prop="maintenancePhoto">
<j-image-upload :isMultiple="true" text="点击上传" bizPath="scott/pic"
v-model="model.maintenancePhoto"></j-image-upload>
</a-form-model-item> </a-form-model-item>
</a-col> </a-col>
</template> </template>
...@@ -80,7 +84,8 @@ ...@@ -80,7 +84,8 @@
<a-form-model ref="form" :model="form" slot="detail"> <a-form-model ref="form" :model="form" slot="detail">
<a-row> <a-row>
<a-col :span="24"> <a-col :span="24">
<a-form-model-item label="审核意见" :labelCol="{ xs: { span: 24 }, sm: { span: 2 } }" :wrapperCol="wrapperCol" prop="repairStatus"> <a-form-model-item label="审核意见" :labelCol="{ xs: { span: 24 }, sm: { span: 2 } }" :wrapperCol="wrapperCol"
prop="repairStatus">
<a-select v-model="form.repairStatus" placeholder="请选择与业主关系" style="width:50%"> <a-select v-model="form.repairStatus" placeholder="请选择与业主关系" style="width:50%">
<a-select-option value="waitDispatch">审核通过</a-select-option> <a-select-option value="waitDispatch">审核通过</a-select-option>
<a-select-option value="initiateRefuse">审核驳回</a-select-option> <a-select-option value="initiateRefuse">审核驳回</a-select-option>
...@@ -88,7 +93,8 @@ ...@@ -88,7 +93,8 @@
</a-form-model-item> </a-form-model-item>
</a-col> </a-col>
<a-col :span="24" v-if="form.repairStatus === 'initiateRefuse'"> <a-col :span="24" v-if="form.repairStatus === 'initiateRefuse'">
<a-form-model-item label="驳回理由" :labelCol="{ xs: { span: 24 }, sm: { span: 2 } }" :wrapperCol="wrapperCol" prop="auditOpinion"> <a-form-model-item label="驳回理由" :labelCol="{ xs: { span: 24 }, sm: { span: 2 } }" :wrapperCol="wrapperCol"
prop="auditOpinion">
<a-textarea v-model="form.auditOpinion" placeholder="请输入" style="width:80%" /> <a-textarea v-model="form.auditOpinion" placeholder="请输入" style="width:80%" />
</a-form-model-item> </a-form-model-item>
</a-col> </a-col>
...@@ -105,26 +111,28 @@ ...@@ -105,26 +111,28 @@
</template> </template>
<script> <script>
import { auditCommunityRepairApi, queryCommunityRepairApi} from '@/api/api' import { auditCommunityRepairApi, queryCommunityRepairApi } from '@/api/api'
const initiatewaitAuditList = [ import { REPAIR_STATUS, filterDictTextByStatic } from '@/assets/static.js'
{title: '提交维修信息', time: ''}, const initiatewaitAuditList = [
{title: '报单待审核', time: ''}, { title: '提交维修信息', time: '' },
{title: '待派单', time: ''}, { title: '报单待审核', time: '' },
{title: '维修中', time: ''}, { title: '待派单', time: '' },
{title: '提单待审核', time: ''}, { title: '维修中', time: '' },
{title: '完成', time: ''} { title: '提单待审核', time: '' },
] { title: '完成', time: '' },
export default { ]
export default {
name: 'PropertyChargruleForm', name: 'PropertyChargruleForm',
inject:['closeCurrent'], inject: ['closeCurrent'],
data () { data() {
return { return {
repairStatus: REPAIR_STATUS,
auditList: [], auditList: [],
currentStep: 1, currentStep: 1,
model:{}, model: {},
form: { form: {
repairStatus: 'waitDispatch', repairStatus: 'waitDispatch',
auditOpinion: '' auditOpinion: '',
}, },
labelCol: { labelCol: {
xs: { span: 24 }, xs: { span: 24 },
...@@ -138,53 +146,75 @@ ...@@ -138,53 +146,75 @@
} }
}, },
computed: { computed: {
formDisabled(){ formDisabled() {
return this.$route.query.type === '1' return this.$route.query.type === '1'
}, },
}, },
created () { created() {
//备份model原始值 //备份model原始值
this.getDetail() this.getDetail()
}, },
methods: { methods: {
async getDetail() { async getDetail() {
this.confirmLoading = true this.confirmLoading = true
let {result} = await queryCommunityRepairApi({id: this.$route.query.id}) let { result } = await queryCommunityRepairApi({ id: this.$route.query.id })
result.repairPhotoList = result.repairPhoto.split(',') result.repairPhotoList = result.repairPhoto.split(',')
this.model = {...result} this.model = { ...result }
this.confirmLoading = false this.confirmLoading = false
if(result.repairStatus === 'initiateWaitAudit') { this.model.repairStatusName = filterDictTextByStatic(REPAIR_STATUS, this.model.repairStatus)
if (result.repairStatus === 'initiateWaitAudit') {
initiatewaitAuditList[0].time = '提交成功' + result.createTime initiatewaitAuditList[0].time = '提交成功' + result.createTime
this.auditList = [...initiatewaitAuditList] this.auditList = [...initiatewaitAuditList]
} }else if (result.repairStatus === 'waitDispatch') {
if(result.repairStatus === 'waitDispatch') {
initiatewaitAuditList[0].time = '提交成功' + result.createTime initiatewaitAuditList[0].time = '提交成功' + result.createTime
initiatewaitAuditList[1].time = '审核通过' + result.initiateAuditTime initiatewaitAuditList[1].time = '审核通过' + result.initiateAuditTime
this.auditList = [...initiatewaitAuditList] this.auditList = [...initiatewaitAuditList]
this.currentStep = 2 this.currentStep = 2
} }else if (result.repairStatus === 'waitReceive') {
if(result.repairStatus === 'waitReceive') {
initiatewaitAuditList[0].time = '提交成功' + result.createTime initiatewaitAuditList[0].time = '提交成功' + result.createTime
initiatewaitAuditList[1].time = '审核通过' + result.initiateAuditTime initiatewaitAuditList[1].time = '审核通过' + result.initiateAuditTime
initiatewaitAuditList[2].time = '派单成功待接收' + result.updateTime initiatewaitAuditList[2].time = '派单成功待接收' + result.updateTime
this.auditList = [...initiatewaitAuditList] this.auditList = [...initiatewaitAuditList]
this.currentStep = 2 this.currentStep = 2
}else if (result.repairStatus === 'inRepair') {
initiatewaitAuditList[0].time = '提交成功' + result.createTime
initiatewaitAuditList[1].time = '审核通过' + result.initiateAuditTime
initiatewaitAuditList[2].time = '派单成功待接收' + result.updateTime
this.auditList = [...initiatewaitAuditList]
this.currentStep = 3
}else if (result.repairStatus === 'finishWaitAudit' || result.repairStatus === 'finishRefuse' || result.repairStatus === 'finishAuditPass') {
initiatewaitAuditList[0].time = '提交成功' + result.createTime
initiatewaitAuditList[1].time = '审核通过' + result.initiateAuditTime
initiatewaitAuditList[2].time = '派单成功待接收' + result.updateTime
this.auditList = [...initiatewaitAuditList]
this.currentStep = 4
}else if (result.repairStatus === 'finish') {
initiatewaitAuditList[0].time = '提交成功' + result.createTime
initiatewaitAuditList[1].time = '审核通过' + result.initiateAuditTime
initiatewaitAuditList[2].time = '派单成功待接收' + result.updateTime
this.auditList = [...initiatewaitAuditList]
this.currentStep = 5
}else{
initiatewaitAuditList[0].time = '提交成功' + result.createTime
this.auditList = [...initiatewaitAuditList]
this.currentStep = 0
} }
}, },
onReturn() { onReturn() {
this.closeCurrent() this.$store.dispatch('tags/delView', this.$route.path)
this.$router.go(-1)
}, },
async onSubmit() { async onSubmit() {
let res = await auditCommunityRepairApi({ let res = await auditCommunityRepairApi({
id: this.$route.query.id, id: this.$route.query.id,
repairStatus: this.form.repairStatus, repairStatus: this.form.repairStatus,
auditOpinion: this.form.repairStatus === 'waitDispatch' ? '' : this.form.repairStatus auditOpinion: this.form.repairStatus === 'waitDispatch' ? '' : this.form.repairStatus,
}) })
this.$message.success(res.message); this.$message.success(res.message)
this.closeCurrent() this.onReturn()
} },
} },
} }
</script> </script>
<style scoped lang="less"> <style scoped lang="less">
......
...@@ -37,7 +37,7 @@ ...@@ -37,7 +37,7 @@
<!-- 操作按钮区域 --> <!-- 操作按钮区域 -->
<div class="table-operator"> <div class="table-operator">
<!-- <a-button @click="handleAdd" type="primary" icon="plus">新增</a-button> --> <!-- <a-button @click="handleAdd" type="primary" icon="plus">新增</a-button> -->
<a-button type="primary" icon="download" @click="handleExportXls('t_property_settled')">导出</a-button> <!-- <a-button type="primary" icon="download" @click="handleExportXls('t_property_settled')">导出</a-button> -->
<!-- <a-dropdown v-if="selectedRowKeys.length > 0"> <!-- <a-dropdown v-if="selectedRowKeys.length > 0">
<a-menu slot="overlay"> <a-menu slot="overlay">
<a-menu-item key="1" @click="batchDel"><a-icon type="delete"/>删除</a-menu-item> <a-menu-item key="1" @click="batchDel"><a-icon type="delete"/>删除</a-menu-item>
......
...@@ -116,7 +116,7 @@ ...@@ -116,7 +116,7 @@
</div> </div>
<!-- 操作按钮区域 --> <!-- 操作按钮区域 -->
<div class="table-operator" :md="24" :sm="24"> <div class="table-operator" :md="24" :sm="24">
<a-button @click="handleAdd2" type="primary" icon="plus" style="margin-top: 16px">新增用户</a-button> <!-- <a-button @click="handleAdd2" type="primary" icon="plus" style="margin-top: 16px">新增用户</a-button> -->
<!--<a-button @click="handleEdit2" type="primary" icon="edit" style="margin-top: 16px">用户编辑</a-button>--> <!--<a-button @click="handleEdit2" type="primary" icon="edit" style="margin-top: 16px">用户编辑</a-button>-->
<a-button @click="handleAddUserRole" type="primary" icon="plus" style="margin-top: 16px">已有用户</a-button> <a-button @click="handleAddUserRole" type="primary" icon="plus" style="margin-top: 16px">已有用户</a-button>
......
...@@ -108,7 +108,7 @@ ...@@ -108,7 +108,7 @@
title: '部门', title: '部门',
align: "center", align: "center",
width: 150, width: 150,
dataIndex: 'orgCode' dataIndex: 'orgCodeTxt'
} }
], ],
columns2: [ columns2: [
......
...@@ -23,7 +23,7 @@ ...@@ -23,7 +23,7 @@
<a-form-model ref="form" :model="model" :rules="validatorRules"> <a-form-model ref="form" :model="model" :rules="validatorRules">
<a-form-model-item label="用户账号" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="username"> <a-form-model-item label="用户账号" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="username">
<a-input placeholder="请输入用户账号" v-model="model.username" :readOnly="!!model.id"/> <a-input placeholder="请输入用户账号" v-model="model.username" :readOnly="!!model.id" :disabled="disableSubmit"/>
</a-form-model-item> </a-form-model-item>
<template v-if="!model.id"> <template v-if="!model.id">
...@@ -37,7 +37,7 @@ ...@@ -37,7 +37,7 @@
</template> </template>
<a-form-model-item label="用户姓名" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="realname"> <a-form-model-item label="用户姓名" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="realname">
<a-input placeholder="请输入用户姓名" v-model="model.realname" /> <a-input placeholder="请输入用户姓名" v-model="model.realname" :disabled="disableSubmit"/>
</a-form-model-item> </a-form-model-item>
<!-- <a-form-model-item label="工号" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="workNo"> <!-- <a-form-model-item label="工号" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="workNo">
...@@ -45,7 +45,7 @@ ...@@ -45,7 +45,7 @@
</a-form-model-item> --> </a-form-model-item> -->
<a-form-model-item label="手机号码" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="phone"> <a-form-model-item label="手机号码" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="phone">
<a-input placeholder="请输入手机号码" v-model="model.phone" /> <a-input placeholder="请输入手机号码" v-model="model.phone" :disabled="disableSubmit"/>
</a-form-model-item> </a-form-model-item>
<!-- <a-form-model-item label="职务" :labelCol="labelCol" :wrapperCol="wrapperCol"> <!-- <a-form-model-item label="职务" :labelCol="labelCol" :wrapperCol="wrapperCol">
...@@ -63,7 +63,7 @@ ...@@ -63,7 +63,7 @@
<!--部门分配--> <!--部门分配-->
<a-form-model-item label="部门分配" :labelCol="labelCol" :wrapperCol="wrapperCol" v-show="!departDisabled"> <a-form-model-item label="部门分配" :labelCol="labelCol" :wrapperCol="wrapperCol" v-show="!departDisabled">
<j-select-depart v-model="model.selecteddeparts" :multi="true" @back="backDepartInfo" :backDepart="true" :treeOpera="true">></j-select-depart> <j-select-depart v-model="model.selecteddeparts" :multi="true" @back="backDepartInfo" :backDepart="true" :treeOpera="true" :disabled="disableSubmit">></j-select-depart>
</a-form-model-item> </a-form-model-item>
<!--租户分配--> <!--租户分配-->
...@@ -92,7 +92,7 @@ ...@@ -92,7 +92,7 @@
</a-form-model-item> </a-form-model-item>
<a-form-model-item label="头像" :labelCol="labelCol" :wrapperCol="wrapperCol"> <a-form-model-item label="头像" :labelCol="labelCol" :wrapperCol="wrapperCol">
<j-image-upload class="avatar-uploader" text="上传" v-model="model.avatar" ></j-image-upload> <j-image-upload class="avatar-uploader" text="上传" v-model="model.avatar" :disabled="disableSubmit"></j-image-upload>
</a-form-model-item> </a-form-model-item>
<a-form-model-item label="生日" :labelCol="labelCol" :wrapperCol="wrapperCol"> <a-form-model-item label="生日" :labelCol="labelCol" :wrapperCol="wrapperCol">
...@@ -101,22 +101,22 @@ ...@@ -101,22 +101,22 @@
placeholder="请选择生日" placeholder="请选择生日"
v-model="model.birthday" v-model="model.birthday"
:format="dateFormat" :format="dateFormat"
:getCalendarContainer="node => node.parentNode"/> :getCalendarContainer="node => node.parentNode" :disabled="disableSubmit"/>
</a-form-model-item> </a-form-model-item>
<a-form-model-item label="性别" :labelCol="labelCol" :wrapperCol="wrapperCol"> <a-form-model-item label="性别" :labelCol="labelCol" :wrapperCol="wrapperCol">
<a-select v-model="model.sex" placeholder="请选择性别" :getPopupContainer= "(target) => target.parentNode"> <a-select v-model="model.sex" placeholder="请选择性别" :getPopupContainer= "(target) => target.parentNode" :disabled="disableSubmit">
<a-select-option :value="1"></a-select-option> <a-select-option :value="1"></a-select-option>
<a-select-option :value="2"></a-select-option> <a-select-option :value="2"></a-select-option>
</a-select> </a-select>
</a-form-model-item> </a-form-model-item>
<a-form-model-item label="邮箱" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="email"> <a-form-model-item label="邮箱" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="email">
<a-input placeholder="请输入邮箱" v-model="model.email" /> <a-input placeholder="请输入邮箱" v-model="model.email" :disabled="disableSubmit"/>
</a-form-model-item> </a-form-model-item>
<a-form-model-item label="座机" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="telephone"> <a-form-model-item label="座机" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="telephone">
<a-input placeholder="请输入座机" v-model="model.telephone" /> <a-input placeholder="请输入座机" v-model="model.telephone" :disabled="disableSubmit"/>
</a-form-model-item> </a-form-model-item>
<!-- <a-form-model-item label="工作流引擎" :labelCol="labelCol" :wrapperCol="wrapperCol"> <!-- <a-form-model-item label="工作流引擎" :labelCol="labelCol" :wrapperCol="wrapperCol">
...@@ -173,7 +173,7 @@ ...@@ -173,7 +173,7 @@
roles:{}, roles:{},
// workNo:[ { required: true, message: '请输入工号' }, // workNo:[ { required: true, message: '请输入工号' },
// { validator: this.validateWorkNo }], // { validator: this.validateWorkNo }],
telephone: [{ pattern: /^0\d{2,3}-[1-9]\d{6,7}$/, message: '请输入正确的座机号码' },] //telephone: [{ pattern: /^0\d{2,3}-[1-9]\d{6,7}$/, message: '请输入正确的座机号码' },]
}, },
departIdShow:false, departIdShow:false,
title:"操作", title:"操作",
...@@ -232,7 +232,7 @@ ...@@ -232,7 +232,7 @@
this.departIdShow=false; this.departIdShow=false;
} }
if(record.hasOwnProperty("id")){ if(record.id){
that.getUserRoles(record.id); that.getUserRoles(record.id);
that.getUserDeparts(record.id); that.getUserDeparts(record.id);
} }
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论