Sfoglia il codice sorgente

1.优化公告阅读状态
2.优化通知阅读状态

mq 5 anni fa
parent
commit
fbecac2e5a

+ 1 - 1
app/src/main/java/com/unis/sxzcl/MyApp.java

@@ -23,7 +23,7 @@ public class MyApp extends BaseApp {
23 23
 
24 24
     @Override
25 25
     protected boolean isDebug() {
26
-        return true;
26
+        return BuildConfig.DEBUG;
27 27
     }
28 28
 
29 29
     @Override

+ 2 - 0
app/src/main/java/com/unis/sxzcl/ui/aeration/AerationDetailFragment.java

@@ -484,7 +484,9 @@ public class AerationDetailFragment extends BaseListFragment<FragmentAerationDet
484 484
     @Override
485 485
     public void onSwitchListener(ProcessStepBean item) {
486 486
         // 流程切换回调方法
487
+        // 刷新列表
487 488
         mAdapter.setFlowId(item.id);
489
+
488 490
         mBinding.recyclerView.scrollToPosition(0);
489 491
 
490 492
         if (mStepAdapter.getCurrentIndex() == 0 && !mPageType.equals("add")) {

File diff suppressed because it is too large
+ 18 - 7
app/src/main/java/com/unis/sxzcl/ui/announce/AnnounceDetailFragment.java


+ 30 - 0
app/src/main/java/com/unis/sxzcl/ui/announce/AnnounceListFragment.java

@@ -11,6 +11,10 @@ import com.unis.sxzcl.R;
11 11
 import com.unis.sxzcl.base.BaseListFragment;
12 12
 import com.unis.sxzcl.databinding.FragmentBaseListTitleBinding;
13 13
 
14
+import org.greenrobot.eventbus.EventBus;
15
+import org.greenrobot.eventbus.Subscribe;
16
+import org.greenrobot.eventbus.ThreadMode;
17
+
14 18
 import java.util.List;
15 19
 
16 20
 /**
@@ -28,6 +32,7 @@ public class AnnounceListFragment extends BaseListFragment<FragmentBaseListTitle
28 32
 
29 33
     private AnnounceListAdapter mAdapter;
30 34
 
35
+    private AnnounceBean selectBean;
31 36
 
32 37
     @Override
33 38
     public void onRefreshData() {
@@ -47,12 +52,16 @@ public class AnnounceListFragment extends BaseListFragment<FragmentBaseListTitle
47 52
 
48 53
     @Override
49 54
     protected void init() {
55
+        EventBus.getDefault().register(this);
50 56
         mBinding.bar.setTitle("公告列表")
51 57
                 .setLeftClickListener(v -> onBack());
52 58
 
53 59
         mAdapter = new AnnounceListAdapter();
54 60
         mAdapter.setOnItemClickListener((adapter, view, position) -> {
55 61
             AnnounceBean item = mAdapter.getData().get(position);
62
+            selectBean = item;
63
+
64
+            // 跳转到详情
56 65
             Bundle bundle = new Bundle();
57 66
             bundle.putString("data", getGson().toJson(item));
58 67
             navigation(R.id.announceDetailFragment, bundle);
@@ -62,6 +71,12 @@ public class AnnounceListFragment extends BaseListFragment<FragmentBaseListTitle
62 71
     }
63 72
 
64 73
     @Override
74
+    public void onDestroyView() {
75
+        super.onDestroyView();
76
+        EventBus.getDefault().unregister(this);
77
+    }
78
+
79
+    @Override
65 80
     protected void onFirstShow() {
66 81
         onRefresh();
67 82
     }
@@ -93,5 +108,20 @@ public class AnnounceListFragment extends BaseListFragment<FragmentBaseListTitle
93 108
         });
94 109
     }
95 110
 
111
+    @Subscribe(threadMode = ThreadMode.MAIN)
112
+    public void onReadEvent(AnnounceBean event) {
113
+        if (event == null) {
114
+            onRefresh();
115
+            return;
116
+        }
117
+        for (AnnounceBean bean : mAdapter.getData()) {
118
+            if (bean.getId().equals(event.getId())) {
119
+                // 将刷新的选项置为已读
120
+                bean.setReadStatus(true);
121
+                mAdapter.notifyItemChanged(mAdapter.getItemPosition(bean));
122
+                break;
123
+            }
124
+        }
125
+    }
96 126
 
97 127
 }

+ 3 - 8
app/src/main/java/com/unis/sxzcl/ui/notice/NoticeListAdapter.java

@@ -10,16 +10,11 @@ import com.unis.sxzcl.R;
10 10
 
11 11
 import org.jetbrains.annotations.NotNull;
12 12
 
13
+
13 14
 /**
14
- * 包名: com.unis.sxzcl.ui.notice
15
- * 类名: NoticeListAdapter
16
- * 作用描述:
15
+ * 通知列表Adapter
17 16
  * 创建人: mQ
18
- * 创建时间: 2020/11/24 11:28
19
- * 更新人:
20
- * 更新时间: 2020/11/24 11:28
21
- * 更新说明:
22
- * 版本号: 1.0
17
+ * 时间: 2020/11/24 11:28
23 18
  */
24 19
 public class NoticeListAdapter extends BaseQuickAdapter<NoticeBean, BaseViewHolder>
25 20
         implements LoadMoreModule {

+ 22 - 2
app/src/main/java/com/unis/sxzcl/ui/notice/NoticeListFragment.java

@@ -8,6 +8,7 @@ import com.unis.model.NoticeModel;
8 8
 import com.unis.model.bean.notice.NoticeBean;
9 9
 import com.unis.sxzcl.base.BaseListFragment;
10 10
 import com.unis.sxzcl.databinding.FragmentBaseListTitleBinding;
11
+import com.xyxsbj.mylibrary.tool.ToastTool;
11 12
 
12 13
 import java.util.List;
13 14
 
@@ -54,8 +55,27 @@ public class NoticeListFragment extends BaseListFragment<FragmentBaseListTitleBi
54 55
         });
55 56
         mAdapter.setReadCallback(item -> {
56 57
             // 处理已读
57
-//            item.read = true;
58
-//            mAdapter.notifyItemChanged(mAdapter.getItemPosition(item));
58
+
59
+            showProgress("正在阅读...", false);
60
+            String id = "";
61
+            if (item.getId() != null) id = item.getId().toString();
62
+            NoticeModel.get().read(id, new DataCallback<String>() {
63
+                @Override
64
+                public void onSuccess(String data) {
65
+                    if (!isActive()) return;
66
+                    hideProgress();
67
+                    ToastTool.showLong("已读成功");
68
+                    item.setReadStatus(true);
69
+                    mAdapter.notifyItemChanged(mAdapter.getItemPosition(item));
70
+                }
71
+
72
+                @Override
73
+                public void onError(String error) {
74
+                    super.onError(error);
75
+                    if (!isActive()) return;
76
+                    hideProgress();
77
+                }
78
+            });
59 79
         });
60 80
         initBaseListView(mBinding.refreshLayout, mBinding.recyclerView, mAdapter, true);
61 81
     }

+ 1 - 2
app/src/main/java/com/unis/sxzcl/widget/BaseTitleBar.java

@@ -11,7 +11,6 @@ import android.widget.TextView;
11 11
 
12 12
 import com.unis.sxzcl.R;
13 13
 import com.unis.sxzcl.databinding.BaseTitleBarBinding;
14
-import com.xyxsbj.mylibrary.tool.LogTool;
15 14
 import com.xyxsbj.mylibrary.tool.StringTool;
16 15
 
17 16
 /**
@@ -96,7 +95,7 @@ public class BaseTitleBar extends RelativeLayout {
96 95
             //根据资源ID获取响应的尺寸值
97 96
             height = getResources().getDimensionPixelSize(resourceId);
98 97
         }
99
-        LogTool.i("状态栏高度:" + height);
98
+//        LogTool.i("状态栏高度:" + height);
100 99
         return height;
101 100
     }
102 101
 

+ 1 - 1
app/src/main/java/com/unis/sxzcl/widget/MyPieChart.java

@@ -44,7 +44,7 @@ public class MyPieChart {
44 44
 
45 45
     private void initView() {
46 46
         //边距
47
-        mPieChart.setExtraOffsets(10, 10, 10, 10);
47
+        mPieChart.setExtraOffsets(0, 15, 0, 15);
48 48
         // 设置pieChart图表展示动画效果
49 49
         mPieChart.animateY(1000);
50 50
         //无数据时显示文字

+ 7 - 1
app/src/main/java/com/unis/sxzcl/widget/banner/TopLineAdapter.java

@@ -9,6 +9,7 @@ import androidx.recyclerview.widget.RecyclerView;
9 9
 
10 10
 import com.unis.model.bean.AnnounceBean;
11 11
 import com.unis.sxzcl.R;
12
+import com.xyxsbj.mylibrary.tool.DateTool;
12 13
 import com.youth.banner.adapter.BannerAdapter;
13 14
 import com.youth.banner.util.BannerUtils;
14 15
 
@@ -40,7 +41,12 @@ public class TopLineAdapter extends BannerAdapter<AnnounceBean, TopLineAdapter.T
40 41
     @Override
41 42
     public void onBindView(TopLineHolder holder, AnnounceBean data, int position, int size) {
42 43
         holder.tvTitle.setText(data.getTitle());
43
-        holder.tvTime.setText(data.getPublishTime());
44
+        String publishTime = data.getPublishTime();
45
+        try {
46
+            publishTime = DateTool.formatDate(publishTime, DateTool.GLNZSJ_DATE, DateTool.YTDTD_DATE);
47
+        } catch (Exception e) {
48
+        }
49
+        holder.tvTime.setText(publishTime);
44 50
     }
45 51
 
46 52
     class TopLineHolder extends RecyclerView.ViewHolder {

+ 32 - 54
app/src/main/java/com/unis/sxzcl/widget/dialog/SystemDialog.java

@@ -5,14 +5,11 @@ import android.content.DialogInterface;
5 5
 import android.view.LayoutInflater;
6 6
 import android.view.View;
7 7
 import android.view.WindowManager;
8
-import android.widget.FrameLayout;
9
-import android.widget.ImageView;
10
-import android.widget.LinearLayout;
11
-import android.widget.TextView;
12 8
 
13 9
 import androidx.appcompat.app.AlertDialog;
14 10
 
15 11
 import com.unis.sxzcl.R;
12
+import com.unis.sxzcl.databinding.DialogSystemBinding;
16 13
 
17 14
 
18 15
 /**
@@ -24,16 +21,7 @@ import com.unis.sxzcl.R;
24 21
 public class SystemDialog {
25 22
 
26 23
     AlertDialog mDialog;
27
-
28
-    private TextView mTvTitle;
29
-    private ImageView mBtnClose;
30
-    private TextView mTvMsg;
31
-    private FrameLayout mContentLayout;
32
-    private View mViewBottomLine;
33
-    private TextView mBtnLeft;
34
-    private TextView mBtnCenter;
35
-    private TextView mBtnRight;
36
-    private LinearLayout mRootLayout;
24
+    private DialogSystemBinding mBinding;
37 25
 
38 26
     private LeftCallBack mLeftCallBack;
39 27
     private CenterCallBack mCenterCallBack;
@@ -47,44 +35,34 @@ public class SystemDialog {
47 35
 
48 36
     private void initDialog(Context context) {
49 37
         mDialog = new AlertDialog.Builder(context, R.style.MyDialog).create();
50
-        View view = LayoutInflater.from(context).inflate(R.layout.dialog_system, null, false);
51
-        mDialog.setView(view);
38
+        mBinding = DialogSystemBinding.inflate(LayoutInflater.from(context));
39
+        mDialog.setView(mBinding.getRoot());
52 40
         mDialog.getWindow().clearFlags(WindowManager.LayoutParams.FLAG_ALT_FOCUSABLE_IM);
53 41
         mDialog.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_VISIBLE);
54
-        initView(view);
42
+        initView();
55 43
     }
56 44
 
57
-    private void initView(View view) {
58
-        mTvTitle = view.findViewById(R.id.tv_title);
59
-        mTvTitle.setText("");
60
-
61
-        mBtnClose = view.findViewById(R.id.btn_close);
62
-        mBtnClose.setOnClickListener(mClickListener);
45
+    private void initView() {
46
+        mBinding.tvTitle.setText("");
63 47
 
64
-        mTvMsg = view.findViewById(R.id.tv_msg);
65
-        mTvMsg.setVisibility(View.GONE);
48
+        mBinding.btnClose.setOnClickListener(mClickListener);
66 49
 
67
-        mContentLayout = view.findViewById(R.id.content_layout);
68
-        mContentLayout.setVisibility(View.GONE);
50
+        mBinding.tvMsg.setVisibility(View.GONE);
69 51
 
70
-        mViewBottomLine = view.findViewById(R.id.view_bottom_line);
71
-        mViewBottomLine.setVisibility(View.GONE);
52
+        mBinding.contentLayout.setVisibility(View.GONE);
72 53
 
54
+        mBinding.viewBottomLine.setVisibility(View.GONE);
73 55
 
74
-        mBtnLeft = view.findViewById(R.id.btn_left);
75
-        mBtnLeft.setOnClickListener(mClickListener);
76
-        mBtnLeft.setVisibility(View.GONE);
56
+        mBinding.btnLeft.setOnClickListener(mClickListener);
57
+        mBinding.btnLeft.setVisibility(View.GONE);
77 58
 
78
-        mBtnCenter = view.findViewById(R.id.btn_center);
79
-        mBtnCenter.setOnClickListener(mClickListener);
80
-        mBtnCenter.setVisibility(View.GONE);
59
+        mBinding.btnCenter.setOnClickListener(mClickListener);
60
+        mBinding.btnCenter.setVisibility(View.GONE);
81 61
 
82
-        mBtnRight = view.findViewById(R.id.btn_right);
83
-        mBtnRight.setOnClickListener(mClickListener);
84
-        mBtnRight.setVisibility(View.GONE);
62
+        mBinding.btnRight.setOnClickListener(mClickListener);
63
+        mBinding.btnRight.setVisibility(View.GONE);
85 64
 
86
-        mRootLayout = view.findViewById(R.id.root_layout);
87
-        mRootLayout.setOnClickListener(mClickListener);
65
+        mBinding.rootLayout.setOnClickListener(mClickListener);
88 66
     }
89 67
 
90 68
     private View.OnClickListener mClickListener = new View.OnClickListener() {
@@ -133,7 +111,7 @@ public class SystemDialog {
133 111
      * @return
134 112
      */
135 113
     public SystemDialog setTitle(String title) {
136
-        mTvTitle.setText(title);
114
+        mBinding.tvTitle.setText(title);
137 115
         return this;
138 116
     }
139 117
 
@@ -143,8 +121,8 @@ public class SystemDialog {
143 121
      * @param msg
144 122
      */
145 123
     public SystemDialog setMsg(String msg) {
146
-        mTvMsg.setVisibility(View.VISIBLE);
147
-        mTvMsg.setText(msg);
124
+        mBinding.tvMsg.setVisibility(View.VISIBLE);
125
+        mBinding.tvMsg.setText(msg);
148 126
         return this;
149 127
     }
150 128
 
@@ -156,9 +134,9 @@ public class SystemDialog {
156 134
      * @return
157 135
      */
158 136
     public SystemDialog setLeftButton(String left, LeftCallBack leftCallBack) {
159
-        mViewBottomLine.setVisibility(View.VISIBLE);
160
-        mBtnLeft.setVisibility(View.VISIBLE);
161
-        mBtnLeft.setText(left);
137
+        mBinding.viewBottomLine.setVisibility(View.VISIBLE);
138
+        mBinding.btnLeft.setVisibility(View.VISIBLE);
139
+        mBinding.btnLeft.setText(left);
162 140
         mLeftCallBack = leftCallBack;
163 141
         return this;
164 142
     }
@@ -171,8 +149,8 @@ public class SystemDialog {
171 149
      * @return
172 150
      */
173 151
     public SystemDialog setCenterButton(String center, CenterCallBack centerCallBack) {
174
-        mBtnCenter.setVisibility(View.VISIBLE);
175
-        mBtnCenter.setText(center);
152
+        mBinding.btnCenter.setVisibility(View.VISIBLE);
153
+        mBinding.btnCenter.setText(center);
176 154
         mCenterCallBack = centerCallBack;
177 155
         return this;
178 156
     }
@@ -185,8 +163,8 @@ public class SystemDialog {
185 163
      * @return
186 164
      */
187 165
     public SystemDialog setRightButton(String right, RightCallBack rightCallBack) {
188
-        mBtnRight.setVisibility(View.VISIBLE);
189
-        mBtnRight.setText(right);
166
+        mBinding.btnRight.setVisibility(View.VISIBLE);
167
+        mBinding.btnRight.setText(right);
190 168
         mRightCallBack = rightCallBack;
191 169
         return this;
192 170
     }
@@ -198,8 +176,8 @@ public class SystemDialog {
198 176
      * @return
199 177
      */
200 178
     public SystemDialog setContentView(View contentView) {
201
-        mContentLayout.setVisibility(View.VISIBLE);
202
-        mContentLayout.addView(contentView);
179
+        mBinding.contentLayout.setVisibility(View.VISIBLE);
180
+        mBinding.contentLayout.addView(contentView);
203 181
         return this;
204 182
     }
205 183
 
@@ -209,12 +187,12 @@ public class SystemDialog {
209 187
     }
210 188
 
211 189
     public SystemDialog setHideClose() {
212
-        mBtnClose.setVisibility(View.GONE);
190
+        mBinding.btnClose.setVisibility(View.GONE);
213 191
         return this;
214 192
     }
215 193
 
216 194
     public SystemDialog setHideTitle() {
217
-        mTvTitle.setVisibility(View.GONE);
195
+        mBinding.tvTitle.setVisibility(View.GONE);
218 196
         return this;
219 197
     }
220 198
 

+ 3 - 3
app/src/main/res/layout/dialog_system.xml

@@ -78,7 +78,7 @@
78 78
                 <TextView
79 79
                     android:id="@+id/btn_left"
80 80
                     android:layout_width="0dp"
81
-                    android:layout_height="40dp"
81
+                    android:layout_height="48dp"
82 82
                     android:layout_weight="1"
83 83
                     android:foreground="?android:selectableItemBackground"
84 84
                     android:gravity="center"
@@ -89,7 +89,7 @@
89 89
                 <TextView
90 90
                     android:id="@+id/btn_center"
91 91
                     android:layout_width="0dp"
92
-                    android:layout_height="40dp"
92
+                    android:layout_height="48dp"
93 93
                     android:layout_weight="1"
94 94
                     android:background="@color/colorBlue"
95 95
                     android:foreground="?android:selectableItemBackground"
@@ -101,7 +101,7 @@
101 101
                 <TextView
102 102
                     android:id="@+id/btn_right"
103 103
                     android:layout_width="0dp"
104
-                    android:layout_height="40dp"
104
+                    android:layout_height="48dp"
105 105
                     android:layout_weight="1"
106 106
                     android:background="@color/colorTheme"
107 107
                     android:foreground="?android:selectableItemBackground"

+ 16 - 1
model/src/main/java/com/unis/model/AnnounceModel.java

@@ -17,7 +17,6 @@ import java.util.Map;
17 17
 
18 18
 
19 19
 /**
20
- *
21 20
  * 包名: com.unis.model
22 21
  * 类名: AnnounceModel
23 22
  * 作用描述:
@@ -72,7 +71,23 @@ public class AnnounceModel {
72 71
                         callback.onError(getErrorMsg(response));
73 72
                     }
74 73
                 });
74
+    }
75
+
76
+    /**
77
+     *  公告已读
78
+     * @param id
79
+     */
80
+    public void read(String id) {
81
+        OkGo.<String>post(UrlPath.announce_read + "/" + id).execute(new MyStringCallback() {
82
+            @Override
83
+            protected void onSuccessResult(Response<String> response) throws JSONException {
84
+            }
75 85
 
86
+            @Override
87
+            public void onError(Response<String> response) {
88
+                super.onError(response);
89
+            }
90
+        });
76 91
     }
77 92
 
78 93
 }

+ 22 - 0
model/src/main/java/com/unis/model/BasicModel.java

@@ -11,6 +11,7 @@ import com.xyxsbj.mylibrary.tool.SPTool;
11 11
 import org.json.JSONException;
12 12
 
13 13
 import java.util.ArrayList;
14
+import java.util.HashMap;
14 15
 import java.util.List;
15 16
 import java.util.Map;
16 17
 
@@ -249,4 +250,25 @@ public class BasicModel {
249 250
         }
250 251
         return type;
251 252
     }
253
+
254
+    /**
255
+     * 待办类型
256
+     */
257
+    Map<String, String> todoTypeMap = new HashMap<String, String>() {{
258
+        put("code0", "保管员每周粮情检查");
259
+        put("code1", "安全员每天安全检查");
260
+        put("code2", "仓储科长每2周本库检查");
261
+        put("code3", "业务科长每2周分库检查");
262
+        put("code4", "监管科长每2周租仓、委托点检查");
263
+        put("code5", "分管副总每月粮情检查");
264
+        put("code6", "分管副总每月质量检查");
265
+        put("code7", "分管副总每月分库检查");
266
+        put("code8", "总经理每季检查粮情");
267
+        put("code9", "安全员每天租仓管理/委托管理");
268
+        put("code10", "保管员每天租仓管理/委托管理");
269
+    }};
270
+
271
+    public String getTodoType(String code) {
272
+        return todoTypeMap.get(code);
273
+    }
252 274
 }

+ 26 - 8
model/src/main/java/com/unis/model/NoticeModel.java

@@ -4,6 +4,7 @@ import com.google.gson.Gson;
4 4
 import com.google.gson.reflect.TypeToken;
5 5
 import com.lzy.okgo.OkGo;
6 6
 import com.lzy.okgo.model.Response;
7
+import com.lzy.okgo.request.GetRequest;
7 8
 import com.unis.model.bean.notice.NoticeBean;
8 9
 
9 10
 import org.json.JSONArray;
@@ -15,16 +16,11 @@ import java.util.HashMap;
15 16
 import java.util.List;
16 17
 import java.util.Map;
17 18
 
19
+
18 20
 /**
19
- * 包名: com.unis.model
20
- * 类名: NoticeModel
21
- * 作用描述:
21
+ * 通知请求类
22 22
  * 创建人: mQ
23
- * 创建时间: 2020/12/26 13:45
24
- * 更新人:
25
- * 更新时间: 2020/12/26 13:45
26
- * 更新说明:
27
- * 版本号: 1.0
23
+ * 时间: 2020/12/26 13:45
28 24
  */
29 25
 public class NoticeModel {
30 26
     private NoticeModel() {
@@ -104,4 +100,26 @@ public class NoticeModel {
104 100
 
105 101
     }
106 102
 
103
+    /**
104
+     * 通知标记已读
105
+     *
106
+     * @param id
107
+     * @param callback
108
+     */
109
+    public void read(String id, final DataCallback<String> callback) {
110
+        GetRequest<String> request = OkGo.get(UrlPath.notice_read + "/" + id);
111
+        request.execute(new MyStringCallback() {
112
+            @Override
113
+            protected void onSuccessResult(Response<String> response) throws JSONException {
114
+                callback.onSuccess(null);
115
+            }
116
+
117
+            @Override
118
+            public void onError(Response<String> response) {
119
+                super.onError(response);
120
+                callback.onError(getErrorMsg(response));
121
+            }
122
+        });
123
+    }
124
+
107 125
 }

+ 4 - 3
model/src/main/java/com/unis/model/UrlPath.java

@@ -115,11 +115,15 @@ public class UrlPath {
115 115
     /****************** 通知 ******************/
116 116
     // 通知列表
117 117
     public static final String notice_list = host + "/api/csc-szls-message/sysNoticeUser/authority/getPage";
118
+    // 通知已读
119
+    public static final String notice_read = host + "/api/csc-szls-message/sysNoticeUser/authority_button/readed";
118 120
 
119 121
 
120 122
     /****************** 公告 ******************/
121 123
     // 公告列表
122 124
     public static final String announce_list = host + "/api/csc-szls-message/sysAnnouncementUser/authority/getPage";
125
+    // 公告已读
126
+    public static final String announce_read = host + "/api/csc-szls-message/sysAnnouncementUser/authority_button/readed";
123 127
 
124 128
 
125 129
     /****************** 首页 ******************/
@@ -127,7 +131,4 @@ public class UrlPath {
127 131
     public static final String home_percent = host + "/api/csc-szls-system-manage/basicsWarehouse/authority/getPercent";
128 132
 
129 133
 
130
-
131
-
132
-
133 134
 }

+ 8 - 0
version_info.json

@@ -1,6 +1,14 @@
1 1
 {
2 2
   "info": [
3 3
     {
4
+      "versionName": "1.12",
5
+      "versionCode": 12,
6
+      "content": "1.增加公告阅读状态修改\n2.增加通知阅读状态修改",
7
+      "fileName": "sxzcl_release_1.12_12.apk",
8
+      "must": true,
9
+      "time": "2020-12-31"
10
+    },
11
+    {
4 12
       "versionName": "1.11",
5 13
       "versionCode": 11,
6 14
       "content": "1.机械通风控制角色关系\n2.优化公告时间显示\n3.优化人员结构增加头像和职位展示\n4.粮情检查控制角色关系\n6.异常退出增加弹出框提示\n7.登录人只能选择自己所管理的仓房\n8.机械通风详情可直接跳转待办\n9.优化未选择库时作业页面弹出框时机\n10.饼图数值由小数改为整数",