123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218 |
- <template>
- <QStemplate :title="title" :titleHide="titleHide" :fontSize="fontSize" :width="width" :titleFlex="titleFlex"
- :contentFlex="contentFlex" :titleStyle="titleStyle" :contentStyle="contentStyle" :required="required" :requiredSign="requiredSign"
- :layout="layout" :titleLayout="titleLayout" :itemDisabled="itemDisabled" :titleColor="titleColor">
- <view class="width100 padding_10rpx_15rpx wrap" :class="itemLayout_computed">
- <view
- class="flex_column_c_c border_radius_4px transition_border_point6s padding_10rpx"
- v-for="(picsItem, picsIndex) in itemArray"
- :key="picsIndex">
- <view
- class="flex_row_c_c border1pxf2f2f2 position_relative border_radius_4px backgrounColor_f8f8f8 picsBox">
- <image
- :src="picsItem.path"
- class="border_radius_4px box_shadow_2px_2px_5px_ADADAD picsBox"
- mode="aspectFill"
- @tap.stop.prevent="showImg"
- :data-picsindex="picsIndex">
- </image>
- <view
- class="picsClear"
- @tap.prevent.stop="clearPic"
- :data-picsindex="picsIndex">
- <uni-icon type="clear" :color="picsItem.clearColor||clearColor||'#f5105c'" :size="34"/>
- </view>
- <view
- class="sortSelection flex_row_c_c"
- :style="{
- 'background-color': sortSelectionArray[picsIndex]?(selectedColor||'#0099FF'):(unSelectedColor||'rgba(0,0,0,.7)'),
- 'border': (selectBorderColor||'1px solid rgba(255,255,255,.7)'),
- 'color': selectColor||'#fff'
- }"
- v-if="sortSelection" @tap.stop.prevent="sortSelectionFc" :data-picsindex="picsIndex">
- {{
- sortSelectionArray[picsIndex] || ''
- }}
- </view>
- </view>
- </view>
- <view
- class="flex_column_c_c border_radius_4px transition_border_point6s padding_10rpx"
- v-if="max?(itemArray.length>=max?false:true):true">
- <view
- class="flex_row_c_c border1pxf2f2f2 position_relative border_radius_4px backgrounColor_f8f8f8 box_shadow_2px_2px_5px_ADADAD picsBox"
- @tap="chooseImg">
- <uni-icon type="image" :size="45" color="#999" />
- </view>
- </view>
- </view>
- </QStemplate>
- </template>
- <script>
- import _app from '../../js/app.js';
- import QStemplate from '../../template/template.vue';
- import QSInputsMixin from '../../js/QSInputsMixin.js';
- import uniIcon from '../../uniIcons/uni-icons.vue';
- export default {
- components: {
- QStemplate,
- uniIcon
- },
- props: {
- max: { //最多选择图片数量
- type: [String, Number],
- default: ''
- },
- sortSelection: { //排序选择模式
- type: Boolean,
- default: false
- },
- defaultSelectAll: { //在排序选择模式下,用户未选择任何图片时是否默认选择全部
- type: Boolean,
- default: true
- },
- clearColor: {
- type: String,
- default: '#f5105c'
- },
- selectedColor: {
- type: String,
- default: '#0099FF'
- },
- unSelectedColor: {
- type: String,
- default: 'rgba(0,0,0,.7)'
- },
- selectBorderColor: {
- type: String,
- default: '1px solid rgba(255,255,255,.7)'
- },
- selectColor: {
- type: String,
- default: '#fff'
- }
- },
- data() {
- let itemArray;
- if(this.value && this.value instanceof Array && this.value.length > 0) {
- itemArray = this.value;
- }else{
- itemArray = [];
- }
- return {
- itemArray,
- sortSelectionArray: [],
- sortSelectionCheckArray: []
- }
- },
- methods: {
- chooseImg() {
- uni.chooseImage({
- success: res => {
- const tempFilePaths = res.tempFilePaths;
- tempFilePaths.forEach(item=>{
- this.itemArray.push({path: item});
- })
- this.setValue(this.getItemArray());
- }
- })
- },
- clearPic(
- {currentTarget: { dataset: { picsindex } } } = {}
- ) {
- const oldPath = this.itemArray[picsindex].path;
- this.itemArray.splice(picsindex, 1);
- if(this.sortSelection) {
- const selectionIndex = this.sortSelectionCheckArray.findIndex(item=>item.path === oldPath);
- if(selectionIndex >= 0) {
- this.sortSelectionCheckArray.splice(selectionIndex, 1);
- }
- this.checkPicsCheckObj();
- }
- this.setValue(this.getItemArray());
- },
- showImg(
- {currentTarget: { dataset: { picsindex } } } = {}
- ) {
- _app.previewImage(this.itemArray.map(item=>item.path), picsindex);
- },
- sortSelectionFc(
- { currentTarget: { dataset: { picsindex } } } = {},
- ) {
- const hasIndex = this.sortSelectionCheckArray.findIndex(item=>item.path === this.itemArray[picsindex].path);
- if(hasIndex >= 0) {
- this.sortSelectionCheckArray.splice(hasIndex, 1);
- }else{
- this.sortSelectionCheckArray.push(this.itemArray[picsindex]);
- }
- this.setValue(this.getItemArray());
- this.checkPicsCheckObj();
- },
- checkPicsCheckObj(vbName) {
- const newArray = [];
- const itemArray = this.itemArray;
- const sortSelectionCheckArray = this.sortSelectionCheckArray;
- for(let i = 0; i < itemArray.length; i++) {
- const index = sortSelectionCheckArray.findIndex(ite=>ite.path === itemArray[i].path);
- if(index >= 0) {
- newArray.push(index+1);
- }else{
- newArray.push('');
- }
- }
- this.sortSelectionArray = newArray
- },
- setData(newArr) {
- this.itemArray = newArr;
- if(this.sortSelection) {
- this.sortSelectionCheckArray = [];
- }
- this.setValue(this.getItemArray());
- this.checkPicsCheckObj();
- },
- setUpLoadData(obj) {
- this.upLoadData = obj;
- if(this.sortSelection) {
- this.sortSelectionCheckArray = [];
- }
- this.setValue(this.getItemArray());
- this.checkPicsCheckObj();
- },
- getUpLoadPromiseArray() {
- return _app.getUpLoadPromiseArray({
- itemArray: [...this.getItemArray()],
- customId: this.customId,
- upLoadData: this.upLoadData,
- required: this.required
- });
- },
- getItemArray() {
- if(this.sortSelection) {
- if(this.sortSelectionCheckArray.length > 0) {
- return this.sortSelectionCheckArray;
- }else{
- if(this.defaultSelectAll) {
- return this.itemArray;
- }else{
- return [];
- }
- }
- }else{
- return this.itemArray;
- }
- }
- },
- mixins: [QSInputsMixin({
- QSInputsType: _app.typeObj.infinitePics
- })]
- };
- </script>
- <style scoped>
- @import url("../../css/inputs.css");
- @import url("../../config/css/picsAndInfinitePics.css");
- </style>
|