ソースを参照

Merge branch 'master' of http://git.yujin.shuziyunyao.com/yujin/forestry-wx

lisy 1 ヶ月 前
コミット
f82af5819e
35 ファイル変更413 行追加159 行削除
  1. 1 1
      src/audit/plant/base/audit-detail/models/gap-detail.vue
  2. 1 1
      src/audit/plant/base/audit-detail/models/swyq-detail.vue
  3. 3 3
      src/audit/plant/base/audit-list/index.vue
  4. 1 1
      src/audit/plant/base/audit-list/models/gap-base.vue
  5. 1 1
      src/audit/plant/base/audit-list/models/swyq-base.vue
  6. 16 1
      src/components/ut-action-sheet/ut-action-sheet.vue
  7. 1 1
      src/components/ut-empty/ut-empty.vue
  8. 1 1
      src/components/ut-search/ut-search.vue
  9. 11 11
      src/components/ut-tabar/ut-tabar.vue
  10. 172 28
      src/components/ut-upload/ut-upload.vue
  11. 2 2
      src/main.ts
  12. 1 1
      src/models/contact-unit-input/contact-unit-input.vue
  13. 62 0
      src/models/picker-area-input/picker-area-input.vue
  14. 7 7
      src/pages/login/login.vue
  15. 7 7
      src/pages/plant/base/index.vue
  16. 1 1
      src/pages/plant/more/index.vue
  17. 8 8
      src/pages/plant/port/index.vue
  18. 19 19
      src/pages/plant/port/models/task.vue
  19. 6 6
      src/pages/plant/storage/index.vue
  20. 5 5
      src/plant/base/base-edit/index.vue
  21. 1 1
      src/plant/base/gap-base-info-detail/index.vue
  22. 2 2
      src/plant/base/gap-base-info-edit/index.vue
  23. 3 3
      src/plant/base/gap-base-info/index.vue
  24. 1 1
      src/plant/base/mark-swyq-base-detail/index.vue
  25. 1 1
      src/plant/contact-unit/unit-edit/index.vue
  26. 1 1
      src/plant/contact-unit/unit-list/index.vue
  27. 2 2
      src/plant/port/port-supervise/models/task_card.vue
  28. 2 2
      src/plant/species/models/speList.vue
  29. 61 24
      src/plant/storage/seed-source/info-edit/index.vue
  30. 5 5
      src/plant/storage/seed-source/list/model/source-bottom.vue
  31. 2 2
      src/plant/storage/seed-source/models/animals-input.vue
  32. 0 4
      src/plant/storage/seed-source/models/type.ts
  33. 1 1
      src/plant/storage/storage-room/edit/index.vue
  34. 1 1
      src/plant/storage/storage-room/list/index.vue
  35. 4 4
      src/tools/select-gap-info/index.vue

+ 1 - 1
src/audit/plant/base/audit-detail/models/gap-detail.vue

@@ -7,7 +7,7 @@
             <view v-if="form?.res == '2'" class="pd-24 c-#FC333F f-s-24 bg-#F8E7E8">审核不通过理由:{{form?.msg}}</view>
             <view class="p-rtv">
                 <!-- 基本信息 -->
-                <image v-if="form?.res !== '0'" class="gap_res_image w-160 h-160" :src="`/static/images/common/base_res_logo${form.res}.png`" mode="widthFix" />
+                <image v-if="form?.res !== '0'" class="gap_res_image w-160 h-160" :src="`https://ta.zycpzs.cn/oss-file/smart-trace/szyy/images-plt/common/base_res_logo${form.res}.png`" mode="widthFix" />
                 <view class="pd-24 bg-#fff mb-10">
                     <view class="f-s-30 pd2-16-0 info-border-bottom">
                         <span class="c-#666">获评类型:</span>

+ 1 - 1
src/audit/plant/base/audit-detail/models/swyq-detail.vue

@@ -7,7 +7,7 @@
             <view v-if="form?.swyqRes == '2'" class="pd-24 c-#FC333F f-s-24 bg-#F8E7E8">审核不通过理由:{{form?.msg}}</view>
             <view class="p-rtv">
                 <!-- 基本信息 -->
-                <image v-if="form?.res !== '0'" class="gap_res_image w-160 h-160" :src="`/static/images/common/base_res_logo${form.swyqRes}.png`" mode="widthFix" />
+                <image v-if="form?.res !== '0'" class="gap_res_image w-160 h-160" :src="`https://ta.zycpzs.cn/oss-file/smart-trace/szyy/images-plt/common/base_res_logo${form.swyqRes}.png`" mode="widthFix" />
                 <view class="pd-24 bg-#fff mb-10">
                     <view class="f-s-30 pd2-16-0 info-border-bottom">
                         <span class="c-#666">获评类型:</span>

+ 3 - 3
src/audit/plant/base/audit-list/index.vue

@@ -9,10 +9,10 @@
                         <view class="c-#333 f-s-36 f-w-500">GAP/三无一全获评信息审核应用</view>
                     </template>
                 </up-navbar>
-                <image class="base_index_bg" src="@/static/images/audit/plant/base_index_bg.png" />
+                <image class="base_index_bg" src="https://ta.zycpzs.cn/oss-file/smart-trace/szyy/images-plt/audit/plant/base_index_bg.png" />
             </view>
         </template>
-        <image class="base_index_bg" src="@/static/images/audit/plant/base_index_bg.png" />
+        <image class="base_index_bg" src="https://ta.zycpzs.cn/oss-file/smart-trace/szyy/images-plt/audit/plant/base_index_bg.png" />
         <view class="swiper-content d-flex flex-cln">
             <template>
                 <up-navbar :fixed="false" bg-color="transparent">
@@ -25,7 +25,7 @@
                             <span class="f-s-24 c-#ccc">{{ setCipByNum(phone ?? null, 3, 4) }}</span>
                         </view>
                         <view>
-                            <image class="w-254 h-151" src="@/static/images/audit/plant/base_index_logo_right.png" mode="widthFix" />
+                            <image class="w-254 h-151" src="https://ta.zycpzs.cn/oss-file/smart-trace/szyy/images-plt/audit/plant/base_index_logo_right.png" mode="widthFix" />
                         </view>
                     </view>
                     <ut-tabs :tabs="tabs" v-model="viewType"></ut-tabs>

+ 1 - 1
src/audit/plant/base/audit-list/models/gap-base.vue

@@ -65,7 +65,7 @@
                             </view>
                         </view>
                         <view class="status-tag" :class="{ [`bg-res-${item?.res}`]: true }">{{ selectDictLabel(tabs, item?.res) }}</view>
-                        <image class="gap_tag_item_logo" src="@/static/images/audit/plant/gap_tag_item_logo.png" mode="widthFix" />
+                        <image class="gap_tag_item_logo" src="https://ta.zycpzs.cn/oss-file/smart-trace/szyy/images-plt/audit/plant/gap_tag_item_logo.png" mode="widthFix" />
                     </view>
                 </template>
             </view>

+ 1 - 1
src/audit/plant/base/audit-list/models/swyq-base.vue

@@ -65,7 +65,7 @@
                             </view>
                         </view>
                         <view class="status-tag" :class="{ [`bg-res-${item?.swyqRes}`]: true }">{{ selectDictLabel(tabs, item?.swyqRes) }}</view>
-                        <image class="swyq_tag_item_logo" src="@/static/images/audit/plant/swyq_tag_item_logo.png" mode="widthFix" />
+                        <image class="swyq_tag_item_logo" src="https://ta.zycpzs.cn/oss-file/smart-trace/szyy/images-plt/audit/plant/swyq_tag_item_logo.png" mode="widthFix" />
                     </view>
                 </template>
             </view>

+ 16 - 1
src/components/ut-action-sheet/ut-action-sheet.vue

@@ -66,6 +66,10 @@ const props = defineProps({
         type: Boolean,
         default: false, // 只有自定义弹窗模式下生效
     },
+    valueType: {
+        type: String,
+        default: 'string', // 数组 array 或 字符串 string,只有多选时生效
+    },
 });
 const options = computed(() => {
     return props.tabs.map((item: any) => {
@@ -140,7 +144,7 @@ const clickCol = (item: any) => {
 const onConfirm = () => {
     const values = getSelectedValues();
     let out: any;
-    if (Array.isArray(props.modelValue)) {
+    if (Array.isArray(props.modelValue) || props.valueType === 'array') {
         out = values;
     } else {
         // 字符串场景下,用逗号拼接
@@ -193,6 +197,17 @@ watch(
     { immediate: true },
 );
 </script>
+<script  lang="ts">  
+export default {  
+  options: {  
+    // 微信小程序中 options 选项  
+    multipleSlots: true, //  在组件定义时的选项中启动多slot支持,默认启用  
+    styleIsolation: 'shared', //  启动样式隔离。当使用页面自定义组件,希望父组件影响子组件样式时可能需要配置。具体配置选项参见:微信小程序自定义组件的样式  
+    addGlobalClass: true, //  表示页面样式将影响到自定义组件,但自定义组件中指定的样式不会影响页面。这个选项等价于设置 styleIsolation: apply-shared  
+    virtualHost: true //  将自定义节点设置成虚拟的,更加接近Vue组件的表现。我们不希望自定义组件的这个节点本身可以设置样式、响应 flex 布局等,而是希望自定义组件内部的第一层节点能够响应 flex 布局或者样式由自定义组件本身完全决定  
+  }  
+}  
+</script>
 <style lang="scss" scoped>
 .ut-custom-item-sheet {
     padding: 18rpx 6rpx;

+ 1 - 1
src/components/ut-empty/ut-empty.vue

@@ -26,7 +26,7 @@ const props = defineProps({
     },
     image: {
         type: String,
-        default: '/static/images/plant/noEmpty.png',
+        default: 'https://ta.zycpzs.cn/oss-file/smart-trace/szyy/images-plt/plant/noEmpty.png',
     },
     color: {
         type: String,

+ 1 - 1
src/components/ut-search/ut-search.vue

@@ -4,7 +4,7 @@
         <u-input v-model="value" ref="searchInputRef" cursor cursorColor="#333" clearable type="text" :focus="focused" border="none" @change="inputSearch" @clear="clear" @confirm="search" confirmType="search" :fontSize="fontSize" :maxlength="maxlength" :placeholder="placeholder">
             <template #suffix>
                 <view @click.stop="search" class="d-flex j-c a-c" style="padding: 0 16rpx">
-                    <image class="search_icon" src="/static/images/plant/search_icon.png" mode="widthFix" />
+                    <image class="search_icon" src="https://ta.zycpzs.cn/oss-file/smart-trace/szyy/images-plt/plant/search_icon.png" mode="widthFix" />
                 </view>
             </template>
         </u-input>

+ 11 - 11
src/components/ut-tabar/ut-tabar.vue

@@ -1,33 +1,33 @@
 <template>
     <view class="w-100%" style="position: fixed; bottom: 0; left: 0; z-index: 1100">
         <view class="p-rtv" style="height: 210rpx">
-            <image class="w-100%" src="/static/images/plant/bottombg.png" mode="widthFix" style="position: absolute; bottom: 0; left: 0; z-index: -1" />
+            <image class="w-100%" src="https://ta.zycpzs.cn/oss-file/smart-trace/szyy/images-plt/plant/bottombg.png" mode="widthFix" style="position: absolute; bottom: 0; left: 0; z-index: -1" />
             <view class="d-flex h-140 w-100% j-sa" style="position: absolute; bottom: 0; left: 0">
                 <view class="d-flex a-c flex1 j-sa">
                     <view @click="showStorage = false;$u.route({ type: 'switchTab', url: '/pages/plant/base/index' })" class="c-#999 f-s-24 d-flex flex-cln j-c a-c">
-                        <image v-if="activeTab === 'base'" class="w-80 h-80" src="/static/images/plant/bottomBaseActive.png" mode="widthFix" />
-                        <image v-else class="w-80 h-80" src="/static/images/plant/bottomBase.png" mode="widthFix" />
+                        <image v-if="activeTab === 'base'" class="w-80 h-80" src="https://ta.zycpzs.cn/oss-file/smart-trace/szyy/images-plt/plant/bottomBaseActive.png" mode="widthFix" />
+                        <image v-else class="w-80 h-80" src="https://ta.zycpzs.cn/oss-file/smart-trace/szyy/images-plt/plant/bottomBase.png" mode="widthFix" />
                         <view class="text-center" :class="activeTab === 'base' ? 'c-primary f-w-5' : ''">基地</view>
                     </view>
                     <view @click="showStorage = false;$u.route({ type: 'switchTab', url: '/pages/plant/port/index' })" class="c-#999 f-s-24 d-flex flex-cln j-c a-c">
-                        <image v-if="activeTab === 'planting'" class="w-80 h-80" src="/static/images/plant/bottomPlantingBreedingActive.png" mode="widthFix" />
-                        <image v-else class="w-80 h-80" src="/static/images/plant/bottomPlantingBreeding.png" mode="widthFix" />
+                        <image v-if="activeTab === 'planting'" class="w-80 h-80" src="https://ta.zycpzs.cn/oss-file/smart-trace/szyy/images-plt/plant/bottomPlantingBreedingActive.png" mode="widthFix" />
+                        <image v-else class="w-80 h-80" src="https://ta.zycpzs.cn/oss-file/smart-trace/szyy/images-plt/plant/bottomPlantingBreeding.png" mode="widthFix" />
                         <view class="text-center" :class="activeTab === 'planting' ? 'c-primary f-w-5' : ''">种养殖</view>
                     </view>
                 </view>
                 <view class="w-126 d-flex a-c j-c p-rtv" @click="$u.route({ type: 'switchTab', url: '/pages/plant/storage/index' })">
-                    <image v-if="activeTab === 'storage'" class="w-80 h-80" src="/static/images/plant/bottomWarehouseActive.png" mode="widthFix" style="position: absolute; top: -40rpx" />
-                    <image  v-else class="w-80 h-80" src="/static/images/plant/bottomWarehouse.png" mode="widthFix" style="position: absolute; top: -40rpx" />
+                    <image v-if="activeTab === 'storage'" class="w-80 h-80" src="https://ta.zycpzs.cn/oss-file/smart-trace/szyy/images-plt/plant/bottomWarehouseActive.png" mode="widthFix" style="position: absolute; top: -40rpx" />
+                    <image  v-else class="w-80 h-80" src="https://ta.zycpzs.cn/oss-file/smart-trace/szyy/images-plt/plant/bottomWarehouse.png" mode="widthFix" style="position: absolute; top: -40rpx" />
                 </view>
                 <view class="d-flex a-c flex1 j-sa">
                     <view class="c-#999 f-s-24 d-flex flex-cln j-c a-c">
-                        <image v-if="activeTab === 'processing'" class="w-80 h-80" src="/static/images/plant/bottomProcessingPackagingActive.png" mode="widthFix" />
-                        <image v-else class="w-80 h-80" src="/static/images/plant/bottomProcessingPackaging.png" mode="widthFix" />
+                        <image v-if="activeTab === 'processing'" class="w-80 h-80" src="https://ta.zycpzs.cn/oss-file/smart-trace/szyy/images-plt/plant/bottomProcessingPackagingActive.png" mode="widthFix" />
+                        <image v-else class="w-80 h-80" src="https://ta.zycpzs.cn/oss-file/smart-trace/szyy/images-plt/plant/bottomProcessingPackaging.png" mode="widthFix" />
                         <view class="text-center" :class="activeTab === 'processing' ? 'c-primary f-w-5' : ''">加工包装</view>
                     </view>
                     <view @click="$u.route({ type: 'switchTab', url: '/pages/plant/more/index' })" class="c-#999 f-s-24 d-flex flex-cln j-c a-c">
-                        <image v-if="activeTab === 'more'" class="w-80 h-80" src="/static/images/plant/bottomMoreActive.png" mode="widthFix" />
-                        <image v-else class="w-80 h-80" src="/static/images/plant/bottomMore.png" mode="widthFix" />
+                        <image v-if="activeTab === 'more'" class="w-80 h-80" src="https://ta.zycpzs.cn/oss-file/smart-trace/szyy/images-plt/plant/bottomMoreActive.png" mode="widthFix" />
+                        <image v-else class="w-80 h-80" src="https://ta.zycpzs.cn/oss-file/smart-trace/szyy/images-plt/plant/bottomMore.png" mode="widthFix" />
                         <view class="text-center" :class="activeTab === 'more' ? 'c-primary f-w-5' : ''">更多</view>
                     </view>
                 </view>

+ 172 - 28
src/components/ut-upload/ut-upload.vue

@@ -3,13 +3,13 @@
         <view class="ut-upload-card">
             <template v-for="(item, index) in fileList" :key="index">
                 <view :style="{ width, height }" class="card-item">
-                    <template v-if="accept === 'image'">
+                    <template v-if="getItemKind(item) === 'image'">
                         <image :src="item.status === 'uploading' && item.tempUrl ? item.tempUrl : item.url" :mode="mode" style="width: 100%; height: 100%" @click="onPreview(index)"></image>
                     </template>
-                    <template v-else-if="accept === 'video'">
+                    <template v-else-if="getItemKind(item) === 'video'">
                         <video :src="item.status === 'uploading' && item.tempUrl ? item.tempUrl : item.url" controls style="width: 100%; height: 100%" @click="onPreview(index)"></video>
                     </template>
-                    <template v-if="accept === 'file'">
+                    <template v-else>
                         <view class="d-flex flex-cln file-box" @click="onPreview(index)">
                             <view class="flex1">
                                 <view class="f-s-28 c-primary up-line-2">{{ item.fileName || '文件' }}</view>
@@ -28,12 +28,37 @@
                     </view>
                 </view>
             </template>
-            <view v-if="(fileList.length < maxCount)" :style="{ width, height }" @click="clickBtnUpload" class="card-item btn-select d-flex flex-cln j-c a-c">
-                <view class="mb-10">
-                    <up-icon :color="iconColor" :name="iconName" :iconSize="iconSize"></up-icon>
+            <template v-if="fileList.length < maxCount">
+                <!-- 兼容旧用法:只有一种类型时,仍然只展示一个按钮,文案/样式按类型和配置对象决定 -->
+                <view
+                    v-if="getAcceptKinds().length === 1"
+                    :style="[{ width, height }, getUploadBtnStyle(getAcceptKinds()[0])]"
+                    @click="clickBtnUpload"
+                    class="card-item btn-select d-flex flex-cln j-c a-c"
+                    :class="getUploadBtnClass(getAcceptKinds()[0])"
+                >
+                    <view class="mb-10">
+                        <up-icon :color="getUploadIconColor(getAcceptKinds()[0])" :name="getUploadIconName(getAcceptKinds()[0])" :iconSize="getUploadIconSize(getAcceptKinds()[0])"></up-icon>
+                    </view>
+                    <view class="f-s-24 c-primary" :style="getUploadBtnTextStyle(getAcceptKinds()[0])">{{ getUploadTextByKind(getAcceptKinds()[0]) }}</view>
                 </view>
-                <view class="f-s-24 c-primary">{{ uploadText }}</view>
-            </view>
+                <!-- 多种类型时,根据 accept 展示多个按钮,每个按钮对应一种上传类型 -->
+                <template v-else>
+                    <view
+                        v-for="kind in getAcceptKinds()"
+                        :key="kind"
+                        :style="[{ width, height }, getUploadBtnStyle(kind)]"
+                        @click="onClickUpload(kind)"
+                        class="card-item btn-select d-flex flex-cln j-c a-c"
+                        :class="getUploadBtnClass(kind)"
+                    >
+                        <view class="mb-10">
+                            <up-icon :color="getUploadIconColor(kind)" :name="getUploadIconName(kind)" :iconSize="getUploadIconSize(kind)"></up-icon>
+                        </view>
+                        <view class="f-s-24 c-primary" :style="getUploadBtnTextStyle(kind)">{{ getUploadTextByKind(kind) }}</view>
+                    </view>
+                </template>
+            </template>
         </view>
     </template>
 </template>
@@ -43,6 +68,18 @@ import upload from '@/utils/upload';
 import { fileExt, isUrl } from '@/utils/ruoyi';
 import { getFileIconByUrl } from '@/utils/common';
 
+type AcceptKind = 'image' | 'video' | 'file';
+
+interface UploadButtonConfigItem {
+    text?: string; // 按钮文字
+    bgColor?: string; // 按钮背景色
+    textColor?: string; // 文字颜色
+    iconName?: string; // 覆盖默认图标名
+    iconColor?: string; // 覆盖默认图标颜色
+    iconSize?: string | number; // 覆盖默认图标大小
+    customClass?: string; // 自定义 class
+}
+
 interface FileItem {
     url: string;
     fileName?: string;
@@ -52,6 +89,7 @@ interface FileItem {
     tempUrl?: string;
     status?: 'uploading' | 'done' | 'error';
     progress?: number;
+    kind?: AcceptKind;
 }
 
 interface UploadEvent {
@@ -69,8 +107,12 @@ interface Props {
     height: string;
     multiple: boolean;
     uploadText: string;
+    uploadImageText?: string;
+    uploadVideoText?: string;
+    uploadFileText?: string;
+    uploadButtonConfig?: Partial<Record<AcceptKind, UploadButtonConfigItem>>; // 统一配置 image/file/video 按钮
     uploadIcon: string;
-    accept: string; // image/video/file
+    accept: string; // image/video/file image,file,video
     uploadUrl?: string;
     uploadTimeout?: number;
     extension?: string | string[]; // 限制选择的文件扩展名(仅在 accept==='file' 生效)
@@ -89,8 +131,11 @@ const props = withDefaults(defineProps<Props>(), {
     height: '210rpx',
     multiple: true,
     uploadText: '点击上传',
+    uploadImageText: '上传图片',
+    uploadVideoText: '上传视频',
+    uploadFileText: '上传文件',
     uploadIcon: 'plus',
-    accept: 'image',
+    accept: 'image', // image/video/file   image,file,video
     uploadUrl: '/resource/oss/upload',
     uploadTimeout: 600000,
     extension: () => ['pdf'],
@@ -100,6 +145,7 @@ const props = withDefaults(defineProps<Props>(), {
     iconColor: '#37a954',
     iconSize: '30rpx',
     mode: 'aspectFill',
+    uploadButtonConfig: () => ({}),
 });
 
 const emit = defineEmits<{
@@ -108,14 +154,43 @@ const emit = defineEmits<{
 }>();
 
 const fileList = ref<FileItem[]>([]);
-const buildFileName = (path: string, kind: 'image' | 'video' | 'file') => {
+const buildFileName = (path: string, kind: AcceptKind) => {
     const ext = fileExt(path) || 'dat';
     const prefix = kind === 'image' ? 'img' : kind === 'video' ? 'video' : 'file';
     return `${prefix}_${Date.now()}.${ext}`;
 };
-const clickBtnUpload = async () => {
-    // 判断是图片/视频/文件不同的上传
-    // 使用chooseMedia选择图片或视频 chooseMessageFile选择文件
+const getAcceptKinds = (): AcceptKind[] => {
+    if (!props.accept) return ['image'];
+    const parts = String(props.accept)
+        .split(',')
+        .map((s) => s.trim())
+        .filter(Boolean) as AcceptKind[];
+    const all: AcceptKind[] = ['image', 'video', 'file'];
+    const result = parts.filter((p) => all.includes(p));
+    return result.length ? result : ['image'];
+};
+
+const getBtnConfig = (kind: AcceptKind): UploadButtonConfigItem => {
+    return (props.uploadButtonConfig && props.uploadButtonConfig[kind]) || {};
+};
+
+const detectKindByUrl = (path?: string | null): AcceptKind => {
+    if (!path) return 'file';
+    const ext = (fileExt(path) || '').toLowerCase();
+    const imageExts = ['jpg', 'jpeg', 'png', 'gif', 'bmp', 'webp', 'svg'];
+    const videoExts = ['mp4', 'mov', 'avi', 'wmv', 'flv', 'mkv', 'webm', '3gp'];
+    if (imageExts.includes(ext)) return 'image';
+    if (videoExts.includes(ext)) return 'video';
+    return 'file';
+};
+
+const getItemKind = (item: FileItem): AcceptKind => {
+    if (item.kind) return item.kind;
+    const path = item.tempUrl || item.url;
+    return detectKindByUrl(path);
+};
+
+const doUploadByKind = async (kind: AcceptKind) => {
     try {
         const remain = props.maxCount - fileList.value.length;
         if (remain <= 0) {
@@ -123,7 +198,7 @@ const clickBtnUpload = async () => {
             return;
         }
 
-        if (props.accept === 'file') {
+        if (kind === 'file') {
             const res: any = await uni.chooseMessageFile({
                 count: props.multiple ? remain : 1,
                 type: 'file',
@@ -132,7 +207,7 @@ const clickBtnUpload = async () => {
             const files = (res?.tempFiles || []) as Array<{ name?: string; size: number; path: string }>;
             for (const f of files) {
                 const name = f.name || buildFileName(f.path, 'file');
-                const placeholder: FileItem = { url: '', fileName: name, fileSize: f.size, tempUrl: f.path, status: 'uploading' };
+                const placeholder: FileItem = { url: '', fileName: name, fileSize: f.size, tempUrl: f.path, status: 'uploading', kind: 'file' };
                 const idx = fileList.value.push(placeholder) - 1;
                 try {
                     const upRes = await upload({ url: props.uploadUrl!, filePath: f.path, name: 'file', timeout: props.uploadTimeout });
@@ -156,13 +231,21 @@ const clickBtnUpload = async () => {
         } else {
             const res: any = await uni.chooseMedia({
                 count: props.multiple ? remain : 1,
-                mediaType: props.accept === 'image' ? ['image'] : ['video'],
+                mediaType: kind === 'image' ? ['image'] : ['video'],
                 sourceType: ['album', 'camera'],
             });
             const files = (res?.tempFiles || []) as Array<{ tempFilePath: string; size: number; thumbTempFilePath?: string }>;
             for (const f of files) {
-                const name = buildFileName(f.tempFilePath, props.accept === 'image' ? 'image' : 'video');
-                const placeholder: FileItem = { url: '', fileName: name, fileSize: f.size, tempUrl: f.tempFilePath, status: 'uploading' };
+                const name = buildFileName(f.tempFilePath, kind);
+                const placeholder: FileItem = {
+                    url: '',
+                    fileName: name,
+                    fileSize: f.size,
+                    tempUrl: f.tempFilePath,
+                    coverUrl: f.thumbTempFilePath,
+                    status: 'uploading',
+                    kind
+                };
                 const idx = fileList.value.push(placeholder) - 1;
                 try {
                     const upRes = await upload({ url: props.uploadUrl!, filePath: f.tempFilePath, name: 'file', timeout: props.uploadTimeout });
@@ -184,20 +267,76 @@ const clickBtnUpload = async () => {
                 }
             }
         }
-
-        // 最后再统一触发一次
         emitCurrentValue();
     } catch (e) {
         console.log('upload error:', e);
     }
 };
 
+// 兼容旧用法:当模板中只用一个上传按钮时,默认使用 accept 中的第一种类型
+const clickBtnUpload = async () => {
+    const kinds = getAcceptKinds();
+    await doUploadByKind(kinds[0]);
+};
+
+const onClickUpload = async (kind: AcceptKind) => {
+    await doUploadByKind(kind);
+};
+
+const getUploadTextByKind = (kind: AcceptKind) => {
+    const cfg = getBtnConfig(kind);
+    if (cfg.text) return cfg.text;
+    // 兼容旧用法:如果外部显式传入了 uploadText(且不是默认值),统一用这个文案
+    if (props.uploadText && props.uploadText !== '点击上传') {
+        return props.uploadText;
+    }
+    if (kind === 'image') return props.uploadImageText || '上传图片';
+    if (kind === 'video') return props.uploadVideoText || '上传视频';
+    if (kind === 'file') return props.uploadFileText || '上传文件';
+    return props.uploadText || '点击上传';
+};
+
+const getUploadBtnStyle = (kind: AcceptKind) => {
+    const cfg = getBtnConfig(kind);
+    const style: Record<string, string> = {};
+    if (cfg.bgColor) style.backgroundColor = cfg.bgColor;
+    return style;
+};
+
+const getUploadBtnTextStyle = (kind: AcceptKind) => {
+    const cfg = getBtnConfig(kind);
+    const style: Record<string, string> = {};
+    if (cfg.textColor) style.color = cfg.textColor;
+    return style;
+};
+
+const getUploadBtnClass = (kind: AcceptKind) => {
+    const cfg = getBtnConfig(kind);
+    return cfg.customClass || '';
+};
+
+const getUploadIconName = (kind: AcceptKind) => {
+    const cfg = getBtnConfig(kind);
+    return cfg.iconName || props.iconName;
+};
+
+const getUploadIconColor = (kind: AcceptKind) => {
+    const cfg = getBtnConfig(kind);
+    return cfg.iconColor || props.iconColor;
+};
+
+const getUploadIconSize = (kind: AcceptKind) => {
+    const cfg = getBtnConfig(kind);
+    return cfg.iconSize || props.iconSize;
+};
+
 
 const onPreview = (index: number) => {
     const item = fileList.value[index];
     if (!item) return;
+    const kind = getItemKind(item);
     // 文件类型:上传中也允许预览本地临时文件
-    if (props.accept === 'file') {
+    if (kind === 'file') {
         const localPath = item.status === 'uploading' && item.tempUrl
             ? item.tempUrl
             : (!isUrl(item.url) ? item.url : '');
@@ -238,21 +377,26 @@ const onPreview = (index: number) => {
     }
     // 图片/视频:上传中不允许预览
     if (item?.status === 'uploading') return;
-    if (props.accept === 'image') {
-        const urls = fileList.value.map((i) => i.url);
+    if (kind === 'image') {
+        const images = fileList.value.filter((i) => getItemKind(i) === 'image');
+        const urls = images.map((i) => i.url);
+        const currentUrl = item.url;
+        const current = urls.indexOf(currentUrl);
         uni.previewImage({
             urls,
-            current: urls[index]
+            current: current >= 0 ? urls[current] : urls[0]
         });
         return;
     }
-    if (props.accept === 'video') {
+    if (kind === 'video') {
         // #ifdef MP-WEIXIN
-        const sources = fileList.value.map((i) => ({ url: i.url, type: 'video', poster: i.coverUrl || '' }));
+        const videos = fileList.value.filter((i) => getItemKind(i) === 'video');
+        const sources = videos.map((i) => ({ url: i.url, type: 'video', poster: i.coverUrl || '' }));
+        const current = videos.findIndex((v) => v === item);
         // @ts-ignore
         wx.previewMedia({
             sources,
-            current: index
+            current: current >= 0 ? current : 0
         });
         // #endif
         // #ifndef MP-WEIXIN

+ 2 - 2
src/main.ts

@@ -25,12 +25,12 @@ const uviewProps: any = {
         input: {
             color: '#333',
             fontSize: '30rpx',
-            placeholderStyle: 'color: #ccc; font-weight: 400;',
+            placeholderStyle: 'color: #ccc; font-weight: 400;fontSize:30rpx;',
         },
         textarea: {
             color: '#333',
             fontSize: '30rpx',
-            placeholderStyle: 'color: #ccc; font-weight: 400;',
+            placeholderStyle: 'color: #ccc; font-weight: 400;fontSize:30rpx;',
         },
         radio: {
             activeColor: '#37A954',

+ 1 - 1
src/models/contact-unit-input/contact-unit-input.vue

@@ -1,6 +1,6 @@
 <template>
     <up-button v-if="!modelValue" type="primary" @click="selectContactUnitShow = true" plain>
-        <image class="w-36 h-36 mr-10" src="@/static/images/common/select_push_icon.png" mode="widthFix" />
+        <image class="w-36 h-36 mr-10" src="https://ta.zycpzs.cn/oss-file/smart-trace/szyy/images-plt/common/select_push_icon.png" mode="widthFix" />
         <span>{{ placeholder }}</span>
     </up-button>
     <view v-else class="bg-#FBFDFB card-info-block pd-24 p-rtv mt-16">

+ 62 - 0
src/models/picker-area-input/picker-area-input.vue

@@ -0,0 +1,62 @@
+<template>
+    <view @click="showArea = true">
+        <slot></slot>
+    </view>
+    <ut-picker-area v-model:show="showArea" v-model="value" :title="title" :selectCodeMax="selectCodeMax" :maxLevel="maxLevel" @confirm="confirmArea"></ut-picker-area>
+</template>
+<script setup lang="ts">
+const props = defineProps({
+    modelValue: {
+        type: String,
+        default: '',
+    },
+    title: {
+        type: String,
+        default: '请选择地址',
+    },
+    maxLevel: {
+        type: Number,
+        default: 3,
+    },
+    name: {
+        type: String,
+        default: '',
+    },
+    fullName: {
+        type: String,
+        default: '',
+    },
+    fullNames: {
+        type: String,
+        default: '',
+    },
+    selectCodeMax: {
+        type: String,
+        default: '',
+    }
+});
+const showArea = ref(false);
+const value = ref(props.modelValue);
+const emit = defineEmits(['update:modelValue', 'update:name', 'update:fullName', 'update:fullNames', 'change']);
+const confirmArea = (area: any) => {
+    value.value = area.value;
+    emit('update:modelValue', area.value);
+    emit('update:name', area.name);
+    emit('update:fullName', area.fullName);
+    emit('update:fullNames', area.fullNames);
+    emit('change', area);
+    showArea.value = false;
+};
+</script>
+<style scoped lang="scss">
+.close-icon {
+    position: absolute;
+    top: 0;
+    right: 0;
+    z-index: 10;
+}
+.card-info-block {
+    border: 1rpx solid #afddbb;
+    border-radius: 10rpx;
+}
+</style>

+ 7 - 7
src/pages/login/login.vue

@@ -7,11 +7,11 @@
                 </template>
             </up-navbar>
         </template>
-        <view class="h-620 w-100%" style="background: url('/static/images/plant/loginTopBg.png'); background-size: auto 100%; background-repeat: no-repeat; position: absolute; top: 0; left: 0; z-index: -1"> </view>
+        <view class="h-620 w-100%" style="background: url('https://ta.zycpzs.cn/oss-file/smart-trace/szyy/images-plt/plant/loginTopBg.png'); background-size: auto 100%; background-repeat: no-repeat; position: absolute; top: 0; left: 0; z-index: -1"> </view>
         <view class="login-centent">
             <view class="login-logo-wrap p-rtv d-flex j-c a-c b-radius"></view>
             <view v-if="!isShowPhoneLogin" class="login-form pl-20 pd-25 b-radius p-rtv">
-                <image class="w-100%" src="/static/images/plant/loginMidBg.png" mode="widthFix" style="position: absolute; top: 0; left: 0" />
+                <image class="w-100%" src="https://ta.zycpzs.cn/oss-file/smart-trace/szyy/images-plt/plant/loginMidBg.png" mode="widthFix" style="position: absolute; top: 0; left: 0" />
                 <view class="pd-40"></view>
                 <template v-if="isBindPhone">
                     <up-button class="mb-40" @click="handleLogin" color="#28A94B" type="primary" shape="circle">
@@ -86,31 +86,31 @@
             <view class="d-flex j-sa pl-20 pr-20">
                 <view v-if="!isShowPhoneLogin" class="d-flex flex-cln j-c a-c" @click="isShowPhoneLogin = true">
                     <view class="bc-#f2f2f2 d-flex j-c a-c">
-                        <image class="w-95 h-95" src="/static/images/plant/accountNumber.png" mode="widthFix" />
+                        <image class="w-95 h-95" src="https://ta.zycpzs.cn/oss-file/smart-trace/szyy/images-plt/plant/accountNumber.png" mode="widthFix" />
                     </view>
                     <view class="c-#ccc f-s-24 pt-10">账号密码</view>
                 </view>
                 <view v-if="isShowPhoneLogin" class="d-flex flex-cln j-c a-c" @click="isShowPhoneLogin = false">
                     <view class="bc-#f2f2f2 d-flex j-c a-c">
-                        <image class="w-95 h-95" src="/static/images/plant/QuickLogin.png" mode="widthFix" />
+                        <image class="w-95 h-95" src="https://ta.zycpzs.cn/oss-file/smart-trace/szyy/images-plt/plant/QuickLogin.png" mode="widthFix" />
                     </view>
                     <view class="c-#ccc f-s-24 pt-10">一键登录</view>
                 </view>
                 <view class="d-flex flex-cln j-c a-c">
                     <view class="bc-#f2f2f2 d-flex j-c a-c">
-                        <image class="w-95 h-95" src="/static/images/plant/SZYYLogo.png" mode="widthFix" />
+                        <image class="w-95 h-95" src="https://ta.zycpzs.cn/oss-file/smart-trace/szyy/images-plt/plant/SZYYLogo.png" mode="widthFix" />
                     </view>
                     <view class="c-#ccc f-s-24 pt-10">数字云药</view>
                 </view>
                 <view class="d-flex flex-cln j-c a-c">
                     <view class="bc-#f2f2f2 d-flex j-c a-c">
-                        <image class="w-95 h-95" src="/static/images/plant/cxlmLogo.png" mode="widthFix" />
+                        <image class="w-95 h-95" src="https://ta.zycpzs.cn/oss-file/smart-trace/szyy/images-plt/plant/cxlmLogo.png" mode="widthFix" />
                     </view>
                     <view class="c-#ccc f-s-24 pt-10">中药材创新联盟</view>
                 </view>
             </view>
         </view>
-        <image class="login-bttom-bg" src="/static/images/plant/loginBottomBg.png" mode="widthFix" />
+        <image class="login-bttom-bg" src="https://ta.zycpzs.cn/oss-file/smart-trace/szyy/images-plt/plant/loginBottomBg.png" mode="widthFix" />
     </z-paging>
 </template>
 

+ 7 - 7
src/pages/plant/base/index.vue

@@ -40,7 +40,7 @@
                 <view class="pd-10 mg-14">
                     <view class="b-radius pd-6" style="border: 1rpx solid #fff; background: linear-gradient(90deg, #c1f3c5 0%, rgba(193, 243, 197, 0.5) 20%, rgba(255, 255, 255, 0.5) 35%, rgba(255, 255, 255, 0.5) 50%, rgba(232, 255, 234, 0.5) 100%, #e8ffea 100%), linear-gradient(90deg, transparent 0%, rgba(255, 255, 255, 0.3) 30%, rgba(255, 255, 255, 0.3) 80%, transparent 100%)">
                         <view class="b-radius pd-10 p-rtv" style="border: 1rpx solid #baedbf">
-                            <image class="w-200" src="/static/images/plant/typeofBusiness.png" mode="widthFix" style="position: absolute; top: 10rpx; left: 10rpx" />
+                            <image class="w-200" src="https://ta.zycpzs.cn/oss-file/smart-trace/szyy/images-plt/plant/typeofBusiness.png" mode="widthFix" style="position: absolute; top: 10rpx; left: 10rpx" />
                             <view v-if="!speciesArray.length" class="pd-20"></view>
                             <view v-if="speciesArray.length" class="d-flex pr-15">
                                 <view class="flex1"></view>
@@ -58,11 +58,11 @@
                 <view class="b-radius pt-0 bg-#f7f7f7" style="border: 1rpx solid #fff; border-bottom-color: transparent; margin-top: -40rpx">
                     <up-sticky :offset-top="stickyTop" zIndex="10">
                         <view class="pd-24 p-rtv bg-#f7f7f7">
-                            <image src="/static/images/plant/basePlotBG.png" class="w-100%" mode="widthFix" style="position: absolute; top: 0; left: 0"></image>
+                            <image src="https://ta.zycpzs.cn/oss-file/smart-trace/szyy/images-plt/plant/basePlotBG.png" class="w-100%" mode="widthFix" style="position: absolute; top: 0; left: 0"></image>
                             <view class="d-flex a-c mb-26 p-rtv">
                                 <view class="p-rtv d-flex flex-cln">
                                     <view class="c-333 f-s-32 f-w-5 z-index-1">基地与地块管理</view>
-                                    <image class="w-230 h-11" style="margin-top: -10rpx" src="/static/images/plant/BasePlotManagement.png" mode="widthFix" />
+                                    <image class="w-230 h-11" style="margin-top: -10rpx" src="https://ta.zycpzs.cn/oss-file/smart-trace/szyy/images-plt/plant/BasePlotManagement.png" mode="widthFix" />
                                 </view>
                                 <view class="flex1"></view>
                                 <view @click="$u.route({ url: '/plant/base/gap-base-info/index' })" class="c-primary f-s-22 z-index-1">GAP基地获评信息管理{{ '>' }}</view>
@@ -153,9 +153,9 @@
         </template>
         <template #empty>
             <view class="" style="margin-top: -200rpx">
-                <ut-empty class="mg-at" color="#ccc" size="28rpx" image="/static/images/plant/noEmptyBase.png">尚未添加绘制种养殖基地信息~</ut-empty>
+                <ut-empty class="mg-at" color="#ccc" size="28rpx" image="https://ta.zycpzs.cn/oss-file/smart-trace/szyy/images-plt/plant/noEmptyBase.png">尚未添加绘制种养殖基地信息~</ut-empty>
                 <view class="b-radius c-#fff f-s-36 bg-#37A954 h-78 w-382 d-flex a-c j-c mg-at" @click="showDeleteDialog = true">
-                    <img class="w-38 h-36 mr-10" src="/static/images/plant/chooseGAP.png" alt="" mode="widthFix" />
+                    <img class="w-38 h-36 mr-10" src="https://ta.zycpzs.cn/oss-file/smart-trace/szyy/images-plt/plant/chooseGAP.png" alt="" mode="widthFix" />
                     <text>去添加基地</text>
                 </view>
             </view>
@@ -175,13 +175,13 @@
                 </view>
                 <view class="flex1"></view>
                 <view class="d-flex">
-                    <img v-if="basetype === item.value" class="w-30 h-30" src="/static/images/plant/chooseSuccessfully.png" mode="widthFix" alt="" />
+                    <img v-if="basetype === item.value" class="w-30 h-30" src="https://ta.zycpzs.cn/oss-file/smart-trace/szyy/images-plt/plant/chooseSuccessfully.png" mode="widthFix" alt="" />
                 </view>
             </view>
         </view>
     </ut-confirm-dialog>
     <ut-suspension @click="showDeleteDialog = true">
-        <image src="/static/images/plant/addBase.png" mode="widthFix" class="w-120 h-120"></image>
+        <image src="https://ta.zycpzs.cn/oss-file/smart-trace/szyy/images-plt/plant/addBase.png" mode="widthFix" class="w-120 h-120"></image>
     </ut-suspension>
 </template>
 <script setup lang="ts">

+ 1 - 1
src/pages/plant/more/index.vue

@@ -8,7 +8,7 @@
                 <up-grid-item>
                     <view class="pd2-10-0 d-flex flex-cln a-c j-c" @click="$u.route({ url: '/plant/contact-unit/unit-list/index' })">
                         <view class="w-109 h-109 bg-#fff radius-50% d-flex a-c j-c mb-10">
-                            <image class="w-72 h-72" src="@/static/images/plant/storage/nav_kfgl_icon.png" mode="widthFix" />
+                            <image class="w-72 h-72" src="https://ta.zycpzs.cn/oss-file/smart-trace/szyy/images-plt/plant/storage/nav_kfgl_icon.png" mode="widthFix" />
                         </view>
                         <view class="c-#333 f-s-28 text-center">往来单位管理</view>
                     </view>

+ 8 - 8
src/pages/plant/port/index.vue

@@ -32,13 +32,13 @@
         <view v-if="list?.length" :style="{ height: `${safeAreaBottom}px` }"></view>
         <template #empty v-if="subCurrent == 0">
             <view class="d-flex flex-cln a-c" style="margin-top: -200rpx">
-                <ut-empty class="mg-at" color="#ccc" size="28rpx" image="/static/images/plant/noEmptyBase.png">暂无进行中的养殖任务</ut-empty>
+                <ut-empty class="mg-at" color="#ccc" size="28rpx" image="https://ta.zycpzs.cn/oss-file/smart-trace/szyy/images-plt/plant/noEmptyBase.png">暂无进行中的养殖任务</ut-empty>
                 <text class="c-#ccc f-s-28">点击下方按钮去添加吧~</text>
             </view>
         </template>
         <template #empty v-if="subCurrent == 1">
             <view class="d-flex flex-cln a-c" style="margin-top: -200rpx">
-                <ut-empty class="mg-at" color="#ccc" size="28rpx" image="/static/images/plant/noEmptyBase.png">暂无已经结束的养殖任务</ut-empty>
+                <ut-empty class="mg-at" color="#ccc" size="28rpx" image="https://ta.zycpzs.cn/oss-file/smart-trace/szyy/images-plt/plant/noEmptyBase.png">暂无已经结束的养殖任务</ut-empty>
             </view>
         </template>
         <template #bottom>
@@ -46,29 +46,29 @@
         </template>
     </z-paging>
     <ut-suspension v-if="sus?.left" :imageWidth="60" :imageHeight="60" :x="sus?.left" :y="sus?.bottom" :inertia="false" :snap-threshold="40">
-        <image src="/static/images/common/btn_add_logo.png" mode="widthFix" class="w-120 h-120" @click="showDeleteDialog = true"></image>
+        <image src="https://ta.zycpzs.cn/oss-file/smart-trace/szyy/images-plt/common/btn_add_logo.png" mode="widthFix" class="w-120 h-120" @click="showDeleteDialog = true"></image>
     </ut-suspension>
     <ut-confirm-dialog v-model:show="showDeleteDialog" width="80vw" title="请选择要创建的任务类型" :confirmText="'确认选择'" :cancelText="'取消'" @confirm="handlechoseConfirm" @cancel="handleDeleteCancel">
         <view class="" v-for="item in pt_task_type" :key="item?.value">
             <view style="border: 1rpx solid" :style="{ backgroundColor: item?.value == basetype ? '#EBF6EE' : '#f7f7f7', borderColor: item?.value == basetype ? '#37A954' : 'transparent' }" class="pr-30 d-flex a-c mb-20 radius-100" @click="handlechose(item.value)">
                 <view class="radius-50% mg-8 bg-#F0F0F0" v-if="item?.value == '1'">
-                    <up-avatar size="90rpx" src="/static/images/plant/port/TaskType_plant.png"></up-avatar>
+                    <up-avatar size="90rpx" src="https://ta.zycpzs.cn/oss-file/smart-trace/szyy/images-plt/plant/port/TaskType_plant.png"></up-avatar>
                 </view>
                 <view class="radius-50% mg-8 bg-#F0F0F0" v-if="item?.value == '2'">
-                    <up-avatar size="90rpx" src="/static/images/plant/port/TaskType_breeding.png"></up-avatar>
+                    <up-avatar size="90rpx" src="https://ta.zycpzs.cn/oss-file/smart-trace/szyy/images-plt/plant/port/TaskType_breeding.png"></up-avatar>
                 </view>
                 <view class="radius-50% mg-8 bg-#F0F0F0" v-if="item?.value == '11'">
-                    <up-avatar size="90rpx" src="/static/images/plant/port/TaskType_SeedlingBreeding.png"></up-avatar>
+                    <up-avatar size="90rpx" src="https://ta.zycpzs.cn/oss-file/smart-trace/szyy/images-plt/plant/port/TaskType_SeedlingBreeding.png"></up-avatar>
                 </view>
                 <view class="radius-50% mg-8 bg-#F0F0F0" v-if="item?.value == '21'">
-                    <up-avatar size="90rpx" src="/static/images/plant/port/TaskType_BreedingLivestock.png"></up-avatar>
+                    <up-avatar size="90rpx" src="https://ta.zycpzs.cn/oss-file/smart-trace/szyy/images-plt/plant/port/TaskType_BreedingLivestock.png"></up-avatar>
                 </view>
                 <view class="c-#333 f-s-34">
                     {{ item?.label }}
                 </view>
                 <view class="flex1"></view>
                 <view class="d-flex">
-                    <img v-if="basetype === item.value" class="w-30 h-30" src="/static/images/plant/chooseSuccessfully.png" mode="widthFix" alt="" />
+                    <img v-if="basetype === item.value" class="w-30 h-30" src="https://ta.zycpzs.cn/oss-file/smart-trace/szyy/images-plt/plant/chooseSuccessfully.png" mode="widthFix" alt="" />
                 </view>
             </view>
         </view>

+ 19 - 19
src/pages/plant/port/models/task.vue

@@ -2,7 +2,7 @@
     <!-- 养殖 -->
     <view class="" v-if="data.taskType === '2'">
         <view class="b-radius bg-#fff pd-10 p-rtv">
-            <image class="w-80 h-34" src="/static/images/plant/port/Task_Breeding.png" mode="widthFix" style="position: absolute; top: 0; left: 0" />
+            <image class="w-80 h-34" src="https://ta.zycpzs.cn/oss-file/smart-trace/szyy/images-plt/plant/port/Task_Breeding.png" mode="widthFix" style="position: absolute; top: 0; left: 0" />
             <view class="d-flex j-ed f-s-22 c-#666">{{ data?.plannedStartDate }}至{{ data?.plannedEndDate }}</view>
             <view class="d-flex a-ed pd-16 pt-8 pb-8">
                 <view class="c-#333 f-s-34 f-w-5 mr-6">{{ data?.variety }}</view>
@@ -48,19 +48,19 @@
             <view class="pd-16 pt-8 pb-8 d-flex j-sb gap-20">
                 <up-button :customStyle="customStyle1">
                     <view class="d-flex a-c j-c">
-                        <image class="w-28 h-24" src="/static/images/plant/port/Task_Species_source_information.png" mode="widthFix" />
+                        <image class="w-28 h-24" src="https://ta.zycpzs.cn/oss-file/smart-trace/szyy/images-plt/plant/port/Task_Species_source_information.png" mode="widthFix" />
                         <text class="f-s-26">种源信息</text>
                     </view>
                 </up-button>
                 <up-button :customStyle="customStyle2">
                     <view class="d-flex a-c j-c">
-                        <image class="w-28 h-24" src="/static/images/plant/port/Task_Breeding_management.png" mode="widthFix" />
+                        <image class="w-28 h-24" src="https://ta.zycpzs.cn/oss-file/smart-trace/szyy/images-plt/plant/port/Task_Breeding_management.png" mode="widthFix" />
                         <text class="f-s-26">饲养管理</text>
                     </view>
                 </up-button>
                 <up-button :customStyle="customStyle3">
                     <view class="d-flex a-c j-c">
-                        <image class="w-28 h-24" src="/static/images/plant/port/Task_Harvest_management.png" mode="widthFix" />
+                        <image class="w-28 h-24" src="https://ta.zycpzs.cn/oss-file/smart-trace/szyy/images-plt/plant/port/Task_Harvest_management.png" mode="widthFix" />
                         <text class="f-s-26">采收管理</text>
                     </view>
                 </up-button>
@@ -70,7 +70,7 @@
     <!-- 种苗繁育 -->
     <view class="" v-if="data.taskType === '11'" @click="$emit('click')">
         <view class="b-radius bg-#fff pd-10 p-rtv">
-            <image class="w-112 h-34" src="/static/images/plant/port/Task_Seedling_breeding.png" mode="widthFix" style="position: absolute; top: 0; left: 0" />
+            <image class="w-112 h-34" src="https://ta.zycpzs.cn/oss-file/smart-trace/szyy/images-plt/plant/port/Task_Seedling_breeding.png" mode="widthFix" style="position: absolute; top: 0; left: 0" />
             <view class="d-flex j-ed f-s-22 c-#666">{{ data?.plannedStartDate }} 至 {{ data?.plannedEndDate }}</view>
             <view class="d-flex a-ed pd-16 pt-8 pb-8">
                 <view class="c-#333 f-s-34 f-w-5 mr-6">{{ data?.variety }}</view>
@@ -120,25 +120,25 @@
             <view class="pd-16 pt-8 pb-8 d-flex j-sb gap-20">
                 <up-button :customStyle="customStyle1">
                     <view class="d-flex a-c j-c">
-                        <image class="w-28 h-24" src="/static/images/plant/port/Task_Species_source_information.png" mode="widthFix" />
+                        <image class="w-28 h-24" src="https://ta.zycpzs.cn/oss-file/smart-trace/szyy/images-plt/plant/port/Task_Species_source_information.png" mode="widthFix" />
                         <text class="f-s-26">种源信息</text>
                     </view>
                 </up-button>
                 <up-button v-if="data?.lands[0]?.landType == '3'" :customStyle="customStyle2" @click="$emit('toSupervise')">
                     <view class="d-flex a-c j-c">
-                        <image class="w-28 h-24" src="/static/images/plant/port/Task_Breeding_management.png" mode="widthFix" />
-                        <text class="f-s-26">繁育管理</text>
+                        <image class="w-28 h-24" src="https://ta.zycpzs.cn/oss-file/smart-trace/szyy/images-plt/plant/port/Task_Breeding_management.png" mode="widthFix" />
+                        <text class="f-s-26"> 繁育管理 </text>
                     </view>
                 </up-button>
                 <up-button v-else :customStyle="customStyle2" @click="$emit('toSupervise')">
                     <view class="d-flex a-c j-c">
-                        <image class="w-28 h-24" src="/static/images/plant/port/Task_Breeding_management.png" mode="widthFix" />
-                        <text class="f-s-26">种植管理</text>
+                        <image class="w-28 h-24" src="https://ta.zycpzs.cn/oss-file/smart-trace/szyy/images-plt/plant/port/Task_Breeding_management.png" mode="widthFix" />
+                        <text class="f-s-26"> 种植管理 </text>
                     </view>
                 </up-button>
                 <up-button :customStyle="customStyle3">
                     <view class="d-flex a-c j-c">
-                        <image class="w-28 h-24" src="/static/images/plant/port/Task_Harvest_management.png" mode="widthFix" />
+                        <image class="w-28 h-24" src="https://ta.zycpzs.cn/oss-file/smart-trace/szyy/images-plt/plant/port/Task_Harvest_management.png" mode="widthFix" />
                         <text class="f-s-26">采收管理</text>
                     </view>
                 </up-button>
@@ -148,7 +148,7 @@
     <!-- 种植 -->
     <view class="" v-if="data.taskType === '1'" @click="$emit('click')">
         <view class="b-radius bg-#fff pd-10 p-rtv">
-            <image class="w-80 h-34" src="/static/images/plant/port/Task_Planting.png" mode="widthFix" style="position: absolute; top: 0; left: 0" />
+            <image class="w-80 h-34" src="https://ta.zycpzs.cn/oss-file/smart-trace/szyy/images-plt/plant/port/Task_Planting.png" mode="widthFix" style="position: absolute; top: 0; left: 0" />
             <view class="d-flex j-ed f-s-22 c-#666">{{ data?.plannedStartDate }}至{{ data?.plannedEndDate }}</view>
             <view class="d-flex a-ed pd-16 pt-8 pb-8">
                 <view class="c-#333 f-s-34 f-w-5 mr-6">{{ data?.variety }}</view>
@@ -194,19 +194,19 @@
             <view class="pd-16 pt-8 pb-8 d-flex j-sb gap-20">
                 <up-button :customStyle="customStyle1">
                     <view class="d-flex a-c j-c">
-                        <image class="w-28 h-24" src="/static/images/plant/port/Task_Species_source_information.png" mode="widthFix" />
+                        <image class="w-28 h-24" src="https://ta.zycpzs.cn/oss-file/smart-trace/szyy/images-plt/plant/port/Task_Species_source_information.png" mode="widthFix" />
                         <text class="f-s-26">种源信息</text>
                     </view>
                 </up-button>
                 <up-button :customStyle="customStyle2" @click="$emit('toSupervise')">
                     <view class="d-flex a-c j-c">
-                        <image class="w-28 h-24" src="/static/images/plant/port/Task_Breeding_management.png" mode="widthFix" />
+                        <image class="w-28 h-24" src="https://ta.zycpzs.cn/oss-file/smart-trace/szyy/images-plt/plant/port/Task_Breeding_management.png" mode="widthFix" />
                         <text class="f-s-26"> 种植管理 </text>
                     </view>
                 </up-button>
                 <up-button :customStyle="customStyle3">
                     <view class="d-flex a-c j-c">
-                        <image class="w-28 h-24" src="/static/images/plant/port/Task_Harvest_management.png" mode="widthFix" />
+                        <image class="w-28 h-24" src="https://ta.zycpzs.cn/oss-file/smart-trace/szyy/images-plt/plant/port/Task_Harvest_management.png" mode="widthFix" />
                         <text class="f-s-26">采收管理</text>
                     </view>
                 </up-button>
@@ -216,7 +216,7 @@
     <!-- 种畜繁育 -->
     <view class="" v-if="data.taskType === '21'" @click="$emit('click')">
         <view class="b-radius bg-#fff pd-10 p-rtv">
-            <image class="w-112 h-34" src="/static/images/plant/port/Task_Breeding_Livestock.png" mode="widthFix" style="position: absolute; top: 0; left: 0" />
+            <image class="w-112 h-34" src="https://ta.zycpzs.cn/oss-file/smart-trace/szyy/images-plt/plant/port/Task_Breeding_Livestock.png" mode="widthFix" style="position: absolute; top: 0; left: 0" />
             <view class="d-flex j-ed f-s-22 c-#666">{{ data?.plannedStartDate }}至{{ data?.plannedEndDate }}</view>
             <view class="d-flex a-ed pd-16 pt-8 pb-8">
                 <view class="c-#333 f-s-34 f-w-5 mr-6">{{ data?.variety }}</view>
@@ -262,19 +262,19 @@
             <view class="pd-16 pt-8 pb-8 d-flex j-sb gap-20">
                 <up-button :customStyle="customStyle1">
                     <view class="d-flex a-c j-c">
-                        <image class="w-28 h-24" src="/static/images/plant/port/Task_Species_source_information.png" mode="widthFix" />
+                        <image class="w-28 h-24" src="https://ta.zycpzs.cn/oss-file/smart-trace/szyy/images-plt/plant/port/Task_Species_source_information.png" mode="widthFix" />
                         <text class="f-s-26">种源信息</text>
                     </view>
                 </up-button>
                 <up-button :customStyle="customStyle2">
                     <view class="d-flex a-c j-c">
-                        <image class="w-28 h-24" src="/static/images/plant/port/Task_Breeding_management.png" mode="widthFix" />
+                        <image class="w-28 h-24" src="https://ta.zycpzs.cn/oss-file/smart-trace/szyy/images-plt/plant/port/Task_Breeding_management.png" mode="widthFix" />
                         <text class="f-s-26">饲养管理</text>
                     </view>
                 </up-button>
                 <up-button :customStyle="customStyle3">
                     <view class="d-flex a-c j-c">
-                        <image class="w-28 h-24" src="/static/images/plant/port/Task_Harvest_management.png" mode="widthFix" />
+                        <image class="w-28 h-24" src="https://ta.zycpzs.cn/oss-file/smart-trace/szyy/images-plt/plant/port/Task_Harvest_management.png" mode="widthFix" />
                         <text class="f-s-26">采收管理</text>
                     </view>
                 </up-button>

+ 6 - 6
src/pages/plant/storage/index.vue

@@ -8,7 +8,7 @@
                 <up-grid-item>
                     <view class="pd2-10-0 d-flex flex-cln a-c j-c" @click="$u.route({ url: '/plant/storage/storage-room/list/index' })">
                         <view class="w-109 h-109 bg-#fff radius-50% d-flex a-c j-c mb-10">
-                            <image class="w-72 h-72" src="@/static/images/plant/storage/nav_kfgl_icon.png" mode="widthFix" />
+                            <image class="w-72 h-72" src="https://ta.zycpzs.cn/oss-file/smart-trace/szyy/images-plt/plant/storage/nav_kfgl_icon.png" mode="widthFix" />
                         </view>
                         <view class="c-#333 f-s-28 text-center">库房管理</view>
                     </view>
@@ -16,7 +16,7 @@
                 <up-grid-item>
                     <view class="pd2-10-0 d-flex flex-cln a-c j-c">
                         <view class="w-109 h-109 bg-#fff radius-50% d-flex a-c j-c mb-10">
-                            <image class="w-72 h-72" src="@/static/images/plant/storage/nav_nzk_icon.png" mode="widthFix" />
+                            <image class="w-72 h-72" src="https://ta.zycpzs.cn/oss-file/smart-trace/szyy/images-plt/plant/storage/nav_nzk_icon.png" mode="widthFix" />
                         </view>
                         <view class="c-#333 f-s-28 text-center">农资库</view>
                     </view>
@@ -24,7 +24,7 @@
                 <up-grid-item>
                     <view class="pd2-10-0 d-flex flex-cln a-c j-c" @click="$u.route({ url: '/plant/storage/seed-source/list/index' })">
                         <view class="w-109 h-109 bg-#fff radius-50% d-flex a-c j-c mb-10">
-                            <image class="w-72 h-72" src="@/static/images/plant/storage/nav_zyk_icon.png" mode="widthFix" />
+                            <image class="w-72 h-72" src="https://ta.zycpzs.cn/oss-file/smart-trace/szyy/images-plt/plant/storage/nav_zyk_icon.png" mode="widthFix" />
                         </view>
                         <view class="c-#333 f-s-28 text-center">种源库</view>
                     </view>
@@ -32,7 +32,7 @@
                 <up-grid-item>
                     <view class="pd2-10-0 d-flex flex-cln a-c j-c">
                         <view class="w-109 h-109 bg-#fff radius-50% d-flex a-c j-c mb-10">
-                            <image class="w-72 h-72" src="@/static/images/plant/storage/nav_xhk_icon.png" mode="widthFix" />
+                            <image class="w-72 h-72" src="https://ta.zycpzs.cn/oss-file/smart-trace/szyy/images-plt/plant/storage/nav_xhk_icon.png" mode="widthFix" />
                         </view>
                         <view class="c-#333 f-s-28 text-center">鲜货库</view>
                     </view>
@@ -40,7 +40,7 @@
                 <up-grid-item>
                     <view class="pd2-10-0 d-flex flex-cln a-c j-c">
                         <view class="w-109 h-109 bg-#fff radius-50% d-flex a-c j-c mb-10">
-                            <image class="w-72 h-72" src="@/static/images/plant/storage/nav_zjpk_icon.png" mode="widthFix" />
+                            <image class="w-72 h-72" src="https://ta.zycpzs.cn/oss-file/smart-trace/szyy/images-plt/plant/storage/nav_zjpk_icon.png" mode="widthFix" />
                         </view>
                         <view class="c-#333 f-s-28 text-center">中间品库</view>
                     </view>
@@ -48,7 +48,7 @@
                 <up-grid-item>
                     <view class="pd2-10-0 d-flex flex-cln a-c j-c">
                         <view class="w-109 h-109 bg-#fff radius-50% d-flex a-c j-c mb-10">
-                            <image class="w-72 h-72" src="@/static/images/plant/storage/nav_cpk_icon.png" mode="widthFix" />
+                            <image class="w-72 h-72" src="https://ta.zycpzs.cn/oss-file/smart-trace/szyy/images-plt/plant/storage/nav_cpk_icon.png" mode="widthFix" />
                         </view>
                         <view class="c-#333 f-s-28 text-center">成品库</view>
                     </view>

+ 5 - 5
src/plant/base/base-edit/index.vue

@@ -123,7 +123,7 @@
                                     </view>
                                     <view class="bg-#ccc d-flex ov-hd p-rtv">
                                         <image class="w-full" v-if="form.baseInfo.gapInfo?.basePic" :src="form.baseInfo.gapInfo.basePic" mode="widthFix" />
-                                        <image class="w-full h-380" v-else src="@/static/images/plant/base/select_base_gap.png" mode="widthFix" />
+                                        <image class="w-full h-380" v-else src="https://ta.zycpzs.cn/oss-file/smart-trace/szyy/images-plt/plant/base/select_base_gap.png" mode="widthFix" />
                                     </view>
                                 </view>
                             </up-form-item>
@@ -171,9 +171,9 @@
                             </view>
                             <view class="bg-#ccc d-flex ov-hd p-rtv" @click="mapDrawArea">
                                 <image class="w-full" v-if="form.baseInfo.gapInfo?.basePic" :src="form.baseInfo.gapInfo.basePic" mode="widthFix" />
-                                <image class="w-full h-380" v-else src="@/static/images/plant/base/select_base_gap.png" mode="widthFix" />
+                                <image class="w-full h-380" v-else src="https://ta.zycpzs.cn/oss-file/smart-trace/szyy/images-plt/plant/base/select_base_gap.png" mode="widthFix" />
                                 <view v-if="!form.baseInfo.gapInfo?.basePic" class="btn-aree-center d-flex flex-cln a-c j-c">
-                                    <image class="w-52 h-52 mb-10" src="@/static/images/plant/base/draw_area_icon.png" mode="widthFix" />
+                                    <image class="w-52 h-52 mb-10" src="https://ta.zycpzs.cn/oss-file/smart-trace/szyy/images-plt/plant/base/draw_area_icon.png" mode="widthFix" />
                                     <view class="c-primary f-s-28 f-w-400">点击绘制基地范围</view>
                                 </view>
                             </view>
@@ -186,9 +186,9 @@
                             </view>
                             <view class="bg-#ccc d-flex ov-hd p-rtv" @click="mapDrawArea">
                                 <image class="w-full" v-if="form.baseInfo.gapInfo?.basePic" :src="form.baseInfo.gapInfo.basePic" mode="widthFix" />
-                                <image class="w-full h-380" v-else src="@/static/images/plant/base/select_base_gap.png" mode="widthFix" />
+                                <image class="w-full h-380" v-else src="https://ta.zycpzs.cn/oss-file/smart-trace/szyy/images-plt/plant/base/select_base_gap.png" mode="widthFix" />
                                 <view v-if="!form.baseInfo.gapInfo?.basePic" class="btn-aree-center d-flex flex-cln a-c j-c">
-                                    <image class="w-52 h-52 mb-10" src="@/static/images/plant/base/draw_area_icon.png" mode="widthFix" />
+                                    <image class="w-52 h-52 mb-10" src="https://ta.zycpzs.cn/oss-file/smart-trace/szyy/images-plt/plant/base/draw_area_icon.png" mode="widthFix" />
                                     <view class="c-primary f-s-28 f-w-400">点击绘制基地范围</view>
                                 </view>
                             </view>

+ 1 - 1
src/plant/base/gap-base-info-detail/index.vue

@@ -6,7 +6,7 @@
             </template>
             <view class="p-rtv">
                 <!-- 基本信息 -->
-                <image class="gap_res_image w-160 h-160" :src="`/static/images/plant/base/gap_res${form.res}.png`" mode="widthFix" />
+                <image class="gap_res_image w-160 h-160" :src="`https://ta.zycpzs.cn/oss-file/smart-trace/szyy/images-plt/plant/base/gap_res${form.res}.png`" mode="widthFix" />
                 <view class="pd-24 bg-#fff mb-10">
                     <view v-if="form?.gapBaseType" class="f-s-30 pd2-16-0 info-border-bottom">
                         <span class="c-#666">基地类型:</span>

+ 2 - 2
src/plant/base/gap-base-info-edit/index.vue

@@ -43,10 +43,10 @@
                             </view>
                             <view class="bg-#ccc d-flex ov-hd p-rtv" @click="mapDrawArea">
                                 <image class="w-full h-380" v-if="form?.basePic" :src="form?.basePic" mode="widthFix" />
-                                <image class="w-full h-380" v-else src="@/static/images/plant/base/select_base_gap.png"
+                                <image class="w-full h-380" v-else src="https://ta.zycpzs.cn/oss-file/smart-trace/szyy/images-plt/plant/base/select_base_gap.png"
                                     mode="widthFix" />
                                 <view v-if="!form?.basePic" class="btn-aree-center d-flex flex-cln a-c j-c">
-                                    <image class="w-52 h-52 mb-10" src="@/static/images/plant/base/draw_area_icon.png"
+                                    <image class="w-52 h-52 mb-10" src="https://ta.zycpzs.cn/oss-file/smart-trace/szyy/images-plt/plant/base/draw_area_icon.png"
                                         mode="widthFix" />
                                     <view class="c-primary f-s-28 f-w-400">点击绘制基地范围</view>
                                 </view>

+ 3 - 3
src/plant/base/gap-base-info/index.vue

@@ -56,20 +56,20 @@
             <!-- 空数据处理 -->
 
             <template #empty v-if="address">
-                <ut-empty class="mg-at" size="28rpx" color="#999" padding="10rpx" image="/static/images/plant/noEmptyBase.png">暂无获评GAP基地信息~</ut-empty>
+                <ut-empty class="mg-at" size="28rpx" color="#999" padding="10rpx" image="https://ta.zycpzs.cn/oss-file/smart-trace/szyy/images-plt/plant/noEmptyBase.png">暂无获评GAP基地信息~</ut-empty>
                 <view class="d-flex j-c f-s-28 c-#ccc">如需认定GAP基地,可前往数字云药官网进行申报</view>
                 <view class="d-flex j-c f-s-28 c-primary pd-15">https://www.shuziyunyao.com/</view>
                 <up-button type="primary" class="b-radius" style="width: 340rpx" @click="copyText('https://www.shuziyunyao.com/')">复制网址</up-button>
             </template>
         </template>
         <template #empty v-if="!address">
-            <ut-empty class="mg-at" size="28rpx" color="#999" padding="10rpx" image="/static/images/plant/noEmptyBase.png">非云南省内企业,无法获取已获评的GAP基地信息~</ut-empty>
+            <ut-empty class="mg-at" size="28rpx" color="#999" padding="10rpx" image="https://ta.zycpzs.cn/oss-file/smart-trace/szyy/images-plt/plant/noEmptyBase.png">非云南省内企业,无法获取已获评的GAP基地信息~</ut-empty>
             <view class="d-flex j-c f-s-28 c-#ccc">可点击底部按钮上传佐证材料添加获评信息</view>
         </template>
         <template #bottom v-if="!address">
             <view class="base-bottom-wrap pd-20 pb-0">
                 <up-button type="primary" @click="$u.route({ url: '/plant/base/gap-base-info-edit/index' })">
-                    <img class="w-38 h-36 mr-10" src="/static/images/plant/chooseGAP.png" alt="" mode="widthFix" />
+                    <img class="w-38 h-36 mr-10" src="https://ta.zycpzs.cn/oss-file/smart-trace/szyy/images-plt/plant/chooseGAP.png" alt="" mode="widthFix" />
                     <text>添加GAP基地信息</text>
                 </up-button>
             </view>

+ 1 - 1
src/plant/base/mark-swyq-base-detail/index.vue

@@ -9,7 +9,7 @@
                     <view class="startline-title">证明材料</view>
                 </view>
                 <view v-if="form" class="pd-24 bg-#fff mb-10 p-rtv">
-                    <image class="base_res_logo w-160 h-160" :src="`/static/images/common/base_res_logo${form?.baseInfo?.swyqRes}.png`" mode="widthFix" />
+                    <image class="base_res_logo w-160 h-160" :src="`https://ta.zycpzs.cn/oss-file/smart-trace/szyy/images-plt/common/base_res_logo${form?.baseInfo?.swyqRes}.png`" mode="widthFix" />
                     <view class="f-s-30 pd2-16-0 info-border-bottom">
                         <span class="c-#666">获评品种:</span>
                         <span class="c-#333">{{ form?.baseInfo?.swyqMedicineName || '-' }}</span>

+ 1 - 1
src/plant/contact-unit/unit-edit/index.vue

@@ -7,7 +7,7 @@
             <view class="pd-24 bg-#fff mb-10">
                 <!-- 往来单位类型(多个可用逗号分隔) -->
                 <view class="h-1" id="cpyTypepppp"></view>
-                <ut-action-sheet v-model="form.cpyType" :tabs="pt_cpy_type" mode="custom" title="选择往来单位类型" multiple>
+                <ut-action-sheet v-model="form.cpyType" :tabs="pt_cpy_type" valueType="array" mode="custom" title="选择往来单位类型" multiple>
                     <up-form-item borderBottom label="往来单位类型" required prop="cpyType">
                         <view v-if="form.cpyType?.length" class="f-s-30 c-333 f-w-5 flex1">{{ selectDictLabels(pt_cpy_type, form.cpyType, ',') }}</view>
                         <view v-else class="f-s-30 c-ccc f-w-4 flex1">请选择往来单位类型</view>

+ 1 - 1
src/plant/contact-unit/unit-list/index.vue

@@ -49,7 +49,7 @@
         </template>
     </z-paging>
     <ut-suspension @click="$u.route({ url: '/plant/contact-unit/unit-edit/index' })">
-        <image src="@/static/images/common/btn_add_logo.png" mode="widthFix" class="w-120 h-120"></image>
+        <image src="https://ta.zycpzs.cn/oss-file/smart-trace/szyy/images-plt/common/btn_add_logo.png" mode="widthFix" class="w-120 h-120"></image>
     </ut-suspension>
 </template>
 <script setup lang="ts">

+ 2 - 2
src/plant/port/port-supervise/models/task_card.vue

@@ -2,7 +2,7 @@
     <!-- 种植 -->
     <view class="" v-if="data?.taskType === '1'" @click="$emit('click')">
         <view class="b-radius bg-#fff pd-10 p-rtv">
-            <image class="w-80 h-34" src="/static/images/plant/port/Task_Planting.png" mode="widthFix" style="position: absolute; top: 0; left: 0" />
+            <image class="w-80 h-34" src="https://ta.zycpzs.cn/oss-file/smart-trace/szyy/images-plt/plant/port/Task_Planting.png" mode="widthFix" style="position: absolute; top: 0; left: 0" />
             <view class="d-flex j-ed f-s-22 c-#666">{{ data?.plannedStartDate }}至{{ data?.plannedEndDate }}</view>
             <view class="d-flex a-ed pd-16 pt-8 pb-8">
                 <view class="c-#333 f-s-34 f-w-5 mr-6">{{ data?.variety }}</view>
@@ -37,7 +37,7 @@
     <!-- 养殖 -->
     <view class="" v-if="data?.taskType === '2'" @click="$emit('click')">
         <view class="b-radius bg-#fff pd-10 p-rtv">
-            <image class="w-80 h-34" src="/static/images/plant/port/Task_Breeding.png" mode="widthFix" style="position: absolute; top: 0; left: 0" />
+            <image class="w-80 h-34" src="https://ta.zycpzs.cn/oss-file/smart-trace/szyy/images-plt/plant/port/Task_Breeding.png" mode="widthFix" style="position: absolute; top: 0; left: 0" />
             <view class="d-flex j-ed f-s-22 c-#666">{{ data?.plannedStartDate }}至{{ data?.plannedEndDate }}</view>
             <view class="d-flex a-ed pd-16 pt-8 pb-8">
                 <view class="c-#333 f-s-34 f-w-5 mr-6">{{ data?.variety }}</view>

+ 2 - 2
src/plant/species/models/speList.vue

@@ -2,7 +2,7 @@
     <view class="spe-list-item" @click="handleClick">
         <!-- 左侧搜索图标 -->
         <!-- <up-icon name="search" size="50rpx" color="#ccc" class="search-icon" /> -->
-        <img class="w-34 h-34 search-icon" src="/static/images/plant/searchGrey.png" mode="widthFix" alt="" />
+        <img class="w-34 h-34 search-icon" src="https://ta.zycpzs.cn/oss-file/smart-trace/szyy/images-plt/plant/searchGrey.png" mode="widthFix" alt="" />
         <!-- 中间文本区域(间隔30rpx) -->
         <view class="text-container">
             <!-- 使用 view + text 显示高亮文本 -->
@@ -14,7 +14,7 @@
         </view>
         <!-- 右侧勾选图标(根据check状态显示) -->
         <!-- <up-icon v-if="check" name="checkmark" size="45rpx" color="#37A954" class="check-icon" /> -->
-        <img v-if="check === '1'" class="w-30 h-30" src="/static/images/plant/chooseSuccessfully.png" mode="widthFix" alt="" />
+        <img v-if="check === '1'" class="w-30 h-30" src="https://ta.zycpzs.cn/oss-file/smart-trace/szyy/images-plt/plant/chooseSuccessfully.png" mode="widthFix" alt="" />
     </view>
 </template>
 

+ 61 - 24
src/plant/storage/seed-source/info-edit/index.vue

@@ -18,7 +18,7 @@
                 <up-form-item borderBottom label="物种基原" required prop="varietyId">
                     <view class="flex1">
                         <up-button v-if="!form.varietyId" @click="selectVarietyId" type="primary" plain>
-                            <image class="w-36 h-36 mr-10" src="@/static/images/common/select_push_icon.png" mode="widthFix" />
+                            <image class="w-36 h-36 mr-10" src="https://ta.zycpzs.cn/oss-file/smart-trace/szyy/images-plt/common/select_push_icon.png" mode="widthFix" />
                             <span>请选择物种基原</span>
                         </up-button>
                         <view v-else class="bg-#FBFDFB card-info-block pd-24 p-rtv">
@@ -69,7 +69,7 @@
                     <up-form-item v-if="form?.instoreBizInfo?.motherFatherFlag == '2'" borderBottom label="父本品种" prop="fatherVarietyId">
                         <view class="flex1">
                             <up-button v-if="!form.instoreBizInfo.fatherVarietyId" @click="selectFatherVarietyId" type="primary" plain>
-                                <image class="w-36 h-36 mr-10" src="@/static/images/common/select_push_icon.png" mode="widthFix" />
+                                <image class="w-36 h-36 mr-10" src="https://ta.zycpzs.cn/oss-file/smart-trace/szyy/images-plt/common/select_push_icon.png" mode="widthFix" />
                                 <span>请选择父本品种</span>
                             </up-button>
                             <view v-else class="bg-#FBFDFB card-info-block pd-24 p-rtv">
@@ -98,7 +98,7 @@
                     <up-form-item borderBottom label="母本品种" prop="instoreBizInfo.motherVarietyId">
                         <view class="flex1">
                             <up-button v-if="!form.instoreBizInfo.motherVarietyId" @click="selectMotherVarietyId" type="primary" plain>
-                                <image class="w-36 h-36 mr-10" src="@/static/images/common/select_push_icon.png" mode="widthFix" />
+                                <image class="w-36 h-36 mr-10" src="https://ta.zycpzs.cn/oss-file/smart-trace/szyy/images-plt/common/select_push_icon.png" mode="widthFix" />
                                 <span>请选择母本品种</span>
                             </up-button>
                             <view v-else class="bg-#FBFDFB card-info-block pd-24 p-rtv mt-16">
@@ -161,19 +161,39 @@
                 </up-form-item>
                 <!-- 检验报告与供应商信息 -->
                 <up-form-item borderBottom label="检验报告" prop="examinReport">
-                    <up-input v-model="form.examinReport" placeholder="请输入检验报告编号或说明" border="none" clearable></up-input>
+                    <ut-upload v-model="form.seedCheckCert" :max-count="50" valueType="array" accept="image,file"></ut-upload>
                 </up-form-item>
                 <up-form-item borderBottom label="供应商" prop="supplierId">
-                     <view class="flex1">
+                    <view class="flex1">
                         <ContactUnitInput v-model="form.supplierId" v-model:info="form.supplierInfo" :params="{ cpyType: '4' }" title="选择供应商" placeholder="请选择供应商信息"></ContactUnitInput>
                     </view>
                 </up-form-item>
                 <!-- 菌种编码信息 -->
-                <up-form-item borderBottom label="菌种/菌株编号" prop="fungusCode">
-                    <up-input v-model="form.fungusCode" placeholder="请输入菌种/菌株编号" border="none" clearable></up-input>
+                <up-form-item label="菌种/菌株编号" class="form-item-bottom-padding-0">
+                    <view class="d-flex flex1">
+                        <view class="flex1">
+                            <ut-action-sheet v-model="form.fungusCodeType" :tabs="pt_fungus_code_type" mode="custom" title="选择单位">
+                                <up-form-item prop="fungusCodeType" border-bottom class="form-item-top-padding-0">
+                                    <view class="flex1" style="line-height: 24px;">
+                                        <view v-if="form.fungusCodeType" class="f-s-30 c-333 f-w-5">{{ selectDictLabel(pt_fungus_code_type, form.fungusCodeType) }}</view>
+                                        <view v-else class="f-s-30 c-ccc f-w-4">选择编号类型</view>
+                                    </view>
+                                    <template #right>
+                                        <up-icon class="pr-20" size="22rpx" color="#2A6D52" name="arrow-down-fill"></up-icon>
+                                    </template>
+                                </up-form-item>
+                            </ut-action-sheet>
+                        </view>
+                        <view class="pd-5"></view>
+                        <view class="flex1">
+                            <up-form-item prop="fungusCode" border-bottom class="form-item-top-padding-0">
+                                <up-input v-model="form.fungusCode" placeholder="输入数字小数点" border="none" clearable></up-input>
+                            </up-form-item>
+                        </view>
+                    </view>
                 </up-form-item>
                 <up-form-item borderBottom label="供应商是否是生产商" prop="supplierProducerFlag">
-                     <up-radio-group v-model="form.supplierProducerFlag">
+                    <up-radio-group v-model="form.supplierProducerFlag">
                         <up-radio :customStyle="{ marginRight: '60rpx' }" v-for="(item, index) in yes_no" :key="index" :label="item.label" :name="item.value"></up-radio>
                     </up-radio-group>
                 </up-form-item>
@@ -205,10 +225,16 @@
                     <ut-upload v-model="form.vedios" :max-count="3" accept="video" valueType="array"></ut-upload>
                 </up-form-item>
 
-                <!-- 产地与繁殖信息 -->
-                <up-form-item borderBottom label="种源产地" prop="adcode">
-                    <up-input v-model="form.adcode" placeholder="请输入种源产地行政编码" border="none" clearable></up-input>
-                </up-form-item>
+                <!-- 种源产地 -->
+                <PickerAreaInput v-model="form.adcode" v-model:full-name="form.adcodeName" title="选择种源产地">
+                    <up-form-item borderBottom label="种源产地" prop="adcode">
+                        <view v-if="form.adcode" class="f-s-30 c-333 f-w-5 flex1">{{ form.adcodeName }}</view>
+                        <view v-else class="f-s-30 c-ccc f-w-4 flex1">请选择种源产地</view>
+                        <template #right>
+                            <up-icon size="22rpx" color="#2A6D52" name="arrow-down-fill"></up-icon>
+                        </template>
+                    </up-form-item>
+                </PickerAreaInput>
                 <ut-action-sheet :tabs="pt_breeding_materials" mode="custom" title="繁殖材料" multiple v-model="form.generationMaterial">
                     <up-form-item borderBottom label="繁殖材料" prop="generationMaterial">
                         <view v-if="form.generationMaterial" class="f-s-30 c-333 f-w-5 flex1">{{ selectDictLabels(pt_breeding_materials, form.generationMaterial, ',') }}</view>
@@ -218,21 +244,20 @@
                         </template>
                     </up-form-item>
                 </ut-action-sheet>
-                <up-form-item borderBottom label="繁殖地点/采集地点" prop="generationAdcode">
-                    <up-input v-model="form.generationAdcode" placeholder="请输入繁殖/采集地点编码或名称" border="none" clearable></up-input>
-                </up-form-item>
 
+                <PickerAreaInput v-model="form.generationAdcode" v-model:full-name="form.generationAdcodeName" :maxLevel="4" title="选择繁殖地点/采集地点">
+                    <up-form-item borderBottom label="繁殖地点/采集地点" prop="generationAdcode">
+                        <view v-if="form.generationAdcode" class="f-s-30 c-333 f-w-5 flex1">{{ form.generationAdcodeName }}</view>
+                        <view v-else class="f-s-30 c-ccc f-w-4 flex1">请选择繁殖地点/采集地点</view>
+                        <template #right>
+                            <up-icon size="22rpx" color="#2A6D52" name="arrow-down-fill"></up-icon>
+                        </template>
+                    </up-form-item>
+                </PickerAreaInput>
                 <!-- 资质证明附件(暂按上传控件处理,可后续细化) -->
                 <up-form-item borderBottom label="物种鉴定证书" prop="spCert">
                     <ut-upload v-model="form.spCert" :max-count="9" valueType="array" accept="file"></ut-upload>
                 </up-form-item>
-                <up-form-item borderBottom label="新品种证书" prop="newSpCert">
-                    <ut-upload v-model="form.newSpCert" :max-count="9" valueType="array" accept="file"></ut-upload>
-                </up-form-item>
-                <up-form-item borderBottom label="引种证明" prop="importCert">
-                    <ut-upload v-model="form.importCert" :max-count="9" valueType="array" accept="file"></ut-upload>
-                </up-form-item>
-
                 <!-- 检疫信息 -->
                 <up-form-item borderBottom label="种源检疫证号" prop="seedCheckSn">
                     <up-input v-model="form.seedCheckSn" placeholder="请输入种源检疫证号" border="none" clearable></up-input>
@@ -248,14 +273,13 @@
             </view>
         </template>
     </z-paging>
-    
 </template>
 <script setup lang="ts">
 import { useClientRequest } from '@/utils/request';
 import { seedInfoListType } from '../models/type';
 import AnimalsInput from '../models/animals-input.vue';
-import SelectContactUnit from '@/models/select-contact-unit/select-contact-unit.vue';
 import ContactUnitInput from '@/models/contact-unit-input/contact-unit-input.vue';
+import PickerAreaInput from '@/models/picker-area-input/picker-area-input.vue';
 
 const { proxy } = getCurrentInstance() as ComponentInternalInstance;
 const { pt_seed_type, pt_seed_source, pt_materail_unit, pt_mother_father_flag, pt_seed_unit, pt_fungus_code_type, pt_breeding_materials, yes_no, pt_cus_type, pt_cpy_type, pt_gen_unit } = toRefs<any>(proxy?.useDict('pt_seed_type', 'pt_seed_source', 'pt_materail_unit', 'pt_mother_father_flag', 'pt_op_method', 'pt_seed_unit', 'pt_fungus_code_type', 'pt_breeding_materials', 'yes_no', 'pt_cus_type', 'pt_cpy_type', 'pt_gen_unit'));
@@ -269,15 +293,18 @@ const form = ref<seedInfoListType>({
     importCert: [],
     seedCheckCert: [],
     unit: '株',
+    adcode: '',
     instoreBizInfo: {
         motherFatherFlag: '',
         idFlag: '1',
         genUnit: '代',
     },
+    generationMaterial: '',
 });
 const rules = reactive({});
 
 const submitForm = async () => {
+    console.log(form.value);
     uni.$u.debounce(
         async () => {
             try {
@@ -363,4 +390,14 @@ onLoad((optins: any) => {
     top: 0rpx;
     right: 0rpx;
 }
+:deep(.form-item-top-padding-0) {
+   >.u-form-item__body {
+        padding-top: 0rpx;
+   }
+}
+:deep(.form-item-bottom-padding-0) {
+   >.u-form-item__body {
+        padding-bottom: 0rpx;
+   }
+}
 </style>

+ 5 - 5
src/plant/storage/seed-source/list/model/source-bottom.vue

@@ -6,30 +6,30 @@
        
         </view>
         <view @click="clickBtnBall" class="source-center-view d-flex flex-cln a-c j-c">
-            <view class="source-btn-ball d-flex a-c j-c" :class="{ [`btn-deg-${btnStyle}`]: true }" :style="{ backgroundImage: 'url(/static/images/plant/storage/add_c_btn.png)' }"></view>
+            <view class="source-btn-ball d-flex a-c j-c" :class="{ [`btn-deg-${btnStyle}`]: true }" :style="{ backgroundImage: 'url(https://ta.zycpzs.cn/oss-file/smart-trace/szyy/images-plt/plant/storage/add_c_btn.png)' }"></view>
             <view class="c-primary f-s-28 pt-6">{{ mapTextBtn[btnStyle] }}</view>
             
         </view>
         <view class="bg-#fff" :style="{ height: safeAreaBottom + 'px' }"></view>
         <view class="bottom-circle-line" :class="{ 'bottom-circle-line-active': btnStyle == 'close' }" :style="{ bottom: safeAreaBottom + 'px' }">
-            <view class="bottom-circle d-flex" :style="{ backgroundImage: 'url(/static/images/plant/storage/send_btm_bg_c.png)' }">
+            <view class="bottom-circle d-flex" :style="{ backgroundImage: 'url(https://ta.zycpzs.cn/oss-file/smart-trace/szyy/images-plt/plant/storage/send_btm_bg_c.png)' }">
                 <view class="flex1 d-flex flex-cln a-c pt-160 pl-30">
                     <view>
-                        <image class="w-68 h-68" src="@/static/images/plant/storage/xzhwk_icon_sd.png" mode="widthFix" />
+                        <image class="w-68 h-68" src="https://ta.zycpzs.cn/oss-file/smart-trace/szyy/images-plt/plant/storage/xzhwk_icon_sd.png" mode="widthFix" />
                     </view>
                     <view class="f-s-28 c-#333">下载货位卡</view>
                     <view class="f-s-22 c-#999">库存结余清晰</view>
                 </view>
                 <view class="d-flex flex-cln a-c pt-24">
                      <view>
-                        <image class="w-68 h-68" src="@/static/images/plant/storage/xzsyrk_icon_sd.png" mode="widthFix" />
+                        <image class="w-68 h-68" src="https://ta.zycpzs.cn/oss-file/smart-trace/szyy/images-plt/plant/storage/xzsyrk_icon_sd.png" mode="widthFix" />
                     </view>
                     <view class="f-s-28 c-#333">新增溯源入库</view>
                     <view class="f-s-22 c-#999">适合贴有溯源码的种源</view>
                 </view>
                 <view class="flex1 d-flex flex-cln a-c pt-160 pr-30" @click="$u.route({ url: '/plant/storage/seed-source/add/index' })">
                      <view>
-                        <image class="w-68 h-68" src="@/static/images/plant/storage/xzfsyrk_icon_sd.png" mode="widthFix" />
+                        <image class="w-68 h-68" src="https://ta.zycpzs.cn/oss-file/smart-trace/szyy/images-plt/plant/storage/xzfsyrk_icon_sd.png" mode="widthFix" />
                     </view>
                     <view class="f-s-28 c-#333">新增非溯源入库</view>
                     <view class="f-s-22 c-#999">适合无法溯源的种源</view>

+ 2 - 2
src/plant/storage/seed-source/models/animals-input.vue

@@ -13,11 +13,11 @@
         </view>
         <view class="d-flex">
             <up-button class="flex1 mr-20" color="#18BECA" plain @click="onScan">
-                <image class="w-36 h-36 mr-10" src="@/static/images/common/scan_icon_o.png" mode="widthFix" />
+                <image class="w-36 h-36 mr-10" src="https://ta.zycpzs.cn/oss-file/smart-trace/szyy/images-plt/common/scan_icon_o.png" mode="widthFix" />
                 <span>扫一扫添加</span>
             </up-button>
             <up-button @click="onAddClick" class="flex1" color="#37A954" plain>
-                <image class="w-36 h-36 mr-10" src="@/static/images/common/edit_icon.png" mode="widthFix" />
+                <image class="w-36 h-36 mr-10" src="https://ta.zycpzs.cn/oss-file/smart-trace/szyy/images-plt/common/edit_icon.png" mode="widthFix" />
                 <span>手动输入添加</span>
             </up-button>
         </view>

+ 0 - 4
src/plant/storage/seed-source/models/type.ts

@@ -64,10 +64,6 @@ export interface seedInfoListType {
     generationAdcode?: string;
     /** 物种鉴定证书 */
     spCert?: AccesseryDTO[];
-    /** 新品种证书 */
-    newSpCert?: AccesseryDTO[];
-    /** 引种证明 */
-    importCert?: AccesseryDTO[];
     /** 种源检疫证号 */
     seedCheckSn?: string;
      /** 种源检疫证书 */

+ 1 - 1
src/plant/storage/storage-room/edit/index.vue

@@ -91,7 +91,7 @@
 
     <!-- 悬浮新增按钮(编辑页通常不需要,但与列表风格一致时可保留) -->
     <!-- <ut-suspension @click="submit">
-        <image src="/static/images/plant/addBase.png" mode="widthFix" class="w-120 h-120"></image>
+        <image src="https://ta.zycpzs.cn/oss-file/smart-trace/szyy/images-plt/plant/addBase.png" mode="widthFix" class="w-120 h-120"></image>
     </ut-suspension> -->
 
     <!-- 货位表单弹窗:新增/编辑 -->

+ 1 - 1
src/plant/storage/storage-room/list/index.vue

@@ -56,7 +56,7 @@
         </template>
     </z-paging>
     <ut-suspension @click="$u.route({ url: '/plant/storage/storage-room/edit/index' })">
-        <image src="@/static/images/common/btn_add_logo.png" mode="widthFix" class="w-120 h-120"></image>
+        <image src="https://ta.zycpzs.cn/oss-file/smart-trace/szyy/images-plt/common/btn_add_logo.png" mode="widthFix" class="w-120 h-120"></image>
     </ut-suspension>
     <form-shelve v-if="showShelve" v-model:show="showShelve" v-model="rowShelve" :title="shelveTitle" @submit="submitFormShelveAdd" />
 </template>

+ 4 - 4
src/tools/select-gap-info/index.vue

@@ -29,15 +29,15 @@
                     <text class="f-s-28">审核不通过原因:</text>
                     <text class="f-s-28">{{ item?.msg }}</text>
                 </view>
-                <image v-if="+item?.res == 2" class="w-145" src="/static/images/plant/resFailed.png" style="position: absolute; top: 0; right: 0" mode="widthFix" />
-                <image v-if="+item?.res == 0" class="w-100" src="/static/images/plant/resPendingReview.png" style="position: absolute; top: 0; right: 0" mode="widthFix" />
-                <image v-if="+item?.res == 1" class="w-90" src="/static/images/plant/resEffective.png" style="position: absolute; top: 0; right: 0" mode="widthFix" />
+                <image v-if="+item?.res == 2" class="w-145" src="https://ta.zycpzs.cn/oss-file/smart-trace/szyy/images-plt/plant/resFailed.png" style="position: absolute; top: 0; right: 0" mode="widthFix" />
+                <image v-if="+item?.res == 0" class="w-100" src="https://ta.zycpzs.cn/oss-file/smart-trace/szyy/images-plt/plant/resPendingReview.png" style="position: absolute; top: 0; right: 0" mode="widthFix" />
+                <image v-if="+item?.res == 1" class="w-90" src="https://ta.zycpzs.cn/oss-file/smart-trace/szyy/images-plt/plant/resEffective.png" style="position: absolute; top: 0; right: 0" mode="widthFix" />
                 <image v-if="item.id === checkedId" class="w-40 h-40 checked-icon" src="https://ta.zycpzs.cn/oss-file/smart-trace/szyy/images-lm/price/checked1.png" mode="widthFix" />
             </view>
         </view>
 
         <template #empty>
-            <ut-empty class="mg-at" size="28rpx" color="#999" padding="10rpx" image="/static/images/plant/noEmptyBase.png">暂无获评GAP基地信息~</ut-empty>
+            <ut-empty class="mg-at" size="28rpx" color="#999" padding="10rpx" image="https://ta.zycpzs.cn/oss-file/smart-trace/szyy/images-plt/plant/noEmptyBase.png">暂无获评GAP基地信息~</ut-empty>
             <view class="f-s-28 c-#ccc w-600 text-center">如已获评GAP信息,请前往<span class="c-primary">基地-GAP基地获评信息</span>添加后再来选择若未获评GAP基地,可前往各地官方渠道进行GAP基地申报</view>
         </template>
         <template #bottom>