浏览代码

修改细节问题

快乐的梦鱼 1 月之前
父节点
当前提交
229b7dc692
共有 4 个文件被更改,包括 28 次插入25 次删除
  1. 10 6
      src/components/form/Field.vue
  2. 16 16
      src/components/form/Uploader.vue
  3. 0 1
      src/pages/dig/admin/review.vue
  4. 2 2
      src/pages/home/store/index.vue

+ 10 - 6
src/components/form/Field.vue

@@ -101,8 +101,7 @@
             :placeholder-style="`color: ${themeContext.resolveThemeColor(error ? errorTextColor : placeholderTextColor)}`"
             confirm-type="done"
             :maxlength="maxLength"
-            :disabled="disabled"
-            :readonly="readonly"
+            :disabled="disabled || readonly"
             @input="onInput"
             @focus="onFocus"
             @blur="onBlur"
@@ -133,8 +132,7 @@
               email: 'text',
             }) || 'text'"
             :maxlength="maxLength"
-            :disabled="disabled"
-            :readonly="readonly"
+            :disabled="disabled || readonly"
             @input="onInput"
             @focus="onFocus"
             @blur="onBlur"
@@ -528,8 +526,8 @@ const props = withDefaults(defineProps<FieldProps>(), {
   showLabel: () => propGetFormContext()?.showLabel.value ?? true,
   showRequiredBadge: () => propGetFormContext()?.fieldProps.value?.showRequiredBadge ?? true,
   showRightArrow: () => propGetFormContext()?.fieldProps.value?.showRightArrow ?? false,
-  disabled: () => propGetFormContext()?.disabled.value ?? false,
-  readonly: () => propGetFormContext()?.readonly.value ?? false,
+  disabled: false,
+  readonly: false,
   autoHeight: false,
   maxLength: 100,
   modelValue: undefined,
@@ -671,6 +669,12 @@ const themeStyles = themeContext.useThemeStyles({
     alignItems: 'center',
   },
 });
+const readonly = computed(() => {
+  return props.readonly || formContextProps?.readonly.value || false;
+});
+const disabled = computed(() => {
+  return props.disabled || formContextProps?.disabled.value || false;
+});
 
 const requiredShow = computed(() => {
   return props.required == true || formContextProps?.getItemRequieed(formItemInternalContext);

+ 16 - 16
src/components/form/Uploader.vue

@@ -33,12 +33,11 @@
             :itemSize="itemSize"
             :showDelete="showDelete"
             :defaultSource="props.itemDefaultSource"
-              
           >
           <!-- #endif -->
             <UploaderListItem
               :item="item"
-              :showDelete="showDelete"
+              :showDelete="showDelete && !disabled && !readonly"
               :isListStyle="props.listType === 'list'"
               :style="itemStyle"
               :imageStyle="itemImageStyle"
@@ -270,14 +269,6 @@ export interface UploaderInstance {
   pick: () => void;
 }
 
-const isImageExt = [
-  '.png',
-  '.jpg',
-  '.jpeg',
-  '.bmp',
-  '.webp',
-];
-
 const toast = ref<ToastInstance>();
 const dialog = ref<DialogAlertRoot>();
 
@@ -320,11 +311,8 @@ function onUploadPress() {
       }[]) {
         resolve(res.map((item) => {
           let isImage = typeof (item as any).type === 'string' ? (item as any).type.startsWith('image/') : false;
-          for (const ext of isImageExt) {
-            if (item.path.endsWith(ext)) {
-              isImage = true;
-              break;
-            }
+          if (!isImage) {
+            isImage = isImagePath(item.path);
           }
           return {
             filePath: item.path,
@@ -436,6 +424,13 @@ function onUploadPress() {
 }
 //条目点击
 function onItemPress(item: UploaderItem) {
+  if (props.readonly) {
+    props.onPreviewClick ?
+      props.onPreviewClick(item) :
+      onItemPreview(item); //默认预览
+    return;
+  }
+
   if (item.state === 'fail') {
     props.onRetryClick ?
       props.onRetryClick(item) :
@@ -451,7 +446,7 @@ function onItemPress(item: UploaderItem) {
 function onItemPreview(item: UploaderItem) {
   //判断后缀是不是图片
   const previewPath = item.previewPath || item.uploadedPath || item.filePath;
-  if (item.isImage) {
+  if (item.isImage || isImagePath(previewPath)) {
     uni.previewImage({
       urls: [ 
         previewPath 
@@ -465,6 +460,8 @@ function onItemPreview(item: UploaderItem) {
 }
 //条目删除点击
 function onItemDeletePress(item: UploaderItem) {
+  if (props.disabled || props.readonly)
+    return;
   props.onDeleteClick ?
     props.onDeleteClick(item).then(() => {
       deleteListItem(item);
@@ -492,6 +489,9 @@ function deleteListItem(item: UploaderItem) {
   }
 }
 
+function isImagePath(path: string) {
+  return path.match(/\.(jpg|jpeg|png|gif|webp)$/) !== null;
+}
 
 
 //开始上传条目

+ 0 - 1
src/pages/dig/admin/review.vue

@@ -162,7 +162,6 @@ onMounted(() => {
       formRef: reviewFormRef,
     }),
     readonly: true,
-    disabled: true,
   }
 })
 </script>

+ 2 - 2
src/pages/home/store/index.vue

@@ -85,7 +85,7 @@ import { navTo } from '@/components/utils/PageAction';
 
 const discoverLoader = useSimpleDataLoader(async () => {
   return (await CommonContent.getContentList(new GetContentListParams()
-    .setModelId(16)
+    .setModelId(18)
     .setMainBodyColumnId(354)
   , 1, 30)).list
 });
@@ -99,7 +99,7 @@ function goDetail(item: GetContentListItem) {
 }
 function goList(mainBodyColumnId: number|undefined, title: string, search?: string) {
   navTo('/pages/article/common/list', {
-    modelId: 16,
+    modelId: 18,
     mainBodyColumnId,
     title,
     search: search || '',