From 240c74ffb2b98faddf76648116ca9eeb61ee2cde Mon Sep 17 00:00:00 2001 From: qushaowei <qushaowei@163.com> Date: 星期四, 11 一月 2024 09:34:49 +0800 Subject: [PATCH] 问题项修改 --- src/views/eam/EquipmentMaintenancePlanList.vue | 646 +++++++++++++++++++++++++++++++++++----------------------- 1 files changed, 388 insertions(+), 258 deletions(-) diff --git a/src/views/eam/EquipmentMaintenancePlanList.vue b/src/views/eam/EquipmentMaintenancePlanList.vue index 1e32c5e..3184ec5 100644 --- a/src/views/eam/EquipmentMaintenancePlanList.vue +++ b/src/views/eam/EquipmentMaintenancePlanList.vue @@ -2,22 +2,59 @@ <a-card :bordered="false"> <!-- 鏌ヨ鍖哄煙 --> <div class="table-page-search-wrapper"> - <a-form layout="inline" @keyup.enter.native="searchQuery"> + <a-form + layout="inline" + @keyup.enter.native="searchQuery" + > <a-row :gutter="24"> - <a-col :xl="6" :lg="7" :md="8" :sm="24"> + <a-col + :xl="6" + :lg="7" + :md="8" + :sm="24" + > <a-form-item label="鍗曟嵁鍙�"> - <j-input placeholder="璇疯緭鍏ュ崟鎹彿" v-model="queryParam.num"></j-input> + <j-input + placeholder="璇疯緭鍏ュ崟鎹彿" + v-model="queryParam.num" + ></j-input> </a-form-item> </a-col> - <a-col :xl="6" :lg="7" :md="8" :sm="24"> + <a-col + :xl="6" + :lg="7" + :md="8" + :sm="24" + > <a-form-item label="淇濆吇绫诲瀷"> - <j-dict-select-tag placeholder="璇烽�夋嫨淇濆吇绫诲瀷" v-model="queryParam.type" dictCode="maintenance_type" /> + <j-dict-select-tag + placeholder="璇烽�夋嫨淇濆吇绫诲瀷" + v-model="queryParam.type" + dictCode="maintenance_type" + /> </a-form-item> </a-col> - <a-col :xl="6" :lg="7" :md="8" :sm="24"> - <span style="float: left;overflow: hidden;" class="table-page-search-submitButtons"> - <a-button type="primary" @click="searchQuery" icon="search">鏌ヨ</a-button> - <a-button type="primary" @click="searchReset" icon="reload" style="margin-left: 8px">閲嶇疆</a-button> + <a-col + :xl="6" + :lg="7" + :md="8" + :sm="24" + > + <span + style="float: left;overflow: hidden;" + class="table-page-search-submitButtons" + > + <a-button + type="primary" + @click="searchQuery" + icon="search" + >鏌ヨ</a-button> + <a-button + type="primary" + @click="searchReset" + icon="reload" + style="margin-left: 8px" + >閲嶇疆</a-button> </span> </a-col> </a-row> @@ -27,14 +64,25 @@ <!-- 鎿嶄綔鎸夐挳鍖哄煙 --> <div class="table-operator"> - <a-button @click="handleAdd" type="primary" icon="plus" v-has="'MaintenancePlan:add&edit&submit'">鏂板</a-button> + <a-button + @click="handleAdd" + type="primary" + icon="plus" + v-has="'MaintenancePlan:add&edit&submit'" + >鏂板</a-button> </div> <!-- table鍖哄煙-begin --> <div> - <div class="ant-alert ant-alert-info" style="margin-bottom: 16px;"> + <div + class="ant-alert ant-alert-info" + style="margin-bottom: 16px;" + > <i class="anticon anticon-info-circle ant-alert-icon"></i> 宸查�夋嫨 <a style="font-weight: 600">{{ selectedRowKeys.length }}</a>椤� - <a style="margin-left: 24px" @click="onClearSelected">娓呯┖</a> + <a + style="margin-left: 24px" + @click="onClearSelected" + >娓呯┖</a> </div> <a-table @@ -43,300 +91,382 @@ bordered rowKey="id" class="j-table-force-nowrap" - :scroll="{x:true}" :columns="columns" :dataSource="dataSource" :pagination="ipagination" :loading="loading" :rowSelection="{selectedRowKeys: selectedRowKeys, onChange: onSelectChange, type:'radio'}" :customRow="clickThenSelect" - @change="handleTableChange"> + @change="handleTableChange" + > + <!-- :scroll="{x:true}" --> - <template slot="htmlSlot" slot-scope="text"> + <template + slot="htmlSlot" + slot-scope="text" + > <div v-html="text"></div> </template> - <template slot="imgSlot" slot-scope="text,record"> - <span v-if="!text" style="font-size: 12px;font-style: italic;">鏃犲浘鐗�</span> - <img v-else :src="getImgView(text)" :preview="record.id" height="25px" alt="" style="max-width:80px;font-size: 12px;font-style: italic;"/> + <template + slot="imgSlot" + slot-scope="text,record" + > + <span + v-if="!text" + style="font-size: 12px;font-style: italic;" + >鏃犲浘鐗�</span> + <img + v-else + :src="getImgView(text)" + :preview="record.id" + height="25px" + alt="" + style="max-width:80px;font-size: 12px;font-style: italic;" + /> </template> - <template slot="fileSlot" slot-scope="text"> - <span v-if="!text" style="font-size: 12px;font-style: italic;">鏃犳枃浠�</span> + <template + slot="fileSlot" + slot-scope="text" + > + <span + v-if="!text" + style="font-size: 12px;font-style: italic;" + >鏃犳枃浠�</span> <a-button v-else :ghost="true" type="primary" icon="download" size="small" - @click="downloadFile(text)"> + @click="downloadFile(text)" + > 涓嬭浇 </a-button> </template> - <span slot="action" slot-scope="text, record"> - <a @click="handleEdit(record)" v-if="record.status==='created'||record.status==='rejected'" v-has="'MaintenancePlan:add&edit&submit'">缂栬緫</a> - <a-divider type="vertical" v-if="record.status==='created'||record.status==='rejected'"/> - <a-popconfirm title="纭畾鍒犻櫎鍚�?" @confirm="() => handleDelete(record.id)" v-if="record.status==='created'||record.status==='rejected'" v-has="'MaintenancePlan:add&edit&submit'"> - <a>鍒犻櫎</a> + <span + slot="action" + slot-scope="text, record" + > + <a + @click="handleEdit(record)" + v-if="record.status==='created'||record.status==='rejected'" + v-has="'MaintenancePlan:add&edit&submit'" + >缂栬緫</a> + <a-divider + type="vertical" + v-if="record.status==='created'||record.status==='rejected'" + /> + <a-popconfirm + title="纭畾鍒犻櫎鍚�?" + @confirm="() => handleDelete(record.id)" + v-if="record.status==='created'||record.status==='rejected'" + v-has="'MaintenancePlan:add&edit&submit'" + > + <a>鍒犻櫎</a> </a-popconfirm> - <a-divider type="vertical" v-if="record.status==='created'||record.status==='rejected'" v-has="'MaintenancePlan:add&edit&submit'"/> - <a-popconfirm title="鎻愪氦鍚庝笉鍙挙鍥烇紝纭畾鎻愪氦鍚�?" @confirm="() => handleSubmit(record)" v-if="record.status==='created'||record.status==='rejected'" v-has="'MaintenancePlan:add&edit&submit'"> - <a>鎻愪氦</a> + <a-divider + type="vertical" + v-if="record.status==='created'||record.status==='rejected'" + v-has="'MaintenancePlan:add&edit&submit'" + /> + <a-popconfirm + title="鎻愪氦鍚庝笉鍙挙鍥烇紝纭畾鎻愪氦鍚�?" + @confirm="() => handleSubmit(record)" + v-if="record.status==='created'||record.status==='rejected'" + v-has="'MaintenancePlan:add&edit&submit'" + > + <a>鎻愪氦</a> </a-popconfirm> - <a-divider type="vertical" v-if="record.status==='created'||record.status==='rejected'" v-has="'MaintenancePlan:add&edit&submit'"/> - <a-popconfirm title="閫氳繃鍚庝笉鍙挙閿�锛岀‘瀹氶�氳繃鍚�?" @confirm="() => handleAudit(record)" v-if="record.status==='submitted'" v-has="'MaintenancePlan:audit&reject'"> - <a>閫氳繃</a> + <a-divider + type="vertical" + v-if="record.status==='created'||record.status==='rejected'" + v-has="'MaintenancePlan:add&edit&submit'" + /> + <a-popconfirm + title="閫氳繃鍚庝笉鍙挙閿�锛岀‘瀹氶�氳繃鍚�?" + @confirm="() => handleAudit(record)" + v-if="record.status==='submitted'" + v-has="'MaintenancePlan:audit&reject'" + > + <a>閫氳繃</a> </a-popconfirm> - <a-divider type="vertical" v-if="record.status==='submitted'" v-has="'MaintenancePlan:audit&reject'"/> - <a-popconfirm title="纭畾椹冲洖鍚�?" @confirm="() => handleReject(record)" v-if="record.status==='submitted'" v-has="'MaintenancePlan:audit&reject'"> - <a>椹冲洖</a> + <a-divider + type="vertical" + v-if="record.status==='submitted'" + v-has="'MaintenancePlan:audit&reject'" + /> + <a-popconfirm + title="纭畾椹冲洖鍚�?" + @confirm="() => handleReject(record)" + v-if="record.status==='submitted'" + v-has="'MaintenancePlan:audit&reject'" + > + <a>椹冲洖</a> </a-popconfirm> - <a-divider type="vertical" v-if="record.status==='submitted'" v-has="'MaintenancePlan:audit&reject'"/> - <a-popconfirm title="涓嬪彂鍚庝笉鍙挙閿�锛岀‘瀹氫笅鍙戝悧?" @confirm="() => handleDistrbute(record)" v-if="record.status==='passed'" v-has="'MaintenancePlan:distribute'"> - <a>涓嬪彂</a> + <a-divider + type="vertical" + v-if="record.status==='submitted'" + v-has="'MaintenancePlan:audit&reject'" + /> + <a-popconfirm + title="涓嬪彂鍚庝笉鍙挙閿�锛岀‘瀹氫笅鍙戝悧?" + @confirm="() => handleDistrbute(record)" + v-if="record.status==='passed'" + v-has="'MaintenancePlan:distribute'" + > + <a>涓嬪彂</a> </a-popconfirm> - <span v-if="record.status==='distributed'" style="font-size: 12px;font-style: italic;">宸茬敓鎴愬伐鍗�</span> + <span + v-if="record.status==='distributed'" + style="font-size: 12px;font-style: italic;" + >宸茬敓鎴愬伐鍗�</span> </span> </a-table> </div> <a-tabs defaultActiveKey="1"> - <a-tab-pane tab="淇濆吇璁″垝鏄庣粏" key="1" > - <EquipmentMaintenancePlanDetailList :mainId="equipmentMaintenancePlanDetailMainId" :mainStatus="mainStatus" /> + <a-tab-pane + tab="淇濆吇璁″垝鏄庣粏" + key="1" + > + <EquipmentMaintenancePlanDetailList + :mainId="equipmentMaintenancePlanDetailMainId" + :mainStatus="mainStatus" + /> </a-tab-pane> </a-tabs> - <equipmentMaintenancePlan-modal ref="modalForm" @ok="modalFormOk"></equipmentMaintenancePlan-modal> + <equipmentMaintenancePlan-modal + ref="modalForm" + @ok="modalFormOk" + ></equipmentMaintenancePlan-modal> </a-card> </template> <script> - import { JeecgListMixin } from '@/mixins/JeecgListMixin' - import EquipmentMaintenancePlanModal from './modules/maintenancePlan/EquipmentMaintenancePlanModal' - import { getAction } from '@/api/manage' - import EquipmentMaintenancePlanDetailList from './EquipmentMaintenancePlanDetailList' - import '@/assets/less/TableExpand.less' +import { JeecgListMixin } from '@/mixins/JeecgListMixin' +import EquipmentMaintenancePlanModal from './modules/maintenancePlan/EquipmentMaintenancePlanModal' +import { getAction } from '@/api/manage' +import EquipmentMaintenancePlanDetailList from './EquipmentMaintenancePlanDetailList' +import '@/assets/less/TableExpand.less' import { putAction } from '../../api/manage' - export default { - name: "EquipmentMaintenancePlanList", - mixins:[JeecgListMixin], - components: { - EquipmentMaintenancePlanDetailList, - EquipmentMaintenancePlanModal +export default { + name: "EquipmentMaintenancePlanList", + mixins: [JeecgListMixin], + components: { + EquipmentMaintenancePlanDetailList, + EquipmentMaintenancePlanModal + }, + data() { + return { + description: '淇濆吇璁″垝绠$悊椤甸潰', + // 琛ㄥご + columns: [ + { + title: '璁″垝鍗曞彿', + align: "center", + dataIndex: 'num', + }, + { + title: '璁″垝鍗曠被鍨�', + align: "center", + dataIndex: 'type_dictText', + }, + { + title: '璁″垝鍗曠姸鎬�', + align: "center", + dataIndex: 'status_dictText', + }, + { + title: '璁惧鏁伴噺', + align: "center", + dataIndex: 'equipNo', + }, + { + title: '鍒涘缓浜�', + align: "center", + dataIndex: 'createBy', + }, + { + title: '鍒涘缓鏃堕棿', + align: "center", + dataIndex: 'createTime', + }, + // { + // title: '淇敼浜�', + // align: "center", + // dataIndex: 'updateBy', + // width: 200, + // }, + // { + // title: '淇敼鏃堕棿', + // align: "center", + // dataIndex: 'updateTime', + // width: 200, + // }, + { + title: '鎿嶄綔', + dataIndex: 'action', + align: "center", + scopedSlots: { customRender: 'action' }, + } + // fixed: "right", + // width: 200, + ], + url: { + list: "/eam/equipmentMaintenancePlan/list", + delete: "/eam/equipmentMaintenancePlan/delete", + deleteBatch: "/eam/equipmentMaintenancePlan/deleteBatch", + exportXlsUrl: "/eam/equipmentMaintenancePlan/exportXls", + importExcelUrl: "eam/equipmentMaintenancePlan/importExcel", + submit: "eam/equipmentMaintenancePlan/submit", + reject: "eam/equipmentMaintenancePlan/reject", + distrbute: "eam/equipmentMaintenancePlan/distrbute", + audit: "eam/equipmentMaintenancePlan/audit" + }, + dictOptions: { + }, + /* 鍒嗛〉鍙傛暟 */ + ipagination: { + current: 1, + pageSize: 20, + pageSizeOptions: ['5', '10', '20', '50'], + showTotal: (total, range) => { + return range[0] + "-" + range[1] + " 鍏�" + total + "鏉�" + }, + showQuickJumper: true, + showSizeChanger: true, + total: 0 + }, + selectedMainId: '', + superFieldList: [], + equipmentMaintenancePlanDetailMainId: '', + mainStatus: '', + } + }, + created() { + this.getSuperFieldList(); + }, + computed: { + importExcelUrl: function () { + return `${window._CONFIG['domianURL']}/${this.url.importExcelUrl}`; + } + }, + methods: { + initDictConfig() { }, - data () { + clickThenSelect(record) { return { - description: '淇濆吇璁″垝绠$悊椤甸潰', - // 琛ㄥご - columns: [ - { - title:'璁″垝鍗曞彿', - align:"center", - dataIndex: 'num', - }, - { - title:'璁″垝鍗曠被鍨�', - align:"center", - dataIndex: 'type_dictText', - width:200, - }, - { - title:'璁″垝鍗曠姸鎬�', - align:"center", - dataIndex: 'status_dictText', - width:200, - }, - { - title:'璁惧鏁伴噺', - align:"center", - dataIndex: 'equipNo', - width:200, - }, - { - title:'鍒涘缓浜�', - align:"center", - dataIndex: 'createBy', - width:200, - }, - { - title:'鍒涘缓鏃堕棿', - align:"center", - dataIndex: 'createTime', - width:200, - }, - { - title:'淇敼浜�', - align:"center", - dataIndex: 'updateBy', - width:200, - }, - { - title:'淇敼鏃堕棿', - align:"center", - dataIndex: 'updateTime', - width:200, - }, - { - title: '鎿嶄綔', - dataIndex: 'action', - align:"center", - fixed:"right", - width:200, - scopedSlots: { customRender: 'action' }, - } - ], - url: { - list: "/eam/equipmentMaintenancePlan/list", - delete: "/eam/equipmentMaintenancePlan/delete", - deleteBatch: "/eam/equipmentMaintenancePlan/deleteBatch", - exportXlsUrl: "/eam/equipmentMaintenancePlan/exportXls", - importExcelUrl: "eam/equipmentMaintenancePlan/importExcel", - submit:"eam/equipmentMaintenancePlan/submit", - reject:"eam/equipmentMaintenancePlan/reject", - distrbute:"eam/equipmentMaintenancePlan/distrbute", - audit:"eam/equipmentMaintenancePlan/audit" - }, - dictOptions:{ - }, - /* 鍒嗛〉鍙傛暟 */ - ipagination:{ - current: 1, - pageSize: 5, - pageSizeOptions: ['5', '10', '50'], - showTotal: (total, range) => { - return range[0] + "-" + range[1] + " 鍏�" + total + "鏉�" - }, - showQuickJumper: true, - showSizeChanger: true, - total: 0 - }, - selectedMainId:'', - superFieldList:[], - equipmentMaintenancePlanDetailMainId: '', - mainStatus:'', - } - }, - created() { - this.getSuperFieldList(); - }, - computed: { - importExcelUrl: function(){ - return `${window._CONFIG['domianURL']}/${this.url.importExcelUrl}`; - } - }, - methods: { - initDictConfig(){ - }, - clickThenSelect(record) { - return { - on: { - click: () => { - this.onSelectChange(record.id.split(","), [record]); - } + on: { + click: () => { + this.onSelectChange(record.id.split(","), [record]); } } - }, - onClearSelected() { - this.selectedRowKeys = []; - this.selectionRows = []; - this.selectedMainId='' - }, - onSelectChange(selectedRowKeys, selectionRows) { - this.selectedMainId=selectedRowKeys[0] - this.selectedRowKeys = selectedRowKeys; - this.selectionRows = selectionRows; - this.equipmentMaintenancePlanDetailMainId = selectionRows[0]['id'] - this.mainStatus = selectionRows[0]['status'] - }, - loadData(arg) { - if(!this.url.list){ - this.$message.error("璇疯缃畊rl.list灞炴��!") - return - } - //鍔犺浇鏁版嵁 鑻ヤ紶鍏ュ弬鏁�1鍒欏姞杞界涓�椤电殑鍐呭 - if (arg === 1) { - this.ipagination.current = 1; - } - this.onClearSelected() - var params = this.getQueryParams();//鏌ヨ鏉′欢 - this.loading = true; - getAction(this.url.list, params).then((res) => { - if (res.success) { - this.dataSource = res.result.records; - this.ipagination.total = res.result.total; - } - if(res.code===510){ - this.$message.warning(res.message) - } - this.loading = false; - }) - }, - getSuperFieldList(){ - let fieldList=[]; - fieldList.push({type:'string',value:'num',text:'璁″垝鍗曞彿',dictCode:''}) - fieldList.push({type:'string',value:'type',text:'璁″垝鍗曠被鍨嬶紙鏁版嵁瀛楀吀锛歮aintenance_plan_type锛�',dictCode:''}) - fieldList.push({type:'string',value:'status',text:'璁″垝鍗曠姸鎬�(鏁版嵁瀛楀吀锛歮aintenance_plan_type)',dictCode:''}) - fieldList.push({type:'int',value:'equipNo',text:'璁惧鏁伴噺',dictCode:''}) - fieldList.push({type:'string',value:'createBy',text:'createBy',dictCode:''}) - fieldList.push({type:'date',value:'createTime',text:'createTime'}) - fieldList.push({type:'string',value:'updateBy',text:'updateBy',dictCode:''}) - fieldList.push({type:'date',value:'updateTime',text:'updateTime'}) - this.superFieldList = fieldList - }, - handleSubmit(record){ - this.loading = true; - putAction(this.url.submit,record).then(res=>{ - if(res.success){ - this.$message.success("鎿嶄綔鎴愬姛"); - }else{ - this.$message.success("鎿嶄綔澶辫触"); - - } - }).finally(res=>{ - this.loadData(); - }) - }, - handleAudit(record){ - this.loading = true; - putAction(this.url.audit,record).then(res=>{ - if(res.success){ - this.$message.success("鎿嶄綔鎴愬姛"); - }else{ - this.$message.success("鎿嶄綔澶辫触"); - } - }).finally(res=>{ - this.loadData(); - }) - }, - handleDistrbute(record){ - this.loading = true; - putAction(this.url.distrbute,record).then(res=>{ - if(res.success){ - this.$message.success("鎿嶄綔鎴愬姛"); - }else{ - this.$message.success("鎿嶄綔澶辫触"); - } - }).finally(res=>{ - this.loadData(); - }) - }, - handleReject(record){ - this.loading = true; - putAction(this.url.reject,record).then(res=>{ - if(res.success){ - this.$message.success("鎿嶄綔鎴愬姛"); - }else{ - this.$message.success("鎿嶄綔澶辫触"); - } - }).finally(res=>{ - this.loadData(); - }) } + }, + onClearSelected() { + this.selectedRowKeys = []; + this.selectionRows = []; + this.selectedMainId = '' + }, + onSelectChange(selectedRowKeys, selectionRows) { + this.selectedMainId = selectedRowKeys[0] + this.selectedRowKeys = selectedRowKeys; + this.selectionRows = selectionRows; + this.equipmentMaintenancePlanDetailMainId = selectionRows[0]['id'] + this.mainStatus = selectionRows[0]['status'] + }, + loadData(arg) { + if (!this.url.list) { + this.$message.error("璇疯缃畊rl.list灞炴��!") + return + } + //鍔犺浇鏁版嵁 鑻ヤ紶鍏ュ弬鏁�1鍒欏姞杞界涓�椤电殑鍐呭 + if (arg === 1) { + this.ipagination.current = 1; + } + this.onClearSelected() + var params = this.getQueryParams();//鏌ヨ鏉′欢 + this.loading = true; + getAction(this.url.list, params).then((res) => { + if (res.success) { + this.dataSource = res.result.records; + this.ipagination.total = res.result.total; + } + if (res.code === 510) { + this.$message.warning(res.message) + } + this.loading = false; + }) + }, + getSuperFieldList() { + let fieldList = []; + fieldList.push({ type: 'string', value: 'num', text: '璁″垝鍗曞彿', dictCode: '' }) + fieldList.push({ type: 'string', value: 'type', text: '璁″垝鍗曠被鍨嬶紙鏁版嵁瀛楀吀锛歮aintenance_plan_type锛�', dictCode: '' }) + fieldList.push({ type: 'string', value: 'status', text: '璁″垝鍗曠姸鎬�(鏁版嵁瀛楀吀锛歮aintenance_plan_type)', dictCode: '' }) + fieldList.push({ type: 'int', value: 'equipNo', text: '璁惧鏁伴噺', dictCode: '' }) + fieldList.push({ type: 'string', value: 'createBy', text: 'createBy', dictCode: '' }) + fieldList.push({ type: 'date', value: 'createTime', text: 'createTime' }) + fieldList.push({ type: 'string', value: 'updateBy', text: 'updateBy', dictCode: '' }) + fieldList.push({ type: 'date', value: 'updateTime', text: 'updateTime' }) + this.superFieldList = fieldList + }, + handleSubmit(record) { + this.loading = true; + putAction(this.url.submit, record).then(res => { + if (res.success) { + this.$message.success("鎿嶄綔鎴愬姛"); + } else { + this.$message.success("鎿嶄綔澶辫触"); + + } + }).finally(res => { + this.loadData(); + }) + }, + handleAudit(record) { + this.loading = true; + putAction(this.url.audit, record).then(res => { + if (res.success) { + this.$message.success("鎿嶄綔鎴愬姛"); + } else { + this.$message.success("鎿嶄綔澶辫触"); + } + }).finally(res => { + this.loadData(); + }) + }, + handleDistrbute(record) { + this.loading = true; + putAction(this.url.distrbute, record).then(res => { + if (res.success) { + this.$message.success("鎿嶄綔鎴愬姛"); + } else { + this.$message.success("鎿嶄綔澶辫触"); + } + }).finally(res => { + this.loadData(); + }) + }, + handleReject(record) { + this.loading = true; + putAction(this.url.reject, record).then(res => { + if (res.success) { + this.$message.success("鎿嶄綔鎴愬姛"); + } else { + this.$message.success("鎿嶄綔澶辫触"); + } + }).finally(res => { + this.loadData(); + }) } } +} </script> <style scoped> - @import '~@assets/less/common.less' +@import '~@assets/less/common.less'; </style> \ No newline at end of file -- Gitblit v1.9.3