From e67f52078602f3efb6da02ef8fc8cf0cf7fa7e7a Mon Sep 17 00:00:00 2001
From: czt <czt18638530771@163.com>
Date: 星期二, 03 二月 2026 10:46:45 +0800
Subject: [PATCH] 客户问题优化1
---
fzzy-igdss-view/src/main/java/com/fzzy/igds/InoutNoticeOut-Detail.view.xml | 591 +++++++++++++----------------------------------------------
1 files changed, 131 insertions(+), 460 deletions(-)
diff --git a/fzzy-igdss-view/src/main/java/com/fzzy/igds/InoutNoticeOut-Detail.view.xml b/fzzy-igdss-view/src/main/java/com/fzzy/igds/InoutNoticeOut-Detail.view.xml
index f19f133..8b3291d 100644
--- a/fzzy-igdss-view/src/main/java/com/fzzy/igds/InoutNoticeOut-Detail.view.xml
+++ b/fzzy-igdss-view/src/main/java/com/fzzy/igds/InoutNoticeOut-Detail.view.xml
@@ -103,33 +103,10 @@
<Property></Property>
<Property name="label">瀹℃牳鐘舵��</Property>
<Property name="mapping">
- <Property name="mapValues">
- <Collection>
- <Entity>
- <Property name="name">鐩戠瀹℃牳</Property>
- <Property name="code">10</Property>
- </Entity>
- <Entity>
- <Property name="name">閾惰瀹℃牳</Property>
- <Property name="code">20</Property>
- </Entity>
- <Entity>
- <Property name="name">宸插鏍�</Property>
- <Property name="code">30</Property>
- </Entity>
- </Collection>
- </Property>
- <Property name="keyProperty">code</Property>
- <Property name="valueProperty">name</Property>
+ <Property name="mapValues">${dorado.getDataProvider("dicPR#triggerStatusType").getResult()}</Property>
+ <Property name="keyProperty">dictValue</Property>
+ <Property name="valueProperty">dictLabel</Property>
</Property>
- </PropertyDef>
- <PropertyDef name="auditUser">
- <Property></Property>
- <Property name="label">瀹℃牳浜�</Property>
- </PropertyDef>
- <PropertyDef name="auditDate">
- <Property name="dataType">DateTime</Property>
- <Property name="label">瀹℃壒鏃堕棿</Property>
</PropertyDef>
<PropertyDef name="completeStatus">
<Property></Property>
@@ -188,54 +165,74 @@
</DataType>
</Model>
<View layout="padding:10">
- <ClientEvent name="onReady">var deptId = window.parent.deptId;//鐖堕〉闈腑鐨勫垎搴撶紪鐮�
-var TYPE = "NOTICE_OUT";
-query = function(){
- view.get("#dsQuery").set("parameter",{deptId:deptId}).flushAsync();
-};
-query();
- 
-//鏂板
-add = function(){
- view.get("#ajaxInitAdd").execute(function(data){
- view.get("#dsMain").insert(data);
- view.get("#dialogMain").show();
- });
-};
-
</ClientEvent>
<Property name="packages">font-awesome,css-common</Property>
<DataSet id="dsMain">
- <Property name="dataType">[dtMain]</Property>
- <Property name="dataProvider">inoutNoticePR#pageQueryOut</Property>
- <Property name="pageSize">15</Property>
+ <Property name="dataType">dtMain</Property>
+ <Property name="dataProvider">inoutNoticePR#getNoticeOutOne</Property>
<Property name="loadMode">lazy</Property>
- </DataSet>
- <DataSet id="dsQuery">
- <Property name="dataType">dtNoticeParam</Property>
- <Property name="dataProvider">inoutNoticePR#getYearQuery</Property>
- <Property name="loadMode">manual</Property>
- </DataSet>
- <DataSet id="dsDepotList">
- <Property name="dataProvider">depotPR#getData</Property>
- <Property name="userData">浠撳簱鍒楄〃涓嬫媺妗�</Property>
- <Property name="loadMode">manual</Property>
- <Property name="dataType">[dtDepot]</Property>
+ <Property name="parameter">${request.getParameter('businessId')}</Property>
+ <Property name="readOnly">true</Property>
</DataSet>
<Container>
- <Property name="className">c-param</Property>
- <AutoForm>
- <Property name="cols">*,*,*,*,90,90</Property>
- <Property name="dataSet">dsQuery</Property>
- <Property name="labelAlign">right</Property>
- <Property name="labelWidth">100</Property>
+ <Property name="className">c-data</Property>
+ <AutoForm layoutConstraint="top ">
+ <Property name="dataSet">dsMain</Property>
+ <Property name="showHint">false</Property>
+ <Property name="cols">210,*,210</Property>
+ <Control/>
<AutoFormElement>
- <Property name="name">depotId</Property>
- <Property name="property">depotId</Property>
+ <Property name="name">name</Property>
+ <Property name="property">name</Property>
+ <Property name="editorType">Label</Property>
+ <Property name="showLabel">false</Property>
+ <Property name="showHint">false</Property>
+ <Property name="className">f-title</Property>
<Editor/>
</AutoFormElement>
<AutoFormElement>
- <Property name="name">customerName</Property>
- <Property name="property">customerName</Property>
+ <Property name="name">id</Property>
+ <Property name="property">id</Property>
+ <Property name="editorType">Label</Property>
+ <Property name="showHint">false</Property>
+ <Property name="labelAlign">right</Property>
+ <Property name="showLabel">false</Property>
+ <Editor/>
+ </AutoFormElement>
+ </AutoForm>
+ <AutoForm>
+ <Property name="dataSet">dsMain</Property>
+ <Property name="cols">*,*,*</Property>
+ <Property name="labelAlign">right</Property>
+ <Property name="labelSeparator">锛�</Property>
+ <Property name="labelWidth">120</Property>
+ <AutoFormElement>
+ <Property name="name">name</Property>
+ <Property name="property">name</Property>
+ <Editor/>
+ </AutoFormElement>
+ <AutoFormElement>
+ <Property name="name">type</Property>
+ <Property name="property">type</Property>
+ <Property name="trigger">autoMappingDropDown1</Property>
+ <Property name="editorType">RadioGroup</Property>
+ <Property name="showHint">false</Property>
+ <Editor/>
+ </AutoFormElement>
+ <AutoFormElement id="formItemBank">
+ <Property name="name">bankId</Property>
+ <Property name="property">bankId</Property>
+ <Property name="hideMode">visibility</Property>
+ <Editor/>
+ </AutoFormElement>
+ <AutoFormElement>
+ <Property name="name">deptId</Property>
+ <Property name="property">deptId</Property>
+ <Editor/>
+ </AutoFormElement>
+ <AutoFormElement>
+ <Property name="name">depotId</Property>
+ <Property name="property">depotId</Property>
+ <Property name="trigger">dsDepotDropDown</Property>
<Editor/>
</AutoFormElement>
<AutoFormElement>
@@ -244,406 +241,80 @@
<Editor/>
</AutoFormElement>
<AutoFormElement>
+ <Property name="name">year</Property>
+ <Property name="property">year</Property>
+ <Property name="trigger">defaultYearDropDown</Property>
+ <Editor/>
+ </AutoFormElement>
+ <AutoFormElement>
+ <Property name="name">createTime</Property>
+ <Property name="property">createTime</Property>
+ <Property name="readOnly">true</Property>
+ <Editor/>
+ </AutoFormElement>
+ <AutoFormElement>
+ <Property name="name">customerName</Property>
+ <Property name="property">customerName</Property>
+ <Editor/>
+ </AutoFormElement>
+ <AutoFormElement>
+ <Property name="name">targetNumber</Property>
+ <Property name="property">targetNumber</Property>
+ <Property name="readOnly">false</Property>
+ <Editor/>
+ </AutoFormElement>
+ <AutoFormElement>
+ <Property name="name">createBy</Property>
+ <Property name="property">createBy</Property>
+ <Editor/>
+ </AutoFormElement>
+ <AutoFormElement>
+ <Property name="name">createTime</Property>
+ <Property name="property">createTime</Property>
+ <Property name="readOnly">true</Property>
+ <Editor/>
+ </AutoFormElement>
+ <AutoFormElement layoutConstraint="colSpan:3">
+ <Property name="name">remark</Property>
+ <Property name="property">remark</Property>
+ <Property name="editorType">TextArea</Property>
+ <Editor/>
+ </AutoFormElement>
+ <AutoFormElement>
+ <Property name="name">completeNumber</Property>
+ <Property name="property">completeNumber</Property>
+ <Property name="readOnly">false</Property>
+ <Editor/>
+ </AutoFormElement>
+ <AutoFormElement>
<Property name="name">completeStatus</Property>
<Property name="property">completeStatus</Property>
<Editor/>
</AutoFormElement>
- <Button>
- <ClientEvent name="onClick">var data = view.get("#dsQuery.data");
- if(data){
- view.get("#dsMain").set("parameter",data.toJSON()).flushAsync();
- }else{
- view.get("#dsMain").flushAsync();
- }</ClientEvent>
- <Property name="caption">鎼滅储</Property>
- <Property name="iconClass">fa fa-search</Property>
- <Property name="exClassName">btn-q1</Property>
- </Button>
- <Button>
- <ClientEvent name="onClick">view.get("#dsQuery").flushAsync();</ClientEvent>
- <Property name="caption">閲嶇疆</Property>
- <Property name="exClassName">btn-q2</Property>
- <Property name="iconClass">fa fa-refresh</Property>
- </Button>
+ <AutoFormElement>
+ <Property name="name">completeTime</Property>
+ <Property name="property">completeTime</Property>
+ <Property name="readOnly">false</Property>
+ <Editor/>
+ </AutoFormElement>
+ <AutoFormElement layoutConstraint="colSpan:2">
+ <Property name="name">contract</Property>
+ <Property name="property">contract</Property>
+ <Editor/>
+ </AutoFormElement>
+ <Label>
+ <Property name="style">
+ <Property name="color">blue</Property>
+ </Property>
+ <Property name="text">娉細鐩戠閫氱煡鍗曪紝鍙~鍐欒川鎶煎悎鍚屽悕绉�</Property>
+ </Label>
+ <AutoFormElement>
+ <Property name="name">auditStatus</Property>
+ <Property name="property">auditStatus</Property>
+ <Property name="readOnly">true</Property>
+ <Editor/>
+ </AutoFormElement>
</AutoForm>
</Container>
- <Container>
- <Property name="className">c-data</Property>
- <ToolBar>
- <ToolBarButton layoutConstraint="left">
- <ClientEvent name="onClick">add();
</ClientEvent>
- <Property name="caption">鏂板</Property>
- <Property name="exClassName">btn1</Property>
- <Property name="width">100</Property>
- <Property name="iconClass">fa fa-plus</Property>
- </ToolBarButton>
- <ToolBarButton layoutConstraint="left">
- <ClientEvent name="onClick">
- var select = view.get("#dataGridMain").get("selection");
- if(select){
- view.get("#dialogMain").show();
- }else{
- $notify("璇烽�夋嫨闇�瑕佷慨鏀圭殑鏁版嵁鈥︹��");
- }</ClientEvent>
- <Property name="caption">淇敼</Property>
- <Property name="exClassName">btn2</Property>
- <Property name="width">100</Property>
- <Property name="iconClass">fa fa-pencil-square-o</Property>
- </ToolBarButton>
- <ToolBarButton layoutConstraint="left">
- <ClientEvent name="onClick">
- var select = view.get("#dataGridMain").get("selection");
- if(select){
- view.get("#ajaxDel").set("parameter",select).execute(function(result){
- select.remove();
- });
- }else{
- $notify("璇烽�夋嫨闇�瑕佸垹闄ょ殑浠撳簱鈥︹��");
- }
- </ClientEvent>
- <Property name="caption">鍒犻櫎</Property>
- <Property name="exClassName">btn3</Property>
- <Property name="width">100</Property>
- <Property name="iconClass">fa fa-times</Property>
- </ToolBarButton>
- <ToolBarButton layoutConstraint="left">
- <ClientEvent name="onClick">view.get("#recalculate").execute(function(result){
- if(result == 'success'){
- $notify("鏁版嵁鏇存柊瀹屾垚锛侊紒");
- 
- var data = view.get("#dsQuery.data");
- view.get("#dsMain").set("parameter",data.toJSON()).flushAsync();
- }else{
- $notify("鏁版嵁鏇存柊澶辫触锛侊紒");
- }
- });</ClientEvent>
- <Property name="caption">瀹炴椂鏍哥畻</Property>
- <Property name="exClassName">btn4</Property>
- <Property name="iconClass">fa fa-refresh</Property>
- <Property name="width">100</Property>
- <Property name="tip">瀹屾垚閲忛粯璁ょ粺璁″埌鏄ㄥぉ锛屾煡鐪嬪疄鏃跺畬鎴愰噺璇风偣鍑烩�滃疄鏃舵牳绠椻�濇寜閽�</Property>
- </ToolBarButton>
- <ToolBarButton layoutConstraint="left">
- <ClientEvent name="onClick">
- var select = view.get("#dataGridMain").get("selection");
- if(select){
- var bizId = select.get("id");
- var url = "/export/download-word?bizId="+bizId + "&entityName=InoutNoticeOut";
- window.open(url);
- }else{
- $notify("璇烽�夋嫨闇�瑕佸鍑虹殑閫氱煡鍗曗�︹��");
- }</ClientEvent>
- <Property name="caption">瀵煎嚭Word</Property>
- <Property name="exClassName">btn2</Property>
- <Property name="width">120</Property>
- <Property name="iconClass">fa fa-print</Property>
- </ToolBarButton>
- <Fill/>
- </ToolBar>
- <DataGrid id="dataGridMain" layoutConstraint="padding:8">
- <ClientEvent name="onDataRowClick">self.set("selection",arg.data);</ClientEvent>
- <Property name="dataSet">dsMain</Property>
- <Property name="readOnly">true</Property>
- <Property name="selectionMode">singleRow</Property>
- <Property name="readOnly">true</Property>
- <RowSelectorColumn/>
- <RowNumColumn>
- <Property name="width">50</Property>
- <Property name="caption">搴忓彿</Property>
- </RowNumColumn>
- <DataColumn name="id">
- <Property name="property">id</Property>
- <Property name="width">200</Property>
- <Property name="align">center</Property>
- </DataColumn>
- <DataColumn>
- <Property name="property">deptId</Property>
- <Property name="align">left</Property>
- <Property name="name">deptId</Property>
- </DataColumn>
- <DataColumn name="name">
- <Property name="property">name</Property>
- <Property name="align">center</Property>
- <Property name="width">120</Property>
- </DataColumn>
- <DataColumn name="customerName">
- <Property name="property">customerName</Property>
- <Property name="align">center</Property>
- </DataColumn>
- <DataColumn name="depotId">
- <Property name="property">depotId</Property>
- <Property name="align">center</Property>
- <Property name="width">120</Property>
- </DataColumn>
- <DataColumn name="foodVariety">
- <Property name="property">foodVariety</Property>
- <Property name="align">center</Property>
- <Property name="width">120</Property>
- </DataColumn>
- <DataColumn>
- <Property name="property">targetNumber</Property>
- <Property name="name">targetNumber</Property>
- <Property name="align">center</Property>
- <Property name="width">120</Property>
- </DataColumn>
- <DataColumn>
- <Property name="property">completeStatus</Property>
- <Property name="name">completeStatus</Property>
- <Property name="align">center</Property>
- <Property name="width">100</Property>
- </DataColumn>
- <DataColumn>
- <Property name="property">updateBy</Property>
- <Property name="align">center</Property>
- <Property name="name">updateBy</Property>
- <Property name="width">120</Property>
- </DataColumn>
- <DataColumn>
- <Property name="property">createTime</Property>
- <Property name="align">center</Property>
- <Property name="name">createTime</Property>
- <Property name="width">160</Property>
- </DataColumn>
- </DataGrid>
- <ToolBar layoutConstraint="bottom">
- <Fill/>
- <DataPilot layoutConstraint="right">
- <Property name="itemCodes">pageSize,pages</Property>
- <Property name="dataSet">dsMain</Property>
- </DataPilot>
- </ToolBar>
- </Container>
- <Dialog id="dialogMain">
- <Property name="closeable">false</Property>
- <Property name="caption">鍑哄簱閫氱煡鍗�</Property>
- <Property name="width">85%</Property>
- <Property name="height">90%</Property>
- <Property name="iconClass">fa fa-tasks</Property>
- <Buttons>
- <Button id="btnOk">
- <ClientEvent name="onClick">view.get("#updateSave").execute(function(result){
- if(result){
- $alert(result);
- return;
- }
- $notify("鏁版嵁鎵ц瀹屾垚锛侊紒");
- self.get("parent").hide();
- });</ClientEvent>
- <Property name="caption">淇濆瓨</Property>
- <Property name="iconClass">fa fa-check-circle</Property>
- <Property name="exClassName">btn1</Property>
- <Property name="width">120</Property>
- </Button>
- <Button>
- <ClientEvent name="onClick">view.get("#dsMain.data:#").cancel();
- self.get("parent").hide();</ClientEvent>
- <Property name="caption">鍙栨秷</Property>
- <Property name="exClassName">btn3</Property>
- <Property name="iconClass">fa fa-times-circle</Property>
- <Property name="width">120</Property>
- </Button>
- </Buttons>
- <Children>
- <Container>
- <AutoForm layoutConstraint="top ">
- <Property name="dataSet">dsMain</Property>
- <Property name="showHint">false</Property>
- <Property name="cols">210,*,210</Property>
- <Control/>
- <AutoFormElement>
- <Property name="name">name</Property>
- <Property name="property">name</Property>
- <Property name="editorType">Label</Property>
- <Property name="showLabel">false</Property>
- <Property name="showHint">false</Property>
- <Property name="className">f-title</Property>
- <Editor/>
- </AutoFormElement>
- <AutoFormElement>
- <Property name="name">id</Property>
- <Property name="property">id</Property>
- <Property name="editorType">Label</Property>
- <Property name="showHint">false</Property>
- <Property name="labelAlign">right</Property>
- <Property name="showLabel">false</Property>
- <Editor/>
- </AutoFormElement>
- </AutoForm>
- <AutoForm>
- <Property name="dataSet">dsMain</Property>
- <Property name="cols">*,*,*</Property>
- <Property name="labelAlign">right</Property>
- <Property name="labelSeparator">锛�</Property>
- <Property name="labelWidth">120</Property>
- <AutoFormElement layoutConstraint="colSpan:2">
- <Property name="name">name</Property>
- <Property name="property">name</Property>
- <Editor/>
- </AutoFormElement>
- <AutoFormElement>
- <Property name="name">type</Property>
- <Property name="property">type</Property>
- <Property name="trigger">autoMappingDropDown1</Property>
- <Editor/>
- </AutoFormElement>
- <AutoFormElement id="formItemBank">
- <Property name="name">bankId</Property>
- <Property name="property">bankId</Property>
- <Property name="hideMode">visibility</Property>
- <Editor/>
- </AutoFormElement>
- <AutoFormElement>
- <Property name="name">deptId</Property>
- <Property name="property">deptId</Property>
- <Editor/>
- </AutoFormElement>
- <AutoFormElement>
- <Property name="name">depotId</Property>
- <Property name="property">depotId</Property>
- <Property name="trigger">dsDepotDropDown</Property>
- <Editor/>
- </AutoFormElement>
- <AutoFormElement>
- <Property name="name">foodVariety</Property>
- <Property name="property">foodVariety</Property>
- <Editor/>
- </AutoFormElement>
- <AutoFormElement>
- <Property name="name">year</Property>
- <Property name="property">year</Property>
- <Property name="trigger">defaultYearDropDown</Property>
- <Editor/>
- </AutoFormElement>
- <AutoFormElement layoutConstraint="colSpan:2">
- <Property name="name">customerName</Property>
- <Property name="property">customerName</Property>
- <Editor/>
- </AutoFormElement>
- <AutoFormElement>
- <Property name="name">unitName</Property>
- <Property name="property">unitName</Property>
- <Editor/>
- </AutoFormElement>
- <AutoFormElement>
- <Property name="name">targetNumber</Property>
- <Property name="property">targetNumber</Property>
- <Property name="readOnly">false</Property>
- <Editor/>
- </AutoFormElement>
- <AutoFormElement>
- <Property name="name">completeNumber</Property>
- <Property name="property">completeNumber</Property>
- <Property name="readOnly">false</Property>
- <Editor/>
- </AutoFormElement>
- <AutoFormElement>
- <Property name="name">completeStatus</Property>
- <Property name="property">completeStatus</Property>
- <Editor/>
- </AutoFormElement>
- <AutoFormElement>
- <Property name="name">completeTime</Property>
- <Property name="property">completeTime</Property>
- <Property name="readOnly">false</Property>
- <Editor/>
- </AutoFormElement>
- <AutoFormElement>
- <Property name="name">createBy</Property>
- <Property name="property">createBy</Property>
- <Editor/>
- </AutoFormElement>
- <AutoFormElement>
- <Property name="name">auditStatus</Property>
- <Property name="property">auditStatus</Property>
- <Property name="readOnly">true</Property>
- <Editor/>
- </AutoFormElement>
- <AutoFormElement layoutConstraint="colSpan:2">
- <Property name="name">contract</Property>
- <Property name="property">contract</Property>
- <Editor/>
- </AutoFormElement>
- <Label>
- <Property name="style">
- <Property name="color">blue</Property>
- </Property>
- <Property name="text">娉細鐩戠閫氱煡鍗曪紝鍙~鍐欒川鎶煎悎鍚屽悕绉�</Property>
- </Label>
- <AutoFormElement layoutConstraint="colSpan:3">
- <Property name="name">remark</Property>
- <Property name="property">remark</Property>
- <Property name="editorType">TextArea</Property>
- <Editor/>
- </AutoFormElement>
- <AutoFormElement>
- <Property name="name">createTime</Property>
- <Property name="property">createTime</Property>
- <Editor/>
- </AutoFormElement>
- <AutoFormElement>
- <Property name="name">auditUser</Property>
- <Property name="property">auditUser</Property>
- <Property name="readOnly">true</Property>
- <Editor/>
- </AutoFormElement>
- <AutoFormElement>
- <Property name="name">auditDate</Property>
- <Property name="property">auditDate</Property>
- <Property name="readOnly">true</Property>
- <Editor/>
- </AutoFormElement>
- <HtmlContainer layoutConstraint="colSpan:3">
- <Property name="content">1.鍑哄簱閫氱煡鍗曚綔涓哄嚭搴撲綔涓氱殑鍓嶇疆鏉′欢锛屽繀椤婚厤缃紝鍚﹀垯鏃犳硶杩涜鍏ュ簱浣滀笟銆�<br>
- 2.鍗曟嵁绫诲瀷=搴撳尯閫氱煡鍗曪紝琛ㄧず搴撳尯鑷繁浣滀笟涓氬姟锛屼笉鍙楃洃绠$鐞嗐��</Property>
- <Property name="exClassName">h-tip</Property>
- <Property name="contentOverflow">hidden</Property>
- </HtmlContainer>
- </AutoForm>
- </Container>
- </Children>
- <Tools/>
- </Dialog>
- <DataSetDropDown id="dsDepotDropDown">
- <ClientEvent name="onOpen">
-var entity = view.get("#dsMain.data:#");
-if(!entity){
- $alert("璇峰厛閫夋嫨鎵�灞炲垎搴�");
-}else{
- var deptId = entity.get("deptId");
- if(!deptId){
- $alert("璇峰厛閫夋嫨鎵�灞炲垎搴�");
- }else{
- view.get("#dsDepotList").set("parameter",entity.get("deptId")).flushAsync();
- }
-}</ClientEvent>
- <Property name="dataSet">dsDepotList</Property>
- <Property name="height">450</Property>
- <Property name="autoOpen">true</Property>
- <Property name="assignmentMap">depotId=id</Property>
- <Property name="width">400</Property>
- <DataColumn>
- <Property name="align">center</Property>
- <Property name="name">name</Property>
- <Property name="property">name</Property>
- <Editor/>
- </DataColumn>
- </DataSetDropDown>
- <UpdateAction id="updateSave">
- <Property name="dataResolver">inoutNoticePR#saveOut</Property>
- <UpdateItem>
- <Property name="dataPath">[#current]</Property>
- <Property name="dataSet">dsMain</Property>
- </UpdateItem>
- </UpdateAction>
- <AjaxAction id="ajaxDel">
- <Property name="service">inoutNoticePR#delDataOut</Property>
- <Property name="confirmMessage">纭畾瑕佹墽琛屽垹闄や箞锛�</Property>
- </AjaxAction>
- <AjaxAction id="ajaxInitAdd">
- <Property name="service">inoutNoticePR#initAddOut</Property>
- </AjaxAction>
- <AjaxAction id="recalculate">
- <Property name="service">inoutNoticePR#updateSumNoticeOut</Property>
- </AjaxAction>
</View>
</ViewConfig>
--
Gitblit v1.9.3