提交开源图库初始化代码

Signed-off-by: sunjunxiong <sunjunxiong@huawei.com>
This commit is contained in:
sunjunxiong 2021-07-20 23:52:10 +08:00
parent 21476d0490
commit 1f578dec9e
107 changed files with 7141 additions and 0 deletions

26
.gitignore vendored Normal file
View File

@ -0,0 +1,26 @@
*.iml
.gradle
/local.properties
.idea/*
.idea/gradle.xml
.DS_Store
/build.gradle
build/outputs/hap/*
build/outputs/app/release/com.ohos.photos-release-unsigned.app
build/outputs/app/release/pack.info
/captures
.externalNativeBuild
.cxx
module_photos.xml
photos.properties
photos.xml
photos_Mon_Jan_25_09-05-43_GMT+08-00_2021.properties
photos_Mon_Jan_25_09-05-43_GMT+08-00_2021.xml
module_photos_Mon_Jan_25_09-05-43_GMT+08-00_2021.xml
/entry/build/
/.gradle/
/.preview/
/.local.properties
/.gradle.properties

201
LICENSE Normal file
View File

@ -0,0 +1,201 @@
Apache License
Version 2.0, January 2004
http://www.apache.org/licenses/
TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
1. Definitions.
"License" shall mean the terms and conditions for use, reproduction,
and distribution as defined by Sections 1 through 9 of this document.
"Licensor" shall mean the copyright owner or entity authorized by
the copyright owner that is granting the License.
"Legal Entity" shall mean the union of the acting entity and all
other entities that control, are controlled by, or are under common
control with that entity. For the purposes of this definition,
"control" means (i) the power, direct or indirect, to cause the
direction or management of such entity, whether by contract or
otherwise, or (ii) ownership of fifty percent (50%) or more of the
outstanding shares, or (iii) beneficial ownership of such entity.
"You" (or "Your") shall mean an individual or Legal Entity
exercising permissions granted by this License.
"Source" form shall mean the preferred form for making modifications,
including but not limited to software source code, documentation
source, and configuration files.
"Object" form shall mean any form resulting from mechanical
transformation or translation of a Source form, including but
not limited to compiled object code, generated documentation,
and conversions to other media types.
"Work" shall mean the work of authorship, whether in Source or
Object form, made available under the License, as indicated by a
copyright notice that is included in or attached to the work
(an example is provided in the Appendix below).
"Derivative Works" shall mean any work, whether in Source or Object
form, that is based on (or derived from) the Work and for which the
editorial revisions, annotations, elaborations, or other modifications
represent, as a whole, an original work of authorship. For the purposes
of this License, Derivative Works shall not include works that remain
separable from, or merely link (or bind by name) to the interfaces of,
the Work and Derivative Works thereof.
"Contribution" shall mean any work of authorship, including
the original version of the Work and any modifications or additions
to that Work or Derivative Works thereof, that is intentionally
submitted to Licensor for inclusion in the Work by the copyright owner
or by an individual or Legal Entity authorized to submit on behalf of
the copyright owner. For the purposes of this definition, "submitted"
means any form of electronic, verbal, or written communication sent
to the Licensor or its representatives, including but not limited to
communication on electronic mailing lists, source code control systems,
and issue tracking systems that are managed by, or on behalf of, the
Licensor for the purpose of discussing and improving the Work, but
excluding communication that is conspicuously marked or otherwise
designated in writing by the copyright owner as "Not a Contribution."
"Contributor" shall mean Licensor and any individual or Legal Entity
on behalf of whom a Contribution has been received by Licensor and
subsequently incorporated within the Work.
2. Grant of Copyright License. Subject to the terms and conditions of
this License, each Contributor hereby grants to You a perpetual,
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
copyright license to reproduce, prepare Derivative Works of,
publicly display, publicly perform, sublicense, and distribute the
Work and such Derivative Works in Source or Object form.
3. Grant of Patent License. Subject to the terms and conditions of
this License, each Contributor hereby grants to You a perpetual,
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
(except as stated in this section) patent license to make, have made,
use, offer to sell, sell, import, and otherwise transfer the Work,
where such license applies only to those patent claims licensable
by such Contributor that are necessarily infringed by their
Contribution(s) alone or by combination of their Contribution(s)
with the Work to which such Contribution(s) was submitted. If You
institute patent litigation against any entity (including a
cross-claim or counterclaim in a lawsuit) alleging that the Work
or a Contribution incorporated within the Work constitutes direct
or contributory patent infringement, then any patent licenses
granted to You under this License for that Work shall terminate
as of the date such litigation is filed.
4. Redistribution. You may reproduce and distribute copies of the
Work or Derivative Works thereof in any medium, with or without
modifications, and in Source or Object form, provided that You
meet the following conditions:
(a) You must give any other recipients of the Work or
Derivative Works a copy of this License; and
(b) You must cause any modified files to carry prominent notices
stating that You changed the files; and
(c) You must retain, in the Source form of any Derivative Works
that You distribute, all copyright, patent, trademark, and
attribution notices from the Source form of the Work,
excluding those notices that do not pertain to any part of
the Derivative Works; and
(d) If the Work includes a "NOTICE" text file as part of its
distribution, then any Derivative Works that You distribute must
include a readable copy of the attribution notices contained
within such NOTICE file, excluding those notices that do not
pertain to any part of the Derivative Works, in at least one
of the following places: within a NOTICE text file distributed
as part of the Derivative Works; within the Source form or
documentation, if provided along with the Derivative Works; or,
within a display generated by the Derivative Works, if and
wherever such third-party notices normally appear. The contents
of the NOTICE file are for informational purposes only and
do not modify the License. You may add Your own attribution
notices within Derivative Works that You distribute, alongside
or as an addendum to the NOTICE text from the Work, provided
that such additional attribution notices cannot be construed
as modifying the License.
You may add Your own copyright statement to Your modifications and
may provide additional or different license terms and conditions
for use, reproduction, or distribution of Your modifications, or
for any such Derivative Works as a whole, provided Your use,
reproduction, and distribution of the Work otherwise complies with
the conditions stated in this License.
5. Submission of Contributions. Unless You explicitly state otherwise,
any Contribution intentionally submitted for inclusion in the Work
by You to the Licensor shall be under the terms and conditions of
this License, without any additional terms or conditions.
Notwithstanding the above, nothing herein shall supersede or modify
the terms of any separate license agreement you may have executed
with Licensor regarding such Contributions.
6. Trademarks. This License does not grant permission to use the trade
names, trademarks, service marks, or product names of the Licensor,
except as required for reasonable and customary use in describing the
origin of the Work and reproducing the content of the NOTICE file.
7. Disclaimer of Warranty. Unless required by applicable law or
agreed to in writing, Licensor provides the Work (and each
Contributor provides its Contributions) on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
implied, including, without limitation, any warranties or conditions
of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
PARTICULAR PURPOSE. You are solely responsible for determining the
appropriateness of using or redistributing the Work and assume any
risks associated with Your exercise of permissions under this License.
8. Limitation of Liability. In no event and under no legal theory,
whether in tort (including negligence), contract, or otherwise,
unless required by applicable law (such as deliberate and grossly
negligent acts) or agreed to in writing, shall any Contributor be
liable to You for damages, including any direct, indirect, special,
incidental, or consequential damages of any character arising as a
result of this License or out of the use or inability to use the
Work (including but not limited to damages for loss of goodwill,
work stoppage, computer failure or malfunction, or any and all
other commercial damages or losses), even if such Contributor
has been advised of the possibility of such damages.
9. Accepting Warranty or Additional Liability. While redistributing
the Work or Derivative Works thereof, You may choose to offer,
and charge a fee for, acceptance of support, warranty, indemnity,
or other liability obligations and/or rights consistent with this
License. However, in accepting such obligations, You may act only
on Your own behalf and on Your sole responsibility, not on behalf
of any other Contributor, and only if You agree to indemnify,
defend, and hold each Contributor harmless for any liability
incurred by, or claims asserted against, such Contributor by reason
of your accepting any such warranty or additional liability.
END OF TERMS AND CONDITIONS
APPENDIX: How to apply the Apache License to your work.
To apply the Apache License to your work, attach the following
boilerplate notice, with the fields enclosed by brackets "[]"
replaced with your own identifying information. (Don't include
the brackets!) The text should be enclosed in the appropriate
comment syntax for the file format. We also recommend that a
file or class name and description of purpose be included on the
same "printed page" as the copyright notice for easier
identification within third-party archives.
Copyright [yyyy] [name of copyright owner]
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.

57
OAT.xml Normal file
View File

@ -0,0 +1,57 @@
<?xml version="1.0" encoding="UTF-8"?>
<!-- Copyright (c) 2021 Huawei Device Co., Ltd.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
This is the configuration file template for OpenHarmony OSS Audit Tool, please copy it to your project root dir and modify it refer to OpenHarmony/tools_oat/README.
All configurations in this file will be merged to OAT-Default.xml, if you have any questions or concerns, please create issue in OpenHarmony/tools_oat and @jalenchen or chenyaxun.
licensefile:
1.If the project don't have "LICENSE" in root dir, please define all the license files in this project in , OAT will check license files according to this rule.
policylist:
1. policy: If the OAT-Default.xml policies do not meet your requirements, please add policies here.
2. policyitem: The fields type, name, path, desc is required, and the fields rule, group, filefilter is optional,the default value is:
<policyitem type="" name="" path="" desc="" rule="may" group="defaultGroup" filefilter="defaultPolicyFilter"/>
3. policyitem type:
"compatibility" is used to check license compatibility in the specified path;
"license" is used to check source license header in the specified path;
"copyright" is used to check source copyright header in the specified path;
"import" is used to check source dependency in the specified path, such as import ... ,include ...
"filetype" is used to check file type in the specified path, supported file types: archive, binary
"filename" is used to check whether the specified file exists in the specified path(projectroot means the root dir of the project), supported file names: LICENSE, README, README.OpenSource
4. policyitem name: This field is used for define the license, copyright, "*" means match all, the "!" prefix means could not match this value. For example, "!GPL" means can not use GPL license.
5. policyitem path: This field is used for define the source file scope to apply this policyitem, the "!" prefix means exclude the files. For example, "!.*/lib/.*" means files in lib dir will be exclude while process this policyitem.
6. policyitem rule and group: These two fields are used together to merge policy results. "may" policyitems in the same group means any one in this group passed, the result will be passed.
7. policyitem filefilter: Used to bind filefilter which define filter rules.
7. policyitem desc: Used to describe the reason of this policy item, committers will check this while merging the code.
8. filefilter: Filter rules, the type filename is used to filter file name, the type filepath is used to filter file path.
Note:If the text contains special characters, please escape them according to the following rules:
" == &gt;
& == &gt;
' == &gt;
< == &gt;
> == &gt;
-->
<configuration>
<oatconfig>
<policylist>
<policy name="projectPolicy" desc="">
<policyitem type="copyright" name="Copyright 2015 the original author or authors." path="gradlew" rule="may" group="defaultGroup" filefilter="copyrightPolicyFilter" desc="file generated by development tool"/>
<policyitem type="copyright" name="Copyright 2015 the original author or authors." path="gradlew.bat" rule="may" group="defaultGroup" filefilter="copyrightPolicyFilter" desc="file generated by development tool"/>
</policy>
</policylist>
</oatconfig>
</configuration>

5
entry/.gitignore vendored Normal file
View File

@ -0,0 +1,5 @@
/build
module_entry.xml
module_entry_Mon_Jan_25_09-05-43_GMT+08-00_2021.xml
build.gradle
/build/

1
entry/package.json Normal file
View File

@ -0,0 +1 @@
{}

View File

@ -0,0 +1,76 @@
{
"app": {
"bundleName": "com.ohos.photos",
"vendor": "ohos",
"version": {
"code": 1,
"name": "1.0"
},
"apiVersion": {
"compatible": 6,
"target": 6,
"releaseType": "Beta1"
}
},
"deviceConfig": {},
"module": {
"package": "com.ohos.photos",
"name": ".MyApplication",
"deviceType": [
"phone",
"tv"
],
"distro": {
"deliveryWithInstall": true,
"moduleName": "entry",
"moduleType": "entry"
},
"abilities": [
{
"skills": [
{
"entities": [
"entity.system.home"
],
"actions": [
"action.system.home"
]
}
],
"name": "com.ohos.photos.MainAbility",
"icon": "$media:app_icon",
"description": "$string:mainability_description",
"label": "$string:app_name",
"type": "page",
"visible": true,
"launchType": "standard"
}
],
"js": [
{
"pages": [
"pages/main/main",
"pages/selectalbum/selectalbum",
"pages/photolist/photolist",
"pages/afterselect/afterselect",
"pages/photodetail/photodetail",
"pages/videolist/videolist",
"pages/selectalbumphoto/selectalbumphoto",
"pages/editImage/editImage"
],
"name": "default",
"window": {
"designWidth": 720,
"autoDesignWidth": false
}
}
],
"metaData": {
"customizeData": [
{
"name": "hwc-theme"
}
]
}
}
}

View File

@ -0,0 +1,30 @@
/*
* Copyright (c) 2021 Huawei Device Co., Ltd.
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
import device from '@system.device';
import utils from './common/utils/utils.js';
import datamanage from './common/utils/datamanage.js';
export default {
utils,
datamanage,
onCreate() {
console.info('AceApplication onCreate');
utils.initIcon();
},
onDestroy() {
console.info('AceApplication onDestroy');
},
};

View File

@ -0,0 +1,69 @@
/*
* Copyright (c) 2021 Huawei Device Co., Ltd.
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
.bottom-bar {
width: 100%;
height: 144px;
}
.bottom-bar-content {
flex-direction: column;
display: flex;
align-items: center;
justify-content: center;
flex: 1;
}
.img {
width: 48px;
height: 48px;
}
.text {
font-size: 28px;
margin-top: 6px;
color: #000;
width: 200px;
text-align: center;
}
.container {
background-color: #fff;
display: flex;
align-items: center;
justify-content: center;
flex-direction: column;
height: 200px;
padding: 0 30px;
position: fixed;
bottom: 164px;
border-radius: 16px;
right: 20px;
border: #dcdcdc;
box-shadow: 1px 3px 3px 3px #dcdcdc;
}
.listTxt {
width: 160px;
display: flex;
align-items: center;
max-lines: 1;
text-overflow: ellipsis;
}
.title {
font-size: 28px;
}

View File

@ -0,0 +1,35 @@
<!--
/*
* Copyright (c) 2021 Huawei Device Co., Ltd.
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-->
<div class="bottom-bar" show="{{ isShow }}">
<div class="bottom-bar-content" for="{{ (index, item) in dataSource }}" id="{{ index }}"
onclick="tabClick({{ item }},{{ index }})">
<image class="img" src="{{ item.src }}" if="{{ ! item.disabled }}"></image>
<image class="img" style="opacity : 0.5;" src="{{ item.src }}" else></image>
<text class="text" if="{{ ! item.disabled }}">{{ item.name }}</text>
<text class="text" style="opacity : 0.5;" else>{{ item.name }}</text>
</div>
<div if="{{ popVisible }}" class="container" style="height : {{ popHeight }};">
<div class="listTxt" for="{{ popupList }}" onclick="popupItemClick({{ $item }})">
<div style="padding: 20px 0;" if="{{ $item.visible }}">
<text class="title" if="{{ ! $item.disabled }}">{{ $item.name }} </text>
<text class="title" style="opacity : 0.5;" else>{{ $item.name }} </text>
</div>
</div>
</div>
</div>

View File

@ -0,0 +1,73 @@
/*
* Copyright (c) 2021 Huawei Device Co., Ltd.
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
import prompt from '@system.prompt';
import brightness from '@system.brightness';
export default {
data: {
isShow: true,
dataSource: [],
popupList: [],
popVisible: false
},
computed: {
popHeight() {
let length = 0;
this.popList = [];
for (let i = 0; i < this.popupList.length; i++) {
const item = this.popupList[i];
if (item.visible) {
length++;
}
}
return (length * 100) + 'px';
}
},
tabClick(item, index) {
let self = this;
if (!item.disabled) {
if (item.id === -10) {
setTimeout(() => {
self.popVisible = !self.popVisible;
self.$emit('changePopVisible', self.popVisible);
}, 50);
} else {
setTimeout(() => {
self.popVisible = false;
}, 50);
self.$emit('bottomTabClick', item);
}
}
},
popupItemClick(item) {
let self = this;
setTimeout(() => {
self.popVisible = false;
}, 50);
setTimeout(() => {
if (!item.disabled) {
self.$emit('popupItemClick', item);
}
}, 200);
},
popupVisible() {
this.popVisible = !this.popVisible;
},
getPopVisible() {
return this.popVisible;
}
};

View File

@ -0,0 +1,136 @@
/*
* Copyright (c) 2021 Huawei Device Co., Ltd.
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
.main-list-container {
flex-direction: column;
}
.title {
font-weight: 600;
font-size: 50px;
padding-left: 8px;
color: #000;
}
.head-content {
margin-top: 30px;
width: 100%;
height: 448px;
}
.head-img {
width: 100%;
height: 100%;
padding: 8px;
}
.grid-content {
display: flex;
flex-wrap: wrap;
}
.content-div {
display: flex;
justify-content: center;
align-items: center;
}
.grid-content-bottom {
flex-direction: column;
justify-content: flex-end;
padding: 8px;
}
.bottom-layout {
display: flex;
align-items: center;
height: 55px;
}
.img {
border-radius: 24px;
}
.list-content {
flex-direction: column;
}
.list-title {
margin-top: 36px;
font-size: 36px;
padding-left: 8px;
color: #000;
}
.list-content-layout {
height: 160px;
padding-left: 8px;
display: flex;
justify-content: space-between;
align-items: center;
}
.list-content-img {
width: 112px;
height: 112px;
}
.text {
color: #fff;
}
.text-div {
flex: 1;
justify-content: flex-start;
}
.img-div {
flex: 1;
justify-content: flex-end;
}
.grid-text {
padding-left: 8px;
color: #fff;
}
.text-content {
flex-direction: column;
justify-content: center;
margin-left: 24px;
}
.list-text {
color: #000;
opacity: .9;
font-size: 32px;
}
.number-text {
color: #000;
opacity: .6;
margin-top: 10px;
font-size: 28px;
}
.select-img {
width: 38px;
height: 38px;
}
.select-img-layout {
padding-right: 16px;
}

View File

@ -0,0 +1,99 @@
<!--
/*
* Copyright (c) 2021 Huawei Device Co., Ltd.
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-->
<div class="main-list-container">
<text class="title" if="{{ headTitle }}">{{ headTitle }}</text>
<stack class="head-content" onlongpress="parentLongpress({{ headSource }})" if="{{ showHead && headSource }}">
<image class="head-img img" if="{{ showHead }}" src="{{ headSource.src }}"
onclick="photoClick({{ headSource }},{{ 0 }})">
</image>
<div class="grid-content-bottom">
<div style="padding-left : 16px;">
<text class="text"> {{ headSource.name }} </text>
</div>
<div class="bottom-layout" style="padding : 0px 16px 16px 16px">
<div class="text-div">
<text class="text"> {{ headSource.list.length }} </text>
</div>
<div class="img-div ">
<image class="select-img" style="width : {{ gridItemCheckedStyle.width }};
height : {{ gridItemCheckedStyle.height }};" if="{{ headSource.icon }}"
src="{{ headSource.icon }}"></image>
</div>
</div>
</div>
</stack>
<div class="grid-content" if="{{ gridSource && gridSource.length > 0 }}">
<div for="{{ (index, item) in gridSource }}" class="content-div"
style="width : {{ gridItemStyle.width }};
height : {{ gridItemStyle.height }};
padding : {{ gridItemStyle.padding }};
opacity : {{ item.checked ? 0.5 : 1 }};">
<stack
id="{{ 'gridItem' + index }}"
style="width : {{ gridImageStyle.width }};
height : {{ gridImageStyle.height }};"
onclick="photoClick({{ item }},{{ index }},{{ 'grid' }})"
onlongpress="parentLongpress({{ item }},{{ index }},{{ 'grid' }})">
<image style="border-radius : {{ gridImageStyle.radius }};"
src="{{ item.src }}"></image>
<div class="grid-content-bottom">
<div>
<text class="grid-text" if="{{ item.name }}"> {{ item.name }} </text>
</div>
<div class="bottom-layout">
<div class="text-div" if="{{ item.list && item.list.length > 0 }}">
<text class="grid-text"> {{ item.list.length }} </text>
</div>
<div class="img-div" style="padding : {{ gridItemCheckedStyle.padding }};">
<image
style="width : {{ gridItemCheckedStyle.width }};
height : {{ gridItemCheckedStyle.height }};"
if="{{ item.icon }}"
src="{{ item.icon }}">
</image>
</div>
</div>
</div>
</stack>
</div>
</div>
<text class="list-title" if="{{ showListTitle }}">{{ listTitle }}</text>
<div class="list-content" if="{{ listSource && listSource.length > 0 }}">
<div for="{{ (index, item) in listSource }}"
onlongpress="parentLongpress({{ item }},{{ index }})"
onclick="photoClick({{ item }},{{ index }})">
<div class="list-content-layout" style="height : {{ listItemStyle.height }};">
<div style="align-items : center;">
<image class="list-content-img img"
src="{{ item.src }}"></image>
<div class="text-content">
<text class="list-text"> {{ item.name }} </text>
<text class="number-text" if="{{ item.showNumber }}">{{ item.list.length }}</text>
</div>
</div>
<div class="select-img-layout">
<image class="select-img" if="{{ item.icon }}" src="{{ item.icon }}"></image>
<text style="color : black;" else> {{ item.list.length }} </text>
</div>
</div>
</div>
</div>
</div>

View File

@ -0,0 +1,133 @@
/*
* Copyright (c) 2021 Huawei Device Co., Ltd.
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
import device from '@system.device';
import app from '@system.app';
export default {
data: {
headTitle: '',
gridData: [],
showHead: false,
gridItemStyle: {
width: '332px',
padding: '8px',
height: '380px',
radius: '32px'
},
gridImageStyle: {},
gridItemCheckedStyle: {
height: '',
width: '',
padding: ''
},
listItemStyle: {
height: '160px',
},
longPressFlag: true,
listTitle: '',
listData: [],
showListTitle: false,
selectMode: false,
touchStartTime: 0,
touchEndTime: 0,
headSource: null
},
computed: {
gridSource() {
for (let index = 0; index < this.gridData.length; index++) {
let item = this.gridData[index];
if (this.selectMode) {
item.icon = this.$app.$def.utils.getIcon('unselected');
} else {
item.icon = this.$app.$def.utils.getIcon(item.kind);
}
}
return this.gridData;
},
listSource() {
for (let index = 0; index < this.listData.length; index++) {
let item = this.listData[index];
if (this.selectMode) {
item.icon = this.$app.$def.utils.getIcon('unselected_black');
}
}
return this.listData;
},
},
onInit() {
setTimeout(() => {
this.gridImageStyle = Object.assign({}, this.gridItemStyle);
}, 50);
},
initData() {
},
onShow() {
},
photoClick(item, index, type) {
let self = this;
let obj = {
item: item,
index: index
};
if (self.selectMode && item.type !== 'system') {
item.checked = !item.checked;
if (item.checked) {
item.icon = self.$app.$def.utils.getIcon('selected');
} else if (type === 'grid') {
item.icon = self.$app.$def.utils.getIcon('unselected');
} else {
item.icon = self.$app.$def.utils.getIcon('unselected_black');
}
self.$emit('onCheckedChange', obj);
}
if (!self.selectMode) {
self.$emit('onClick', obj);
}
},
parentLongpress(item, index, type) {
let self = this;
if (!self.longPressFlag) {
return false;
}
// 宫格数据
for (let index = 0; index < self.gridData.length; index++) {
let item = self.gridData[index];
item.icon = self.$app.$def.utils.getIcon('unselected');
}
// 垂直列表数据
for (let index = 0; index < self.listData.length; index++) {
let obj = self.listData[index];
obj.icon = self.$app.$def.utils.getIcon('unselected_black');
}
self.headSource.icon = self.$app.$def.utils.getIcon('unselected');
self.$emit('longPress', item);
self.photoClick(item, index, type);
},
getSelectMode() {
return this.selectMode;
}
};

View File

@ -0,0 +1,52 @@
/*
* Copyright (c) 2021 Huawei Device Co., Ltd.
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
.top-bar {
display: flex;
align-items: center;
width: 100%;
height: 112px;
padding: 0 24px;
}
.top-bar-left {
flex: 1;
align-items: center;
justify-content: flex-start;
}
.top-bar-right {
flex: 1;
align-items: center;
justify-content: flex-end;
}
.left-img {
width: 48px;
height: 48px;
}
.right-img {
width: 48px;
height: 48px;
}
.text {
font-size: 30px;
margin-left: 15px;
color: #000;
max-lines: 1;
text-overflow: ellipsis;
}

View File

@ -0,0 +1,26 @@
<!--
/*
* Copyright (c) 2021 Huawei Device Co., Ltd.
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-->
<div class="top-bar">
<div class="top-bar-left" show="{{ dataSource.isShowLeft }}" onclick="leftClick">
<image class="left-img" src="{{ dataSource.leftSrc }}"></image>
<text class="text" onclick="leftClick">{{ dataSource.title }}</text>
</div>
<div class="top-bar-right" show="{{ dataSource.isShowRight }}" onclick="rightClick">
<image class="right-img" src="{{ dataSource.rightSrc }}"></image>
</div>
</div>

View File

@ -0,0 +1,41 @@
/*
* Copyright (c) 2021 Huawei Device Co., Ltd.
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
import prompt from '@system.prompt';
import brightness from '@system.brightness';
export default {
data: {
dataSource: {
title: '',
leftSrc: '/common/image/svg/close.svg',
rightSrc: '/common/image/svg/add.svg',
isShowLeft: true,
isShowRight: true
}
},
leftClick() {
this.$emit('leftClick');
},
rightClick() {
this.$emit('rightClick');
},
setFormData(formData) {
this.formData = formData;
},
setRight(flag) {
this.dataSource.isShowRight = flag;
}
};

View File

@ -0,0 +1,78 @@
/*
* Copyright (c) 2021 Huawei Device Co., Ltd.
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
.single-line-text {
max-lines: 1;
text-overflow: ellipsis;
}
.load-div {
height: 100%;
width: 100%;
flex-direction: column;
display: flex;
justify-content: center;
align-items: center;
}
.load-div-img {
width: 288px;
height: 288px;
}
.load-div-text1 {
font-size: 36px;
opacity: .9;
padding: 28px;
}
.load-div-text2 {
font-size: 28px;
opacity: .9;
padding: 28px;
}
@keyframes shared-transition {
from {
opacity: 0;
transform: scale(0);
}
to {
opacity: 1;
transform: scale(1);
}
}
@keyframes transition-enter {
from {
opacity: 0;
}
to {
opacity: 1;
}
}
@keyframes transition-exit {
from {
opacity: 1;
}
to {
opacity: 0;
}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 849 B

View File

@ -0,0 +1,18 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg viewBox="0 0 24 24" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<title>ic/gallery/public/about</title>
<defs>
<path d="M12,1 C18.0751322,1 23,5.92486775 23,12 C23,18.0751322 18.0751322,23 12,23 C5.92486775,23 1,18.0751322 1,12 C1,5.92486775 5.92486775,1 12,1 Z M12,2.5 C6.75329488,2.5 2.5,6.75329488 2.5,12 C2.5,17.2467051 6.75329488,21.5 12,21.5 C17.2467051,21.5 21.5,17.2467051 21.5,12 C21.5,6.75329488 17.2467051,2.5 12,2.5 Z M12,9.75 C12.4142136,9.75 12.75,10.0857864 12.75,10.5 L12.75,17.25 C12.75,17.6642136 12.4142136,18 12,18 C11.5857864,18 11.25,17.6642136 11.25,17.25 L11.25,10.5 C11.25,10.0857864 11.5857864,9.75 12,9.75 Z M12,6 C12.6903125,6 13.25,6.5596875 13.25,7.25 C13.25,7.9403125 12.6903125,8.5 12,8.5 C11.3096875,8.5 10.75,7.9403125 10.75,7.25 C10.75,6.5596875 11.3096875,6 12,6 Z" id="path-1"></path>
</defs>
<g id="ic/gallery/public/about" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
<mask id="mask-2" fill="white">
<use xlink:href="#path-1"></use>
</mask>
<use id="合并形状" fill="#000000" fill-rule="nonzero" xlink:href="#path-1"></use>
<g id="编组" mask="url(#mask-2)" fill="#FFFFFF" fill-opacity="0.1">
<g id="矩形">
<rect x="0" y="0" width="24" height="24"></rect>
</g>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 1.4 KiB

View File

@ -0,0 +1,18 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg viewBox="0 0 24 24" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<title>ic/gallery/public/increase</title>
<defs>
<path d="M12,2 C12.4142136,2 12.75,2.33578644 12.75,2.75 L12.75,11.25 L21.25,11.25 C21.6642136,11.25 22,11.5857864 22,12 C22,12.4142136 21.6642136,12.75 21.25,12.75 L12.75,12.75 L12.75,21.25 C12.75,21.6642136 12.4142136,22 12,22 C11.5857864,22 11.25,21.6642136 11.25,21.25 L11.25,12.75 L2.75,12.75 C2.33578644,12.75 2,12.4142136 2,12 C2,11.5857864 2.33578644,11.25 2.75,11.25 L11.25,11.25 L11.25,2.75 C11.25,2.33578644 11.5857864,2 12,2 Z" id="path-1"></path>
</defs>
<g id="ic/gallery/public/increase" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
<mask id="mask-2" fill="white">
<use xlink:href="#path-1"></use>
</mask>
<use id="合并形状" fill="#000000" fill-rule="nonzero" xlink:href="#path-1"></use>
<g id="编组" mask="url(#mask-2)" fill-opacity="0.1">
<g transform="translate(0.198020, 0.000000)" id="colour/white/90">
<rect id="矩形" fill="#FFFFFF" x="0" y="0" width="23.6039604" height="24"></rect>
</g>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 1.2 KiB

View File

@ -0,0 +1,18 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg width="24px" height="36px" viewBox="0 0 12 24" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<title>ic/gallery/public/ arrow</title>
<defs>
<path d="M9.99233033,11.49238 C10.0856576,11.5389681 10.0534155,11.498226 9.99233033,11.49238 C10.0101761,11.4549844 10.0036777,11.4512352 9.99233033,11.49238 L3.99233033,5.49237995 C3.72821397,5.16920668 3.25408004,5.16920668 2.99233033,5.49237995 C2.66922322,5.75459286 2.66922322,6.22975047 2.99233033,6.49237995 L8.49233033,11.99238 L2.99233033,17.49238 C2.6697231,17.7560092 2.6697231,18.230417 2.99233033,18.49238 C3.25333023,18.8155532 3.72746415,18.8155532 3.99233033,18.49238 L9.99233033,12.49238 C9.95543947,12.5915135 9.99068084,12.5640188 9.99233033,12.49238 C10.2816096,12.2733253 10.3111024,11.873653 9.99233033,11.49238" id="path-1"></path>
</defs>
<g id="ic/gallery/public/-arrow" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
<mask id="mask-2" fill="white">
<use xlink:href="#path-1"></use>
</mask>
<use id="Fill-1" fill="#000000" xlink:href="#path-1"></use>
<g id="编组" mask="url(#mask-2)" fill="#FFFFFF" fill-opacity="0.4">
<g id="矩形">
<rect x="0" y="0" width="24" height="24"></rect>
</g>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 1.4 KiB

View File

@ -0,0 +1,18 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg viewBox="0 0 24 24" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<title>ic/gallery/public/back</title>
<defs>
<path d="M12.5303301,2.21966991 C12.8232233,2.51256313 12.8232233,2.98743687 12.5303301,3.28033009 L4.559,11.25 L21.25,11.25 C21.6642136,11.25 22,11.5857864 22,12 C22,12.4142136 21.6642136,12.75 21.25,12.75 L4.561,12.75 L12.5303301,20.7196699 C12.8232233,21.0125631 12.8232233,21.4874369 12.5303301,21.7803301 C12.2374369,22.0732233 11.7625631,22.0732233 11.4696699,21.7803301 L2.21966991,12.5303301 C1.9267767,12.2374369 1.9267767,11.7625631 2.21966991,11.4696699 L11.4696699,2.21966991 C11.7625631,1.9267767 12.2374369,1.9267767 12.5303301,2.21966991 Z" id="path-1"></path>
</defs>
<g id="ic/gallery/public/back" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
<mask id="mask-2" fill="white">
<use xlink:href="#path-1"></use>
</mask>
<use id="合并形状" fill="#000000" fill-rule="nonzero" xlink:href="#path-1"></use>
<g id="编组" mask="url(#mask-2)" fill="#FFFFFF" fill-opacity="0.1">
<g id="矩形">
<rect x="0" y="0" width="24" height="24"></rect>
</g>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 1.3 KiB

View File

@ -0,0 +1,18 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg viewBox="0 0 24 24" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<title>ic/gallery/public/camera</title>
<defs>
<path d="M15.1506035,3.50285034 C15.8062468,3.50285034 16.420304,3.82402296 16.7942803,4.36254875 L17.9343688,6.00427615 L20.0327871,6.00427615 C21.6905863,6.00427615 23.034498,7.34818792 23.034498,9.00598711 L23.034498,18.01112 C23.034498,19.6689192 21.6905863,21.012831 20.0327871,21.012831 L4.02366191,21.012831 C2.36586272,21.012831 1.02195095,19.6689192 1.02195095,18.01112 L1.02195095,9.00598711 C1.02195095,7.34818792 2.36586272,6.00427615 4.02366191,6.00427615 L6.12208023,6.00427615 L7.2621687,4.36254875 C7.63614494,3.82402296 8.25020214,3.50285034 8.90584552,3.50285034 L15.1506035,3.50285034 Z M15.1506035,5.00370582 L8.90584552,5.00370582 C8.74193468,5.00370582 8.58842038,5.08399898 8.49492632,5.21863042 L6.90707826,7.50513163 L4.02366191,7.50513163 C3.19476232,7.50513163 2.52280643,8.17708752 2.52280643,9.00598711 L2.52280643,18.01112 C2.52280643,18.8400196 3.19476232,19.5119755 4.02366191,19.5119755 L20.0327871,19.5119755 C20.8616867,19.5119755 21.5336426,18.8400196 21.5336426,18.01112 L21.5336426,9.00598711 C21.5336426,8.17708752 20.8616867,7.50513163 20.0327871,7.50513163 L17.1493707,7.50513163 L15.5615227,5.21863042 C15.4680286,5.08399898 15.3145143,5.00370582 15.1506035,5.00370582 Z M12.0282245,8.25555937 C14.6530732,8.25555937 16.7809335,10.3834197 16.7809335,13.0082684 C16.7809335,15.6331171 14.6530732,17.7609774 12.0282245,17.7609774 C9.40337577,17.7609774 7.27551546,15.6331171 7.27551546,13.0082684 C7.27551546,10.3834197 9.40337577,8.25555937 12.0282245,8.25555937 Z M12.0282245,9.75641485 C10.2322754,9.75641485 8.77637094,11.2123193 8.77637094,13.0082684 C8.77637094,14.8042175 10.2322754,16.260122 12.0282245,16.260122 C13.8241736,16.260122 15.280078,14.8042175 15.280078,13.0082684 C15.280078,11.2123193 13.8241736,9.75641485 12.0282245,9.75641485 Z" id="path-1"></path>
</defs>
<g id="ic/gallery/public/camera" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
<mask id="mask-2" fill="white">
<use xlink:href="#path-1"></use>
</mask>
<use id="合并形状" fill="#000000" xlink:href="#path-1"></use>
<g id="编组" mask="url(#mask-2)" fill="#FFFFFF" fill-opacity="0.1">
<g id="矩形">
<rect x="0" y="0" width="24" height="24"></rect>
</g>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 2.5 KiB

View File

@ -0,0 +1,10 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg viewBox="0 0 24 24" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<title>ic/gallery/public/cancel_bg</title>
<g id="ic/gallery/public/cancel_bg" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
<g id="Group" transform="translate(2.000000, 2.000000)">
<circle id="Oval-31" fill-opacity="0.3" fill="#000000" cx="10" cy="10" r="10"></circle>
<path d="M5.29175,5.2915 C5.68075,4.90283333 6.31708333,4.90283333 6.70608333,5.2915 L6.70608333,5.2915 L10,8.585 L13.2940833,5.2915 C13.6830833,4.90283333 14.3194167,4.90283333 14.7084167,5.2915 C15.0974167,5.6805 15.0974167,6.31683333 14.7084167,6.70583333 L11.414,10 L14.7084167,13.2941667 C15.0674936,13.6529359 15.0951149,14.2230187 14.7912806,14.6142978 L14.7084167,14.7081667 L14.6144821,14.7910306 C14.2229827,15.0948649 13.6531603,15.0672436 13.2940833,14.7081667 L13.2940833,14.7081667 L10,11.414 L6.70608333,14.7081667 C6.34700641,15.0672436 5.77718393,15.0948649 5.38568461,14.7910306 L5.29175,14.7081667 C4.90275,14.3195 4.90275,13.6828333 5.29175,13.2941667 L8.586,10 L5.29175,6.70583333 C4.93267308,6.34675641 4.90505178,5.77693393 5.20888609,5.38543461 Z" id="Fill-4" fill="#FFFFFF"></path>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 1.3 KiB

View File

@ -0,0 +1,14 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg viewBox="0 0 24 24" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<title>ic/gallery/public/checkbox_filled</title>
<defs>
<path d="M2,5.99922997 C2,3.79051625 3.79246765,2 5.99922997,2 L18.00077,2 C20.2094838,2 22,3.79246765 22,5.99922997 L22,18.00077 C22,20.2094838 20.2075324,22 18.00077,22 L5.99922997,22 C3.79051625,22 2,20.2075324 2,18.00077 L2,5.99922997 Z" id="path-1"></path>
</defs>
<g id="ic/gallery/public/checkbox_filled" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
<mask id="mask-2" fill="white">
<use xlink:href="#path-1"></use>
</mask>
<use id="Rectangle-2375-Copy" fill="#007DFF" xlink:href="#path-1"></use>
<path d="M14.3959787,4.87585883 C14.9482635,4.87585883 15.3959787,5.33080574 15.3959787,5.87422128 L15.3959787,15.1258588 C15.3959787,15.5597968 15.125654,15.9291792 14.7357194,16.0675602 L14.6264819,16.0994914 C14.5895326,16.1081141 14.5517688,16.1147059 14.5133113,16.1191421 L14.3959787,16.1258588 L14.3779787,16.1248588 L9.39890806,16.1258588 C8.84500549,16.1258588 8.39597873,15.681994 8.39597873,15.1258588 C8.39597873,14.5735741 8.83386008,14.1258588 9.39890806,14.1258588 L13.3949787,14.1248588 L13.3959787,5.87422128 C13.3959787,5.36222524 13.7786989,4.94024606 14.2786462,4.88257555 L14.3959787,4.87585883 Z" id="Rectangle-62" fill="#FFFFFF" transform="translate(11.895979, 10.500859) rotate(43.000000) translate(-11.895979, -10.500859) "></path>
</g>
</svg>

After

Width:  |  Height:  |  Size: 1.5 KiB

View File

@ -0,0 +1,18 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg viewBox="0 0 24 24" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<title>ic/gallery/public/checkbox2</title>
<defs>
<path d="M18.00077,2 C20.2094838,2 22,3.79246765 22,5.99922997 L22,18.00077 C22,20.2094838 20.2075324,22 18.00077,22 L5.99922997,22 C3.79051625,22 2,20.2075324 2,18.00077 L2,5.99922997 C2,3.79051625 3.79246765,2 5.99922997,2 L18.00077,2 Z M18.00077,3 L5.99922997,3 C4.40311826,3 3.09639718,4.24929602 3.00509582,5.82307706 L3,5.99922997 L3,18.00077 C3,19.5968817 4.24929602,20.9036028 5.82307706,20.9949042 L5.99922997,21 L18.00077,21 C19.5968817,21 20.9036028,19.750704 20.9949042,18.1769229 L21,18.00077 L21,5.99922997 C21,4.40311826 19.750704,3.09639718 18.1769229,3.00509582 L18.00077,3 Z" id="path-1"></path>
</defs>
<g id="ic/gallery/public/checkbox2" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
<mask id="mask-2" fill="white">
<use xlink:href="#path-1"></use>
</mask>
<use id="Rectangle-210-Copy-6" fill="#ffffff" fill-rule="nonzero" xlink:href="#path-1"></use>
<g id="编组" mask="url(#mask-2)" fill-opacity="0">
<g transform="translate(0.000000, 0.000000)">
<rect id="矩形" fill="#FFFFFF" x="-2.27373675e-13" y="0" width="24" height="24"></rect>
</g>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 1.4 KiB

View File

@ -0,0 +1,18 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg viewBox="0 0 24 24" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<title>ic/gallery/public/cancel</title>
<defs>
<path d="M11.25,11.25 L11.25,2.75 C11.25,2.33578644 11.5857864,2 12,2 C12.4142136,2 12.75,2.33578644 12.75,2.75 L12.75,11.25 L21.25,11.25 C21.6642136,11.25 22,11.5857864 22,12 C22,12.4142136 21.6642136,12.75 21.25,12.75 L12.75,12.75 L12.75,21.25 C12.75,21.6642136 12.4142136,22 12,22 C11.5857864,22 11.25,21.6642136 11.25,21.25 L11.25,12.75 L2.75,12.75 C2.33578644,12.75 2,12.4142136 2,12 C2,11.5857864 2.33578644,11.25 2.75,11.25 L11.25,11.25 Z" id="path-1"></path>
</defs>
<g id="ic/gallery/public/cancel" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
<mask id="mask-2" fill="white">
<use xlink:href="#path-1"></use>
</mask>
<use id="路径" fill="#000000" fill-rule="nonzero" transform="translate(12.000000, 12.000000) rotate(45.000000) translate(-12.000000, -12.000000) " xlink:href="#path-1"></use>
<g id="编组" mask="url(#mask-2)" fill="#FFFFFF" fill-opacity="0.1">
<g id="矩形">
<rect x="0" y="0" width="24" height="24"></rect>
</g>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 1.3 KiB

View File

@ -0,0 +1,18 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg viewBox="0 0 24 24" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<title>ic/gallery/public/show all folder</title>
<defs>
<path d="M8.5,6 L10.6773685,8 L17,8 C18.6568542,8 20,9.34314575 20,11 L20,18 C20,19.6568542 18.6568542,21 17,21 L4,21 C2.34314575,21 1,19.6568542 1,18 L1,9 C1,7.34314575 2.34314575,6 4,6 L8.5,6 Z M7.916,7.5 L4,7.5 C3.22030388,7.5 2.57955132,8.09488808 2.50686658,8.85553999 L2.5,9 L2.5,18 C2.5,18.7796961 3.09488808,19.4204487 3.85553999,19.4931334 L4,19.5 L17,19.5 C17.7796961,19.5 18.4204487,18.9051119 18.4931334,18.14446 L18.5,18 L18.5,11 C18.5,10.2203039 17.9051119,9.57955132 17.14446,9.50686658 L17,9.5 L10.0930146,9.5 L7.916,7.5 Z M11.5,3 L13.6773685,5 L20,5 C21.6568542,5 23,6.34314575 23,8 L23,15 C23,16.1105424 22.3965729,17.0801468 21.499712,17.59882 L21.5,8 C21.5,7.22030388 20.9051119,6.57955132 20.14446,6.50686658 L20,6.5 L13.0930146,6.5 L10.916,4.5 L4.40118003,4.50028797 C4.91985316,3.60342711 5.8894576,3 7,3 L11.5,3 Z" id="path-1"></path>
</defs>
<g id="ic/gallery/public/show-all-folder" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
<mask id="mask-2" fill="white">
<use xlink:href="#path-1"></use>
</mask>
<use id="形状结合" fill="#000000" fill-rule="nonzero" xlink:href="#path-1"></use>
<g id="编组" mask="url(#mask-2)" fill="#FFFFFF" fill-opacity="0.1">
<g id="矩形">
<rect x="0" y="0" width="24" height="24"></rect>
</g>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 1.6 KiB

View File

@ -0,0 +1,18 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg viewBox="0 0 24 24" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<title>ic/gallery/public/delete</title>
<defs>
<path d="M14.6484366,1 C15.6149349,1 16.3984366,1.78350169 16.3984366,2.75 L16.3984366,4 L22.25,4 C22.6642136,4 23,4.33578644 23,4.75 C23,5.16421356 22.6642136,5.5 22.25,5.5 L21.187,5.5 L19.8915558,20.2622663 C19.7555963,21.8115191 18.4582488,23 16.9030417,23 L7.09695829,23 C5.54175115,23 4.24440366,21.8115191 4.10844421,20.2622663 L2.812,5.5 L1.75,5.5 C1.33578644,5.5 1,5.16421356 1,4.75 C1,4.33578644 1.33578644,4 1.75,4 L7.83018705,4 L7.83018705,2.75 C7.83018705,1.78350169 8.61368874,1 9.58018705,1 L14.6484366,1 Z M14.6484366,2.5 L9.58018705,2.5 C9.44211586,2.5 9.33018705,2.61192881 9.33018705,2.75 L9.33018705,4.75 C9.33018705,5.16421356 8.99440061,5.5 8.58018705,5.5 L4.319,5.5 L5.60270125,20.1311331 C5.67068098,20.9057595 6.31935472,21.5 7.09695829,21.5 L16.9030417,21.5 C17.6806453,21.5 18.329319,20.9057595 18.3972988,20.1311331 L19.68,5.5 L15.6484366,5.5 C15.2342231,5.5 14.8984366,5.16421356 14.8984366,4.75 L14.8984366,2.75 C14.8984366,2.61192881 14.7865078,2.5 14.6484366,2.5 Z M14.25,7.5 C14.6642136,7.5 15,7.83578644 15,8.25 L15,18 C15,18.4142136 14.6642136,18.75 14.25,18.75 C13.8357864,18.75 13.5,18.4142136 13.5,18 L13.5,8.25 C13.5,7.83578644 13.8357864,7.5 14.25,7.5 Z M9.75,7.5 C10.1642136,7.5 10.5,7.83578644 10.5,8.25 L10.5,18 C10.5,18.4142136 10.1642136,18.75 9.75,18.75 C9.33578644,18.75 9,18.4142136 9,18 L9,8.25 C9,7.83578644 9.33578644,7.5 9.75,7.5 Z" id="path-1"></path>
</defs>
<g id="ic/gallery/public/delete" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
<mask id="mask-2" fill="white">
<use xlink:href="#path-1"></use>
</mask>
<use id="Combined-Shape" fill="#000000" fill-rule="nonzero" xlink:href="#path-1"></use>
<g id="编组" mask="url(#mask-2)" fill="#FFFFFF" fill-opacity="0.1">
<g id="矩形">
<rect x="0" y="0" width="24" height="24"></rect>
</g>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 2.1 KiB

View File

@ -0,0 +1,18 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg viewBox="0 0 24 24" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<title>ic/gallery/public/delete_filled</title>
<defs>
<path d="M20.6383702,5.79268557 L19.3983918,21.1608471 C19.3145746,22.1996696 18.4470688,23 17.4048703,23 L6.59854694,23 C5.55493075,23 4.68674458,22.1975586 4.60473209,21.1571698 L3.39356975,5.79268557 L20.6383702,5.79268557 Z M14.25,9 C13.8357864,9 13.5,9.33578644 13.5,9.75 L13.5,9.75 L13.5,18.75 C13.5,19.1642136 13.8357864,19.5 14.25,19.5 C14.6642136,19.5 15,19.1642136 15,18.75 L15,18.75 L15,9.75 C15,9.33578644 14.6642136,9 14.25,9 Z M9.75,9 C9.33578644,9 9,9.33578644 9,9.75 L9,9.75 L9,18.75 C9,19.1642136 9.33578644,19.5 9.75,19.5 C10.1642136,19.5 10.5,19.1642136 10.5,18.75 L10.5,18.75 L10.5,9.75 C10.5,9.33578644 10.1642136,9 9.75,9 Z M14.8875915,1 C15.3464591,1 15.7464423,1.31229737 15.857734,1.75746437 L16.1683679,3 L22.125,3 C22.6082492,3 23,3.39175084 23,3.875 C23,4.35824916 22.6082492,4.75 22.125,4.75 L1.875,4.75 C1.39175084,4.75 1,4.35824916 1,3.875 C1,3.39175084 1.39175084,3 1.875,3 L8.13675777,3 L8.44739167,1.75746437 C8.55868342,1.31229737 8.95866653,1 9.41753417,1 L14.8875915,1 Z" id="path-1"></path>
</defs>
<g id="ic/gallery/public/delete_filled" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
<mask id="mask-2" fill="white">
<use xlink:href="#path-1"></use>
</mask>
<use id="Combined-Shape" fill="#000000" fill-rule="nonzero" xlink:href="#path-1"></use>
<g id="编组" mask="url(#mask-2)" fill="#FFFFFF" fill-opacity="0.1">
<g id="矩形">
<rect x="0" y="0" width="24" height="24"></rect>
</g>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 1.7 KiB

View File

@ -0,0 +1,25 @@
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg t="1612337662290"
class="icon"
viewBox="0 0 1024 1024"
version="1.1"
xmlns="http://www.w3.org/2000/svg"
p-id="3510"
xmlns:xlink="http://www.w3.org/1999/xlink"
>
<defs>
<style type="text/css"></style>
</defs>
<path
d="M768 448a320 320 0 1 0-320 320 320 320 0 0 0 320-320z m64 0A384 384 0 1 1 448 64a384 384 0 0 1 384 384z"
p-id="3511"
fill="#ffffff"></path>
<path
d="M681.28 726.72a32 32 0 0 1 45.44-45.44l160 160a32 32 0 0 1-45.44 45.44zM320 480a32 32 0 0 1 0-64h256a32 32 0 0 1 0 64z"
p-id="3512"
fill="#ffffff"></path>
<path
d="M480 576a32 32 0 0 1-64 0V320a32 32 0 0 1 64 0z"
p-id="3513"
fill="#ffffff"></path>
</svg>

After

Width:  |  Height:  |  Size: 891 B

View File

@ -0,0 +1,18 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg viewBox="0 0 24 24" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<title>ic/gallery/public/Favorite</title>
<defs>
<path d="M7.35836536,2.50181467 C9.15143227,2.48453983 10.8155872,3.2160273 12.0118702,4.45236006 C13.3652411,3.0980467 15.3414829,2.31631154 17.327771,2.54426435 C20.2118742,2.87555191 22.547104,5.17350758 22.9391249,8.06853824 C23.1029061,9.2773556 22.9335795,10.4708339 22.4628565,11.5515567 C21.8646016,12.9245041 20.3466151,15.1908788 18.3691645,17.1050798 L17.7914539,17.6587626 L17.1715939,18.2421886 C16.4650951,18.9017166 15.7217716,19.5785791 14.9693398,20.2511676 L13.706191,21.3691331 L12.6771787,22.2616112 C12.3034399,22.5824043 11.7560722,22.5813715 11.3835091,22.2591703 L10.1615451,21.1894202 C9.96127492,21.0121267 9.75200303,20.8260529 9.53500642,20.6321926 C8.54263435,19.7456278 7.55010281,18.8407803 6.59893759,17.9498568 L5.76590027,17.1628717 C3.65339449,15.1489419 2.09678325,12.8881543 1.52164132,11.5506676 C1.20083801,10.8027821 1.02450754,9.98703375 1.00223618,9.14658595 C0.908051997,5.56358323 3.80129507,2.53544045 7.35836536,2.50181467 Z M7.37254456,4.00174765 C4.65796728,4.02740916 2.42945174,6.35797158 2.5017098,9.10685081 C2.51898586,9.75879244 2.6547939,10.3873054 2.89963661,10.9581063 C3.43693721,12.2075933 4.85769348,14.161869 6.53347521,15.8175926 L6.92737393,16.1975459 C8.03000761,17.2455902 9.24730884,18.3637557 10.5343551,19.5135764 L11.3401352,20.2292282 L12.032,20.837 L12.8902246,20.0895147 L13.2218073,19.797356 C14.0919701,19.0286582 14.9227743,18.2795737 15.6931812,17.5680031 L16.4584335,16.8547459 L16.7586251,16.5709829 C16.9549269,16.3845977 17.1440497,16.2033467 17.3258806,16.0273235 C18.990403,14.4160415 20.4875196,12.3298032 21.0876443,10.952565 C21.4519406,10.1161849 21.5785718,9.19890627 21.4526908,8.26981872 C21.1526055,6.05372187 19.3581539,4.28735119 17.1567487,4.03448292 C15.6898092,3.86613222 14.1510816,4.43371807 13.0728994,5.51265101 C12.4803441,6.10561893 11.5168173,6.09785556 10.9338937,5.49541651 C10.0594605,4.5917086 8.88120746,4.0582251 7.62502473,4.0057861 L7.37254456,4.00174765 Z" id="path-1"></path>
</defs>
<g id="ic/gallery/public/Favorite" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
<mask id="mask-2" fill="white">
<use xlink:href="#path-1"></use>
</mask>
<use id="路径" fill="#000000" fill-rule="nonzero" xlink:href="#path-1"></use>
<g id="编组" mask="url(#mask-2)" fill="#FFFFFF" fill-opacity="0.1">
<g id="矩形">
<rect x="0" y="0" width="24" height="24"></rect>
</g>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 2.7 KiB

View File

@ -0,0 +1,19 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg viewBox="0 0 24 24" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<title>ic/gallery/public/Favorite_filled</title>
<defs>
<path d="M17.7914539,17.6587626 C17.5904759,17.8495879 17.383704,18.0441803 17.1715939,18.2421886 C16.2295954,19.1215593 15.222131,20.0317467 14.2148985,20.9215312 C13.8625288,21.2328129 13.5352411,21.5194137 13.2413199,21.7748533 C13.138256,21.8644235 13.0466569,21.9437587 12.9675598,22.0120469 C12.919778,22.0532992 12.8865798,22.0818749 12.8690031,22.0969616 L12.6771787,22.2616112 C12.3034399,22.5824043 11.7560722,22.5813715 11.3835091,22.2591703 L11.1923151,22.0938213 C11.1707487,22.0751702 11.1299305,22.0397568 11.0711401,21.9885778 C10.973765,21.9038094 10.8609832,21.8052736 10.7340736,21.6939661 C10.372094,21.3764876 9.96899964,21.0199132 9.53500642,20.6321926 C8.29454133,19.5239866 7.05382708,18.3872139 5.8939687,17.284778 C5.8511147,17.2440456 5.8084318,17.2034166 5.76590027,17.1628717 C3.65339449,15.1489419 2.09678325,12.8881543 1.52164132,11.5506676 C1.20083801,10.8027821 1.02450754,9.98703375 1.00223618,9.14658595 C0.908051997,5.56358323 3.80129507,2.53544045 7.35836536,2.50181467 C9.15143227,2.48453983 10.8155872,3.2160273 12.0118702,4.45236006 C13.3652411,3.0980467 15.3414829,2.31631154 17.327771,2.54426435 C20.2118742,2.87555191 22.547104,5.17350758 22.9391249,8.06853824 C23.1029061,9.2773556 22.9335795,10.4708339 22.4628565,11.5515567 C21.8646016,12.9245041 20.3466151,15.1908788 18.3691645,17.1050798 C18.1828583,17.2854354 17.9901614,17.4700931 17.7914539,17.6587626 Z" id="path-1"></path>
</defs>
<g id="ic/gallery/public/Favorite_filled" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
<rect id="矩形" fill-opacity="0" fill="#000000" x="0" y="0" width="24" height="24"></rect>
<mask id="mask-2" fill="white">
<use xlink:href="#path-1"></use>
</mask>
<use id="路径" fill="#000000" fill-rule="nonzero" xlink:href="#path-1"></use>
<g id="编组" mask="url(#mask-2)" fill="#FFFFFF" fill-opacity="0.1">
<g id="矩形">
<rect x="0" y="0" width="24" height="24"></rect>
</g>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 2.2 KiB

View File

@ -0,0 +1,19 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg viewBox="0 0 24 24" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<title>ic/gallery/public/Favorite_filled</title>
<defs>
<path d="M17.7914539,17.6587626 C17.5904759,17.8495879 17.383704,18.0441803 17.1715939,18.2421886 C16.2295954,19.1215593 15.222131,20.0317467 14.2148985,20.9215312 C13.8625288,21.2328129 13.5352411,21.5194137 13.2413199,21.7748533 C13.138256,21.8644235 13.0466569,21.9437587 12.9675598,22.0120469 C12.919778,22.0532992 12.8865798,22.0818749 12.8690031,22.0969616 L12.6771787,22.2616112 C12.3034399,22.5824043 11.7560722,22.5813715 11.3835091,22.2591703 L11.1923151,22.0938213 C11.1707487,22.0751702 11.1299305,22.0397568 11.0711401,21.9885778 C10.973765,21.9038094 10.8609832,21.8052736 10.7340736,21.6939661 C10.372094,21.3764876 9.96899964,21.0199132 9.53500642,20.6321926 C8.29454133,19.5239866 7.05382708,18.3872139 5.8939687,17.284778 C5.8511147,17.2440456 5.8084318,17.2034166 5.76590027,17.1628717 C3.65339449,15.1489419 2.09678325,12.8881543 1.52164132,11.5506676 C1.20083801,10.8027821 1.02450754,9.98703375 1.00223618,9.14658595 C0.908051997,5.56358323 3.80129507,2.53544045 7.35836536,2.50181467 C9.15143227,2.48453983 10.8155872,3.2160273 12.0118702,4.45236006 C13.3652411,3.0980467 15.3414829,2.31631154 17.327771,2.54426435 C20.2118742,2.87555191 22.547104,5.17350758 22.9391249,8.06853824 C23.1029061,9.2773556 22.9335795,10.4708339 22.4628565,11.5515567 C21.8646016,12.9245041 20.3466151,15.1908788 18.3691645,17.1050798 C18.1828583,17.2854354 17.9901614,17.4700931 17.7914539,17.6587626 Z" id="path-1"></path>
</defs>
<g id="ic/gallery/public/Favorite_filled" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
<rect id="矩形" fill-opacity="0" fill="#000000" x="0" y="0" width="24" height="24"></rect>
<mask id="mask-2" fill="white">
<use xlink:href="#path-1"></use>
</mask>
<use id="路径" fill="#ffffff" fill-rule="nonzero" xlink:href="#path-1"></use>
<g id="编组" mask="url(#mask-2)" fill="#FFFFFF" fill-opacity="0">
<g id="矩形">
<rect x="0" y="0" width="24" height="24"></rect>
</g>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 2.2 KiB

View File

@ -0,0 +1,32 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg viewBox="0 0 24 24"
version="1.1"
xmlns="http://www.w3.org/2000/svg"
xmlns:xlink="http://www.w3.org/1999/xlink">
<title>ic/gallery/public/fullscreen</title>
<g
id="ic/gallery/public/fullscreen"
stroke="none"
stroke-width="1"
fill="none"
fill-rule="evenodd">
<g id="ic_tskm_fullscreen">
<path
d="M2,5.99922997 C2,3.79051625 3.79246765,2 5.99922997,2 L18.00077,2 C20.2094838,2 22,3.79246765 22,5.99922997 L22,18.00077 C22,20.2094838 20.2075324,22 18.00077,22 L5.99922997,22 C3.79051625,22 2,20.2075324 2,18.00077 L2,5.99922997 Z"
id="Rectangle-210-Copy-6"
fill-opacity="0.1"
fill="#ffffff"></path>
<path
d="M11.75,6.50735294 C11.75,6.21920821 11.5307918,6 11.2426471,6 L6.75,6 C6.33578644,6 6,6.33578644 6,6.75 L6,11.2426471 L6,11.2426471 C6,11.5307918 6.21920821,11.75 6.50735294,11.75 C6.79252199,11.75 7.01173021,11.5307918 7.01470588,11.2426471 L7.01470588,7.69117647 L10.9044118,11.5808824 C11.0440187,11.7031292 11.3532855,11.7954378 11.5697773,11.5808824 C11.7862691,11.3663269 11.7217198,11.0639828 11.5808824,10.9044118 L7.69117647,7.01470588 L11.2426471,7.01470588 C11.5307918,7.01173021 11.75,6.79252199 11.75,6.50735294 Z"
id="Shape"
fill="#FFFFFF"
fill-rule="nonzero"></path>
<path
d="M18,12.7573529 C18,12.4692082 17.7807918,12.25 17.4926471,12.25 L13,12.25 C12.5857864,12.25 12.25,12.5857864 12.25,13 L12.25,17.4926471 L12.25,17.4926471 C12.25,17.7807918 12.4692082,18 12.7573529,18 C13.042522,18 13.2617302,17.7807918 13.2647059,17.4926471 L13.2647059,13.9411765 L17.1544118,17.8308824 C17.2940187,17.9531292 17.6032855,18.0454378 17.8197773,17.8308824 C18.0362691,17.6163269 17.9717198,17.3139828 17.8308824,17.1544118 L13.9411765,13.2647059 L17.4926471,13.2647059 C17.7807918,13.2617302 18,13.042522 18,12.7573529 Z"
id="Shape"
fill="#FFFFFF"
fill-rule="nonzero"
transform="translate(15.125000, 15.125000) scale(-1, -1) translate(-15.125000, -15.125000) "></path>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 2.2 KiB

View File

@ -0,0 +1,18 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg viewBox="0 0 24 24" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<title>ic/gallery/public/info</title>
<defs>
<path d="M12,1 C18.0751322,1 23,5.92486775 23,12 C23,18.0751322 18.0751322,23 12,23 C5.92486775,23 1,18.0751322 1,12 C1,5.92486775 5.92486775,1 12,1 Z M12,2.5 C6.75329488,2.5 2.5,6.75329488 2.5,12 C2.5,17.2467051 6.75329488,21.5 12,21.5 C17.2467051,21.5 21.5,17.2467051 21.5,12 C21.5,6.75329488 17.2467051,2.5 12,2.5 Z M12,15.5 C12.6903125,15.5 13.25,16.0596875 13.25,16.75 C13.25,17.4403125 12.6903125,18 12,18 C11.3096875,18 10.75,17.4403125 10.75,16.75 C10.75,16.0596875 11.3096875,15.5 12,15.5 Z M12,6 C12.6903125,6 13.25,6.5596875 13.25,7.25 C13.25,7.32202353 13.2439074,7.39262512 13.2322095,7.46131744 L12.625,13.9020251 C12.6100211,14.2348894 12.3359475,14.5 12,14.5 C11.6548437,14.5 11.375,14.2201563 11.375,13.875 L11.377,13.902 L11.375,13.9020251 L10.7707857,7.47820274 C10.7571344,7.40421192 10.75,7.32793851 10.75,7.25 C10.75,6.5596875 11.3096875,6 12,6 Z" id="path-1"></path>
</defs>
<g id="ic/gallery/public/info" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
<mask id="mask-2" fill="white">
<use xlink:href="#path-1"></use>
</mask>
<use id="合并形状" fill="#000000" fill-rule="nonzero" xlink:href="#path-1"></use>
<g id="编组" mask="url(#mask-2)" fill="#FFFFFF" fill-opacity="0.1">
<g id="矩形">
<rect x="0" y="0" width="24" height="24"></rect>
</g>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 1.6 KiB

View File

@ -0,0 +1,18 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg viewBox="0 0 24 24" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<title>ic/gallery/public/more</title>
<defs>
<path d="M12,17.75 C12.8284271,17.75 13.5,18.4215729 13.5,19.25 C13.5,20.0784271 12.8284271,20.75 12,20.75 C11.1715729,20.75 10.5,20.0784271 10.5,19.25 C10.5,18.4215729 11.1715729,17.75 12,17.75 Z M12,10.5 C12.8284271,10.5 13.5,11.1715729 13.5,12 C13.5,12.8284271 12.8284271,13.5 12,13.5 C11.1715729,13.5 10.5,12.8284271 10.5,12 C10.5,11.1715729 11.1715729,10.5 12,10.5 Z M12,3.25 C12.8284271,3.25 13.5,3.92157288 13.5,4.75 C13.5,5.57842712 12.8284271,6.25 12,6.25 C11.1715729,6.25 10.5,5.57842712 10.5,4.75 C10.5,3.92157288 11.1715729,3.25 12,3.25 Z" id="path-1"></path>
</defs>
<g id="ic/gallery/public/more" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
<mask id="mask-2" fill="white">
<use xlink:href="#path-1"></use>
</mask>
<use id="Mask" fill="#000000" fill-rule="nonzero" xlink:href="#path-1"></use>
<g id="编组" mask="url(#mask-2)" fill="#FFFFFF" fill-opacity="0.1">
<g id="矩形">
<rect x="0" y="0" width="24" height="24"></rect>
</g>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 1.3 KiB

View File

@ -0,0 +1,20 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg viewBox="0 0 24 24" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<title>ic/gallery/public/move albm</title>
<defs>
<path d="M7.09016905,-8.8817842e-14 L8.072,1.005 L17.7543478,1.00576923 C19.2731309,1.00576923 20.5043478,2.23698617 20.5043478,3.75576923 L20.5047569,4.40410415 C21.398835,4.92349194 22,5.89154117 22,7 L22,15.0300725 C22,16.6869267 20.6568542,18.0300725 19,18.0300725 L3,18.0300725 C1.34314575,18.0300725 3.30402372e-13,16.6869267 3.30402372e-13,15.0300725 L3.30402372e-13,3 C3.30402372e-13,1.34314575 1.34314575,-8.8817842e-14 3,-8.8817842e-14 L7.09016905,-8.8817842e-14 Z M6.45880872,1.5 L3,1.5 C2.17157288,1.5 1.5,2.17157288 1.5,3 L1.5,15.0300725 C1.5,15.8584996 2.17157288,16.5300725 3,16.5300725 L19,16.5300725 C19.8284271,16.5300725 20.5,15.8584996 20.5,15.0300725 L20.5,7 C20.5,6.17157288 19.8284271,5.5 19,5.5 L11,5.5 C10.5962468,5.5 10.2095421,5.33723333 9.9273184,5.04850093 L7.27087558,2.33280382 C7.22847391,2.29755785 7.19001909,2.25772693 7.15627192,2.21407187 L6.45880872,1.5 Z M13.2196732,6.92124525 L16.7196732,10.4212453 C17.0125664,10.7141385 17.0125664,11.1890122 16.7196732,11.4819054 L13.2196732,14.9819054 C12.9267799,15.2747986 12.4519062,15.2747986 12.159013,14.9819054 C11.8661198,14.6890122 11.8661198,14.2141385 12.159013,13.9212453 L14.336,11.743 L7.49539663,11.7015612 C7.08119087,11.6990188 6.74747176,11.3611777 6.7499997,10.946972 C6.7525565,10.5327662 7.09039761,10.1990471 7.50460337,10.201575 L14.421,10.244 L12.159013,7.98190542 C11.8661198,7.68901221 11.8661198,7.21413847 12.159013,6.92124525 C12.4519062,6.62835203 12.9267799,6.62835203 13.2196732,6.92124525 Z M17.7543478,2.50576923 L9.539,2.505 L11,4 L19.004,4 L19.0043478,3.75576923 C19.0043478,3.06541329 18.4447038,2.50576923 17.7543478,2.50576923 Z" id="path-1"></path>
</defs>
<g id="ic/gallery/public/move-albm" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
<g id="symbol/frame/symbol_grid24-copy"></g>
<g id="分组-2" transform="translate(1.000000, 2.750000)">
<g id="folder">
<mask id="mask-2" fill="white">
<use xlink:href="#path-1"></use>
</mask>
<use id="合并形状" fill="#000000" fill-rule="nonzero" xlink:href="#path-1"></use>
<rect id="color/#000000" mask="url(#mask-2)" x="-1" y="-2.75" width="24" height="24"></rect>
</g>
<g id="分组" transform="translate(7.250000, 7.250000)"></g>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 2.6 KiB

View File

@ -0,0 +1,21 @@
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg t="1612338814454"
class="icon"
viewBox="0 0 1024 1024"
version="1.1"
xmlns="http://www.w3.org/2000/svg"
p-id="5720"
xmlns:xlink="http://www.w3.org/1999/xlink"
>
<defs>
<style type="text/css"></style>
</defs>
<path
d="M971.65312 881.94048l-252.38528-252.37504a367.0016 367.0016 0 0 0 79.4624-228.49536c0-203.59168-165.03808-368.64-368.64-368.64-203.59168 0-368.65024 165.04832-368.65024 368.64 0 203.60192 165.05856 368.65024 368.65024 368.65024 91.4432 0 175.04256-33.37216 239.47264-88.49408l251.41248 251.41248a35.86048 35.86048 0 0 0 50.688 0 35.88096 35.88096 0 0 0-0.01024-50.69824z m-838.54336-480.88064c0-163.7376 133.2224-296.96 296.97024-296.96 163.7376 0 296.96 133.2224 296.96 296.96 0 163.74784-133.2224 296.97024-296.96 296.97024-163.74784 0-296.97024-133.2224-296.97024-296.97024z"
fill="#ffffff"
p-id="5721"></path>
<path
d="M609.28 401.05984a35.84 35.84 0 0 1-35.84 35.84h-286.72a35.84 35.84 0 1 1 0-71.68h286.72a35.84 35.84 0 0 1 35.84 35.84z"
fill="#ffffff"
p-id="5722"></path>
</svg>

After

Width:  |  Height:  |  Size: 1.2 KiB

View File

@ -0,0 +1,15 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg viewBox="0 0 24 24" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<title>ic/gallery/public/pause</title>
<defs>
<path d="M10.1785714,8.05357143 C10.4152649,8.05357143 10.6071429,8.24544939 10.6071429,8.48214286 L10.6071429,15.5178571 C10.6071429,15.7545506 10.4152649,15.9464286 10.1785714,15.9464286 L9.64285714,15.9464286 C9.40616368,15.9464286 9.21428571,15.7545506 9.21428571,15.5178571 L9.21428571,8.48214286 C9.21428571,8.24544939 9.40616368,8.05357143 9.64285714,8.05357143 L10.1785714,8.05357143 Z M14.3571429,8.05357143 C14.5938363,8.05357143 14.7857143,8.24544939 14.7857143,8.48214286 L14.7857143,15.5178571 C14.7857143,15.7545506 14.5938363,15.9464286 14.3571429,15.9464286 L13.8214286,15.9464286 C13.5847351,15.9464286 13.3928571,15.7545506 13.3928571,15.5178571 L13.3928571,8.48214286 C13.3928571,8.24544939 13.5847351,8.05357143 13.8214286,8.05357143 L14.3571429,8.05357143 Z" id="path-1"></path>
</defs>
<g id="ic/gallery/public/pause" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
<path d="M0.428571429,12 C0.428571429,18.3909 5.6091,23.5714286 12,23.5714286 C18.3909,23.5714286 23.5714286,18.3909 23.5714286,12 C23.5714286,5.6091 18.3909,0.428571429 12,0.428571429 C5.6091,0.428571429 0.428571429,5.6091 0.428571429,12 Z" id="Shape" fill-opacity="0.5" fill="#000000"></path>
<path d="M0.428571429,12 C0.428571429,18.3909 5.6091,23.5714286 12,23.5714286 C18.3909,23.5714286 23.5714286,18.3909 23.5714286,12 C23.5714286,5.6091 18.3909,0.428571429 12,0.428571429 C5.6091,0.428571429 0.428571429,5.6091 0.428571429,12 Z M0,12 C0,5.37240642 5.37240642,0 12,0 C18.6275936,0 24,5.37240642 24,12 C24,18.6275936 18.6275936,24 12,24 C5.37240642,24 0,18.6275936 0,12 Z" id="Shape" fill-opacity="0.3" fill="#FFFFFF" fill-rule="nonzero"></path>
<mask id="mask-2" fill="white">
<use xlink:href="#path-1"></use>
</mask>
<use id="Combined-Shape" fill="#FFFFFF" xlink:href="#path-1"></use>
</g>
</svg>

After

Width:  |  Height:  |  Size: 2.0 KiB

View File

@ -0,0 +1,15 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg viewBox="0 0 24 24" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<title>ic/gallery/public/play</title>
<defs>
<path d="M9.25,8.78041637 L9.25,14.9695836 C9.25,15.5218684 9.69771525,15.9695836 10.25,15.9695836 C10.4335751,15.9695836 10.6136079,15.9190514 10.7703702,15.8235244 L15.8486613,12.7289408 C16.3202797,12.4415483 16.4696244,11.8262483 16.1822319,11.3546298 C16.0992345,11.218429 15.9848621,11.1040566 15.8486613,11.0210592 L10.7703702,7.92647557 C10.2987517,7.63908306 9.68345171,7.78842772 9.3960592,8.2600462 C9.30053221,8.41680844 9.25,8.5968413 9.25,8.78041637 Z" id="path-1"></path>
</defs>
<g id="ic/gallery/public/play" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
<path d="M0.5,12 C0.5,18.35145 5.64855,23.5 12,23.5 C18.35145,23.5 23.5,18.35145 23.5,12 C23.5,5.64855 18.35145,0.5 12,0.5 C5.64855,0.5 0.5,5.64855 0.5,12 Z" id="Shape" fill-opacity="0.5" fill="#000000"></path>
<path d="M0.5,12 C0.5,18.35145 5.64855,23.5 12,23.5 C18.35145,23.5 23.5,18.35145 23.5,12 C23.5,5.64855 18.35145,0.5 12,0.5 C5.64855,0.5 0.5,5.64855 0.5,12 Z M0,12 C0,5.37240747 5.37240747,0 12,0 C18.6275925,0 24,5.37240747 24,12 C24,18.6275925 18.6275925,24 12,24 C5.37240747,24 0,18.6275925 0,12 Z" id="Shape" fill-opacity="0.3" fill="#FFFFFF" fill-rule="nonzero"></path>
<mask id="mask-2" fill="white">
<use xlink:href="#path-1"></use>
</mask>
<use id="Path-46" fill="#FFFFFF" xlink:href="#path-1"></use>
</g>
</svg>

After

Width:  |  Height:  |  Size: 1.6 KiB

View File

@ -0,0 +1,18 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg viewBox="0 0 24 24" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<title>ic/gallery/public/rename</title>
<defs>
<path d="M11.5,3 C11.9142136,3 12.25,3.33578644 12.25,3.75 C12.25,4.12969577 11.9678461,4.44349096 11.6017706,4.49315338 L11.5,4.5 L10.75,4.5 L10.75,19.5 L11.5,19.5 C11.9142136,19.5 12.25,19.8357864 12.25,20.25 C12.25,20.6296958 11.9678461,20.943491 11.6017706,20.9931534 L11.5,21 L8.5,21 C8.08578644,21 7.75,20.6642136 7.75,20.25 C7.75,19.8703042 8.03215388,19.556509 8.39822944,19.5068466 L8.5,19.5 L9.25,19.5 L9.25,4.5 L8.5,4.5 C8.08578644,4.5 7.75,4.16421356 7.75,3.75 C7.75,3.37030423 8.03215388,3.05650904 8.39822944,3.00684662 L8.5,3 L11.5,3 Z M19.75,5.5 C21.4830315,5.5 22.8992459,6.85645477 22.9948552,8.56557609 L23,8.75 L23,15.25 C23,16.9830315 21.6435452,18.3992459 19.9344239,18.4948552 L19.75,18.5 L11.9788535,18.5 L11.9788535,17 L19.75,17 C20.6681734,17 21.4211923,16.2928897 21.4941988,15.3935272 L21.5,15.25 L21.5,8.75 C21.5,7.8318266 20.7928897,7.07880766 19.8935272,7.0058012 L19.75,7 L11.9788535,7 L11.9788535,5.5 L19.75,5.5 Z M8.05460842,5.5 L8.05460842,7 L4.25,7 C3.3318266,7 2.57880766,7.70711027 2.5058012,8.60647279 L2.5,8.75 L2.5,15.25 C2.5,16.1681734 3.20711027,16.9211923 4.10647279,16.9941988 L4.25,17 L8.0952381,17 L8.0952381,18.5 L4.25,18.5 C2.51696854,18.5 1.10075407,17.1435452 1.00514479,15.4344239 L1,15.25 L1,8.75 C1,7.01696854 2.35645477,5.60075407 4.06557609,5.50514479 L4.25,5.5 L8.05460842,5.5 Z" id="path-1"></path>
</defs>
<g id="ic/gallery/public/rename" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
<mask id="mask-2" fill="white">
<use xlink:href="#path-1"></use>
</mask>
<use id="形状结合" fill="#000000" fill-rule="nonzero" xlink:href="#path-1"></use>
<g id="编组" mask="url(#mask-2)" fill="#FFFFFF" fill-opacity="0.1">
<g id="矩形">
<rect x="0" y="0" width="24" height="24"></rect>
</g>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 2.1 KiB

View File

@ -0,0 +1,18 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg viewBox="0 0 24 24" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<title>ic/gallery/public/rename_filled</title>
<defs>
<path d="M11.5,3 C11.7761424,3 12,3.22385763 12,3.5 C12,3.77614237 11.7761424,4 11.5,4 L10.5,4 L10.5,4 L10.5,20 L11.5,20 C11.7761424,20 12,20.2238576 12,20.5 C12,20.7761424 11.7761424,21 11.5,21 L8.5,21 C8.22385763,21 8,20.7761424 8,20.5 C8,20.2238576 8.22385763,20 8.5,20 L9.5,20 L9.5,20 L9.5,4 L8.5,4 C8.22385763,4 8,3.77614237 8,3.5 C8,3.22385763 8.22385763,3 8.5,3 L11.5,3 Z M20,5.5 C21.6568542,5.5 23,6.84314575 23,8.5 L23,15.5 C23,17.1568542 21.6568542,18.5 20,18.5 L11.9783377,18.5 L11.9783377,17.5 L20,17.5 C21.1045695,17.5 22,16.6045695 22,15.5 L22,8.5 C22,7.3954305 21.1045695,6.5 20,6.5 L11.9783377,6.5 L11.9783377,5.5 L20,5.5 Z M7.95837936,5.5 L7.95837936,6.5 L4,6.5 C2.8954305,6.5 2,7.3954305 2,8.5 L2,15.5 C2,16.6045695 2.8954305,17.5 4,17.5 L8,17.5 L8,18.5 L4,18.5 C2.34314575,18.5 1,17.1568542 1,15.5 L1,8.5 C1,6.84314575 2.34314575,5.5 4,5.5 L7.95837936,5.5 Z M8,7.5 L8,16.5 L4,16.5 C3.44771525,16.5 3,16.0522847 3,15.5 L3,8.5 C3,7.94771525 3.44771525,7.5 4,7.5 L8,7.5 Z M20.5,7.5 C20.7761424,7.5 21,7.72385763 21,8 L21,16 C21,16.2761424 20.7761424,16.5 20.5,16.5 L12,16.5 L12,7.5 L20.5,7.5 Z" id="path-1"></path>
</defs>
<g id="ic/gallery/public/rename_filled" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
<mask id="mask-2" fill="white">
<use xlink:href="#path-1"></use>
</mask>
<use id="Combined-Shape" fill="#000000" fill-rule="nonzero" xlink:href="#path-1"></use>
<g id="编组" mask="url(#mask-2)" fill="#FFFFFF" fill-opacity="0.1">
<g id="矩形">
<rect x="0" y="0" width="24" height="24"></rect>
</g>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 1.8 KiB

View File

@ -0,0 +1,18 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg viewBox="0 0 24 24" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<title>ic/gallery/public/hsqh</title>
<defs>
<path d="M11.9748572,2.03495035 C13.0794267,2.03495035 13.9748572,2.93038085 13.9748572,4.03495035 L13.9734766,8.25895035 L13.9748572,8.27379069 L13.9747064,8.28898332 L13.9747064,8.28898332 L13.9744766,8.29795035 C13.9611077,8.70158094 13.6306105,9.02379069 13.2248572,9.02379069 C12.8451614,9.02379069 12.5313662,8.74163681 12.4817038,8.37556125 L12.4754766,8.28895035 L12.4764766,8.29795035 L12.4744766,8.29795035 L12.4748572,4.03495035 C12.4748572,3.78949046 12.297982,3.58534198 12.0647328,3.54300602 L11.9748572,3.53495035 L3.18047655,3.53495035 C2.93501666,3.53495035 2.73086818,3.71182551 2.68853222,3.94507472 L2.68047655,4.03495035 L2.68047655,20.0349503 C2.68047655,20.2804102 2.85735171,20.4845587 3.09060092,20.5268947 L3.18047655,20.5349503 L3.37947655,20.5349503 C3.77975524,20.5510642 4.09966493,20.8806478 4.09966493,21.2849503 C4.09966493,21.6561928 3.82993464,21.9644363 3.47575883,22.0243962 L12.1795968,22.024599 C12.1122813,22.0314439 12.0439788,22.0349503 11.9748572,22.0349503 L3.18047655,22.0349503 C2.07590705,22.0349503 1.18047655,21.1395198 1.18047655,20.0349503 L1.18047655,4.03495035 C1.18047655,2.93038085 2.07590705,2.03495035 3.18047655,2.03495035 L11.9748572,2.03495035 Z M20.9528666,10 C22.0574361,10 22.9528666,10.8954305 22.9528666,12 L22.9528666,20 C22.9528666,21.1045695 22.0574361,22 20.9528666,22 L6.99684781,22 C5.89227831,22 4.99684781,21.1045695 4.99684781,20 L4.99684781,12 C4.99684781,10.8954305 5.89227831,10 6.99684781,10 L20.9528666,10 Z M20.9528666,11.5 L6.99684781,11.5 C6.75138792,11.5 6.54723944,11.6768752 6.50490348,11.9101244 L6.49684781,12 L6.49684781,20 C6.49684781,20.2454599 6.67372297,20.4496084 6.90697218,20.4919443 L6.99684781,20.5 L20.9528666,20.5 C21.1983265,20.5 21.402475,20.3231248 21.4448109,20.0898756 L21.4528666,20 L21.4528666,12 C21.4528666,11.7545401 21.2759914,11.5503916 21.0427422,11.5080557 L20.9528666,11.5 Z M18.322142,2.08320364 C20.8722071,2.08320364 22.9394432,4.15043983 22.9394432,6.7005049 L22.9394432,7.9656777 C22.9394432,8.37989126 22.6036568,8.7156777 22.1894432,8.7156777 C21.7752297,8.7156777 21.4394432,8.37989126 21.4394432,7.9656777 L21.4394432,6.7005049 C21.4394432,4.97886696 20.0437799,3.58320364 18.322142,3.58320364 L17.4167002,3.58320364 C17.0024866,3.58320364 16.6667002,3.2474172 16.6667002,2.83320364 C16.6667002,2.41899008 17.0024866,2.08320364 17.4167002,2.08320364 L18.322142,2.08320364 Z" id="path-1"></path>
</defs>
<g id="ic/gallery/public/hsqh" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
<mask id="mask-2" fill="white">
<use xlink:href="#path-1"></use>
</mask>
<use id="形状结合" fill="#000000" fill-rule="nonzero" xlink:href="#path-1"></use>
<g id="编组" mask="url(#mask-2)" fill="#FFFFFF" fill-opacity="0.1">
<g id="矩形">
<rect x="0" y="0" width="24" height="24"></rect>
</g>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 3.1 KiB

View File

@ -0,0 +1,19 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg viewBox="0 0 96 96"
version="1.1"
xmlns="http://www.w3.org/2000/svg"
xmlns:xlink="http://www.w3.org/1999/xlink">
<title>ic/add/ic_add</title>
<g
id="ic/add/ic_add"
stroke="none"
stroke-width="1"
fill="none"
fill-rule="evenodd">
<path
d="M48,8 C49.6568542,8 51,9.34314575 51,11 L51,45 L85,45 C86.6568542,45 88,46.3431458 88,48 C88,49.6568542 86.6568542,51 85,51 L51,51 L51,85 C51,86.6568542 49.6568542,88 48,88 C46.3431458,88 45,86.6568542 45,85 L45,51 L11,51 C9.34314575,51 8,49.6568542 8,48 C8,46.3431458 9.34314575,45 11,45 L45,45 L45,11 C45,9.34314575 46.3431458,8 48,8 Z"
id="路径"
fill="#000000"
fill-rule="nonzero"></path>
</g>
</svg>

After

Width:  |  Height:  |  Size: 809 B

View File

@ -0,0 +1,19 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg viewBox="0 0 96 96"
version="1.1"
xmlns="http://www.w3.org/2000/svg"
xmlns:xlink="http://www.w3.org/1999/xlink">
<title>ic/add/ic_minus</title>
<g
id="ic/add/ic_minus"
stroke="none"
stroke-width="1"
fill="none"
fill-rule="evenodd">
<path
d="M11,51 C9.34314575,51 8,49.6568542 8,48 C8,46.3431458 9.34314575,45 11,45 L85,45 C86.6568542,45 88,46.3431458 88,48 C88,49.6568542 86.6568542,51 85,51 L11,51 Z"
id="路径"
fill="#000000"
fill-rule="nonzero"></path>
</g>
</svg>

After

Width:  |  Height:  |  Size: 635 B

View File

@ -0,0 +1,18 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg viewBox="0 0 24 24" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<title>ic/gallery/public/select all</title>
<defs>
<path d="M16.5,4.5 C18.1568542,4.5 19.5,5.84314575 19.5,7.5 L19.5,19 C19.5,20.6568542 18.1568542,22 16.5,22 L5,22 C3.34314575,22 2,20.6568542 2,19 L2,7.5 C2,5.84314575 3.34314575,4.5 5,4.5 L16.5,4.5 Z M16.5,6 L5,6 C4.17157288,6 3.5,6.67157288 3.5,7.5 L3.5,19 C3.5,19.8284271 4.17157288,20.5 5,20.5 L16.5,20.5 C17.3284271,20.5 18,19.8284271 18,19 L18,7.5 C18,6.67157288 17.3284271,6 16.5,6 Z M19,2 C20.6568542,2 22,3.34314575 22,5 L22,16 C22,17.1105424 21.3965729,18.0801468 20.499712,18.59882 L20.5,5 C20.5,4.17157288 19.8284271,3.5 19,3.5 L5.40118003,3.50028797 C5.91985316,2.60342711 6.8894576,2 8,2 L19,2 Z M15.9323041,9.72323101 C16.2232305,10.0180779 16.2200525,10.492941 15.9252056,10.7838674 L9.65901481,16.9667413 C9.36695474,17.254918 8.8975369,17.254918 8.60547683,16.9667413 L5.47330468,13.8762153 C5.17845784,13.5852889 5.17527976,13.1104258 5.46620624,12.8155789 C5.75713272,12.5207321 6.23199581,12.517554 6.52684266,12.8084805 L9.13224582,15.3792415 L14.8716676,9.71613257 C15.1665145,9.42520609 15.6413776,9.42838417 15.9323041,9.72323101 Z" id="path-1"></path>
</defs>
<g id="ic/gallery/public/select-all" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
<mask id="mask-2" fill="white">
<use xlink:href="#path-1"></use>
</mask>
<use id="合并形状" fill="#000000" fill-rule="nonzero" xlink:href="#path-1"></use>
<g id="编组" mask="url(#mask-2)" fill="#FFFFFF" fill-opacity="0.1">
<g id="矩形">
<rect x="0" y="0" width="24" height="24"></rect>
</g>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 1.8 KiB

View File

@ -0,0 +1,18 @@
s<?xml version="1.0" encoding="UTF-8"?>
<svg viewBox="0 0 24 24" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<title>ic/gallery/public/share</title>
<defs>
<path d="M12.25,2 C13.9068542,2 15.25,3.34314575 15.25,5 C15.25,6.65685425 13.9068542,8 12.25,8 C11.9804725,8 11.7192467,7.96445647 11.4707541,7.89780096 L5.93230241,16.2050908 C6.40150564,16.6005646 6.74773454,17.1373071 6.90542312,17.7497523 L17.0945769,17.7497523 C17.4276951,16.4559576 18.6022096,15.5 20,15.5 C21.6568542,15.5 23,16.8431458 23,18.5 C23,20.1568542 21.6568542,21.5 20,21.5 C18.6025704,21.5 17.4283015,20.5445359 17.094835,19.2512495 L6.90516499,19.2512495 C6.57169851,20.5445359 5.39742955,21.5 4,21.5 C2.34314575,21.5 1,20.1568542 1,18.5 C1,16.8431458 2.34314575,15.5 4,15.5 C4.19240202,15.5 4.38057369,15.5181123 4.56290296,15.5527249 L10.1618944,7.15402617 C9.59951533,6.60875215 9.25,5.84519291 9.25,5 C9.25,3.34314575 10.5931458,2 12.25,2 Z M4,17 C3.17157288,17 2.5,17.6715729 2.5,18.5 C2.5,19.3284271 3.17157288,20 4,20 C4.82842712,20 5.5,19.3284271 5.5,18.5 C5.5,17.6715729 4.82842712,17 4,17 Z M20,17 C19.1715729,17 18.5,17.6715729 18.5,18.5 C18.5,19.3284271 19.1715729,20 20,20 C20.8284271,20 21.5,19.3284271 21.5,18.5 C21.5,17.6715729 20.8284271,17 20,17 Z M12.25,3.5 C11.4215729,3.5 10.75,4.17157288 10.75,5 C10.75,5.82842712 11.4215729,6.5 12.25,6.5 C13.0784271,6.5 13.75,5.82842712 13.75,5 C13.75,4.17157288 13.0784271,3.5 12.25,3.5 Z" id="path-1"></path>
</defs>
<g id="ic/gallery/public/share" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
<mask id="mask-2" fill="white">
<use xlink:href="#path-1"></use>
</mask>
<use id="合并形状" fill="#000000" fill-rule="nonzero" xlink:href="#path-1"></use>
<g id="编组" mask="url(#mask-2)" fill="#FFFFFF" fill-opacity="0.1">
<g id="矩形">
<rect x="0" y="0" width="24" height="24"></rect>
</g>
</g>
</g>
</svg>

View File

@ -0,0 +1,19 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg viewBox="0 0 24 24" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<title>ic/gallery/public/shared album_filled</title>
<defs>
<path d="M14.2380952,12.4761905 C16.8680226,12.4761905 19,14.6081679 19,17.2380952 L19,20 C19,21.1045695 18.1045695,22 17,22 L4,22 C2.8954305,22 2,21.1045695 2,20 L2,17.2380952 C2,14.6081679 4.13197738,12.4761905 6.76190476,12.4761905 L14.2380952,12.4761905 Z M17.8831041,12.5190991 C20.207511,12.8338262 22,14.8266316 22,17.2380952 L22,20 C22,21.1045695 21.1045695,22 20,22 L19,22 C19.5128358,22 19.9355072,21.6139598 19.9932723,21.1166211 L20,21 L20,16.7380952 C20,15.0111497 19.1680637,13.4785134 17.8831041,12.5190991 Z M10.5001379,2 C13.1080991,2 15.2222222,4.13416503 15.2222222,6.76684963 C15.2222222,9.39953422 13.1080991,11.5336993 10.5001379,11.5336993 C7.89190093,11.5336993 5.77777778,9.39953422 5.77777778,6.76684963 C5.77777778,4.13416503 7.89190093,2 10.5001379,2 Z M14.0350987,2.03020829 C16.3912729,2.29853042 18.2222222,4.31681706 18.2222222,6.76684963 C18.2222222,9.14767452 16.4932519,11.1208006 14.2336439,11.4765352 L14.0258252,11.4752083 L14.1736916,11.3706062 C15.5851419,10.3225177 16.5,8.64309715 16.5,6.75 C16.5,4.79576165 15.5250934,3.06922494 14.0350987,2.03020829 Z" id="path-1"></path>
</defs>
<g id="ic/gallery/public/shared-album_filled" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
<rect id="矩形" fill-opacity="0" fill="#000000" x="0" y="0" width="24" height="24"></rect>
<mask id="mask-2" fill="white">
<use xlink:href="#path-1"></use>
</mask>
<use id="Combined-Shape" fill="#ffffff" xlink:href="#path-1"></use>
<g id="编组" mask="url(#mask-2)" fill="#FFFFFF" fill-opacity="0">
<g id="矩形">
<rect x="0" y="0" width="24" height="24"></rect>
</g>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 1.9 KiB

View File

@ -0,0 +1,18 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg viewBox="0 0 24 24" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<title>ic/gallery/public/sharegroup</title>
<defs>
<path d="M18.838684,12.3308265 C20.7648094,13.3056826 22,15.208018 22,17.3236516 L22,21.25 C22,21.6642136 21.6642136,22 21.25,22 C20.8357864,22 20.5,21.6642136 20.5,21.25 L20.5,17.3236516 C20.5,15.7884645 19.5951288,14.3948589 18.161316,13.6691735 C17.7917417,13.4821235 17.6437765,13.0308903 17.8308265,12.661316 C18.0178765,12.2917417 18.4691097,12.1437765 18.838684,12.3308265 Z M2.73612396,22 L2.736,21.999 L2.64822944,21.9931534 C2.28215388,21.943491 2,21.6296958 2,21.25 L2,17.75 C2,14.5743627 4.57436269,12 7.75,12 L13.25,12 C16.4256373,12 19,14.5743627 19,17.75 L19,21.25 C19,21.6642136 18.6642136,22 18.25,22 L18.237,21.999 L18.2379887,22 L2.73612396,22 Z M13.25,13.5 L7.75,13.5 C5.40278981,13.5 3.5,15.4027898 3.5,17.75 L3.5,20.5 L17.5,20.5 L17.5,17.75 C17.5,15.4027898 15.5972102,13.5 13.25,13.5 Z M10.5005779,1.75 C13.1241281,1.75 15.2509221,3.87661097 15.2509221,6.5 C15.2509221,9.12338903 13.1241281,11.25 10.5005779,11.25 C7.87683687,11.25 5.75,9.12343194 5.75,6.5 C5.75,3.87656806 7.87683687,1.75 10.5005779,1.75 Z M15.2963854,2.10135036 C15.3498868,2.12320854 15.4029671,2.1460403 15.4556023,2.16983224 C17.1430555,2.9325876 18.2509221,4.61547988 18.2509221,6.5 C18.2509221,8.43350837 17.0847314,10.1516409 15.3308688,10.8844022 C14.9486716,11.0440836 14.5093921,10.863699 14.3497107,10.4815017 C14.1900292,10.0993045 14.3704139,9.66002508 14.7526111,9.50034364 C15.9529526,8.99884271 16.7509221,7.82320533 16.7509221,6.5 C16.7509221,5.21022903 15.9929531,4.05884472 14.8377649,3.53668154 C14.801829,3.52043794 14.7655938,3.50485187 14.7290754,3.48993211 C14.3456291,3.33327377 14.1617812,2.89543247 14.3184395,2.5119862 C14.4750979,2.12853994 14.9129392,1.94469201 15.2963854,2.10135036 Z M10.5005779,3.25 C8.70522156,3.25 7.25,4.70503763 7.25,6.5 C7.25,8.29496237 8.70522156,9.75 10.5005779,9.75 C12.2957299,9.75 13.7509221,8.29493301 13.7509221,6.5 C13.7509221,4.70506699 12.2957299,3.25 10.5005779,3.25 Z" id="path-1"></path>
</defs>
<g id="ic/gallery/public/sharegroup" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
<mask id="mask-2" fill="white">
<use xlink:href="#path-1"></use>
</mask>
<use id="形状结合" fill="#000000" fill-rule="nonzero" xlink:href="#path-1"></use>
<g id="编组" mask="url(#mask-2)" fill="#FFFFFF" fill-opacity="0.1">
<g id="矩形">
<rect x="0" y="0" width="24" height="24"></rect>
</g>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 2.6 KiB

View File

@ -0,0 +1,18 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg viewBox="0 0 24 24" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<title>ic/gallery/public/checkbox2</title>
<defs>
<path d="M18.00077,2 C20.2094838,2 22,3.79246765 22,5.99922997 L22,18.00077 C22,20.2094838 20.2075324,22 18.00077,22 L5.99922997,22 C3.79051625,22 2,20.2075324 2,18.00077 L2,5.99922997 C2,3.79051625 3.79246765,2 5.99922997,2 L18.00077,2 Z M18.00077,3 L5.99922997,3 C4.40311826,3 3.09639718,4.24929602 3.00509582,5.82307706 L3,5.99922997 L3,18.00077 C3,19.5968817 4.24929602,20.9036028 5.82307706,20.9949042 L5.99922997,21 L18.00077,21 C19.5968817,21 20.9036028,19.750704 20.9949042,18.1769229 L21,18.00077 L21,5.99922997 C21,4.40311826 19.750704,3.09639718 18.1769229,3.00509582 L18.00077,3 Z" id="path-1"></path>
</defs>
<g id="ic/gallery/public/checkbox2" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
<mask id="mask-2" fill="black">
<use xlink:href="#path-1"></use>
</mask>
<use id="Rectangle-210-Copy-6" fill="#000000" fill-rule="nonzero" xlink:href="#path-1"></use>
<g id="编组" mask="url(#mask-2)" fill-opacity="0">
<g transform="translate(0.000000, 0.000000)">
<rect id="矩形" fill="#FFFFFF" x="-2.27373675e-13" y="0" width="24" height="24"></rect>
</g>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 1.4 KiB

View File

@ -0,0 +1,28 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg viewBox="0 0 24 24"
version="1.1"
xmlns="http://www.w3.org/2000/svg"
xmlns:xlink="http://www.w3.org/1999/xlink">
<title>select all</title>
<defs>
<path
d="M6.4867991,4.5 L15.0132009,4.5 L15.4235832,4.50420108 L15.7871609,4.51674041 L16.1087593,4.53752211 C16.436161,4.5644656 16.6981555,4.6057503 16.9223487,4.66082763 L17.0718594,4.70115491 L17.1658281,4.73046818 L17.2559364,4.7617102 L17.3427875,4.794869 L17.468276,4.84817491 L17.468276,4.84817491 L17.5898283,4.90572614 L17.5898283,4.90572614 L17.70948,4.96748223 L17.70948,4.96748223 C18.2798504,5.27251964 18.7274804,5.72014965 19.0325178,6.29052002 L19.1518251,6.53172398 L19.1518251,6.53172398 L19.205131,6.65721253 L19.205131,6.65721253 L19.2382898,6.74406358 L19.2695318,6.8341719 L19.3127747,6.97676111 L19.3391724,7.0776513 C19.390013,7.28459888 19.4291013,7.52375586 19.4560058,7.81683501 L19.4832596,8.21283906 L19.4832596,8.21283906 L19.4957989,8.57641683 L19.5,8.9867991 L19.5,17.5132009 L19.4957989,17.9235832 L19.4832596,18.2871609 L19.4624779,18.6087593 C19.4355344,18.936161 19.3942497,19.1981555 19.3391724,19.4223487 L19.2988451,19.5718594 L19.2695318,19.6658281 L19.2382898,19.7559364 L19.205131,19.8427875 L19.1518251,19.968276 L19.1518251,19.968276 L19.0942739,20.0898283 L19.0942739,20.0898283 L19.0325178,20.20948 L19.0325178,20.20948 C18.7274804,20.7798504 18.2798504,21.2274804 17.70948,21.5325178 L17.468276,21.6518251 L17.468276,21.6518251 L17.3427875,21.705131 L17.3427875,21.705131 L17.2559364,21.7382898 L17.1658281,21.7695318 L17.0232389,21.8127747 L16.9223487,21.8391724 C16.7154011,21.890013 16.4762441,21.9291013 16.183165,21.9560058 L15.7871609,21.9832596 L15.7871609,21.9832596 L15.4235832,21.9957989 L15.0132009,22 L6.4867991,22 L6.07641683,21.9957989 L5.71283906,21.9832596 L5.39124074,21.9624779 C5.06383903,21.9355344 4.80184451,21.8942497 4.5776513,21.8391724 L4.42814062,21.7988451 L4.3341719,21.7695318 L4.24406358,21.7382898 L4.15721253,21.705131 L4.03172398,21.6518251 L4.03172398,21.6518251 L3.91017167,21.5942739 L3.91017167,21.5942739 L3.79052002,21.5325178 L3.79052002,21.5325178 C3.22014965,21.2274804 2.77251964,20.7798504 2.46748223,20.20948 L2.34817491,19.968276 L2.34817491,19.968276 L2.294869,19.8427875 L2.294869,19.8427875 L2.2617102,19.7559364 L2.23046818,19.6658281 L2.1872253,19.5232389 L2.16082763,19.4223487 C2.10998702,19.2154011 2.07089871,18.9762441 2.04399417,18.683165 L2.01674041,18.2871609 L2.01674041,18.2871609 L2.00420108,17.9235832 L2,17.5132009 L2.00026332,8.87955174 L2.00420108,8.57641683 L2.01674041,8.21283906 L2.03752211,7.89124074 C2.0644656,7.56383903 2.1057503,7.30184451 2.16082763,7.0776513 L2.20115491,6.92814062 L2.23046818,6.8341719 L2.2617102,6.74406358 L2.294869,6.65721253 L2.34817491,6.53172398 L2.34817491,6.53172398 L2.40572614,6.41017167 L2.40572614,6.41017167 L2.46748223,6.29052002 L2.46748223,6.29052002 C2.77251964,5.72014965 3.22014965,5.27251964 3.79052002,4.96748223 L4.03172398,4.84817491 L4.03172398,4.84817491 L4.15721253,4.794869 L4.15721253,4.794869 L4.24406358,4.7617102 L4.3341719,4.73046818 L4.47676111,4.6872253 L4.5776513,4.66082763 C4.78459888,4.60998702 5.02375586,4.57089871 5.31683501,4.54399417 L5.71283906,4.51674041 L5.71283906,4.51674041 L6.07641683,4.50420108 L6.4867991,4.5 Z M9.35551601,2.0015395 L15.590287,2 C17.515157,2 18.3804612,2.17308908 19.1055302,2.50099869 L19.33091,2.60967418 C19.3680538,2.62863739 19.4050772,2.64802414 19.4421143,2.66783176 C20.2569291,3.10359949 20.8964005,3.74307093 21.3321682,4.55788574 L21.4459422,4.78101661 C21.7900981,5.49387056 21.980395,6.29857399 21.9985643,8.11445738 L21.9985643,14.644484 L21.9985643,14.644484 L21.986204,15.1363219 C21.9495339,16.0537651 21.8402379,16.5897919 21.6640321,17.0320441 L21.5703798,17.2466873 C21.5373214,17.3165179 21.5024308,17.3850754 21.4657346,17.4536914 C21.2201431,17.9129076 20.8936745,18.3025066 20.4942613,18.6145562 L20.4985008,18.3959841 L20.4985008,18.3959841 L20.4985008,8.10401595 C20.4828731,6.8916293 20.3429795,6.23976193 19.9811141,5.56313259 C19.6264537,4.89997522 19.1000248,4.3735463 18.4368674,4.01888586 C17.7384113,3.64534745 17.0663405,3.50833246 15.7768869,3.50037153 L5.8458278,3.5 C5.68310622,3.5 5.5299464,3.50188529 5.38516578,3.50585327 C5.69792007,3.10596794 6.0873439,2.77972241 6.54630859,2.53426541 C6.61492458,2.49756918 6.68348206,2.46267863 6.75331273,2.42962023 L6.96795593,2.33596793 C7.41020809,2.15976206 7.94623491,2.05046611 8.86367807,2.01379596 L9.35551601,2.0015395 L9.35551601,2.0015395 Z M15.8083289,10.2550281 C16.0907617,10.5374608 16.1008486,10.9891076 15.8385896,11.2836271 L10.6085815,16.5154357 C9.93940183,17.1846154 8.86310923,17.1985566 8.17696655,16.5572595 L5.68396027,14.0656883 C5.39106705,13.772795 5.39106705,13.2979213 5.68396027,13.0050281 C5.96639302,12.7225953 6.41803979,12.7125085 6.71255925,12.9747674 L8.84081452,15.1012222 C9.12324727,15.3836549 9.57489404,15.3937418 9.8694135,15.1314828 L14.7476688,10.2550281 C15.040562,9.96213487 15.5154357,9.96213487 15.8083289,10.2550281 Z"
id="path-1"></path>
</defs>
<g
id="select-all"
stroke="none"
stroke-width="1"
fill="none"
fill-rule="evenodd">
<mask
id="mask-2"
fill="white">
<use xlink:href="#path-1"></use>
</mask>
<use
id="形状"
fill="#000000"
xlink:href="#path-1"></use>
</g>
</svg>

After

Width:  |  Height:  |  Size: 5.4 KiB

View File

@ -0,0 +1,18 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg viewBox="0 0 24 24" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<title>ic/gallery/public/video_filled</title>
<defs>
<path d="M14,5 C15.6568542,5 17,6.34314575 17,8 L17,16 C17,17.6568542 15.6568542,19 14,19 L4,19 C2.34314575,19 1,17.6568542 1,16 L1,8 C1,6.34314575 2.34314575,5 4,5 L14,5 Z M22.9503469,7.16150569 C22.9831987,7.27053648 23,7.38559225 23,7.50153111 L23,16.4987473 C23,17.051032 22.626904,17.4987473 22.1666667,17.4987473 C22.0700509,17.4987473 21.9741711,17.4785857 21.8833121,17.4391635 L18,15.7542608 L18,8.24601755 L21.8833121,6.56111487 C22.3161268,6.37332401 22.7938545,6.64212814 22.9503469,7.16150569 Z" id="path-1"></path>
</defs>
<g id="ic/gallery/public/video_filled" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
<mask id="mask-2" fill="white">
<use xlink:href="#path-1"></use>
</mask>
<use id="Combined-Shape" fill="#ffffff" xlink:href="#path-1"></use>
<g id="编组" mask="url(#mask-2)" fill="#FFFFFF" fill-opacity="0">
<g id="矩形">
<rect x="0" y="0" width="24" height="24"></rect>
</g>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 1.2 KiB

View File

@ -0,0 +1,50 @@
/*
* Copyright (c) 2021 Huawei Device Co., Ltd.
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
let listData = [];
let gridData = [];
// 用来缓存相册列表与详情数据
let photoList = [];
// 用来缓存首页相册数据
let mainAlbumList = [];
let isRefreshed = true;
export default {
getListData() {
return listData;
},
getGridData() {
return gridData;
},
setPhotoList(list) {
photoList = list;
},
getPhotoList() {
return photoList;
},
setMainAlbumList(list) {
mainAlbumList = list;
},
getMainAlbumList() {
return mainAlbumList;
},
isRefreshed(flag) {
isRefreshed = flag;
},
getRefreshed() {
return isRefreshed;
},
};

View File

@ -0,0 +1,67 @@
/*
* Copyright (c) 2021 Huawei Device Co., Ltd.
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
import router from '@system.router';
import prompt from '@system.prompt';
let iconCache = {};
export default {
getIcon(type) {
return iconCache[type];
},
initIcon() {
iconCache['camera'] = '/common/image/svg/camera.svg';
iconCache['selected'] = '/common/image/svg/checkbox_filled.svg';
iconCache['unselected'] = '/common/image/svg/checkbox_white.svg';
iconCache['collection'] = '/common/image/svg/favorite_white_filled.svg';
iconCache['friend'] = '/common/image/svg/shared_album_white_filled.svg';
iconCache['video'] = '/common/image/svg/video_white_filled.svg';
iconCache['rename'] = '/common/image/svg/rename.svg';
iconCache['rename_black'] = '/common/image/svg/rename_filled_black.svg';
iconCache['delete'] = '/common/image/svg/delete.svg';
iconCache['delete_black'] = '/common/image/svg/delete_filled_black.svg';
iconCache['more'] = '/common/image/svg/more.svg';
iconCache['select_all'] = '/common/image/svg/select_all.svg';
iconCache['move'] = '/common/image/svg/move.svg';
iconCache['copy'] = '/common/image/svg/copy.svg';
iconCache['back'] = '/common/image/svg/back.svg';
iconCache['close'] = '/common/image/svg/close.svg';
iconCache['info'] = '/common/image/svg/info.svg';
iconCache['unselected_black'] = '/common/image/svg/unchecked_black.svg';
iconCache['enlarge'] = '/common/image/svg/enlarge.svg';
iconCache['narrow'] = '/common/image/svg/narrow.svg';
iconCache['scaleadd'] = '/common/image/svg/scaleadd.svg';
iconCache['scaleminus'] = '/common/image/svg/scaleminus.svg';
},
pxTodp(value, density) {
return value / density * 2;
},
// 以下函数返回 min包含 max包含之间的数字
getRandomInt(min, max) {
return Math.floor(Math.random() * (max - min + 1)) + min;
},
timestampToTime(timestamp) {
let date = new Date(timestamp * 1000);
let Y = date.getFullYear() + '年';
let M = (date.getMonth() + 1 < 10 ? '0' + (date.getMonth() + 1) : date.getMonth() + 1) + '月';
let D = date.getDate() + '日';
let h = date.getHours() + ':';
let m = date.getMinutes() + ':';
let s = date.getSeconds();
return Y + M + D;
}
};

View File

@ -0,0 +1,39 @@
{
"strings": {
"loadTextOne": "All your albums, at a glance",
"loadTextTwo": "Reliving your best memories has never been easier",
"otherAlbums": "Others",
"albums": "Albums",
"delete": "Delete",
"rename": "Rename",
"move": "Move",
"copy": "Copy",
"detail": "Details",
"more": "More",
"rotate": "Rotate",
"allPhotos": "All photos",
"video": "Videos",
"unChoose": "Select images",
"cancel": "Cancel",
"define": "Confirm",
"repeateName": "Name already exists",
"detailInfo": "Details",
"name": "Title",
"size": "Size",
"know": "Ok",
"chooseAddType": "Copy or move",
"items": " items",
"selected": "Selected ",
"number": "Quantity",
"createAlbum": "Add album",
"device": "Device",
"inputPlaceholder": "The name cannot be left empty",
"selectAll": "Select all",
"unSelectAll": "Deselect all",
"chooseAlbums": "Select album",
"operateTitle": "Move or Copy",
"deleteInfo": "Delete selected ",
"isDeleteChooseItem": "Delete item ? ",
"free": "free"
}
}

View File

@ -0,0 +1,39 @@
{
"strings": {
"loadTextOne": "管理和浏览分类清晰的相册",
"loadTextTwo": "整理美好记忆,查找更方便",
"otherAlbums": "其他相册",
"albums": "相册",
"delete": "删除",
"rename": "重命名",
"move": "移动",
"copy": "复制",
"detail": "详情",
"more": "更多",
"rotate": "旋转",
"allPhotos": "所有照片",
"video": "视频",
"unChoose": "未选择",
"cancel": "取消",
"define": "确定",
"repeateName": "命名重复",
"detailInfo": "详细信息",
"name": "名称",
"size": "大小",
"know": "知道了",
"isDeleteChooseItem": "是否删除已选项?",
"chooseAddType": "选择添加方式",
"number": "数量",
"createAlbum": "新建相册",
"device": "设备",
"inputPlaceholder": "请输入名称",
"selectAll": "全选",
"unSelectAll": "非全选",
"chooseAlbums": "选择相册",
"operateTitle": "移动/复制到",
"deleteInfo": "是否删除已选择 ",
"items": " 项",
"selected": "已选择 ",
"free": "剩余"
}
}

View File

@ -0,0 +1,63 @@
/*
* Copyright (c) 2021 Huawei Device Co., Ltd.
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
@import "../../common/css/app.css";
.afterselect-container {
flex-direction: column;
padding: 0 8px;
background-color: #fff;
}
.grid-content {
display: flex;
flex-wrap: wrap;
}
.grid-content-stack {
position: relative;
width: 174px;
height: 180px;
padding: 4px;
}
.scale-img {
position: absolute;
width: 48px;
height: 48px;
top: 10px;
left: 10px;
}
.select-img {
right: 10px;
bottom: 10px;
position: absolute;
width: 38px;
height: 38px;
}
/* xxx.css */
.shared-transition-style {
shared-transition-effect: exchange;
shared-transition-name: shared-transition;
}
.list-animation {
animation-name: transition-enter;
animation-duration: 1500ms;
}

View File

@ -0,0 +1,47 @@
<!--
/*
* Copyright (c) 2021 Huawei Device Co., Ltd.
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-->
<element src="../../common/component/custom_list/custom_list.hml"></element>
<element src="../../common/component/top_bar/top_bar.hml"></element>
<element src="../dialog/progress_dailog/progress_dailog.hml"></element>
<div class="afterselect-container">
<top_bar
id="topBar"
data-source="{{ topBarSource }}"
@left-click="topBarLeftClick"
@right-click="topBarRightClick">
</top_bar>
<list class="list-animation">
<list-item clickeffect="false">
<div class="grid-content" if="{{ list && list.length > 0 }}">
<div for="{{ (index, item) in list }}">
<stack class="grid-content-stack" style="width : {{ gridItemWidth }};">
<image class="shared-transition-style" style="opacity : {{ item.checked ? 0.5 : 1 }};"
src="{{ item.src }}"
onclick="itemClick({{ item }},{{ index }})">
</image>
</stack>
</div>
</div>
</list-item>
</list>
<progress_dailog id="progress_dialog"
progress="{{ progress }}"
title="{{ progressTilte }}"
oprate-type="{{ oprateType }}"></progress_dailog>
</div>

View File

@ -0,0 +1,312 @@
/*
* Copyright (c) 2021 Huawei Device Co., Ltd.
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
import router from '@system.router';
import prompt from '@system.prompt';
import medialibrary from '@ohos.multimedia.medialibrary';
let media = medialibrary.getMediaLibraryHelper();
export default {
data: {
topBarSource: {
title: '',
leftSrc: '/common/image/svg/back.svg',
rightSrc: '/common/image/icon/selected.png',
isShowLeft: true,
isShowRight: false
},
isShowBottomBar: false,
list: [],
gridItemWidth: '174px',
// 操作方式
operationType: '',
progress: 0,
progressTilte: '相册',
oprateType: '',
fromAlbum: null,
toAlbum: null,
consoleInfo: '',
},
onReady() {
let self = this;
for (let i = 0; i < self.list.length; i++) {
setTimeout(() => {
self.progress += Math.floor(100 / self.list.length);
if (i === self.list.length - 1) {
self.$element('progress_dialog').close();
}
}, (i + 1) * 300);
}
setTimeout(() => {
self.$element('progress_dialog').show();
self.operations();
}, 50);
},
// 如果是从操作项过来
operations() {
let self = this;
self.initData();
if (self.operationType === 'move') {
self.oprateType = self.$t('strings.move');
if (self.fromAlbum.name === self.$t('strings.allPhotos')
|| self.fromAlbum.name === self.$t('strings.video')) {
self.mediaAllAlbumMove();
} else {
self.mediaMove();
}
} else if (self.operationType === 'copy') {
self.oprateType = self.$t('strings.copy');
if (self.fromAlbum.name === self.$t('strings.allPhotos')
|| self.fromAlbum.name === self.$t('strings.video')) {
self.mediaAllAlbumCopy();
} else {
self.mediaCopy();
}
} else {
self.$element('progress_dialog').close();
self.loadData();
}
},
// 所有相册入口复制
mediaAllAlbumCopy() {
let self = this;
for (let i = 0; i < self.list.length; i++) {
let item = self.list[i];
let arrs = item.URI.split('/');
let albumName = arrs[arrs.length - 2];
let args = {
selections: albumName,
selectionArgs: ['imagealbum', 'videoalbum'],
};
media.getMediaAssets(args, (error, images) => {
if (images) {
for (let j = 0; j < images.length; j++) {
let fromItem = images[j];
if (fromItem.name === item.name) {
media.createImageAsset((error, newImage) => {
if (newImage) {
newImage.startCreate((error, startFlag) => {
if (startFlag) {
self.$element('progress_dialog').close();
newImage.albumName = self.toAlbum.name;
fromItem.commitCopy(newImage, (err, data) => {
self.$app.$def.datamanage.isRefreshed(true);
self.loadData();
});
}
});
}
});
}
}
}
});
}
},
// 复制功能
mediaCopy() {
let self = this;
let args = {
selections: self.fromAlbum.name,
selectionArgs: ['imagealbum', 'videoalbum'],
};
media.getMediaAssets(args, (error, images) => {
if (images) {
for (let j = 0; j < images.length; j++) {
let fromItem = images[j];
for (let i = 0; i < self.list.length; i++) {
let item = self.list[i];
if (fromItem.name === item.name) {
media.createImageAsset((error, newImage) => {
if (newImage) {
newImage.startCreate((error, startFlag) => {
if (startFlag) {
self.$element('progress_dialog').close();
newImage.albumName = self.topBarSource.title;
fromItem.commitCopy(newImage, (err, data) => {
self.$app.$def.datamanage.isRefreshed(true);
self.loadData();
});
}
});
}
});
}
}
}
} else {
prompt.showToast({
message: error.message,
duration: 1000
});
}
});
},
// 查询
loadData() {
let self = this;
if (self.album) {
let args = {
selections: self.topBarSource.title,
selectionArgs: ['imagealbum'],
};
if (self.album.name === self.$t('strings.allPhotos')) {
args.selections = '';
self.topBarSource.title = self.$t('strings.allPhotos');
}
media.getMediaAssets(args, (error, images) => {
if (error) {
prompt.showToast({
message: error.message,
duration: 1000
});
}
if (images) {
for (let i = 0; i < images.length; i++) {
let item = images[i];
item.src = 'file://' + item.URI;
item.icon = '';
item.checked = false;
}
self.list = images;
}
});
}
},
// 所有相册入口移动功能
mediaAllAlbumMove() {
let self = this;
for (let i = 0; i < self.list.length; i++) {
let item = self.list[i];
let arrs = item.URI.split('/');
let albumName = arrs[arrs.length - 2];
let args = {
selections: albumName,
selectionArgs: ['imagealbum', 'videoalbum'],
};
media.getMediaAssets(args, (error, images) => {
if (images) {
for (let j = 0; j < images.length; j++) {
let fromItem = images[j];
if (fromItem.name === item.name) {
media.createImageAsset((error, newImage) => {
if (newImage) {
newImage.startCreate((error, startFlag) => {
if (startFlag) {
newImage.albumName = self.toAlbum.name;
fromItem.commitCopy(newImage, (err, data) => {
self.$element('progress_dialog').close();
self.loadData();
fromItem.commitDelete((error, commitFlag) => {
if (commitFlag) {
self.$app.$def.datamanage.isRefreshed(true);
}
});
});
}
});
}
});
}
}
}
});
}
},
// 移动功能
mediaMove() {
let self = this;
let args = {
selections: self.fromAlbum.name,
selectionArgs: ['imagealbum', 'videoalbum'],
};
media.getMediaAssets(args, (error, images) => {
if (images) {
for (let j = 0; j < images.length; j++) {
let fromItem = images[j];
for (let i = 0; i < self.list.length; i++) {
let item = self.list[i];
if (fromItem.name === item.name) {
media.createImageAsset((error, newImage) => {
if (newImage) {
newImage.startCreate((error, startFlag) => {
if (startFlag) {
newImage.albumName = self.topBarSource.title;
fromItem.commitCopy(newImage, (err, data) => {
self.$element('progress_dialog').close();
self.loadData();
fromItem.commitDelete((error, commitFlag) => {
if (commitFlag) {
self.$app.$def.datamanage.isRefreshed(true);
}
});
});
}
});
}
});
}
}
}
} else {
prompt.showToast({
message: error.message,
duration: 1000
});
}
});
},
initData() {
let list = this.list;
for (let index = 0; index < list.length; index++) {
let item = list[index];
item.icon = '';
item.checked = false;
}
},
// 顶部左侧按钮
topBarLeftClick() {
router.back();
},
// 顶部右侧按钮
topBarRightClick() {
},
itemClick(item, index) {
let self = this;
router.push(
{
uri: 'pages/mypages/photodetail/photodetail',
params: {
list: self.list,
selectMode: self.selectMode,
sharetIndex: index
},
}
);
}
};

View File

@ -0,0 +1,56 @@
/*
* Copyright (c) 2021 Huawei Device Co., Ltd.
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
.add-type-dialog-main {
background-color: #fff;
width: 100%;
border-radius: 24px;
margin: 24px;
}
.title {
font-size: 40px;
color: #000;
opacity: .9;
padding: 28px 48px;
}
.dialog-div {
flex-direction: column;
background-color: #fff;
border-radius: 24px;
}
.bottom-div {
padding: 28px 0;
justify-content: space-around;
align-items: center;
}
.btn-txt {
background-color: #fff;
color: #1e90ff;
}
.text {
color: #000;
opacity: .6;
}
.text-div {
padding: 28px 0;
margin: 0 48px;
border-bottom: 1px solid #808080;
}

View File

@ -0,0 +1,32 @@
<!--
/*
* Copyright (c) 2021 Huawei Device Co., Ltd.
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-->
<dialog id="addTypeDialog" class="add-type-dialog-main" oncancel="cancelDialog">
<div class="dialog-div">
<text class="title">{{ $t('strings.chooseAddType') }}</text>
<div class="text-div" on:click="operation({{ '复制' }})">
<text class="text">{{ $t('strings.copy') }}</text>
</div>
<div style="padding : 28px 48px;" on:click="operation({{ '移动' }})">
<text class="text">{{ $t('strings.move') }}</text>
</div>
<div class="bottom-div" onclick="cancel">
<text class="btn-txt">{{ $t('strings.cancel') }}</text>
</div>
</div>
</dialog>

View File

@ -0,0 +1,44 @@
/*
* Copyright (c) 2021 Huawei Device Co., Ltd.
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
import router from '@system.router';
import prompt from '@system.prompt';
export default {
data: {
inputName: ''
},
onReady() {
},
onInit() {
},
show() {
this.$element('addTypeDialog').show();
},
close() {
this.$element('addTypeDialog').close();
},
query() {
this.close();
},
cancel() {
this.close();
},
operation(name) {
this.$emit('addTypeDialogClick', name);
}
};

View File

@ -0,0 +1,70 @@
/*
* Copyright (c) 2021 Huawei Device Co., Ltd.
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
.create_dialog-main {
background-color: #fff;
width: 100%;
border-radius: 24px;
margin: 24px;
}
.title {
font-size: 40px;
color: #000;
opacity: .9;
padding: 28px;
}
.input {
height: 112px;
margin: 0 24px;
border-bottom: 1px solid #000;
background-color: #fff;
padding-left: 5px;
color: #000;
opacity: .6;
font-size: 32px;
}
.dialog-div {
border-radius: 24px;
flex-direction: column;
background-color: #fff;
}
.bottom-div {
padding: 36px 24px;
align-items: center;
display: flex;
}
.btn-txt {
background-color: #fff;
color: #1e90ff;
text-align: center;
justify-content: center;
flex: 1;
}
.text {
font-size: 32px;
color: #000;
opacity: .6;
padding: 24px 28px;
}
.line {
border-left: 1px solid #a9a9a9;
}

View File

@ -0,0 +1,30 @@
<!--
/*
* Copyright (c) 2021 Huawei Device Co., Ltd.
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-->
<dialog id="createDialog" class="create_dialog-main" oncancel="cancelDialog">
<div class="dialog-div">
<text class="title">{{ $t('strings.createAlbum') }}</text>
<input class="input" type="text" value="{{ inputName }}" onchange="valueChange"
placeholder="{{ $t('strins.inputPlaceholder') }}"></input>
<text class="text">{{ $t('strings.device') }}{{ $t('strings.free') }} 0GB</text>
<div class="bottom-div">
<text onclick="cancel" class="btn-txt">{{ $t('strings.cancel') }}</text>
<text onclick="query" class="btn-txt line">{{ $t('strings.define') }}</text>
</div>
</div>
</dialog>

View File

@ -0,0 +1,65 @@
/*
* Copyright (c) 2021 Huawei Device Co., Ltd.
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
import router from '@system.router';
import prompt from '@system.prompt';
export default {
data: {
inputName: ''
},
onReady() {
let str = 'abcdefghijklmnopqrstuvwxyz';
for (let i = 0; i < 5; i++) {
this.inputName += str[this.getRandomInt(0, 5)];
}
},
getRandomInt(min, max) {
return Math.floor(Math.random() * (max - min + 1)) + min;
},
onInit() {
},
onHide() {
},
show() {
this.$element('createDialog').show();
},
close() {
this.$element('createDialog').close();
},
valueChange(value) {
this.inputName = value.value;
},
setInputName(inputName) {
this.inputName = inputName;
},
getInputName() {
return this.inputName;
},
query() {
if (!this.inputName) {
prompt.showToast({
message: this.$t('strings.inputPlaceholder')
});
return false;
}
this.$emit('createDialogAlbum', this.inputName);
},
cancel() {
this.close();
}
};

View File

@ -0,0 +1,58 @@
/*
* Copyright (c) 2021 Huawei Device Co., Ltd.
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
.delete-dialog-main {
background-color: #fff;
width: 100%;
border-radius: 24px;
margin: 24px;
}
.text-div {
margin-top: 10px;
justify-content: center;
text-align: center;
padding: 28px;
}
.title {
color: #000;
}
.dialog-div {
border-radius: 24px;
flex-direction: column;
background-color: #fff;
}
.bottom-div {
padding: 36px 24px;
display: flex;
align-items: center;
}
.text {
flex: 1;
text-align: center;
color: #06a6ff;
justify-content: center;
}
.line {
border-left: 1px solid #a9a9a9;
}

View File

@ -0,0 +1,29 @@
<!--
/*
* Copyright (c) 2021 Huawei Device Co., Ltd.
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-->
<dialog id="delete_dialog" class="delete-dialog-main" oncancel="cancelDialog">
<div class="dialog-div">
<div class="text-div">
<text class="title">{{ title }}</text>
</div>
<div class="bottom-div">
<text onclick="cancel" class="text">{{ $t('strings.cancel') }}</text>
<text onclick="query" class="text line" style="color : #ff0000;">{{ $t('strings.delete') }}</text>
</div>
</div>
</dialog>

View File

@ -0,0 +1,47 @@
/*
* Copyright (c) 2021 Huawei Device Co., Ltd.
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
import router from '@system.router';
import prompt from '@system.prompt';
export default {
data: {
title: ''
},
onReady() {
},
onInit() {
},
onHide() {
},
setTitle(text) {
this.title = text;
},
show() {
this.$element('delete_dialog').show();
},
close() {
this.$element('delete_dialog').close();
},
query() {
this.$emit('deleteQuery');
this.close();
},
cancel() {
this.close();
}
};

View File

@ -0,0 +1,45 @@
/*
* Copyright (c) 2021 Huawei Device Co., Ltd.
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
.detail_dialog {
width: 100%;
margin: 24px;
background-color: #fff;
border-radius: 16px;
}
.detailDialog-div {
flex-direction: column;
display: flex;
}
.detailDialog-title {
font-size: 35px;
padding: 25px 15px 15px 30px;
color: #000;
}
.detailDialog-text {
font-size: 30px;
padding: 25px 15px 15px 35px;
color: #000;
}
.detailDialog-btn {
padding: 20px 0 30px 0;
justify-content: center;
}

View File

@ -0,0 +1,28 @@
<!--
/*
* Copyright (c) 2021 Huawei Device Co., Ltd.
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-->
<dialog id="detail_dialog" oncancel="cancel" class="detail_dialog">
<div class="detailDialog-div">
<text class="detailDialog-title">{{ $t('strings.detailInfo') }}</text>
<text class="detailDialog-text">{{ $t('strings.number') }} {{ formData.number }}</text>
<text class="detailDialog-text">{{ $t('strings.size') }} {{ formData.size }} MB</text>
<div class="detailDialog-btn">
<text style="color : dodgerblue;" on:click="query">{{ $t('strings.know') }}</text>
</div>
</div>
</dialog>

View File

@ -0,0 +1,41 @@
/*
* Copyright (c) 2021 Huawei Device Co., Ltd.
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
import router from '@system.router';
import prompt from '@system.prompt';
export default {
data: {
formData: {}
},
onReady() {
},
onInit() {
},
show() {
this.$element('detail_dialog').show();
},
close() {
this.$element('detail_dialog').close();
},
query() {
this.close();
},
cancel() {
this.close();
}
};

View File

@ -0,0 +1,61 @@
/*
* Copyright (c) 2021 Huawei Device Co., Ltd.
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
.progress_dailog {
background-color: #fff;
width: 100%;
border-radius: 16px;
margin: 24px;
}
.dialog-div {
padding: 48px 36px;
flex-direction: column;
background-color: #fff;
border-radius: 20px;
}
.inner-txt {
display: flex;
justify-content: space-between;
align-items: center;
}
.text {
color: #000;
}
.grey-text {
color: #a9a9a9;
font-size: 25px;
}
.inner-progress {
display: flex;
justify-content: space-between;
align-items: center;
margin-top: 20px;
}
.icon {
height: 48px;
width: 48px;
align-items: center;
}
.progress {
color: #1e90ff;
background-color: #dcdcdc;
}

View File

@ -0,0 +1,33 @@
<!--
/*
* Copyright (c) 2021 Huawei Device Co., Ltd.
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-->
<dialog id="progressDialog" oncancel="cancel" class="progress_dailog">
<div class="dialog-div">
<div class="inner-txt">
<text class="text">正在{{ oprateType }}到{{ title }}</text>
<text class="grey-text">{{ progress }}%</text>
</div>
<div class="inner-progress">
<div>
<progress class="progress" type="horizontal" percent="{{ progress }}"></progress>
</div>
<div style="padding-left : 10px;">
<image class="icon" src="/common/image/svg/cancel_bg.svg"></image>
</div>
</div>
</div>
</dialog>

View File

@ -0,0 +1,43 @@
/*
* Copyright (c) 2021 Huawei Device Co., Ltd.
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
import router from '@system.router';
import prompt from '@system.prompt';
export default {
data: {
progress: 0,
title: '',
oprateType: ''
},
onReady() {
},
onInit() {
},
show() {
this.$element('progressDialog').show();
},
close() {
this.$element('progressDialog').close();
},
query() {
this.close();
},
cancel() {
this.close();
}
};

View File

@ -0,0 +1,65 @@
/*
* Copyright (c) 2021 Huawei Device Co., Ltd.
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
.rename_dialog-main {
background-color: #fff;
width: 100%;
border-radius: 24px;
margin: 24px;
}
.title {
font-size: 40px;
color: #000;
opacity: .9;
padding: 24px;
}
.input {
height: 112px;
margin: 0 24px;
border-bottom: 1px solid #000;
background-color: #fff;
padding-left: 5px;
color: #000;
opacity: .6;
font-size: 32px;
}
.dialog-div {
flex-direction: column;
background-color: #fff;
border-radius: 24px;
}
.bottom-div {
padding: 36px 24px;
align-items: center;
display: flex;
}
.btn-txt {
flex: 1;
font-size: 32px;
text-align: center;
justify-content: center;
background-color: #fff;
color: #1e90ff;
}
.line {
border-left: 2px solid #a9a9a9;
}

View File

@ -0,0 +1,28 @@
<!--
/*
* Copyright (c) 2021 Huawei Device Co., Ltd.
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-->
<dialog id="renameDialog" class="rename_dialog-main" oncancel="cancelDialog">
<div class="dialog-div">
<text class="title">{{ $t('strings.rename') }}</text>
<input class="input" type="text" value="{{ inputName }}" placeholder="请输入名称"></input>
<div class="bottom-div">
<text onclick="cancel" class="btn-txt">{{ $t('strings.cancel') }}</text>
<text onclick="query" class="btn-txt line">{{ $t('strings.define') }}</text>
</div>
</div>
</dialog>

View File

@ -0,0 +1,48 @@
/*
* Copyright (c) 2021 Huawei Device Co., Ltd.
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
import router from '@system.router';
import prompt from '@system.prompt';
export default {
data: {
inputName: 'modifyAlbumName'
},
onReady() {
},
onInit() {
},
show() {
this.$element('renameDialog').show();
},
close() {
this.$element('renameDialog').close();
},
setInputName(inputName) {
this.inputName = inputName;
},
getInputName() {
return this.inputName;
},
query() {
console.info('rename_dialog' + this.inputName);
this.$emit('renameDialogAlbum', this.inputName);
},
cancel() {
this.close();
}
};

View File

@ -0,0 +1,28 @@
/*
* Copyright (c) 2021 Huawei Device Co., Ltd.
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
.editImage-container {
background-color: #fff;
flex-direction: column;
height: 100%;
width: 100%;
}
.title {
font-size: 30px;
text-align: center;
width: 200px;
height: 100px;
}

View File

@ -0,0 +1,31 @@
<!--
/*
* Copyright (c) 2021 Huawei Device Co., Ltd.
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-->
<element src="../../common/component/top_bar/top_bar.hml"></element>
<element src="../../common/component/bottom_bar/bottom_bar.hml"></element>
<div class="editImage-container">
<top_bar
id="topBar"
data-source="{{ topBarSource }}"
@left-click="topBarLeftClick">
</top_bar>
<div>
<canvas id="edit_canvas"></canvas>
</div>
<bottom_bar is-show="{{ true }}" @bottom-tab-click="bottomTabClick"
data-source="{{ bottomBarSource }}"></bottom_bar>
</div>

View File

@ -0,0 +1,99 @@
/*
* Copyright (c) 2021 Huawei Device Co., Ltd.
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
import router from '@system.router';
let image = new Image();
export default {
data: {
formData: null,
canvas: null,
ctx: null,
topBarSource: {
title: '',
leftSrc: '/common/image/svg/back.svg',
rightSrc: '',
isShowLeft: true,
isShowRight: false
},
bottomBarSource: [
{
id: 1,
src: '/common/image/svg/rotate.svg',
name: ''
},
],
rotate: 0
},
onInit() {
this.canvas = this.$element('edit_canvas');
this.ctx = this.canvas.getContext('2d');
image.src = this.formData.src;
this.initCanvas();
},
topBarLeftClick() {
router.back();
},
bottomTabClick(item) {
if (item.detail.id === 1) {
if (this.rotate === 0) {
this.rotate1();
} else if (this.rotate === 90) {
this.rotate2();
} else if (this.rotate === 180) {
this.rotate3();
} else {
this.rotate4();
}
}
},
initCanvas() {
this.ctx.save(); // 保存画布
this.ctx.translate(0, 0); // 移动坐标系原点
this.ctx.drawImage(image, 0, 0, 720, 720);
this.ctx.restore(); // 恢复画布
},
rotate1() {
this.ctx.save(); // 保存画布
this.ctx.translate(720, 0); // 移动坐标系原点
this.ctx.rotate(90 * Math.PI / 180); // 旋转坐标系
this.ctx.drawImage(image, 0, 0, 720, 720);
this.ctx.restore(); // 恢复画布
this.rotate = 90;
},
rotate2() {
this.ctx.save(); // 保存画布
this.ctx.translate(720, 720); // 移动坐标系原点
this.ctx.rotate(180 * Math.PI / 180); // 旋转坐标系
this.ctx.drawImage(image, 0, 0, 720, 720);
this.ctx.restore(); // 恢复画布
this.rotate = 180;
},
rotate3() {
this.ctx.save(); // 保存画布
this.ctx.translate(0, 720); // 移动坐标系原点
this.ctx.rotate(270 * Math.PI / 180); // 旋转坐标系
this.ctx.drawImage(image, 0, 0, 720, 720);
this.ctx.restore(); // 恢复画布
this.rotate = 270;
},
rotate4() {
this.ctx.save(); // 保存画布
this.ctx.translate(0, 0); // 移动坐标系原点
this.ctx.drawImage(image, 0, 0, 720, 720);
this.ctx.restore(); // 恢复画布
this.rotate = 0;
},
};

View File

@ -0,0 +1,65 @@
/*
* Copyright (c) 2021 Huawei Device Co., Ltd.
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
@import "../../common/css/app.css";
.main-container {
display: flex;
flex-direction: column;
background-color: #fff;
}
.head-content {
margin-top: 30px;
width: 100%;
height: 420px;
}
.bottom-layout {
display: flex;
align-items: center;
}
.head-img {
width: 100%;
height: 100%;
padding: 16px;
}
.grid-content {
display: flex;
flex-wrap: wrap;
}
.grid-content-stack {
width: 330px;
height: 380px;
}
.grid-content-bottom {
flex-direction: column;
justify-content: flex-end;
padding: 16px;
}
.img {
border-radius: 32px;
}
.text {
color: #fff;
}

View File

@ -0,0 +1,60 @@
<!--
/*
* Copyright (c) 2021 Huawei Device Co., Ltd.
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-->
<element src="../../common/component/custom_list/custom_list.hml"></element>
<element src="../../common/component/top_bar/top_bar.hml"></element>
<element src="../../common/component/bottom_bar/bottom_bar.hml"></element>
<element src="../dialog/rename_dialog/rename_dialog.hml"></element>
<element src="../dialog/create_dailog/create_dailog.hml"></element>
<element src="../dialog/delete_dialog/delete_dialog.hml"></element>
<div class="main-container" ref="parentDiv">
<top_bar
id="topBar"
data-source="{{ topBarSource }}"
@left-click="topBarLeftClick"
@right-click="topBarRightClick">
</top_bar>
<div class="load-div" show="{{ showEmptyDiv }}">
<image class="load-div-img" src="/common/image/icon/noalbums.png"></image>
<text class="load-div-text1"> {{ $t('strings.loadTextOne') }}</text>
<text class="load-div-text2"> {{ $t('strings.loadTextTwo') }}</text>
</div>
<list style="padding : 0px 24px;" show="{{ ! showEmptyDiv }}">
<list-item clickeffect="false">
<custom_list id="mainList"
head-title="{{ headTitle }}"
show-head="{{ true }}"
select-mode="{{ selectMode }}"
grid-data="{{ gridData }}"
grid-item-style="{{ gridItemStyle }}"
grid-item-checked-style="{{ gridItemCheckedStyle }}"
head-source="{{ headSource }}"
list-data="{{ listData }}"
show-list-title="{{ true }}"
list-title="{{ $t('strings.otherAlbums') }}"
@on-click="itemClick"
@long-press="longPress"
@on-checked-change="onCheckedChange"></custom_list>
</list-item>
</list>
<bottom_bar is-show="{{ isShowBottomBar }}" data-source="{{ bottomBarSource }}" @bottom-tab-click="bottomTabClick">
</bottom_bar>
<rename_dialog id="rename_dialog" input-name="{{ inputName }}" @rename-dialog-album="renameDialogAlbum">
</rename_dialog>
<create_dailog id="create_dailog" @create-dialog-album="createDialogAlbum"></create_dailog>
<delete_dialog id="delete_dialog" @delete-query="deleteQuery"></delete_dialog>
</div>

View File

@ -0,0 +1,496 @@
/*
* Copyright (c) 2021 Huawei Device Co., Ltd.
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
/*
* @file
*
*
*/
import router from '@system.router';
import prompt from '@system.prompt';
import medialibrary from '@ohos.multimedia.medialibrary';
import featureAbility from '@ohos.ability.featureAbility';
let media = medialibrary.getMediaLibraryHelper();
export default {
data: {
headTitle: '',
showEmptyDiv: true,
topBarSource: {
title: '',
leftSrc: '/common/image/svg/close.svg',
rightSrc: '/common/image/svg/add.svg',
isShowLeft: false,
isShowRight: true
},
bottomBarSource: [
{
id: 1,
src: '/common/image/svg/rename.svg',
name: '',
disabled: false,
visible: true,
},
{
id: 2,
src: '/common/image/svg/delete.svg',
name: '',
disabled: false,
visible: true,
},
],
listData: [],
gridData: [],
headSource: null,
selectMode: false,
isShowBottomBar: false,
gridItemStyle: {
width: '336px',
padding: '8px',
height: '490px',
radius: '32px'
},
consoleInfo: '',
gridItemCheckedStyle: {
height: '38px',
width: '38px',
padding: '8px',
},
gridCopyData: [],
cacheAlbums: [],
inputName: ''
},
onInit() {
this.initNational();
// 判断是否从相机跳转过来
featureAbility.getWant().then(r => {
if (r && r.parameters && r.parameters.uri) {
router.replace(
{
uri: 'pages/photodetail/photodetail',
params: {
album: {
name: 'camera',
list: []
}
},
}
);
}
});
},
initNational() {
this.headTitle = this.$t('strings.albums');
this.bottomBarSource[0].name = this.$t('strings.rename');
this.bottomBarSource[1].name = this.$t('strings.delete');
},
onShow() {
if (this.$app.$def.datamanage.getRefreshed()) {
this.loadData();
}
},
onBackPress() {
if (this.selectMode) {
this.topBarLeftClick();
return true;
} else {
return false;
}
},
// 根据是否开启选择模式,初始化选中效果
initChecked() {
let self = this;
let gridList = self.list;
// 宫格数据
for (let index = 0; index < gridList.length; index++) {
let item = gridList[index];
if (self.selectMode) {
item.icon = self.$app.$def.utils.getIcon('unselected');
} else {
item.icon = '';
}
item.checked = false;
}
},
loadData() {
let self = this;
self.selectMode = false;
self.getAllPhotos().then(allRes => {
if (allRes) {
self.showEmptyDiv = false;
self.headSource = allRes;
self.getAlbums().then(albumRes => {
if (albumRes) {
self.gridData = albumRes.grid;
self.listData = albumRes.list;
self.getVideoAlbum().then(videoRes => {
self.cacheAlbums.push(videoRes);
self.gridData.push(videoRes);
});
}
});
}
});
self.$app.$def.datamanage.isRefreshed(false);
},
// 所有照片
getAllPhotos() {
let self = this;
return new Promise(function (resolve, reject) {
media.getMediaAssets((error, value) => {
if (value && value.length > 0) {
let obj = {
name: self.$t('strings.allPhotos'),
id: -1,
icon: '',
checked: false,
type: 'system',
src: 'file://' + value[0].URI,
list: value
};
resolve(obj);
} else {
reject(null);
}
});
});
},
// 所有相册
getAlbums() {
let self = this;
let args = {
selections: '',
selectionArgs: ['imagealbum'],
};
return new Promise(function (resolve, reject) {
media.getImageAlbums(args, (error, albums) => {
if (albums) {
self.cacheAlbums = albums;
let list = [];
let grid = [];
for (let i = 0; i < albums.length; i++) {
let album = albums[i];
setTimeout(() => {
self.getAlbumImage(album).then((res) => {
let gridObj = {
name: album.albumName,
id: album.albumId,
icon: '',
checked: false,
type: '',
kind: '',
src: 'file://' + res[0].URI,
list: res
};
if (album.albumName === 'camera') {
gridObj.type = 'system';
grid.push(gridObj);
} else {
list.push(gridObj);
}
if (i === albums.length - 1) {
resolve({
list: list,
grid: grid
});
}
});
}, (i + 1) * 50);
}
} else {
reject(null);
}
});
});
},
getAlbumImage(album) {
let args = {
selections: album.albumName,
selectionArgs: ['imagealbum', 'videoalbum'],
};
return new Promise(function (resolve, reject) {
media.getMediaAssets(args, (error, images) => {
if (images) {
resolve(images);
} else {
reject(null);
}
});
});
},
// 获取视频数据创建视频相册
getVideoAlbum() {
let self = this;
let args = {
selections: '',
selectionArgs: ['videoalbum'],
};
return new Promise(function (resolve, reject) {
media.getVideoAssets(args, (error, albums) => {
if (error) {
reject(null);
}
if (albums && albums.length > 0) {
let album = albums[0];
let videoObj = {
name: self.$t('strings.video'),
id: -2,
icon: '',
checked: false,
type: 'system',
kind: 'video',
src: 'file://' + album.URI,
list: albums
};
resolve(videoObj);
}
});
});
},
createDialogAlbum(value) {
let name = value.detail;
if (!this.isRepeatName(name)) {
this.createAlbum(value.detail);
}
},
// 新增
createAlbum(albumName) {
let self = this;
self.$element('create_dailog').close();
media.createAlbum((err, album) => {
if (album) {
album.albumName = albumName + Math.round(Math.random() * 10);
album.commitCreate((err, fcommitFlag) => {
if (fcommitFlag) {
router.push({
uri: 'pages/selectalbum/selectalbum',
params: {
createParams: {
name: albumName,
type: 'createAlbum'
}
}
});
}
});
}
});
},
renameDialogAlbum(value) {
let name = value.detail;
if (!this.isRepeatName(name)) {
this.modifyAlbumName(name);
}
},
// 判断是否重复相册名
isRepeatName(name) {
let list = this.cacheAlbums || [];
let flag = false;
for (let i = 0; i < list.length; i++) {
let item = list[i];
if (item.albumName === name) {
prompt.showToast({
message: this.$t('strings.repeateName'),
duration: 1000
});
flag = true;
break;
}
}
return flag;
},
// 修改
modifyAlbumName(albumName) {
let self = this;
let list = self.cacheAlbums || [];
self.$element('rename_dialog').close();
let checkedItem = self.getCheckedData()[0];
let args = {
selections: '',
selectionArgs: ['imagealbum'],
};
media.getImageAlbums(args, (error, albums) => {
if (albums) {
for (let j = 0; j < albums.length; j++) {
let item = albums[j];
if (checkedItem.name === item.albumName) {
item.albumName = albumName;
item.commitModify((err, fcommitFlag) => {
if (fcommitFlag) {
self.$app.$def.datamanage.isRefreshed(true);
self.loadData();
self.onCheckedChange();
}
});
}
}
}
});
},
// 顶部左侧按钮
topBarLeftClick() {
let self = this;
self.listData.forEach(item => {
item.checked = false;
item.icon = '';
});
self.gridData.forEach(item => {
item.icon = self.$app.$def.utils.getIcon(item.kind);
});
self.headSource.checked = false;
self.headSource.icon = '';
self.selectMode = false;
self.topBarSource.isShowLeft = false;
self.topBarSource.isShowRight = true;
self.isShowBottomBar = false;
},
// 顶部右侧按钮
topBarRightClick() {
this.$element('create_dailog').show();
},
// 底部菜单
bottomTabClick(item) {
let length = this.getCheckedData().length;
if (item.detail.id === 2) {
if (length === 0) {
return false;
}
let child = this.$child('delete_dialog');
child.setTitle(this.$t('strings.deleteInfo') + length + this.$t('strings.items'));
child.show();
} else if (item.detail.id === 1) {
if (length !== 1) {
return false;
}
this.inputName = this.getCheckedData()[0].name + Math.round(Math.random() * 10);
this.$element('rename_dialog').show();
}
},
itemClick(obj) {
let item = obj.detail.item;
let uri = 'pages/photolist/photolist';
if (item.kind === 'video') {
uri = 'pages/videolist/videolist';
}
router.push(
{
uri: uri,
params: {
album: item
},
}
);
},
// 长按事件
longPress() {
let self = this;
let topbar = self.$element('topBar');
self.selectMode = true;
self.topBarSource.isShowLeft = true;
self.topBarSource.isShowRight = false;
self.topBarSource.title = self.$t('strings.unChoose');
self.isShowBottomBar = true;
self.onCheckedChange();
},
// 选中发生改变
onCheckedChange(obj) {
let self = this;
let length = this.getCheckedData().length;
if (self.selectMode) {
if (length === 0) {
self.topBarSource.title = self.$t('strings.unChoose');
for (let i = 0; i < self.bottomBarSource.length; i++) {
let item = self.bottomBarSource[i];
item.disabled = true;
}
} else {
for (let i = 0; i < self.bottomBarSource.length; i++) {
let item = self.bottomBarSource[i];
item.disabled = false;
}
self.topBarSource.title = self.$t('strings.selected') + length + self.$t('strings.items');
}
} else {
self.topBarSource.isShowLeft = false;
self.isShowBottomBar = false;
self.topBarSource.isShowRight = true;
}
},
// 选中数据
getCheckedData() {
let self = this;
let list = [];
self.listData.forEach(item => {
if (item.checked) {
list.push(item);
}
});
self.gridData.forEach(item => {
if (item.checked) {
list.push(item);
}
});
return list;
},
deleteQuery() {
this.deletePhotos();
},
// 删除相册
deletePhotos() {
let self = this;
let choose = self.getCheckedData();
for (let j = 0; j < choose.length; j++) {
let chooseItem = choose[j];
for (let i = 0; i < self.cacheAlbums.length; i++) {
let item = self.cacheAlbums[i];
if (item.albumName === chooseItem.name) {
item.commitDelete((err, deleteFlag) => {
if (deleteFlag) {
self.$app.$def.datamanage.isRefreshed(true);
if (j === choose.length - 1) {
if (choose.length === self.listData.length) {
self.listData = [];
} else {
setTimeout(() => {
self.loadData();
self.onCheckedChange();
}, 200);
}
}
}
});
}
}
}
}
};

View File

@ -0,0 +1,136 @@
/*
* Copyright (c) 2021 Huawei Device Co., Ltd.
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
@import "../../common/css/app.css";
.photodetail-container {
position: relative;
background-color: #fff;
flex-direction: column;
height: 100%;
width: 100%;
transition-enter: enter;
transition-exit: exit;
}
.photodetail-div {
display: flex;
align-content: center;
align-items: center;
height: 100%;
width: 100%;
}
.photodetail-swiper {
display: flex;
align-content: center;
}
.shared-transition-style {
object-fit: contain;
shared-transition-effect: exchange;
shared-transition-name: shared-transition;
}
.detail_dialog {
width: 100%;
margin: 24px;
background-color: #fff;
border-radius: 16px;
}
.detailDialog-div {
flex-direction: column;
display: flex;
}
.detailDialog-title {
font-size: 35px;
padding: 25px 15px 15px 30px;
color: #000;
}
.detailDialog-text {
font-size: 30px;
padding: 25px 15px 15px 35px;
color: #000;
}
.detailDialog-btn {
padding: 20px 0 30px 0;
justify-content: center;
}
.scale-div {
position: absolute;
flex-direction: column;
display: flex;
height: 162px;
width: 64px;
background-color: #fff;
right: 48px;
bottom: 48px;
z-index: 10000;
border-radius: 48px;
border-color: #c9c9c9;
border-width: 1px;
}
.scale-top {
flex: 1;
align-items: center;
border-bottom-width: 1px;
border-bottom-color: #c9c9c9;
padding: 6px 6px 3px 6px;
}
.scale-bottom {
flex: 1;
align-items: center;
padding: 6px 6px 3px 6px;
}
.scale-image {
padding: 12px;
width: 48px;
height: 48px;
}
@keyframes enter {
from {
opacity: 0;
transform: scale(0);
}
to {
opacity: 1;
transform: scale(1);
}
}
@keyframes exit {
from {
opacity: 1;
transform: scale(1);
}
to {
opacity: 0;
transform: scale(0);
}
}

View File

@ -0,0 +1,92 @@
<!--
/*
* Copyright (c) 2021 Huawei Device Co., Ltd.
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-->
<element src="../../common/component/top_bar/top_bar.hml"></element>
<element src="../../common/component/bottom_bar/bottom_bar.hml"></element>
<element src="../dialog/rename_dialog/rename_dialog.hml"></element>
<element src="../dialog/delete_dialog/delete_dialog.hml"></element>
<div class="photodetail-container">
<top_bar
id="topBar"
data-source="{{ topBarSource }}"
@left-click="topBarLeftClick"
@right-click="topBarRightClick">
</top_bar>
<div class="photodetail-div">
<swiper
class="photodetail-swiper"
id="photoDetailSwiper"
index="{{ sharetIndex }}"
loop="false" indicator="false"
on:change="swiperChange"
on:touchstart="hideBottomPop">
<div for="{{ (index, item) in list }}">
<image show="{{ item.mediaType == 3 && transFormType == 0 }}"
src="{{ item.src }}"
class="shared-transition-style"
style="transform : rotate({{ item.rotate + 'deg' }});"></image>
<image show="{{ item.mediaType == 3 && transFormType == 1 }}"
src="{{ item.src }}"
class="shared-transition-style"
style="transform : scale({{ item.scale }});"></image>
<stack show="{{ item.mediaType == 4 }}">
<video
style="object-fit : fill;"
src='{{ item.src }}'
poster='{{ item.poster }}'
muted='false' controls="false"></video>
<image style="left : 45%; top : 50%; width : 80px; height : 80px;" src="/common/image/svg/play.svg">
</image>
</stack>
</div>
</swiper>
<div class="scale-div" show="{{ showScale }}">
<div class="scale-top" on:click="leftScale">
<image class="scale-image" if="{{ ! isScaleAddDisable }}" src="/common/image/svg/scaleadd.svg"></image>
<image class="scale-image" else style="opacity : 0.5;" src="/common/image/svg/scaleadd.svg"></image>
</div>
<div class="scale-bottom" on:click="rightScale">
<image class="scale-image" if="{{ ! isScaleMinusDisable }}" src="/common/image/svg/scaleminus.svg">
</image>
<image class="scale-image" else style="opacity : 0.5;" src="/common/image/svg/scaleminus.svg"></image>
</div>
</div>
</div>
<bottom_bar id="bottom_bar" is-show="{{ isShowBottom }}"
@bottom-tab-click="bottomTabClick"
@popup-item-click="popupItemClick"
@change-pop-visible="changePopVisible"
pop-visible="{{ popVisible }}"
data-source="{{ bottomBarSource }}"
popup-list="{{ bottomBarPopList }}"></bottom_bar>
<rename_dialog id="rename_dialog" @rename-dialog-album="renameDialogAlbum" input-name="{{ inputName }}">
</rename_dialog>
<delete_dialog id="delete_dialog" @delete-query="deleteQuery"></delete_dialog>
<dialog id="photo_detail_dialog" oncancel="cancel" class="detail_dialog">
<div class="detailDialog-div">
<text class="detailDialog-title">{{ $t('strings.detailInfo') }}</text>
<text class="detailDialog-text">{{ $t('strings.name') }} {{ detailData.name }}</text>
<text class="detailDialog-text">{{ $t('strings.size') }} {{ detailData.size }}MB</text>
<div class="detailDialog-btn">
<text style="color : dodgerblue;" on:click="dialogCancel">{{ $t('strings.know') }}</text>
</div>
</div>
</dialog>
</div>

View File

@ -0,0 +1,544 @@
/*
* Copyright (c) 2021 Huawei Device Co., Ltd.
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
import prompt from '@system.prompt';
import router from '@system.router';
import medialibrary from '@ohos.multimedia.medialibrary';
let media = medialibrary.getMediaLibraryHelper();
export default {
data: {
topBarSource: {
title: '',
leftSrc: '/common/image/svg/back.svg',
rightSrc: '',
isShowLeft: true,
isShowRight: true
},
sharetIndex: 0,
album: null,
list: [],
selectMode: false,
isShowBottom: false,
popVisible: false,
bottomBarSource: [
{
id: 1,
src: '/common/image/svg/move.svg',
name: '',
visible: true,
disabled:false
},
{
id: 2,
src: '/common/image/svg/copy.svg',
name: '',
visible: true,
disabled:false
},
{
id: 3,
src: '/common/image/svg/delete.svg',
name: '',
visible: true,
disabled:false
},
{
id: -10,
src: '/common/image/svg/more.svg',
name: '',
visible: true,
disabled:false
},
],
bottomBarPopList: [
{
id: 1,
src: '/common/image/svg/rename.svg',
name: '',
visible: true,
disabled:false
}, {
id: 2,
src: '/common/image/svg/rotate.svg',
name: '',
visible: true,
disabled:false
}
],
currentItem: {},
cacheList: [],
inputName: '',
refreshType: -1,
detailData: {
size: 0,
name: ''
},
transFormType: 0,
showScale:true,
isScaleMinusDisable:false,
isScaleAddDisable:false
},
onInit() {
this.initNational();
},
onBackPress() {
this.topBarLeftClick();
return true;
},
initNational() {
this.headTitle = this.$t('strings.albums');
this.bottomBarSource[0].name = this.$t('strings.move');
this.bottomBarSource[1].name = this.$t('strings.copy');
this.bottomBarSource[2].name = this.$t('strings.delete');
this.bottomBarSource[3].name = this.$t('strings.more');
this.bottomBarPopList[0].name = this.$t('strings.rename');
this.bottomBarPopList[1].name = this.$t('strings.rotate');
},
onShow() {
let self = this;
if (self.list.length > 0) {
let item = self.list[self.sharetIndex];
self.currentItem = item;
self.topBarSource.title = self.currentItem.name;
if(self.currentItem.mediaType === 4) {
self.showScale = false;
self.bottomBarPopList[1].visible = false;
} else {
self.showScale = true;
self.bottomBarPopList[1].visible = true;
}
if (self.selectMode) {
self.isShowBottom = false;
self.changeRightIcon(item);
} else {
self.topBarSource.rightSrc = this.$app.$def.utils.getIcon('info');
self.isShowBottom = true;
}
}
self.loadData();
},
loadData() {
let self = this;
if (self.album) {
if (self.album.name === self.$t('strings.video')) {
self.getVideoAsset();
return false;
} else {
self.getAlbumAsset();
}
}
},
// 获取视频数据
getVideoAsset() {
let self = this;
let args = {
selections: '',
selectionArgs: ['videoalbum'],
};
media.getVideoAssets(args, (error, videos) => {
let list = [];
for (let i = 0; i < videos.length; i++) {
let item = videos[i];
item.icon = '';
item.src = 'file://' + item.URI;
item.rotate = 0;
item.scale = 1;
list.push(item);
}
if (self.refreshType === 1 ) {
if (self.sharetIndex > 0) {
self.sharetIndex--;
} else {
self.sharetIndex = 0;
}
} else if (self.refreshType ===2) {
self.sharetIndex = 0;
}
self.currentItem = list[self.sharetIndex];
self.topBarSource.title = self.currentItem.name;
self.list = list || [];
self.isRrefreshed = -1;
self.cacheList = list || [];
});
},
// 获取图片及所有照片数据
getAlbumAsset() {
let self = this;
let args = {
selections: self.album.name,
selectionArgs: ['imagealbum', 'videoalbum'],
};
// 表示直接从相机到主页面跳转过来
if (self.list.length === 0) {
self.topBarSource.title = 'camera';
self.topBarSource.rightSrc = self.$app.$def.utils.getIcon('info');
args.selections = 'camera';
self.isShowBottom = true;
}
// 由于查询到的图片相册名返回的全是unknow 这里要获取路径截取一下
// 判断是否是所有照片, 获取当前图片所在相册
if (self.album.name === self.$t('strings.allPhotos')) {
args.selections = '';
}
media.getMediaAssets(args, (error, images) => {
if (self.list.length === 0 || self.refreshType !== -1) {
let list = [];
for (let i = 0; i < images.length; i++) {
let item = images[i];
item.icon = '';
item.src = 'file://' + item.URI;
item.rotate = 0;
item.scale = 1;
list.push(item);
}
if (self.refreshType === 1) {
if (self.sharetIndex > 0) {
self.sharetIndex--;
} else {
self.sharetIndex = 0;
}
} else if (self.refreshType ===2) {
self.sharetIndex = 0;
}
self.list = list;
self.currentItem = list[self.sharetIndex];
self.topBarSource.title = self.currentItem.name;
self.refreshType = -1;
}
self.cacheList = images || [];
});
},
// 选中发生改变
onCheckedChange() {
let self = this;
let length = self.getCheckedData().length;
if (length === 0) {
self.topBarSource.title = self.$t('strings.unChoose');
} else {
self.topBarSource.title = self.$t('strings.selected') + length + self.$t('strings.items');
}
},
// 获取选中数据
getCheckedData() {
let self = this;
let list = [];
self.list.forEach(item => {
if (item.checked) {
list.push(item);
}
});
return list;
},
swiperChange(item) {
this.currentItem.scale = 1;
this.currentItem.rotate = 0;
let obj = this.list[item.index];
this.currentItem = obj;
if(this.currentItem.mediaType === 4) {
this.showScale = false;
this.bottomBarPopList[1].visible = false;
} else {
this.showScale = true;
this.bottomBarPopList[1].visible = true;
}
if (this.selectMode) {
this.changeRightIcon(obj);
} else {
this.topBarSource.title = this.currentItem.name;
}
},
changeRightIcon(item) {
if (item.checked) {
this.topBarSource.rightSrc = this.$app.$def.utils.getIcon('selected');
} else {
this.topBarSource.rightSrc = this.$app.$def.utils.getIcon('unselected_black');
}
this.onCheckedChange();
},
topBarRightClick() {
if (this.selectMode) {
this.currentItem.checked = !this.currentItem.checked;
this.changeRightIcon(this.currentItem);
} else {
this.detailData.size = (Number(this.currentItem.size) / 1024 / 1024).toFixed(4);
this.detailData.name = this.currentItem.name;
this.$element('photo_detail_dialog').show();
}
},
dialogCancel() {
this.$element('photo_detail_dialog').close();
},
topBarLeftClick() {
this.$app.$def.datamanage.setPhotoList(this.list);
router.back({
uri: 'pages/photolist/photolist',
params: {
list: this.list,
selectMode: this.selectMode
},
});
},
bottomTabClick(item) {
if (item.detail.id === 1) {
this.movePhotos();
} else if (item.detail.id === 2) {
this.copyPhotos();
} else if (item.detail.id === 3) {
this.deletePhotos();
}
},
// 弹出提示框点击事件
popupItemClick(item) {
let self = this;
if (item.detail.id === 1) {
let arrs = self.currentItem.name.split('.');
let fname = arrs[0];
let lname = arrs[1];
if (self.currentItem.mediaType === 3) {
self.inputName = fname + Math.round(Math.random() * 100) + '.' + lname;
} else if (self.currentItem.mediaType === 4) {
self.inputName = fname + Math.round(Math.random() * 100) + '.' + lname;
}
self.$element('rename_dialog').show();
} else if (item.detail.id === 2) {
if(self.transFormType !== 0) {
self.currentItem.scale = 1;
}
self.transFormType = 0;
if(self.currentItem.rotate === 270 ) {
self.currentItem.rotate = 0;
} else {
self.currentItem.rotate += 90;
}
}
},
renameDialogAlbum(value) {
let name = value.detail;
if (!this.isRepeatName(name)) {
this.modifyName(name);
}
},
modifyName(albumName) {
let self = this;
self.$element('rename_dialog').close();
if (self.album.name === self.$t('strings.video')) {
self.modifyVideoName(albumName);
} else {
self.modifyPhotoName(albumName);
}
},
// 修改图片名称
modifyPhotoName(albumName) {
let self = this;
let checkItem = self.currentItem;
let args = {
selections: self.album.name,
selectionArgs: ['imagealbum', 'videoalbum'],
};
// 由于查询到的图片相册名返回的全是unknow 这里要获取路径截取一下
// 判断是否是所有照片, 获取当前图片所在相册
if (self.album.name === self.$t('strings.allPhotos')) {
args.selections = '';
}
media.getMediaAssets(args, (error, images) => {
if (images) {
for (let i = 0; i < images.length; i++) {
let item = images[i];
if (item.id === checkItem.id) {
item.startModify((error, startFlag) => {
if (startFlag) {
item.name = albumName;
item.commitModify((error, commitFlag) => {
if (commitFlag) {
self.refreshType = 2;
setTimeout(() => {
self.loadData();
}, 200);
}
});
}
});
}
}
}
});
},
// 修改视频名称
modifyVideoName(albumName) {
let self = this;
let checkItem = self.currentItem;
let args = {
selections: '',
selectionArgs: ['videoalbum'],
};
media.getVideoAssets(args, (error, videos) => {
for (let i = 0; i < videos.length; i++) {
let video = videos[i];
if (video.id === checkItem.id) {
video.startModify((error, startFlag) => {
if (startFlag) {
video.name = albumName;
video.commitModify((error, commitFlag) => {
if (commitFlag) {
self.refreshType = 2;
setTimeout(() => {
self.loadData();
}, 200);
}
});
}
});
}
}
});
},
// 判断是否重复相册名
isRepeatName(name) {
let list = this.cacheList || [];
let flag = false;
for (let i = 0; i < list.length; i++) {
let item = list[i];
if (item.name === name) {
prompt.showToast({
message: this.$t('string.repeateName'),
duration: 1000
});
flag = true;
break;
}
}
return flag;
},
deleteQuery() {
let self = this;
let currentItem = self.list[self.sharetIndex];
let list = self.cacheList || [];
for (let i = 0; i < list.length; i++) {
let item = list[i];
// 由于查询所有返回的图片id 跟查询单个相册返回的图片id 对应不上所以不能只以id判断
if (item.id === currentItem.id && item.name === currentItem.name) {
item.commitDelete((error, commitFlag) => {
if (commitFlag) {
self.refreshType = 1;
setTimeout(() => {
self.loadData();
}, 200);
self.$app.$def.datamanage.isRefreshed(true);
}
});
}
}
},
// 删除图片
deletePhotos() {
let child = this.$child('delete_dialog');
child.setTitle(this.$t('strings.isDeleteChooseItem'));
child.show();
},
// 移动
movePhotos() {
let self = this;
if (self.album.name === self.$t('strings.allPhotos')) {
let arrs = self.currentItem.URI.split('/');
self.album.name = arrs[arrs.length - 2];
}
router.replace(
{
uri: 'pages/selectalbum/selectalbum',
params: {
isOperationFrom: true,
operationType: 'move',
fromAlbum: self.album,
checkedList: [self.currentItem]
}
}
);
},
// 复制
copyPhotos() {
let self = this;
// 判断是否是所有照片, 获取当前图片所在相册
if (self.album.name === self.$t('strings.allPhotos')) {
let arrs = self.currentItem.URI.split('/');
self.album.name = arrs[arrs.length - 2];
}
router.replace(
{
uri: 'pages/selectalbum/selectalbum',
params: {
isOperationFrom: true,
operationType: 'copy',
fromAlbum: self.album,
checkedList: [self.currentItem]
}
}
);
},
hideBottomPop() {
this.popVisible = false;
},
changePopVisible(e) {
this.popVisible = e.detail;
},
leftScale(){
if(this.transFormType !== 1){
this.currentItem.rotate = 0;
}
this.transFormType = 1;
this.currentItem.scale += 0.5;
this.isScaleMinusDisable = false
if(this.currentItem.scale > 2) {
this.currentItem.scale = 2 ;
this.isScaleAddDisable = true;
this.isScaleMinusDisable = false;
}
},
rightScale(){
if(this.transFormType !== 1){
this.currentItem.rotate = 0;
}
this.transFormType = 1;
this.currentItem.scale -= 0.25;
this.isScaleAddDisable = false;
if(this.currentItem.scale < 0.5) {
this.currentItem.scale = 0.5;
this.isScaleMinusDisable = true;
this.isScaleAddDisable = false;
}
}
};

View File

@ -0,0 +1,91 @@
/*
* Copyright (c) 2021 Huawei Device Co., Ltd.
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
@import "../../common/css/app.css";
.block {
background-color: transparent;
height: 100%;
width: 100%;
}
.selectphoto-container {
flex-direction: column;
padding: 0 8px;
background-color: #fff;
}
.grid-content {
display: flex;
flex-wrap: wrap;
}
.content-div {
display: flex;
align-items: center;
justify-content: center;
}
.grid-content-stack {
position: relative;
width: 176px;
height: 180px;
padding: 4px;
}
.grid-video-time {
position: absolute;
color: #fff;
font-size: 24px;
bottom: 10px;
left: 10px;
background-color: #6666666a;
padding: 5px 10px;
border-radius: 16px;
}
.grid-video {
position: relative;
}
.scale-img {
position: absolute;
width: 48px;
height: 48px;
top: 10px;
left: 10px;
}
.select-img {
right: 10px;
bottom: 10px;
position: absolute;
width: 38px;
height: 38px;
}
/* xxx.css */
.shared-transition-style {
shared-transition-effect: exchange;
shared-transition-name: shared-transition;
}
.list-animation {
animation-name: transition-enter;
animation-duration: 1500ms;
}

View File

@ -0,0 +1,82 @@
<!--
/*
* Copyright (c) 2021 Huawei Device Co., Ltd.
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-->
<element src="../../common/component/top_bar/top_bar.hml"></element>
<element src="../../common/component/bottom_bar/bottom_bar.hml"></element>
<element src="../dialog/add_type_dailog/add_type_dailog.hml"></element>
<element src="../dialog/detail_dialog/detail_dialog.hml"></element>
<element src="../dialog/delete_dialog/delete_dialog.hml"></element>
<div class="selectphoto-container">
<top_bar
id="topBar"
data-source="{{ topBarSource }}"
@left-click="topBarLeftClick"
@right-click="topBarRightClick">
</top_bar>
<list class="list-animation" else on:click="hideBottomPop">
<list-item clickeffect="false">
<div class="grid-content" if="{{ list && list.length > 0 }}">
<div for="{{ (index, item) in list }}" class="content-div"
style="width : {{ item.itemStyle.width }};
height : {{ item.itemStyle.height }};">
<stack class="grid-content-stack"
style="width : {{ item.imageStyle.width }};
height : {{ item.imageStyle.height }};"
on:touchstart="touchstart({{ item }})"
on:touchcancel="touchcancel({{ item }})"
on:touchend="touchend({{ item }})"
onlongpress="parentLongpress({{ item }},{{ index }})">
<image if="{{ item.mediaType == 3 }}" class="shared-transition-style"
style="opacity : {{ item.checked ? 0.5 : 1 }};"
src="{{ item.src }}" shareid="{{ index }}"
onclick="photoClick({{ item }},{{ index }})">
</image>
<div class="grid-video" if="{{ item.mediaType == 4 }}"
onclick="photoClick({{ item }},{{ index }})">
<text class="grid-video-time">
00:00
</text>
<video
style="object-fit : fill;"
src='{{ item.src }}'
poster='{{ item.poster }}'
muted='false' autoplay='false' controls="false"></video>
</div>
<div class="scale-img" if="{{ item.icon }}"
on:click="scaleImgClick({{ item }},{{ index }})">
<image src="/common/image/svg/fullscreen.svg"></image>
</div>
<image class="select-img " if="{{ item.icon }}" src="{{ item.icon }}"></image>
</stack>
</div>
</div>
</list-item>
</list>
<bottom_bar id="bottom_bar"
is-show="{{ isShowBottomBar }}"
data-source="{{ bottomBarSource }}"
popup-list="{{ bottomBarPopList }}"
pop-visible="{{ popVisible }}"
@change-pop-visible="changePopVisible"
@bottom-tab-click="bottomTabClick"
@popup-item-click="popupItemClick">
</bottom_bar>
<add_type_dailog id="add_type_dailog" @add-type-dialog-click="addTypeDialogClick"></add_type_dailog>
<detail_dialog id="detail_dialog" form-data="{{ detailData }}"></detail_dialog>
<delete_dialog id="delete_dialog" @delete-query="deleteQuery"></delete_dialog>
</div>

View File

@ -0,0 +1,576 @@
/*
* Copyright (c) 2021 Huawei Device Co., Ltd.
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
import device from '@system.device';
import router from '@system.router';
import prompt from '@system.prompt';
import medialibrary from '@ohos.multimedia.medialibrary';
let media = medialibrary.getMediaLibraryHelper();
export default {
data: {
album: null,
topBarSource: {
title: '',
leftSrc: '/common/image/svg/back.svg',
rightSrc: '/common/image/icon/selected.png',
isShowLeft: true,
isShowRight: false
},
bottomBarSource: [
{
id: 1,
src: '/common/image/svg/move.svg',
disabled: false,
visible: true,
name: ''
},
{
id: 2,
src: '/common/image/svg/delete.svg',
disabled: false,
visible: true,
name: ''
},
{
id: 3,
src: '/common/image/svg/select_all.svg',
disabled: false,
visible: true,
name: ''
},
{
id: -10,
src: '/common/image/svg/more.svg',
disabled: false,
visible: true,
name: ''
},
],
bottomBarPopList: [
{
id: 1,
src: '/common/image/svg/about.svg',
disabled: false,
visible: true,
name: ''
},
{
id: 2,
src: '/common/image/svg/copy.svg',
disabled: false,
visible: true,
name: ''
}
],
gridImageStyle: {
width: '176px',
height: '180px'
},
isShowBottomBar: false,
list: [],
cacheList: [],
// 是否开启选择模式
selectMode: false,
// 是否全选
isAllChecked: false,
// 弹窗详细信息
detailData: {},
deleteDialogTitle: '',
consoleInfo: '',
popVisible: false
},
onInit() {
this.initNational();
},
initNational() {
this.bottomBarSource[0].name = this.$t('strings.move');
this.bottomBarSource[1].name = this.$t('strings.delete');
this.bottomBarSource[2].name = this.$t('strings.selectAll');
this.bottomBarSource[3].name = this.$t('strings.more');
this.bottomBarPopList[0].name = this.$t('strings.detailInfo');
this.bottomBarPopList[1].name = this.$t('strings.copy');
},
onShow() {
this.loadData();
if (this.selectMode) {
this.onCheckedChange();
}
},
onHide() {
this.$app.$def.datamanage.setPhotoList(this.list);
},
onBackPress() {
if (this.selectMode) {
this.selectMode = false;
this.onCheckedChange();
return true;
} else {
return false;
}
},
loadData() {
let self = this;
if (self.album) {
self.topBarSource.title = self.album.name;
if (self.album.name === self.$t('strings.allPhotos')) {
self.getAllPhotos();
} else {
self.getAlbumPhotos();
}
}
},
getAlbumPhotos() {
let self = this;
// 用来保存从详情的选中数据
let shareList = self.$app.$def.datamanage.getPhotoList() || [];
let args = {
selections: self.album.name,
selectionArgs: ['imagealbum', 'videoalbum'],
};
media.getMediaAssets(args, (error, images) => {
let list = [];
if (error) {
console.info(' MediaLibraryTest: getImageAssets error ' + error);
}
if (images) {
self.cacheList = images;
for (let i = 0; i < images.length; i++) {
let item = images[i];
let obj = {
mediaType: item.mediaType,
size: item.size,
dateAdded: item.dateAdded,
dateModified: item.dateModified,
name: item.name,
albumName: item.albumName,
albumId: item.albumId,
id: item.id,
src: 'file://' + item.URI,
URI: item.URI,
icon: '',
checked: false,
rotate : 0,
scale:1,
itemStyle: {
width: '176px',
height: '180px'
},
imageStyle: {
width: '176px',
height: '180px'
}
};
if (self.selectMode) {
obj.icon = self.$app.$def.utils.getIcon('unselected');
for (let j = 0; j < shareList.length; j++) {
let shareItem = shareList[j];
if (item.name === shareItem.name && item.id === shareItem.id) {
obj.checked = shareItem.checked;
if (shareItem.checked) {
obj.icon = self.$app.$def.utils.getIcon('selected');
} else {
obj.icon = self.$app.$def.utils.getIcon('unselected');
}
}
}
}
list.push(obj);
}
self.list = list;
self.onCheckedChange();
}
});
},
getAllPhotos() {
let self = this;
// 用来保存从详情的选中数据
let shareList = self.$app.$def.datamanage.getPhotoList() || [];
media.getMediaAssets((error, images) => {
self.cacheList = images;
if (images) {
let list = [];
for (let i = 0; i < images.length; i++) {
let item = images[i];
let obj = {
mediaType: item.mediaType,
size: item.size,
dateAdded: item.dateAdded,
dateModified: item.dateModified,
name: item.name,
albumName: item.albumName,
albumId: item.albumId,
id: item.id,
src: 'file://' + item.URI,
URI: item.URI,
icon: '',
checked: false,
rotate : 0,
scale:1,
itemStyle: {
width: '176px',
height: '180px'
},
imageStyle: {
width: '176px',
height: '180px'
}
};
if (self.selectMode) {
obj.icon = self.$app.$def.utils.getIcon('unselected');
for (let j = 0; j < shareList.length; j++) {
let shareItem = shareList[j];
if (item.name === shareItem.name && item.id === shareItem.id) {
obj.checked = shareItem.checked;
if (shareItem.checked) {
obj.icon = self.$app.$def.utils.getIcon('selected');
} else {
obj.icon = self.$app.$def.utils.getIcon('unselected');
}
}
}
}
list.push(obj);
}
self.list = list;
self.onCheckedChange();
}
});
},
// 顶部左侧按钮
topBarLeftClick() {
let self = this;
if (self.selectMode) {
self.selectMode = false;
} else {
router.back();
}
self.onCheckedChange();
},
// 顶部右侧按钮
topBarRightClick() {
let self = this;
let checkedList = self.getCheckedData();
// 添加方式弹出操作窗
if (checkedList.length > 0) {
self.$element('add_type_dailog').show();
}
},
// 底部菜单
bottomTabClick(item) {
let self = this;
if (item.detail.id === 1) {
self.movePhotos();
} else if (item.detail.id === 2) {
self.deletePhotos();
} else if (item.detail.id === 3) {
self.setListChecked();
}
},
// 弹出提示框点击事件
popupItemClick(item) {
let self = this;
if (item.detail.id === 2) {
self.copyPhotos();
} else if (item.detail.id === 1) {
let list = self.getCheckedData();
let size = 0;
for (let i = 0; i < list.length; i++) {
size += Number(list[i].size);
}
size = size / 1024 / 1024;
self.detailData = {
number: list.length,
size: size.toFixed(4)
};
self.$element('detail_dialog').show();
}
},
// 选中发生改变
onCheckedChange() {
let self = this;
if (!self.selectMode) {
self.topBarSource.isShowLeft = true;
self.topBarSource.title = self.album.name;
self.topBarSource.leftSrc = self.$app.$def.utils.getIcon('back');
self.isShowBottomBar = false;
self.isAllChecked = false;
self.initChecked();
return false;
}
if (self.getCheckedData().length === 0) {
self.topBarSource.title = self.$t('strings.unChoose');
self.topBarSource.leftSrc = self.$app.$def.utils.getIcon('close');
self.bottomBarSource[2].name = self.$t('strings.selectAll');
self.bottomBarSource[2].src = '/common/image/svg/select_all.svg';
self.isAllChecked = false;
for (let i = 0; i < self.bottomBarSource.length; i++) {
const item = self.bottomBarSource[i];
if (item.id !== 3) {
item.disabled = true;
}
}
} else {
for (let i = 0; i < self.bottomBarSource.length; i++) {
const item = self.bottomBarSource[i];
item.disabled = false;
}
self.isShowBottomBar = true;
self.topBarSource.title = self.$t('strings.selected')
+ self.getCheckedData().length + self.$t('strings.items');
self.topBarSource.leftSrc = self.$app.$def.utils.getIcon('close');
if (self.getCheckedData().length === self.list.length) {
self.isAllChecked = true;
self.bottomBarSource[2].name = self.$t('strings.unSelectAll');
self.bottomBarSource[2].src = '/common/image/svg/unselect_all.svg';
} else {
self.isAllChecked = false;
self.bottomBarSource[2].name = self.$t('strings.selectAll');
self.bottomBarSource[2].src = '/common/image/svg/select_all.svg';
}
}
},
// 放大按钮点击事件
scaleImgClick(item, index) {
this.goDetail(item, index);
},
// 点击事件
photoClick(item, index) {
let self = this;
self.hideBottomPop();
if (self.selectMode) {
item.checked = !item.checked;
if (item.checked) {
item.icon = self.$app.$def.utils.getIcon('selected');
} else {
item.icon = self.$app.$def.utils.getIcon('unselected');
}
self.onCheckedChange();
}
if (!self.selectMode) {
self.goDetail(item, index);
}
},
// 跳转详情页面
goDetail(item, index) {
let self = this;
router.push(
{
uri: 'pages/photodetail/photodetail',
params: {
list: self.list,
album: self.album,
selectMode: self.selectMode,
sharetIndex: index
},
}
);
},
// 长按事件
parentLongpress(item, index) {
let self = this;
if (self.selectMode) {
return false;
}
let gridList = self.list;
// 宫格数据
for (let index = 0; index < gridList.length; index++) {
let item = gridList[index];
item.icon = self.$app.$def.utils.getIcon('unselected');
}
self.selectMode = true;
self.topBarSource.leftSrc = this.$app.$def.utils.getIcon('close');
self.photoClick(item, index);
},
// 根据是否开启选择模式,初始化选中效果
initChecked() {
let self = this;
let gridList = self.list;
// 宫格数据
for (let index = 0; index < gridList.length; index++) {
let item = gridList[index];
if (self.selectMode) {
item.icon = self.$app.$def.utils.getIcon('unselected');
} else {
item.icon = '';
}
item.checked = false;
}
},
// 获取选中数据
getCheckedData() {
let self = this;
let list = [];
self.list.forEach(item => {
if (item.checked) {
list.push(item);
}
});
return list;
},
// 设置全选/全不选
setListChecked() {
let self = this;
let list = self.list;
// 宫格数据
for (let index = 0; index < list.length; index++) {
let item = list[index];
if (self.isAllChecked) {
item.checked = false;
item.icon = self.$app.$def.utils.getIcon('unselected');
} else {
item.checked = true;
item.icon = self.$app.$def.utils.getIcon('selected');
}
}
self.onCheckedChange();
},
// 添加方式弹窗点击事件
addTypeDialogClick(obj) {
if (obj.detail === '复制') {
this.copyPhotos();
} else if (obj.detail === '移动') {
this.movePhotos();
}
},
deleteDialogCommit() {
let self = this;
let choose = this.getCheckedData();
let list = self.cacheList;
for (let i = 0; i < choose.length; i++) {
let checkItem = choose[i];
for (let j = 0; j < list.length; j++) {
let item = list[j];
// 由于查询所有返回的图片id 跟查询单个相册返回的图片id 对应不上所以不能只以id判断
if (item.name === checkItem.name && item.id === checkItem.id) {
item.commitDelete((error, commitFlag) => {
if (commitFlag) {
self.$app.$def.datamanage.isRefreshed(true);
self.selectMode = false;
setTimeout(() => {
if (choose.length === self.list.length) {
self.list = [];
self.onCheckedChange();
} else {
self.loadData();
}
}, 200);
}
});
}
}
}
},
deleteQuery() {
this.deleteDialogCommit();
},
// 删除图片
deletePhotos() {
let length = this.getCheckedData().length;
if (length === 0) {
return false;
}
let child = this.$child('delete_dialog');
child.setTitle(this.$t('strings.deleteInfo') + length + this.$t('strings.items'));
child.show();
},
// 移动
movePhotos() {
let self = this;
let choose = self.getCheckedData();
router.push(
{
uri: 'pages/selectalbum/selectalbum',
params: {
isOperationFrom: true,
operationType: 'move',
fromAlbum: self.album,
checkedList: choose
}
}
);
},
// 复制
copyPhotos() {
let self = this;
let choose = self.getCheckedData();
router.push(
{
uri: 'pages/selectalbum/selectalbum',
params: {
isOperationFrom: true,
operationType: 'copy',
fromAlbum: self.album,
checkedList: choose
}
}
);
},
touchstart(item, e) {
let self = this;
let width = item.itemStyle.width.replace('px', '');
let height = item.itemStyle.height.replace('px', '');
item.imageStyle.width = 0.9 * width;
item.imageStyle.height = 0.9 * height;
},
touchcancel(item, e) {
item.imageStyle.width = item.itemStyle.width;
item.imageStyle.height = item.itemStyle.height;
},
touchend(item, e) {
item.imageStyle.width = item.itemStyle.width;
item.imageStyle.height = item.itemStyle.height;
},
hideBottomPop() {
this.popVisible = false;
},
changePopVisible(e) {
this.popVisible = e.detail;
}
};

View File

@ -0,0 +1,22 @@
/*
* Copyright (c) 2021 Huawei Device Co., Ltd.
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
@import "../../common/css/app.css";
.selectalbum-container {
flex-direction: column;
background-color: #fff;
}

View File

@ -0,0 +1,49 @@
<!--
/*
* Copyright (c) 2021 Huawei Device Co., Ltd.
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-->
<element src="../../common/component/custom_list/custom_list.hml"></element>
<element src="../../common/component/top_bar/top_bar.hml"></element>
<element src="../dialog/rename_dialog/rename_dialog.hml"></element>
<div class="selectalbum-container">
<top_bar
id="topBar"
data-source="{{ topBarSource }}"
@left-click="topBarLeftClick"
@right-click="topBarRightClick">
</top_bar>
<list style="padding : 0px 24px;">
<list-item clickeffect="false">
<custom_list
show-list-title="{{ false }}"
show-head="{{ false }}"
list-data="{{ listData }}"
@on-click="listClick"
long-press-flag="{{ false }}"
></custom_list>
</list-item>
<list-item clickeffect="false">
<custom_list
show-head="{{ false }}"
list-data="{{ otherList }}"
@on-click="listClick"
list-title="{{ $t('strings.otherAlbums') }}"
long-press-flag="{{ false }}"
show-list-title="{{ true }}">
</custom_list>
</list-item>
</list>
</div>

View File

@ -0,0 +1,201 @@
/*
* Copyright (c) 2021 Huawei Device Co., Ltd.
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
import prompt from '@system.prompt';
import router from '@system.router';
import medialibrary from '@ohos.multimedia.medialibrary';
let media = medialibrary.getMediaLibraryHelper();
export default {
data: {
listData: [],
otherList: [],
topBarSource: {
title: '',
leftSrc: '/common/image/svg/back.svg',
rightSrc: '/common/image/svg/add.svg',
isShowLeft: true,
isShowRight: false
},
// 是否是操作后 跳进来的(移动,复制等)
isOperationFrom: false,
// 是否是操作后 操作类型(移动,复制等)
operationType: '',
createParams: null,
checkedList: [],
fromAlbum: null,
consoleInfo: '',
listItemStyle: {
height: '160px'
}
},
onInit() {
this.initNational();
},
initNational() {
this.topBarSource.title = this.$t('strings.chooseAlbums');
},
onShow() {
if (this.operationType) {
this.topBarSource.title = this.$t('strings.operateTitle');
}
this.getAlbums();
},
getAlbums() {
let self = this;
let args = {
selections: '',
selectionArgs: ['imagealbum'],
};
media.getImageAlbums(args, (error, albums) => {
if (albums) {
let list = [];
let others = [];
for (let i = 0; i < albums.length; i++) {
let album = albums[i];
setTimeout(() => {
let args = {
selections: album.albumName,
selectionArgs: ['imagealbum', 'videoalbum'],
};
media.getMediaAssets(args, (error, images) => {
if (images) {
let gridObj = {
name: album.albumName,
id: album.albumId,
icon: '/common/image/svg/arrow-right.svg',
checked: false,
showNumber: true,
src: 'file://' + images[0].URI,
list: images
};
// 判断是新建选相册 还是操作选相册
if (self.createParams && self.createParams.type === 'createAlbum') {
if (album.albumName === 'camera') {
gridObj.type = 'system';
list.push(gridObj);
} else {
others.push(gridObj);
}
// 剔除掉当前选中的相册, 由于查询出来是全部相册,避免移动/复制到当前选中相册
} else if (self.isOperationFrom && self.fromAlbum.name !== album.albumName) {
if (album.albumName === 'camera') {
gridObj.type = 'system';
list.push(gridObj);
} else {
others.push(gridObj);
}
}
}
});
}, (i + 1) * 50);
}
self.listData = list;
self.otherList = others;
}
});
},
getOtherAlbums(args) {
let self = this;
media.getMediaAssets((error, albums) => {
if (error) {
return false;
}
if (albums) {
for (let i = 0; i < albums.length; i++) {
let item = albums[i];
item.showNumber = true;
item.getImageAssets().then(function (image) {
if (!image) {
item.list = [];
} else {
item.list = image;
}
});
}
self.otherList = albums;
}
});
},
// 顶部左侧按钮
topBarLeftClick() {
router.back();
},
// 顶部右侧按钮
topBarRightClick() {
},
listClick(obj) {
let self = this;
let detail = obj.detail.item;
if (self.createParams) {
self.createParams.album = detail;
}
let routerParams = {
uri: 'pages/selectalbumphoto/selectalbumphoto',
params: {
album: detail,
isOperationFrom: self.isOperationFrom,
createParams: self.createParams
}
};
if (self.isOperationFrom) {
routerParams.params.operationType = self.operationType;
if (self.fromAlbum.name === self.$t('strings.allPhotos') && self.isRepeatAlbum(detail)) {
routerParams.params.operationType = '';
}
routerParams.uri = 'pages/afterselect/afterselect';
routerParams.params.list = self.checkedList;
routerParams.params.fromAlbum = self.fromAlbum;
routerParams.params.toAlbum = detail;
routerParams.params.topBarSource = {
title: detail.name,
leftSrc: '/common/image/svg/back.svg',
rightSrc: '/common/image/icon/selected.png',
isShowLeft: true,
isShowRight: false
};
}
router.replace(routerParams);
},
// 判断所有照片入口进来 是否操作了自身相册
isRepeatAlbum(detail) {
let self = this;
let list = self.checkedList;
let flag = false;
for (let i = 0; i < list.length; i++) {
let item = list[i];
let arrs = item.URI.split('/');
let albumName = arrs[arrs.length - 2];
self.consoleInfo = albumName;
if (albumName === detail.name) {
flag = true;
break;
}
}
return flag;
}
};

View File

@ -0,0 +1,68 @@
/*
* Copyright (c) 2021 Huawei Device Co., Ltd.
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
@import "../../common/css/app.css";
.selectphoto-container {
flex-direction: column;
padding: 0 8px;
background-color: #fff;
}
.grid-content {
display: flex;
flex-wrap: wrap;
}
.content-div {
display: flex;
align-items: center;
justify-content: center;
}
.grid-content-stack {
position: relative;
width: 176px;
height: 180px;
padding: 4px;
}
.scale-img {
position: absolute;
width: 48px;
height: 48px;
top: 10px;
left: 10px;
}
.select-img {
right: 10px;
bottom: 10px;
position: absolute;
width: 38px;
height: 38px;
}
/* xxx.css */
.shared-transition-style {
shared-transition-effect: exchange;
shared-transition-name: shared-transition;
}
.list-animation {
animation-name: transition-enter;
animation-duration: 1500ms;
}

View File

@ -0,0 +1,58 @@
<!--
/*
* Copyright (c) 2021 Huawei Device Co., Ltd.
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-->
<element src="../../common/component/custom_list/custom_list.hml"></element>
<element src="../../common/component/top_bar/top_bar.hml"></element>
<element src="../../common/component/bottom_bar/bottom_bar.hml"></element>
<element src="../dialog/detail_dialog/detail_dialog.hml"></element>
<element src="../dialog/add_type_dailog/add_type_dailog.hml"></element>
<div class="selectphoto-container">
<top_bar
id="topBar"
data-source="{{ topBarSource }}"
@left-click="topBarLeftClick"
@right-click="topBarRightClick">
</top_bar>
<list class="list-animation">
<list-item clickeffect="false">
<div class="grid-content" if="{{ list && list.length > 0 }}">
<div for="{{ (index, item) in list }}" class="content-div">
<stack class="grid-content-stack"
style="width : {{ gridImageStyle.width }};
height : {{ gridImageStyle.height }};"
on:touchstart="touchstart"
on:touchcancel="touchcancel"
on:touchend="touchend">
<image class="shared-transition-style" style="opacity : {{ item.checked ? 0.5 : 1 }};
width : {{ gridImageStyle.width }};"
src="{{ item.src }}" shareid="{{ index }}"
onclick="photoClick({{ item }},{{ index }})">
</image>
<div class="scale-img" if="{{ item.icon }}" on:click="scaleImgClick({{ item }},{{ index }})">
<image src="/common/image/svg/fullscreen.svg"></image>
</div>
<image class="select-img " if="{{ item.icon }}" src="{{ item.icon }}"></image>
</stack>
</div>
</div>
</list-item>
</list>
<detail_dialog id="detail_dialog" form-data="{{ detailData }}"></detail_dialog>
<add_type_dailog id="add_type_dailog" @add-type-dialog-click="addTypeDialogClick"></add_type_dailog>
</div>

View File

@ -0,0 +1,308 @@
/*
* Copyright (c) 2021 Huawei Device Co., Ltd.
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
import device from '@system.device';
import router from '@system.router';
import prompt from '@system.prompt';
import medialibrary from '@ohos.multimedia.medialibrary';
let media = medialibrary.getMediaLibraryHelper();
export default {
data: {
album: null,
topBarSource: {
title: '',
leftSrc: '/common/image/svg/close.svg',
rightSrc: '/common/image/icon/selected.png',
isShowLeft: true,
isShowRight: false
},
gridImageStyle: {},
list: [],
gridItemStyle: {
height: '180px'
},
// 是否开启选择模式
selectMode: true,
// 是否全选
isAllChecked: false,
// 弹窗详细信息
detailData: {},
// 操作方式
operationType: '',
// 新建相册对象
createParams: null
},
onShow() {
this.loadData();
},
onHide() {
this.$app.$def.datamanage.setPhotoList(this.list);
},
// 动态设置item宽度
loadData() {
let self = this;
if (self.album) {
let args = {
selections: self.album.name,
selectionArgs: ['imagealbum'],
};
let shareList = self.$app.$def.datamanage.getPhotoList() || [];
media.getImageAssets(args, (error, images) => {
if (images) {
for (let i = 0; i < images.length; i++) {
let item = images[i];
item.src = 'file://' + item.URI;
item.icon = self.$app.$def.utils.getIcon('unselected');
item.checked = false;
if (shareList.length > 0) {
for (let j = 0; j < shareList.length; j++) {
let shareItem = shareList[j];
if (item.name === shareItem.name && item.id === shareItem.id) {
item.checked = shareItem.checked;
if (shareItem.checked) {
item.icon = self.$app.$def.utils.getIcon('selected');
} else {
item.icon = self.$app.$def.utils.getIcon('unselected');
}
}
}
}
}
self.list = images;
self.onCheckedChange();
}
});
}
},
// 顶部左侧按钮
topBarLeftClick() {
router.back();
},
// 顶部右侧按钮
topBarRightClick() {
let self = this;
let checkedList = self.getCheckedData();
// 添加方式弹出操作窗
if (checkedList.length > 0) {
self.$element('add_type_dailog').show();
}
},
// 新建相册
createAlbum(checkList) {
let self = this;
router.push(
{
uri: 'pages/afterselect/afterselect',
params: {
fromAlbum: self.album,
list: checkList,
operationType: 'create',
topBarSource: {
title: self.createParams.name,
leftSrc: '/common/image/svg/back.svg',
rightSrc: '/common/image/icon/selected.png',
isShowLeft: true,
isShowRight: false
},
},
}
);
},
// 选中发生改变
onCheckedChange() {
let self = this;
let length = self.getCheckedData().length;
if (length === 0) {
self.topBarSource.title = self.$t('strings.unChoose');
self.topBarSource.isShowRight = false;
self.topBarSource.leftSrc = self.$app.$def.utils.getIcon('close');
self.isAllChecked = false;
} else {
self.topBarSource.title = self.$t('strings.selected') + length + self.$t('strings.items');
self.topBarSource.isShowRight = true;
self.topBarSource.leftSrc = self.$app.$def.utils.getIcon('close');
if (self.getCheckedData().length === self.list.length) {
self.isAllChecked = true;
} else {
self.isAllChecked = false;
}
}
},
// 放大按钮点击事件
scaleImgClick(item, index) {
this.goDetail(item, index);
},
// 点击事件
photoClick(item, index) {
let self = this;
item.checked = !item.checked;
if (item.checked) {
item.icon = self.$app.$def.utils.getIcon('selected');
} else {
item.icon = self.$app.$def.utils.getIcon('unselected');
}
self.onCheckedChange();
},
// 跳转详情页面
goDetail(item, index) {
let self = this;
router.push(
{
uri: 'pages/photodetail/photodetail',
params: {
list: self.list,
album: self.album,
selectMode: self.selectMode,
sharetIndex: index
},
}
);
},
// 根据是否开启选择模式,初始化选中效果
initChecked() {
let self = this;
let gridList = self.list;
// 宫格数据
for (let index = 0; index < gridList.length; index++) {
let item = gridList[index];
item.icon = self.$app.$def.utils.getIcon('unselected');
item.checked = false;
}
},
// 获取选中数据
getCheckedData() {
let self = this;
let list = [];
self.list.forEach(item => {
if (item.checked) {
list.push(item);
}
});
return list;
},
// 设置全选/全不选
setListChecked() {
let self = this;
let list = self.list;
// 宫格数据
for (let index = 0; index < list.length; index++) {
let item = list[index];
if (self.isAllChecked) {
item.checked = false;
item.icon = self.$app.$def.utils.getIcon('unselected');
} else {
item.checked = true;
item.icon = self.$app.$def.utils.getIcon('selected');
}
}
self.onCheckedChange();
},
// 添加方式弹窗点击事件
addTypeDialogClick(obj) {
if (obj.detail === '复制') {
this.copyPhotos();
} else if (obj.detail === '移动') {
this.movePhotos();
}
},
// 移动
movePhotos() {
let self = this;
let choose = self.getCheckedData();
if (choose.length === 0) {
return false;
}
router.replace(
{
uri: 'pages/afterselect/afterselect',
params: {
isOperationFrom: true,
operationType: 'move',
fromAlbum: self.album,
list: choose,
topBarSource: {
title: self.createParams.name,
leftSrc: '/common/image/svg/back.svg',
rightSrc: '/common/image/icon/selected.png',
isShowLeft: true,
isShowRight: false
},
}
}
);
},
// 复制
copyPhotos() {
let self = this;
let choose = self.getCheckedData();
if (choose.length === 0) {
return false;
}
router.replace(
{
uri: 'pages/afterselect/afterselect',
params: {
isOperationFrom: true,
operationType: 'copy',
fromAlbum: self.album,
list: choose,
topBarSource: {
title: self.createParams.name,
leftSrc: '/common/image/svg/back.svg',
rightSrc: '/common/image/icon/selected.png',
isShowLeft: true,
isShowRight: false
},
}
}
);
},
touchstart(e) {
},
touchcancel(e) {
},
touchend(e) {
}
};

View File

@ -0,0 +1,80 @@
/*
* Copyright (c) 2021 Huawei Device Co., Ltd.
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
.block {
background-color: transparent;
height: 100%;
width: 100%;
}
.videolist-container {
flex-direction: column;
background-color: #fff;
}
.list-item {
display: flex;
flex-wrap: wrap;
}
.item-stack {
height: 448px;
padding: 4px;
position: relative;
}
.scale {
position: absolute;
top: 10px;
left: 10px;
height: 58px;
width: 58px;
}
.select {
position: absolute;
bottom: 10px;
right: 10px;
height: 42px;
width: 42px;
}
.text {
position: absolute;
bottom: 10px;
right: 10px;
background-color: #6666666a;
font-size: 28px;
color: #fff;
background-color: #6666666a;
padding: 10px;
border-radius: 16px;
}
.shared-transition-style {
shared-transition-effect: exchange;
shared-transition-name: shared-transition;
}
@keyframes shared-transition {
from {
opacity: 0;
}
to {
opacity: 1;
}
}

View File

@ -0,0 +1,71 @@
<!--
/*
* Copyright (c) 2021 Huawei Device Co., Ltd.
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-->
<element src="../../common/component/custom_list/custom_list.hml"></element>
<element src="../../common/component/top_bar/top_bar.hml"></element>
<element src="../../common/component/bottom_bar/bottom_bar.hml"></element>
<element src="../dialog/detail_dialog/detail_dialog.hml"></element>
<element src="../dialog/delete_dialog/delete_dialog.hml"></element>
<div class="videolist-container">
<top_bar
id="topBar"
data-source="{{ topBarSource }}"
@left-click="topBarLeftClick"
@right-click="topBarRightClick">
</top_bar>
<list class="list-content" @click="hideBottomPop">
<list-item clickeffect="false">
<div class="list-item">
<stack class="item-stack" for="{{ (index, item) in listData }}"
style="width : {{ videoWidth }};"
on:longpress="longpress({{ item }},{{ index }})">
<video
style="object-fit : fill;"
src='{{ item.src }}'
poster='{{ item.poster }}'
muted='false'
autoplay='false'
controls="false"
onprepared="videoPrepare"
></video>
<div style="background-color : transparent; width : 100%; height : 100%;"
onclick="videoClick({{ item }},{{ index }})"></div>
<image if="{{ selectMode }}" class="scale" src="/common/image/svg/fullscreen.svg"
onclick="scaleClick({{ item }},{{ index }})">
</image>
<image if="{{ selectMode }}" class="select" src="{{ item.icon }}">
</image>
<text else class="text" onclick="videoClick({{ item }})">
{{ videoDuration }}
</text>
</stack>
</div>
</list-item>
</list>
<bottom_bar id="bottom_bar"
is-show="{{ isShowBottomBar }}"
data-source="{{ bottomBarSource }}"
popup-list="{{ bottomBarPopList }}"
pop-visible="{{ popVisible }}"
@bottom-tab-click="bottomTabClick"
@change-pop-visible="changePopVisible"
@popup-item-click="popupItemClick">
</bottom_bar>
<detail_dialog id="detail_dialog" form-data="{{ detailData }}"></detail_dialog>
<delete_dialog id="delete_dialog" @delete-query="deleteQuery"></delete_dialog>
</div>

View File

@ -0,0 +1,414 @@
/*
* Copyright (c) 2021 Huawei Device Co., Ltd.
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
import device from '@system.device';
import prompt from '@system.prompt';
import router from '@system.router';
import mediaLibrary from '@ohos.multimedia.medialibrary';
let media = mediaLibrary.getMediaLibraryHelper();
export default {
data: {
listData: [],
topBarSource: {
title: '',
leftSrc: '/common/image/svg/back.svg',
rightSrc: '/common/image/svg/add.svg',
isShowLeft: true,
isShowRight: false
},
isShowBottomBar: false,
bottomBarSource: [
{
id: 1,
src: '/common/image/svg/move.svg',
disabled: true,
name: ''
},
{
id: 2,
src: '/common/image/svg/delete.svg',
disabled: true,
name: ''
},
{
id: 3,
src: '/common/image/svg/select_all.svg',
disabled: true,
name: ''
},
{
id: -10,
src: '/common/image/svg/more.svg',
disabled: false,
visible: true,
name: ''
},
],
bottomBarPopList: [
{
id: 1,
src: '/common/image/svg/about.svg',
disabled: false,
visible: true,
name: ''
},
{
id: 2,
src: '/common/image/svg/copy.svg',
disabled: false,
visible: true,
name: ''
}
],
popVisible: false,
videoWidth: '360px',
videoDuration: '00:00',
selectMode: false,
detailData: [],
isAllChecked: false,
album: null,
deleteDialogTitle: ''
},
onInit() {
this.initNational();
},
initNational() {
this.bottomBarSource[0].name = this.$t('strings.move');
this.bottomBarSource[1].name = this.$t('strings.delete');
this.bottomBarSource[2].name = this.$t('strings.selectAll');
this.bottomBarSource[3].name = this.$t('strings.more');
this.bottomBarPopList[0].name = this.$t('strings.detailInfo');
this.bottomBarPopList[1].name = this.$t('strings.copy');
},
onShow() {
this.loadData();
},
onBackPress() {
if (this.selectMode) {
this.topBarSource.leftSrc = this.$app.$def.utils.getIcon('back');
this.topBarSource.title = this.$t('strings.video');
this.isShowBottomBar = false;
this.selectMode = false;
this.initListChecked();
return true;
} else {
return false;
}
},
loadData() {
let self = this;
let arg = {
selections: '',
selectionArgs: ['videoalbum'],
};
// 用来保存从详情的选中数据
let shareList = self.$app.$def.datamanage.getPhotoList() || [];
media.getVideoAssets(arg, (error, videos) => {
if (videos) {
videos.forEach((item, index) => {
item.src = 'file://' + item.URI;
if (self.selectMode) {
item.icon = self.$app.$def.utils.getIcon('unselected');
for (let j = 0; j < shareList.length; j++) {
let shareItem = shareList[j];
if (item.name === shareItem.name && item.id === shareItem.id) {
item.checked = shareItem.checked;
if (shareItem.checked) {
item.icon = self.$app.$def.utils.getIcon('selected');
} else {
item.icon = self.$app.$def.utils.getIcon('unselected');
}
}
}
} else {
item.icon = '';
item.checked = false;
}
item.poster = '/common/image/internet' + index + 1 + '.jpg';
});
self.listData = videos;
self.onCheckedChange();
}
});
},
// 顶部左侧按钮
topBarLeftClick() {
if (this.selectMode) {
this.topBarSource.leftSrc = this.$app.$def.utils.getIcon('back');
this.topBarSource.title = this.$t('strings.video');
this.isShowBottomBar = false;
this.selectMode = false;
this.initListChecked();
return false;
}
router.back();
},
// 顶部右侧按钮
topBarRightClick() {
},
videoPrepare(e) {
this.videoDuration = e.duration;
},
scaleClick(item, index) {
router.push(
{
uri: 'pages/photodetail/photodetail',
params: {
list: this.listData,
album: this.album,
selectMode: this.selectMode,
sharetIndex: index
},
}
);
},
videoClick(item, index) {
this.hideBottomPop();
if (this.selectMode) {
item.checked = !item.checked;
if (item.checked) {
item.icon = this.$app.$def.utils.getIcon('selected');
} else {
item.icon = this.$app.$def.utils.getIcon('unselected');
}
this.onCheckedChange();
return false;
}
router.push(
{
uri: 'pages/photodetail/photodetail',
params: {
list: this.listData,
album: this.album,
selectMode: this.selectMode,
sharetIndex: index
},
}
);
},
longpress(item, index) {
this.selectMode = true;
this.topBarSource.leftSrc = this.$app.$def.utils.getIcon('close');
this.topBarSource.title = this.$t('strings.unChoose');
this.isShowBottomBar = true;
this.initListChecked();
this.videoClick(item, index);
},
onCheckedChange() {
let self = this;
let checkList = self.getCheckedData();
if (!self.selectMode) {
self.topBarSource.isShowLeft = true;
self.topBarSource.title = self.album.name;
self.topBarSource.leftSrc = self.$app.$def.utils.getIcon('back');
self.isShowBottomBar = false;
self.isAllChecked = false;
self.initListChecked();
return false;
}
if (checkList.length === 0) {
self.topBarSource.title = this.$t('strings.unChoose');
self.bottomBarSource[2].name = this.$t('strings.selectAll');
self.bottomBarSource[2].src = '/common/image/svg/select_all.svg';
self.isAllChecked = false;
for (let i = 0; i < self.bottomBarSource.length; i++) {
const item = self.bottomBarSource[i];
if (item.id !== 3) {
item.disabled = true;
}
}
} else {
for (let i = 0; i < self.bottomBarSource.length; i++) {
const item = self.bottomBarSource[i];
item.disabled = false;
}
self.isShowBottomBar = true;
self.topBarSource.title = self.$t('strings.selected') + checkList.length + self.$t('strings.items');
if (self.getCheckedData().length === self.listData.length) {
self.isAllChecked = true;
self.bottomBarSource[2].name = this.$t('strings.unSelectAll');
self.bottomBarSource[2].src = '/common/image/svg/unselect_all.svg';
} else {
self.isAllChecked = false;
self.bottomBarSource[2].name = this.$t('strings.selectAll');
self.bottomBarSource[2].src = '/common/image/svg/select_all.svg';
}
}
},
initListChecked() {
this.listData.forEach(item => {
item.checked = false;
item.icon = this.$app.$def.utils.getIcon('unselected');
});
},
// 获取选中数据
getCheckedData() {
let self = this;
let list = [];
self.listData.forEach(item => {
if (item.checked) {
list.push(item);
}
});
return list;
},
// 底部菜单
bottomTabClick(item) {
if (item.detail.id === 1) {
this.movePhotos();
} else if (item.detail.id === 2) {
this.deletePhotos();
} else if (item.detail.id === 3) {
this.setListChecked();
}
},
// 设置全选
setListChecked() {
let self = this;
let list = self.listData;
// 宫格数据
for (let index = 0; index < list.length; index++) {
let item = list[index];
if (self.isAllChecked) {
item.checked = false;
item.icon = self.$app.$def.utils.getIcon('unselected');
} else {
item.checked = true;
item.icon = self.$app.$def.utils.getIcon('selected');
}
}
self.onCheckedChange();
},
// 弹出提示框点击事件
popupItemClick(item) {
if (item.detail.id === 2) {
this.copyPhotos();
} else if (item.detail.id === 1) {
let list = this.getCheckedData();
if (list.length === 0) {
return false;
}
let size = 0;
for (let i = 0; i < list.length; i++) {
size += Number(list[i].size);
}
size = size / 1024 / 1024;
this.detailData = {
number: list.length,
size: size.toFixed(4)
};
this.$element('detail_dialog').show();
}
},
deleteQuery() {
this.deleteDialogCommit();
},
// 删除图片
deletePhotos() {
let length = this.getCheckedData().length;
if (length === 0) {
return false;
}
let child = this.$child('delete_dialog');
child.setTitle(this.$t('strings.selected') + length + this.$t('strings.items'));
child.show();
},
deleteDialogCommit() {
let self = this;
let choose = self.getCheckedData();
let arg = {
selections: '',
selectionArgs: ['videoalbum'],
};
media.getVideoAssets(arg, (error, videos) => {
if (videos) {
for (let j = 0; j < choose.length; j++) {
let shareItem = choose[j];
videos.forEach((item, index) => {
if (item.name === shareItem.name && item.id === shareItem.id) {
item.commitDelete((error, commitFlag) => {
if (commitFlag) {
self.$app.$def.datamanage.isRefreshed(true);
self.selectMode = false;
setTimeout(() => {
if (choose.length === self.listData.length) {
self.listData = [];
self.onCheckedChange();
} else {
self.loadData();
}
}, 200);
}
});
}
});
}
}
});
},
// 移动
movePhotos() {
let self = this;
let choose = self.getCheckedData();
router.push(
{
uri: 'pages/selectalbum/selectalbum',
params: {
isOperationFrom: true,
operationType: 'move',
fromAlbum: self.album,
checkedList: choose
}
}
);
},
// 复制
copyPhotos() {
let self = this;
let choose = self.getCheckedData();
router.push(
{
uri: 'pages/selectalbum/selectalbum',
params: {
isOperationFrom: true,
operationType: 'copy',
fromAlbum: self.album,
checkedList: choose
}
}
);
},
hideBottomPop() {
this.popVisible = false;
},
changePopVisible(e) {
this.popVisible = e.detail;
}
};

Some files were not shown because too many files have changed in this diff Show More