yzx 6 сар өмнө
parent
commit
168d79b558

+ 13 - 7
app/admin/controller/borrow/BorrowApp.php

@@ -348,7 +348,7 @@ class BorrowApp extends Backend
             $asset_userArr = [];
             $admin_idArr = [];
             $open_idArr = [];
-
+        
             //获取消息推送目标人
             foreach ($data['asset'] as $k => $v){
                 $asset_user = Db::name('asset')->where('asset_name',$data['asset'][$k]['model'])->value('user');
@@ -370,7 +370,7 @@ class BorrowApp extends Backend
             //校验数据
             $uniID = new SnowflakeId;
             $data['user_id'] = $this->auth->id;
-
+            $this->model->startTrans();
             //尝试存储
             try {
                 $data['status'] = 0;
@@ -391,6 +391,7 @@ class BorrowApp extends Backend
                     $text['data']['const6'] = ['教学借单'];
                 }
                 $result = $this->model->save($data);
+                
                 $data['accessories']['borrow_id'] = $this->model->id;
                 Db::name('accessories')->insert($data['accessories']);
                 $groupAccess = [];
@@ -404,6 +405,7 @@ class BorrowApp extends Backend
                         ];
                     }
                 }
+                // halt($result);
                 $this->BorrowNumber->saveAll($groupAccess);
                 $this->model->commit();
             } catch (Throwable $e) {
@@ -412,13 +414,14 @@ class BorrowApp extends Backend
                 $this->error($e->getMessage());
             }
             if ($result !== false) {
-
+               
                 if ($open_idArr !== [] && $open_idArr !== null) {
-
+                    
                     foreach ($open_idArr as $k => $v){
                         $text['open_id'] = $open_idArr[$k];
                         if ( $open_idArr[$k] !== [] &&  $open_idArr[$k] !== null) {
-                            $res = self::wxAuditMessage($text);
+                            //  halt($text);
+                             $res = self::wxAuditMessage($text);
                         }
                     }
 
@@ -427,10 +430,13 @@ class BorrowApp extends Backend
                     } else {
                         $this->success("更新成功,但消息发送失败,请检查网络或联系管理员");
                     }
+                    
                 }else{
+                    // halt(2);
                     $this->success('更新成功!但对方未配置公众号,消息提示失败!');
                 }
             } else {
+                //  halt(3);
                 $this->error(__('No rows were added'));
             }
         }
@@ -481,7 +487,7 @@ class BorrowApp extends Backend
             'appid' => 'wx58633590ab59b7a1',
             'pagepath' => ''
         ];
-
+       
         $result = OaService::getInstance()->sendTemplateMessage($openid, $template_id, $data, $url, $miniprogram);
 
         return $result;
@@ -526,7 +532,7 @@ class BorrowApp extends Backend
         return $result;
     }
     //    public function (): void
-    //    {
+    //    { 
     //        if ($this->request->param('select')) {
     //            $this->select();
     //        }

+ 1 - 0
app/admin/controller/borrow/BorrowApplication.php

@@ -168,6 +168,7 @@ class BorrowApplication extends Backend
         $row['asset'] = $rows;
         $user_id = Db::name('borrow')->where('id', $id)->value('user_id');
         $row['sign'] = Db::name('sign')->where('uid', $user_id)->find()['sign'];
+        $row['accessories'] = Db::name('accessories')->where('borrow_id', $id)->find();
 
         if ($this->request->isPost()) {
             $data = $this->request->post();

+ 57 - 17
app/admin/controller/borrow/BorrowApply.php

@@ -80,6 +80,7 @@ class BorrowApply extends Backend
     public function add(): void
     {
         if ($this->request->isPost()) {
+            
             $data = $this->request->post();
             $this->BorrowTools->checkRules($data);
             $data = $this->BorrowTools->checkText($data);
@@ -87,6 +88,8 @@ class BorrowApply extends Backend
             $asset_userArr = [];
             $admin_idArr = [];
             $open_idArr = [];
+            
+            
             //获取消息推送目标人
             foreach ($data['asset'] as $k => $v){
                 $asset_user = Db::name('asset')->where('asset_name', $data['asset'][$k]['model'])->value('user');
@@ -102,19 +105,22 @@ class BorrowApply extends Backend
                     $open_idArr[] = $open_id;
                 }
             }
+            
+         
             $data['approval_person_id'] = implode(',',$admin_idArr);
             $data['approval_person'] = implode(',',$asset_userArr);
-
-
-
+          
             //获取借单编号
             $uniID = new SnowflakeId;
             $data['user_id'] = $this->auth->id;
+
+            
             //尝试存储
             try {
                 $data['status'] = 0;
                 $data['encoding'] = $uniID->generateParticle();
-                if ($open_id !== []) {
+                $result = $this->model->save($data);
+                if (!empty($open_idArr) && $open_idArr !== null ) {
                     $text = [
                         "pagepath" => "pages/login/index",
                         "data" => [
@@ -122,16 +128,17 @@ class BorrowApply extends Backend
                             'thing4' => $data['username'],
                         ]
                     ];
+                    
                 }
                 if ($data['purpose'] == 0) {
                     $text['data']['const6'] = ['科研借单'];
-                    $leader = Db::name('admin')->where('switch',1)->find();
-                    $data['college_leader'] =  $leader['nickname'];
+                    $leader = Db::name('admin')->where('switch', 1)->find();
+                    $data['college_leader'] = $leader['nickname'];
                 } else {
                     $text['data']['const6'] = ['教学借单'];
                 }
-                $result = $this->model->save($data);
-
+                
+               
                 $groupAccess = [];
                 foreach ($data['asset'] as $datum) {
                     $groupAccess[] = [
@@ -141,24 +148,32 @@ class BorrowApply extends Backend
                         'num' => $datum['num']
                     ];
                 }
+
+                $data['accessories']['borrow_id'] = $this->model->id;
+                Db::name('accessories')->insert($data['accessories']);
                 $this->BorrowNumber->saveAll($groupAccess);
                 $this->model->commit();
             } catch (Throwable $e) {
                 $this->model->rollback();
                 $this->error($e->getMessage());
             }
+           
             if ($result !== false) {
-                if ($open_id !== []) {
+                if (!empty($open_idArr) && $open_idArr !== null) {
                     foreach ($open_idArr as $k => $v){
-                        $text['open_id'] = $open_id[$k];
-                        $res = self::wxAuditMessage($text);
+                        $text['openid'] = $open_idArr[$k];
+                        if($open_idArr[$k] != null){
+                            $res = self::wxAuditMessage($text);
+                        }else{
+                            $res = false;
+                        }
                     }
                     if ($res  === true) {
                         $this->success(__('Update successful'));
                     } else {
                         $this->success("更新成功,但消息发送失败,请检查网络或联系管理员");
                     }
-                }else{
+                } else {
                     $this->success('更新成功!但对方未配置公众号,消息提示失败!');
                 }
             } else {
@@ -205,15 +220,19 @@ class BorrowApply extends Backend
         if (!$row) {
             $this->error(__('Record not found'));
         }
-
+ 
         if ($row['status'] == 0 || $row['status'] == 1 || $row['status'] == 6 || $row['status'] == 7) {
+//             halt(1);
             $rows = $this->BorrowNumber->field('*,asset_name as model')->where('borrow_id', $id)->select();
         } else {
+//             halt($id);
             $rows = $this->BorrowAccess->field('*,asset_name as model')->where('borrow_id', $id)->select();
         }
-
+        
         $row['asset'] = $rows;
+        $row['accessories'] = Db::name('accessories')->where('borrow_id', $id)->find();
 
+//        halt(123);
         if ($this->request->isPost()) {
             $data = $this->request->post();
             $this->BorrowTools->checkRules($data);
@@ -229,6 +248,8 @@ class BorrowApply extends Backend
                 $this->BorrowTools->checkAsset($data);
 
                 $result = $this->model->update($data);
+
+                Db::name('accessories')->update($data['accessories']);
                 // 提交事务
                 $this->model->commit();
             } catch (Throwable $e) {
@@ -289,7 +310,7 @@ class BorrowApply extends Backend
      */
     public function wxAuditMessage($res = null): bool
     {
-
+        
         $openid = $res["openid"];
         $template_id = 'xsYnur6koCvgu1nUQwHmu8DX5SoL06P_nYMyK_oThGU';
         $data = [
@@ -309,11 +330,30 @@ class BorrowApply extends Backend
         $result = OaService::getInstance()->sendTemplateMessage($openid, $template_id, $data, $url, $miniprogram);
         return $result;
     }
-    public function  getProtocol(){
+    
+    function getPlainTextFromHtml($html)
+    {
+    
+        // Remove the HTML tags
+        $html = strip_tags($html);
+    
+        // Convert HTML entities to single characters
+        $html     = html_entity_decode($html, ENT_QUOTES, 'UTF-8');
+        $html_len = mb_strlen($html, 'UTF-8');
+    
+        // Make the string the desired number of characters
+        // Note that substr is not good as it counts by bytes and not characters
+        $html = mb_substr($html, 0, strlen($html), 'UTF-8');
+    
+        return $html;
+    }
+ 
+     public function  getProtocol(){
         $data = Db::name('protocol')->where("switch",1)->value('editor');
         if($data){
             $this->success('', [
-                'data' => $data
+                'data' => $data,
+                'data1' => self::getPlainTextFromHtml($data)
             ]);
         }else{
             $this->error("失败!");

+ 23 - 23
app/admin/controller/borrow/BorrowTools.php

@@ -164,32 +164,32 @@ class BorrowTools extends Backend
         if ($isOldAssset == 1) {
             $this->error("该仪器已借出!!");
         }
-//
-//        if( strpos($asset_name,'无人机') !== false){
-//            $map = [
-//                ['asset_name','like','%' . '无人机' .'%'],
-//            ];
-//        }else if( strpos($asset_name,'RTK') !== false){
-//            $map = [
-//                ['asset_name','like','%' . 'RTK' .'%'],
-//            ];
-//        }else if( strpos($asset_name,'水准仪') !== false){
-//            $map = [
-//                ['asset_name','like','%' . '水准仪' .'%'],
-//            ];
-//        }else if( strpos($asset_name,'全站仪') !== false){
-//            $map = [
-//                ['asset_name','like','%' . '全站仪' .'%'],
-//            ];
-//        }else{
-//            $map = [
-//                ['asset_name', '=' , $asset_name]
-//            ];
-//        }
+
+        if( strpos($asset_name,'无人机') !== false){
+            $map = [
+                ['asset_name','like','%' . '无人机' .'%'],
+            ];
+        }else if( strpos($asset_name,'RTK') !== false){
+            $map = [
+                ['asset_name','like','%' . 'RTK' .'%'],
+            ];
+        }else if( strpos($asset_name,'水准仪') !== false){
+            $map = [
+                ['asset_name','like','%' . '水准仪' .'%'],
+            ];
+        }else if( strpos($asset_name,'全站仪') !== false){
+            $map = [
+                ['asset_name','like','%' . '全站仪' .'%'],
+            ];
+        }else{
+            $map = [
+                ['asset_name', '=' , $asset_name]
+            ];
+        }
 
         $data =   $this->BorrowAccess
             ->where(['borrow_id' => $borrow_id])
-            ->where('asset_name',$asset_name)
+            ->where($map)
             ->where('asset_id', null)
             ->find();
         

+ 7 - 4
app/admin/controller/borrow/BorrowUseing.php

@@ -333,6 +333,7 @@ class BorrowUseing extends Backend
         }
 
         $asset_name = Db::name('asset')->where('asset_id', $asset_id)->value('asset_name');
+
         $data =  $this->BorrowTools->getDateForAssetName($asset_id,$asset_name,$borrow_id);
 
         if ($data !== null) {
@@ -385,7 +386,7 @@ class BorrowUseing extends Backend
         if ($assetData == null) {
             $this->error("请检查仪器编号!!");
         }
-        $isOldAssset = Db::name('asset')->where('asset_id', $new_asset_id)->where("asset_name",$assetData['asset_name'])->find();
+        $isOldAssset = Db::name('asset')->where('asset_id', $new_asset_id)->find();
 
         if ($isOldAssset == null) {
             $this->error("请检查仪器编号!!");
@@ -394,11 +395,12 @@ class BorrowUseing extends Backend
         if ($isOldAssset['status'] == 1) {
             $this->error("该仪器已借出!!");
         }
-
+        
         $result = false;
         $this->model->startTrans();
         try {
             $asset_name = Db::name('asset')->where('asset_id', $old_asset_id)->value('asset_name');
+            $new_asset_name = Db::name('asset')->where('asset_id', $new_asset_id)->value('asset_name');
 
             if ($isDamage == 1) {
                 $back = Db::name('asset')->where('asset_id', $old_asset_id)->data(['status' => 2])->update();
@@ -419,7 +421,7 @@ class BorrowUseing extends Backend
             if (isset($assetData['student_id'])) {
                 $result = $this->BorrowAccess->insert(
                     ['borrow_id' => $borrow_id,
-                        'asset_name' => $asset_name,
+                        'asset_name' => $new_asset_name,
                         'student_id' => $assetData['student_id'],
                         'asset_id' => $new_asset_id,
                         'origin' => $assetData['origin'],
@@ -430,7 +432,7 @@ class BorrowUseing extends Backend
             } else {
                 $result = $this->BorrowAccess->insert(
                     ['borrow_id' => $borrow_id,
-                        'asset_name' => $asset_name,
+                        'asset_name' => $new_asset_name,
                         'asset_id' => $new_asset_id,
                         'origin' => $assetData['origin'],
                         'collection_time' => date('Y-m-d H:i:s', time()),
@@ -572,6 +574,7 @@ class BorrowUseing extends Backend
 
         $this->model->startTrans();
         try {
+            //判断扫描的时是身份码还是仪器码并作出相应操作
             if (array_key_exists('asset_id', $query) && isset($query['asset_id'])) {
                 $data->status = 0;
                 $data->asset_name = $asset_name;

+ 1 - 0
package.json

@@ -2,6 +2,7 @@
   "dependencies": {
     "@vant/weapp": "^1.11.4",
     "@varlet/ui": "^2.22.0",
+    "@wangeditor/editor-for-vue": "^1.0.2",
     "base64-js": "^1.5.1",
     "dayjs": "^1.11.10",
     "js-base64": "^3.7.6",

+ 2 - 0
uniapp/package.json

@@ -14,6 +14,8 @@
         ]
     },
     "dependencies": {
+        "@vue/reactivity": "^3.5.3",
+        "js-base64": "^3.7.7",
         "xmldom-qsa": "^1.1.3"
     }
 }

+ 0 - 3
web/.vscode/extensions.json

@@ -1,3 +0,0 @@
-{
-    "recommendations": ["vue.volar", "esbenp.prettier-vscode", "dbaeumer.vscode-eslint"]
-}

+ 0 - 14
web/.vscode/settings.json

@@ -1,14 +0,0 @@
-{
-    "[json]": {
-        "editor.defaultFormatter": "esbenp.prettier-vscode"
-    },
-    "[jsonc]": {
-        "editor.defaultFormatter": "esbenp.prettier-vscode"
-    },
-    "[typescript]": {
-        "editor.defaultFormatter": "esbenp.prettier-vscode"
-    },
-    "[vue]": {
-        "editor.defaultFormatter": "esbenp.prettier-vscode"
-    }
-}

+ 27 - 28
web/package.json

@@ -1,6 +1,6 @@
 {
     "name": "build-admin",
-    "version": "2.0.5",
+    "version": "2.1.1",
     "license": "Apache-2.0",
     "type": "module",
     "scripts": {
@@ -8,17 +8,15 @@
         "build": "vite build && esno ./src/utils/build.ts",
         "lint": "eslint --ext .js,.jsx,.ts,.vue src",
         "lint-fix": "eslint --ext .js,.jsx,.ts,.vue src --fix",
-        "format": "npx prettier --write ."
+        "format": "npx prettier --write .",
+        "typecheck": "vue-tsc --noEmit"
     },
     "dependencies": {
         "@element-plus/icons-vue": "2.3.1",
-        "@kjgl77/datav-vue3": "^1.7.1",
-        "@vueuse/core": "10.7.0",
-        "axios": "1.6.2",
-        "countup.js": "2.8.0",
-        "echarts": "^5.4.3",
-        "element-plus": "2.4.4",
-        "esno": "4.0.0",
+        "@vueuse/core": "10.10.0",
+        "axios": "1.7.4",
+        "echarts": "5.5.0",
+        "element-plus": "2.7.8",
         "file-saver": "^2.0.5",
         "font-awesome": "4.7.0",
         "js-file-download": "^0.4.12",
@@ -28,33 +26,34 @@
         "nprogress": "0.2.0",
         "pinia": "2.1.7",
         "pinia-plugin-persistedstate": "3.2.1",
-        "qrcode": "^1.5.3",
+        "qrcode": "^1.5.4",
         "screenfull": "6.0.2",
-        "sortablejs": "1.15.1",
-        "v-code-diff": "1.8.0",
-        "vue": "3.3.13",
-        "vue-i18n": "9.2.2",
+        "sortablejs": "1.15.2",
+        "v-code-diff": "1.12.1",
+        "vue": "3.4.38",
+        "vue-i18n": "9.13.1",
         "vue-qr": "4.0.9",
-        "vue-router": "4.2.5",
-        "md-editor-v3": "^4.2.1"
+        "vue-router": "4.4.3"
     },
     "devDependencies": {
+        "@types/file-saver": "^2.0.7",
         "@types/lodash-es": "4.17.12",
-        "@types/node": "20.10.5",
+        "@types/node": "20.14.0",
         "@types/nprogress": "0.2.3",
-        "@types/sortablejs": "1.15.7",
-        "@typescript-eslint/eslint-plugin": "6.15.0",
-        "@typescript-eslint/parser": "6.15.0",
-        "@vitejs/plugin-vue": "4.5.2",
+        "@types/sortablejs": "1.15.8",
+        "@typescript-eslint/eslint-plugin": "7.12.0",
+        "@typescript-eslint/parser": "7.12.0",
+        "@vitejs/plugin-vue": "5.0.5",
         "async-validator": "4.2.5",
         "eslint": "8.56.0",
         "eslint-config-prettier": "9.1.0",
-        "eslint-plugin-vue": "9.19.2",
-        "prettier": "3.1.1",
-        "sass": "1.69.5",
-        "typescript": "5.3.3",
-        "vite": "^5.0.12",
-        "vue-eslint-parser": "9.3.2",
-        "@types/prettier": "^2.7.3"
+        "eslint-plugin-vue": "9.26.0",
+        "esno": "4.7.0",
+        "prettier": "3.3.0",
+        "sass": "1.77.4",
+        "typescript": "5.4.5",
+        "vite": "5.2.12",
+        "vue-eslint-parser": "9.4.3",
+        "vue-tsc": "2.0.21"
     }
 }

+ 0 - 205
web/src/components/mixins/editor/wang.vue

@@ -1,205 +0,0 @@
-<template>
-    <div v-if="state.mounted" :style="style" class="ba-editor wangeditor">
-        <Toolbar class="wangeditor-toolbar" :editor="editorRef" :defaultConfig="toolbarConfig" :mode="mode" />
-        <Editor
-            :style="state.editorStyle"
-            v-model="state.value"
-            :defaultConfig="state.editorConfig"
-            :mode="mode"
-            @onCreated="handleCreated"
-            @onChange="handleChange"
-            v-bind="$attrs"
-        />
-    </div>
-</template>
-
-<script setup lang="ts">
-import '@wangeditor/editor/dist/css/style.css' // 引入 css
-import { onBeforeUnmount, reactive, shallowRef, onMounted, CSSProperties, watch } from 'vue'
-import { IEditorConfig, IToolbarConfig, i18nChangeLanguage } from '@wangeditor/editor'
-import { Editor, Toolbar } from '@wangeditor/editor-for-vue'
-import { useConfig } from '/@/stores/config'
-import { fileUpload } from '/@/api/common'
-import NProgress from 'nprogress'
-
-interface Props {
-    // 编辑区高度
-    height?: string
-    mode?: 'default' | 'simple'
-    placeholder?: string
-    modelValue: string | null
-    // https://www.wangeditor.com/v5/toolbar-config.html#getconfig
-    toolbarConfig?: Partial<IToolbarConfig>
-    // https://www.wangeditor.com/v5/editor-config.html#placeholder
-    editorConfig?: Partial<IEditorConfig>
-    // 编辑区style
-    editorStyle?: CSSProperties
-    // 整体的style
-    style?: CSSProperties
-    // 图片和文件上传到服务器而不是云存储
-    fileForceLocal?: boolean
-}
-
-type VideoInsertFnType = (url: string) => void
-type ImgInsertFnType = (url: string, alt: string, href: string) => void
-
-const props = withDefaults(defineProps<Props>(), {
-    height: '320px',
-    mode: 'default',
-    placeholder: '请输入内容...',
-    modelValue: '',
-    toolbarConfig: () => {
-        return {
-            excludeKeys: ['|'],
-        }
-    },
-    editorConfig: () => {
-        return {}
-    },
-    editorStyle: () => {
-        {
-            return {}
-        }
-    },
-    style: () => {
-        return {}
-    },
-    fileForceLocal: false,
-})
-
-const config = useConfig()
-const editorRef = shallowRef()
-const emits = defineEmits<{
-    (e: 'update:modelValue', value: string): void
-}>()
-
-const state: {
-    mounted: boolean
-    value: string
-    editorConfig: Partial<IEditorConfig>
-    editorStyle: CSSProperties
-} = reactive({
-    mounted: false,
-    value: !props.modelValue ? '<p></p>' : props.modelValue,
-    editorConfig: props.editorConfig,
-    editorStyle: props.editorStyle,
-})
-
-onMounted(() => {
-    i18nChangeLanguage(config.lang.defaultLang == 'zh-cn' ? 'zh-CN' : config.lang.defaultLang)
-    state.editorConfig.placeholder = props.placeholder
-
-    // 图片上传配置
-    state.editorConfig.MENU_CONF = {}
-    state.editorConfig.MENU_CONF['uploadImage'] = {
-        fieldName: 'file',
-        maxFileSize: 10 * 1024 * 1024, // 10M
-        async customUpload(file: File, insertFn: ImgInsertFnType) {
-            NProgress.configure({ showSpinner: true, trickle: false })
-            NProgress.start()
-            let fd = new FormData()
-            fd.append('file', file)
-            fileUpload(fd, {}, props.fileForceLocal, {
-                onUploadProgress: (evt) => {
-                    NProgress.set(evt.progress!)
-                },
-            }).then((res) => {
-                if (res.code == 1) {
-                    insertFn(res.data.file.full_url, res.data.file.name, res.data.file.full_url)
-                }
-                NProgress.done()
-            })
-        },
-    }
-
-    // 视频上传配置
-    state.editorConfig.MENU_CONF['uploadVideo'] = {
-        fieldName: 'file',
-        async customUpload(file: File, insertFn: VideoInsertFnType) {
-            NProgress.configure({ showSpinner: true, trickle: false })
-            NProgress.start()
-            let fd = new FormData()
-            fd.append('file', file)
-            fileUpload(fd, {}, props.fileForceLocal, {
-                onUploadProgress: (evt) => {
-                    NProgress.set(evt.progress!)
-                },
-            }).then((res) => {
-                if (res.code == 1) {
-                    insertFn(res.data.file.full_url)
-                }
-                NProgress.done()
-            })
-        },
-    }
-
-    state.editorStyle.height = props.height
-    state.editorStyle['overflow-y'] = 'hidden'
-    state.mounted = true
-})
-
-// 组件销毁时,也及时销毁编辑器
-onBeforeUnmount(() => {
-    if (editorRef.value == null) return
-    editorRef.value.destroy()
-})
-
-const handleCreated = (editor: any) => {
-    editorRef.value = editor // 记录 editor 实例
-}
-
-const handleChange = () => {
-    emits('update:modelValue', editorRef.value.getHtml())
-}
-
-const getRef = () => {
-    return editorRef.value
-}
-
-defineExpose({
-    getRef,
-})
-
-watch(
-    () => props.modelValue,
-    (newVal) => {
-        state.value = !newVal ? '<p></p>' : newVal
-    }
-)
-</script>
-
-<style scoped lang="scss">
-.ba-editor {
-    border: 1px solid var(--el-border-color-lighter);
-    z-index: 9999;
-    :deep(.w-e-scroll) {
-        scrollbar-width: none;
-        &::-webkit-scrollbar {
-            width: 5px;
-        }
-        &::-webkit-scrollbar-thumb {
-            background: #eaeaea;
-            border-radius: var(--el-border-radius-base);
-            box-shadow: none;
-            -webkit-box-shadow: none;
-        }
-        &:hover {
-            &::-webkit-scrollbar-thumb:hover {
-                background: #c8c9cc;
-            }
-        }
-    }
-}
-.wangeditor-toolbar {
-    border-bottom: 1px solid var(--el-border-color-lighter);
-}
-
-// 暗黑样式
-@at-root .dark {
-    .ba-editor {
-        --w-e-textarea-bg-color: var(--ba-bg-color-overlay);
-        --w-e-toolbar-bg-color: var(--ba-bg-color-overlay);
-        --w-e-toolbar-border-color: var(--el-color-info-light-3);
-    }
-}
-</style>

+ 1 - 1
web/src/layouts/frontend/Yiqi.vue

@@ -127,7 +127,7 @@
 
 <script setup lang="ts" name="Home">
 import {onMounted, ref, reactive, computed, onUnmounted} from 'vue';
-import { BorderBox13 as DvBorderBox13 } from '@kjgl77/datav-vue3'
+// import { BorderBox13 as DvBorderBox13 } from '@kjgl77/datav-vue3'
 import dayjs from 'dayjs';
 import Echarts from '/@/components/ReEcharts/index.vue';
 import * as echarts from 'echarts';

+ 2 - 2
web/src/main.ts

@@ -13,7 +13,7 @@ import 'font-awesome/css/font-awesome.min.css'
 import '/@/styles/index.scss'
 // modules import mark, Please do not remove.
 import * as echarts from 'echarts';
-import DataVVue3 from '@kjgl77/datav-vue3'
+// import DataVVue3 from '@kjgl77/datav-vue3'
 
 async function start() {
     const app = createApp(App)
@@ -24,7 +24,7 @@ async function start() {
 
     app.use(router)
     app.use(ElementPlus)
-    app.use(DataVVue3)
+    // app.use(DataVVue3)
 
     app.config.globalProperties.$echarts = echarts;
     // 全局注册

+ 59 - 1
web/src/views/backend/borrow/borrowApplication/popupForm.vue

@@ -133,6 +133,23 @@
                         message="驳回时批注为必填项!"
                         :input-attr="{ maxlength: 200, clearable: true, 'show-password': true }"
                     />
+                    <el-form-item label="配件">
+                        <div style="width: 100% ;">
+                            <el-card class="box-card">
+                                <FormItem
+                                    v-for="(item, index) in filteredAccessories" :key="index"
+                                    :label="item.name"
+                                    required="required"
+                                    :prop="item.quantity"
+                                    v-model="item.quantity"
+                                    type="number"
+                                    :input-attr="{
+                                        disabledDate: expireTimeOption, readonly: true,
+                                    }"
+                                />
+                            </el-card>
+                        </div>
+                    </el-form-item>
                     <el-form-item label="电子签字">
                         <el-image :src="fullUrl(baTable.form.items!.sign)" class="avatar">
                             <template #error>
@@ -143,6 +160,8 @@
                         </el-image>
                     </el-form-item>
 
+
+
                 </el-form>
             </div>
         </el-scrollbar>
@@ -171,7 +190,7 @@
 </template>
 
 <script setup lang="ts">
-import {ref, reactive, inject, watch, onMounted} from 'vue'
+import {ref, reactive, inject, watch, onMounted, computed} from 'vue'
 import {useI18n} from 'vue-i18n'
 import type baTableClass from '/@/utils/baTable'
 import {regularPassword, buildValidatorData} from '/@/utils/validate'
@@ -191,6 +210,45 @@ const expireTimeOption = (time) => {
     return time.getTime() < Date.now() - 8.64e7;
 };
 
+
+const filteredAccessories = computed(() => {
+    const accessories = ref<any[]>([
+        {name: '无人机电池', quantity: baTable.form.items?.accessories?.w_battery},
+        {name: '无人机遥控器', quantity: baTable.form.items?.accessories?.w_remote_control},
+        {name: '无人机遥控器电池', quantity: baTable.form.items?.accessories?.w_remote_control_battery},
+        {name: '无人机充电管家', quantity: baTable.form.items?.accessories?.w_charge_housekeeper},
+        {name: '螺旋桨', quantity: baTable.form.items?.accessories?.w_propeller},
+        {name: 'SD卡', quantity: baTable.form.items?.accessories?.w_sd},
+        {name: '全站仪主机电池', quantity: baTable.form.items?.accessories?.q_battery},
+        {name: '全站仪主机充电器', quantity: baTable.form.items?.accessories?.q_charge_housekeeper},
+        {name: '全站仪三脚架', quantity: baTable.form.items?.accessories?.q_tripod},
+        {name: '全站仪棱镜', quantity: baTable.form.items?.accessories?.q_prism},
+        {name: '对中杆', quantity: baTable.form.items?.accessories?.q_center_bar},
+        {name: '数据线', quantity: baTable.form.items?.accessories?.q_data_line},
+        {name: '水准仪主机电池', quantity: baTable.form.items?.accessories?.s_battery},
+        {name: '水准仪充电器', quantity: baTable.form.items?.accessories?.s_charge_housekeeper},
+        {name: '水准仪三脚架', quantity: baTable.form.items?.accessories?.s_tripod},
+        {name: '水准尺', quantity: baTable.form.items?.accessories?.s_level_gauge},
+        {name: '水准尺尺垫', quantity: baTable.form.items?.accessories?.s_ruler_pad},
+        {name: '水准仪电源线', quantity: baTable.form.items?.accessories?.s_data_line},
+        {name: '水准仪调节扳手', quantity: baTable.form.items?.accessories?.s_adjustment_wrench},
+        {name: '防雨布', quantity: baTable.form.items?.accessories?.s_rain_proof_cloth},
+        {name: 'RTK主机电池', quantity: baTable.form.items?.accessories?.r_battery},
+        {name: 'RTK充电器', quantity: baTable.form.items?.accessories?.r_charge_housekeeper},
+        {name: '手簿', quantity: baTable.form.items?.accessories?.r_hand_book},
+        {name: '手簿夹', quantity: baTable.form.items?.accessories?.r_hand_book_holder},
+        {name: '手簿笔', quantity: baTable.form.items?.accessories?.r_hand_book_pen},
+        {name: 'USB线', quantity: baTable.form.items?.accessories?.r_usb},
+        {name: '手电', quantity: baTable.form.items?.accessories?.r_flashlight},
+        {name: '光盘', quantity: baTable.form.items?.accessories?.r_cdrow},
+        {name: '长天线', quantity: baTable.form.items?.accessories?.r_long_antenna},
+        {name: '短天线', quantity: baTable.form.items?.accessories?.r_short_antenna},
+        {name: '测高片', quantity: baTable.form.items?.accessories?.r_height_measuring_plate},
+        {name: '连接头', quantity: baTable.form.items?.accessories?.r_connection_head},
+        {name: '说明书', quantity: baTable.form.items?.accessories?.r_instruction_manual},
+    ]);
+    return accessories.value.filter(item => item.quantity != 0);
+});
 const rules: Partial<Record<string, FormItemRule[]>> = reactive({
     username: [buildValidatorData({name: 'required', message: '请输入使用人'})],
     purpose: [buildValidatorData({name: 'required', message: '请选择申请类型'})],

+ 36 - 0
web/src/views/backend/borrow/borrowApply/index.vue

@@ -188,6 +188,42 @@ const baTable = new baTableClass(
                         origins: []
                     },
                 ]
+                baTable.form.items!.accessories = {
+                    w_battery: 0,
+                    w_remote_control: 0,
+                    w_remote_control_battery: 0,
+                    w_charge_housekeeper: 0,
+                    w_propeller: 0,
+                    w_sd: 0,
+                    q_battery: 0,
+                    q_charge_housekeeper: 0,
+                    q_tripod: 0,
+                    q_prism: 0,
+                    q_center_bar: 0,
+                    q_data_line: 0,
+                    s_battery: 0,
+                    s_charge_housekeeper: 0,
+                    s_adjustment_wrench: 0,
+                    s_data_line: 0,
+                    s_rain_proof_cloth: 0,
+                    s_level_gauge: 0,
+                    s_tripod: 0,
+                    s_ruler_pad: 0,
+                    r_battery: 0,
+                    r_charge_housekeeper: 0,
+                    r_charging_head: 0,
+                    r_hand_book: 0,
+                    r_hand_book_holder: 0,
+                    r_hand_book_pen: 0,
+                    r_usb: 0,
+                    r_flashlight: 0,
+                    r_cdrow: 0,
+                    r_long_antenna: 0,
+                    r_short_antenna: 0,
+                    r_height_measuring_plate: 0,
+                    r_connection_head: 0,
+                    r_instruction_manual: 0,
+                }
             }
         },
     }

+ 337 - 3
web/src/views/backend/borrow/borrowApply/popupForm.vue

@@ -129,6 +129,319 @@
                         :placeholder="t('borrow.borrowapply.approval person')"
                         v-if="baTable.form.items!.status !== 0 && baTable.form.operate !== 'Add'"
                     />
+                   <el-form-item label="选择无人机配件" v-if="is_w">
+                        <div style="width: 100% ;">
+                            <el-card class="box-card">
+
+                                <FormItem
+                                    label="电池数量"
+                                    required="required"
+                                    prop="accessories.w_battery"
+                                    v-model="baTable.form.items!.accessories.w_battery"
+                                    type="number"
+                                    placeholder="请输入无人机电池数量"
+                                />
+                                <FormItem
+                                    label="遥控器数量"
+                                    required="required"
+                                    prop="accessories.w_remote_control"
+                                    v-model="baTable.form.items!.accessories.w_remote_control"
+                                    type="number"
+                                    placeholder="请输入无人机电遥控器数量"
+                                />
+                                <FormItem
+                                    label="遥控器电池数量"
+                                    required="required"
+                                    prop="accessories.w_remote_control_battery"
+                                    v-model="baTable.form.items!.accessories.w_remote_control_battery"
+                                    type="number"
+                                    placeholder="请输入无人机电遥控器电池数量"
+                                />
+                                <FormItem
+                                    label="充电管家"
+                                    required="required"
+                                    prop="accessories.w_charge_housekeeper"
+                                    v-model="baTable.form.items!.accessories.w_charge_housekeeper"
+                                    type="number"
+                                    placeholder="请输入无人机电充电管家数量"
+                                />
+                                <FormItem
+                                    label="螺旋桨"
+                                    required="required"
+                                    prop="accessories.w_propeller"
+                                    v-model="baTable.form.items!.accessories.w_propeller"
+                                    type="number"
+                                    placeholder="请输入无人机电螺旋桨数量"
+                                />
+                                <FormItem
+                                    label="SD卡"
+                                    required="required"
+                                    prop="accessories.w_sd"
+                                    v-model="baTable.form.items!.accessories.w_sd"
+                                    type="number"
+                                    placeholder="请输入无人机电SD卡数量"
+                                />
+                            </el-card>
+                        </div>
+                    </el-form-item>
+                   <el-form-item label="选择全站仪配件" v-if="is_q">
+                        <div style="width: 100% ;">
+                            <el-card class="box-card">
+                                <FormItem
+                                    label="主机电池"
+                                    required="required"
+                                    prop="accessories.q_battery"
+                                    v-model="baTable.form.items!.accessories.q_battery"
+                                    type="number"
+                                    placeholder="请输入全站仪电池数量"
+                                />
+                                <FormItem
+                                    label="主机充电器"
+                                    required="required"
+                                    prop="accessories.q_charge_housekeeper"
+                                    v-model="baTable.form.items!.accessories.q_charge_housekeeper"
+                                    type="number"
+                                    placeholder="请输入全站仪主机充电器数量"
+                                />
+
+                                <FormItem
+                                    label="三脚架"
+                                    required="required"
+                                    prop="accessories.q_tripod"
+                                    v-model="baTable.form.items!.accessories.q_tripod"
+                                    type="number"
+                                    placeholder="请输入三脚架数量"
+                                />
+
+                                <FormItem
+                                    label="棱镜"
+                                    required="required"
+                                    prop="accessories.q_prism"
+                                    v-model="baTable.form.items!.accessories.q_prism"
+                                    type="number"
+                                    placeholder="请输入棱镜数量"
+                                />
+                                <FormItem
+                                    label="对中杆"
+                                    required="required"
+                                    prop="accessories.q_center_bar"
+                                    v-model="baTable.form.items!.accessories.q_center_bar"
+                                    type="number"
+                                    placeholder="请输入对中杆数量"
+                                />
+                                <FormItem
+                                    label="数据线"
+                                    required="required"
+                                    prop="accessories.q_data_line"
+                                    v-model="baTable.form.items!.accessories.q_data_line"
+                                    type="number"
+                                    placeholder="请输入全站仪数据线数量"
+                                />
+                            </el-card>
+                        </div>
+                    </el-form-item>
+                   <el-form-item label="选择水准仪配件" v-if="is_s">
+                        <div style="width: 100% ;">
+                            <el-card class="box-card">
+                                <FormItem
+                                    label="主机电池"
+                                    required="required"
+                                    prop="accessories.s_battery"
+                                    v-model="baTable.form.items!.accessories.s_battery"
+                                    type="number"
+                                    placeholder="请输入主机电池数量"
+                                />
+                                <FormItem
+                                    label="充电器"
+                                    required="required"
+                                    prop="accessories.s_charge_housekeeper"
+                                    v-model="baTable.form.items!.accessories.s_charge_housekeeper"
+                                    type="number"
+                                    placeholder="请输入充电器数量"
+                                />
+
+                                <FormItem
+                                    label="电源线"
+                                    required="required"
+                                    prop="accessories.s_data_line"
+                                    v-model="baTable.form.items!.accessories.s_data_line"
+                                    type="number"
+                                    placeholder="请输入电源线数量"
+                                />
+
+                                <FormItem
+                                    label="调节扳手"
+                                    required="required"
+                                    prop="accessories.s_adjustment_wrench"
+                                    v-model="baTable.form.items!.accessories.s_adjustment_wrench"
+                                    type="number"
+                                    placeholder="请输入调节扳手数量"
+                                />
+
+
+                                <FormItem
+                                    label="防雨布"
+                                    required="required"
+                                    prop="accessories.s_rain_proof_cloth"
+                                    v-model="baTable.form.items!.accessories.s_rain_proof_cloth"
+                                    type="number"
+                                    placeholder="请输入防雨布数量"
+                                />
+
+
+                                <FormItem
+                                    label="三脚架"
+                                    required="required"
+                                    prop="accessories.s_tripod"
+                                    v-model="baTable.form.items!.accessories.s_tripod"
+                                    type="number"
+                                    placeholder="请输入三脚架数量"
+                                />
+                                <FormItem
+                                    label="水准尺"
+                                    required="required"
+                                    prop="accessories.s_level_gauge"
+                                    v-model="baTable.form.items!.accessories.s_level_gauge"
+                                    type="number"
+                                    placeholder="请输入水准尺数量"
+                                />
+                                <FormItem
+                                    label="尺垫"
+                                    required="required"
+                                    prop="accessories.s_ruler_pad"
+                                    v-model="baTable.form.items!.accessories.s_ruler_pad"
+                                    type="number"
+                                    placeholder="请输入尺垫数量"
+                                />
+                            </el-card>
+                        </div>
+                    </el-form-item>
+                   <el-form-item label="选择RTK配件" v-if="is_r">
+                        <div style="width: 100% ;">
+                            <el-card class="box-card">
+                                <FormItem
+                                    label="主机电池"
+                                    required="required"
+                                    prop="accessories.r_battery"
+                                    v-model="baTable.form.items!.accessories.r_battery"
+                                    type="number"
+                                    placeholder="请输入主机电池数量"
+                                />
+                                <FormItem
+                                    label="主电充电器"
+                                    required="required"
+                                    prop="accessories.r_charge_housekeeper"
+                                    v-model="baTable.form.items!.accessories.r_charge_housekeeper"
+                                    type="number"
+                                    placeholder="请输入主电充电器数量"
+                                />
+
+                                <FormItem
+                                    label="手簿"
+                                    required="required"
+                                    prop="accessories.r_charging_head"
+                                    v-model="baTable.form.items!.accessories.r_charging_head"
+                                    type="number"
+                                    placeholder="请输入手簿数量"
+                                />
+
+                                <FormItem
+                                    label="手簿夹"
+                                    required="required"
+                                    prop="accessories.r_hand_book_holder"
+                                    v-model="baTable.form.items!.accessories.r_hand_book_holder"
+                                    type="number"
+                                    placeholder="请输入手簿夹数量"
+                                />
+                                <FormItem
+                                    label="手簿笔"
+                                    required="required"
+                                    prop="accessories.r_hand_book_pen"
+                                    v-model="baTable.form.items!.accessories.r_hand_book_pen"
+                                    type="number"
+                                    placeholder="请输入手簿笔数量"
+                                />
+                                <FormItem
+                                    label="手簿充电头"
+                                    required="required"
+                                    prop="accessories.r_charging_head"
+                                    v-model="baTable.form.items!.accessories.r_charging_head"
+                                    type="number"
+                                    placeholder="请输入手簿充电头数量"
+                                />
+
+
+                                <FormItem
+                                    label="手电"
+                                    required="required"
+                                    prop="accessories.r_flashlight"
+                                    v-model="baTable.form.items!.accessories.r_flashlight"
+                                    type="number"
+                                    placeholder="请输入手电数量"
+                                />
+                                <FormItem
+                                    label="连接头"
+                                    required="required"
+                                    prop="accessories.r_connection_head"
+                                    v-model="baTable.form.items!.accessories.r_connection_head"
+                                    type="number"
+                                    placeholder="请输入连接头数量"
+                                />
+
+                                <FormItem
+                                    label="测高片"
+                                    required="required"
+                                    prop="accessories.r_height_measuring_plate"
+                                    v-model="baTable.form.items!.accessories.r_height_measuring_plate"
+                                    type="number"
+                                    placeholder="请输入测高片数量"
+                                />
+                                <FormItem
+                                    label="长天线"
+                                    required="required"
+                                    prop="accessories.r_long_antenna"
+                                    v-model="baTable.form.items!.accessories.r_long_antenna"
+                                    type="number"
+                                    placeholder="请输入长天线数量"
+                                />
+
+                                <FormItem
+                                    label="短天线"
+                                    required="required"
+                                    prop="accessories.r_short_antenna"
+                                    v-model="baTable.form.items!.accessories.r_short_antenna"
+                                    type="number"
+                                    placeholder="请输入短天线数量"
+                                />
+                                <FormItem
+                                    label="说明书"
+                                    required="required"
+                                    prop="accessories.r_instruction_manual"
+                                    v-model="baTable.form.items!.accessories.r_instruction_manual"
+                                    type="number"
+                                    placeholder="请输入说明书数量"
+                                />
+
+                                <FormItem
+                                    label="光盘"
+                                    required="required"
+                                    prop="accessories.r_cdrow"
+                                    v-model="baTable.form.items!.accessories.r_cdrow"
+                                    type="number"
+                                    placeholder="请输入光盘数量"
+                                />
+                                <FormItem
+                                    label="USB线"
+                                    required="required"
+                                    prop="accessories.r_usb"
+                                    v-model="baTable.form.items!.accessories.r_usb"
+                                    type="number"
+                                    placeholder="USB线数量"
+                                />
+                            </el-card>
+                        </div>
+                    </el-form-item>
+
                     <el-form-item label="电子签字">
                         <el-upload
                             class="avatar-uploader"
@@ -208,14 +521,13 @@ import type {FormInstance, FormItemRule} from 'element-plus'
 import FormItem from '/@/components/formItem/index.vue'
 import {useConfig} from '/@/stores/config'
 import {getAssetGroup, saveSign, getSign, getProtocol} from '/@/api/backend/borrow/borrowApply'
-import any from 'async-validator/dist-types/validator/any'
 import {ElMessageBox} from 'element-plus'
 import {fullUrl} from '/@/utils/common'
 import {fileUpload} from '/@/api/common'
 import AssetSelectionRecord from "/@/views/backend/borrow/common/assetSelectionRecord.vue";
 import assetSelection from "/@/views/backend/borrow/common/assetSelection.vue";
 
-const expireTimeOption = (time) => {
+const expireTimeOption = (time: any) => {
     return time.getTime() < Date.now() - 8.64e7;
 };
 
@@ -227,7 +539,7 @@ const onSignBeforeUpload = (file: any) => {
             saveSign({
                 sign: res.data.file.url,
             }).then(() => {
-                baTable.form.items!.sign = res.data.file.url;
+                thisSign.value = res.data.file.full_url;
             })
         }
     })
@@ -333,6 +645,25 @@ onMounted(() => {
         protocol.value = data['data']['data'];
     })
 })
+// 布尔值变量以确定是否包含特定模型
+const is_w = ref( false);
+const is_q = ref( false);
+const is_s = ref(false );
+const is_r = ref( false );
+
+watch(
+    () => baTable.form.items!.asset,
+    (val) => {
+        console.log(baTable.form.items!.asset);
+        is_w.value = val?.some((asset: object) => asset.model.includes('无人机'));
+        is_q.value = val?.some((asset: object) => asset.model.includes('全站仪'));
+        is_s.value = val?.some((asset: object) => asset.model.includes('水准仪'));
+        is_r.value = val?.some((asset: object) =>
+            asset.model.includes('RTK') || asset.model.includes('GNSS')
+        );
+    },
+    {deep: true}
+);
 const rules: Partial<Record<string, FormItemRule[]>> = reactive({
     encoding: [buildValidatorData({name: 'required', message: '接单号不能为空,请联系管理员!!'})],
     username: [buildValidatorData({name: 'required', message: '请输入使用人'})],
@@ -380,6 +711,7 @@ const rules: Partial<Record<string, FormItemRule[]>> = reactive({
     padding: 0 12px 0 0;
     box-sizing: border-box;
 }
+
 .avatar-uploader {
     display: flex;
     box-shadow: var(--el-box-shadow-light);
@@ -389,9 +721,11 @@ const rules: Partial<Record<string, FormItemRule[]>> = reactive({
     width: 220px;
     height: 220px;
 }
+
 .avatar-uploader:hover {
     border-color: var(--el-color-primary);
 }
+
 .avatar {
     width: 220px;
     height: 220px;

+ 60 - 2
web/src/views/backend/borrow/borrowRecord/popupForm.vue

@@ -131,6 +131,23 @@
                         v-model="baTable.form.items!.remarks"
                         :input-attr="{ maxlength: 200, clearable: true, 'show-password': true ,readonly: true,}"
                     />
+                    <el-form-item label="配件">
+                        <div style="width: 100% ;">
+                            <el-card class="box-card">
+                                <FormItem
+                                    v-for="(item, index) in filteredAccessories" :key="index"
+                                    :label="item.name"
+                                    required="required"
+                                    :prop="item.quantity"
+                                    v-model="item.quantity"
+                                    type="number"
+                                    :input-attr="{
+                                        disabledDate: expireTimeOption, readonly: true,
+                                    }"
+                                />
+                            </el-card>
+                        </div>
+                    </el-form-item>
                     <FormItem
                         :label="t('borrow.borrowrecord.approval person')"
                         v-model="baTable.form.items!.approval_person"
@@ -138,6 +155,7 @@
                         prop="approval_person"
                         :placeholder="t('borrow.borrowrecord.approval person')"
                     />
+
                     <el-form-item label="照片留存">
                         <el-upload
                             v-model:file-list="baTable.form.items!.fileList"
@@ -154,6 +172,7 @@
                             </el-icon>
                         </el-upload>
                     </el-form-item>
+
                 </el-form>
             </div>
         </el-scrollbar>
@@ -172,7 +191,7 @@
 </template>
 
 <script setup lang="ts">
-import {ref, reactive, inject, watch, onMounted} from 'vue'
+import {ref, reactive, inject, watch, onMounted, computed} from 'vue'
 import {useI18n} from 'vue-i18n'
 import type baTableClass from '/@/utils/baTable'
 import {regularPassword, buildValidatorData} from '/@/utils/validate'
@@ -184,9 +203,48 @@ import {Plus} from "@element-plus/icons-vue";
 import {fileUpload} from "/@/api/common";
 import { fullUrl } from "/@/utils/common";
 import assetSelectionRecord from "../common/assetSelectionRecord.vue";
-const expireTimeOption = (time) => {
+const expireTimeOption = (time : any) => {
     return time.getTime() < Date.now() - 8.64e7;
 };
+
+const filteredAccessories = computed(() => {
+    const accessories = ref<any[]>([
+        {name: '无人机电池', quantity: baTable.form.items?.accessories?.w_battery},
+        {name: '无人机遥控器', quantity: baTable.form.items?.accessories?.w_remote_control},
+        {name: '无人机遥控器电池', quantity: baTable.form.items?.accessories?.w_remote_control_battery},
+        {name: '无人机充电管家', quantity: baTable.form.items?.accessories?.w_charge_housekeeper},
+        {name: '螺旋桨', quantity: baTable.form.items?.accessories?.w_propeller},
+        {name: 'SD卡', quantity: baTable.form.items?.accessories?.w_sd},
+        {name: '全站仪主机电池', quantity: baTable.form.items?.accessories?.q_battery},
+        {name: '全站仪主机充电器', quantity: baTable.form.items?.accessories?.q_charge_housekeeper},
+        {name: '全站仪三脚架', quantity: baTable.form.items?.accessories?.q_tripod},
+        {name: '全站仪棱镜', quantity: baTable.form.items?.accessories?.q_prism},
+        {name: '对中杆', quantity: baTable.form.items?.accessories?.q_center_bar},
+        {name: '数据线', quantity: baTable.form.items?.accessories?.q_data_line},
+        {name: '水准仪主机电池', quantity: baTable.form.items?.accessories?.s_battery},
+        {name: '水准仪充电器', quantity: baTable.form.items?.accessories?.s_charge_housekeeper},
+        {name: '水准仪三脚架', quantity: baTable.form.items?.accessories?.s_tripod},
+        {name: '水准尺', quantity: baTable.form.items?.accessories?.s_level_gauge},
+        {name: '水准尺尺垫', quantity: baTable.form.items?.accessories?.s_ruler_pad},
+        {name: '水准仪电源线', quantity: baTable.form.items?.accessories?.s_data_line},
+        {name: '水准仪调节扳手', quantity: baTable.form.items?.accessories?.s_adjustment_wrench},
+        {name: '防雨布', quantity: baTable.form.items?.accessories?.s_rain_proof_cloth},
+        {name: 'RTK主机电池', quantity: baTable.form.items?.accessories?.r_battery},
+        {name: 'RTK充电器', quantity: baTable.form.items?.accessories?.r_charge_housekeeper},
+        {name: '手簿', quantity: baTable.form.items?.accessories?.r_hand_book},
+        {name: '手簿夹', quantity: baTable.form.items?.accessories?.r_hand_book_holder},
+        {name: '手簿笔', quantity: baTable.form.items?.accessories?.r_hand_book_pen},
+        {name: 'USB线', quantity: baTable.form.items?.accessories?.r_usb},
+        {name: '手电', quantity: baTable.form.items?.accessories?.r_flashlight},
+        {name: '光盘', quantity: baTable.form.items?.accessories?.r_cdrow},
+        {name: '长天线', quantity: baTable.form.items?.accessories?.r_long_antenna},
+        {name: '短天线', quantity: baTable.form.items?.accessories?.r_short_antenna},
+        {name: '测高片', quantity: baTable.form.items?.accessories?.r_height_measuring_plate},
+        {name: '连接头', quantity: baTable.form.items?.accessories?.r_connection_head},
+        {name: '说明书', quantity: baTable.form.items?.accessories?.r_instruction_manual},
+    ]);
+    return accessories.value.filter(item => item.quantity != 0);
+});
 const fileList = ref<any>([]);
 const dialogImageUrl = ref('');
 const dialogVisible = ref(false);

+ 58 - 1
web/src/views/backend/borrow/borrowUseing/popupForm.vue

@@ -118,6 +118,23 @@
                         v-model="baTable.form.items!.remarks"
                         :input-attr="{ maxlength: 200, clearable: true, 'show-password': true }"
                     />
+                    <el-form-item label="配件">
+                        <div style="width: 100% ;">
+                            <el-card class="box-card">
+                                <FormItem
+                                    v-for="(item, index) in filteredAccessories" :key="index"
+                                    :label="item.name"
+                                    required="required"
+                                    :prop="item.quantity"
+                                    v-model="item.quantity"
+                                    type="number"
+                                    :input-attr="{
+                                        disabledDate: expireTimeOption, readonly: true,
+                                    }"
+                                />
+                            </el-card>
+                        </div>
+                    </el-form-item>
                     <FormItem
                         :label="t('borrow.borrowuseing.approval person')"
                         v-model="baTable.form.items!.approval_person"
@@ -165,7 +182,7 @@
 </template>
 
 <script setup lang="ts">
-import {ref, reactive, inject, watch, onMounted, onBeforeUnmount} from 'vue'
+import {ref, reactive, inject, watch, onMounted, onBeforeUnmount, computed} from 'vue'
 import {useI18n} from 'vue-i18n'
 import type baTableClass from '/@/utils/baTable'
 import {regularPassword, buildValidatorData} from '/@/utils/validate'
@@ -282,6 +299,46 @@ const handleSelect = (item: Record<string, any>, index: any) => {
     baTable.form.items!.asset[index].group_id = item.group_id
     baTable.form.items!.asset[index].configuration_standard_id = item.configuration_standard_id
 }
+
+
+const filteredAccessories = computed(() => {
+    const accessories = ref<any[]>([
+        {name: '无人机电池', quantity: baTable.form.items?.accessories?.w_battery},
+        {name: '无人机遥控器', quantity: baTable.form.items?.accessories?.w_remote_control},
+        {name: '无人机遥控器电池', quantity: baTable.form.items?.accessories?.w_remote_control_battery},
+        {name: '无人机充电管家', quantity: baTable.form.items?.accessories?.w_charge_housekeeper},
+        {name: '螺旋桨', quantity: baTable.form.items?.accessories?.w_propeller},
+        {name: 'SD卡', quantity: baTable.form.items?.accessories?.w_sd},
+        {name: '全站仪主机电池', quantity: baTable.form.items?.accessories?.q_battery},
+        {name: '全站仪主机充电器', quantity: baTable.form.items?.accessories?.q_charge_housekeeper},
+        {name: '全站仪三脚架', quantity: baTable.form.items?.accessories?.q_tripod},
+        {name: '全站仪棱镜', quantity: baTable.form.items?.accessories?.q_prism},
+        {name: '对中杆', quantity: baTable.form.items?.accessories?.q_center_bar},
+        {name: '数据线', quantity: baTable.form.items?.accessories?.q_data_line},
+        {name: '水准仪主机电池', quantity: baTable.form.items?.accessories?.s_battery},
+        {name: '水准仪充电器', quantity: baTable.form.items?.accessories?.s_charge_housekeeper},
+        {name: '水准仪三脚架', quantity: baTable.form.items?.accessories?.s_tripod},
+        {name: '水准尺', quantity: baTable.form.items?.accessories?.s_level_gauge},
+        {name: '水准尺尺垫', quantity: baTable.form.items?.accessories?.s_ruler_pad},
+        {name: '水准仪电源线', quantity: baTable.form.items?.accessories?.s_data_line},
+        {name: '水准仪调节扳手', quantity: baTable.form.items?.accessories?.s_adjustment_wrench},
+        {name: '防雨布', quantity: baTable.form.items?.accessories?.s_rain_proof_cloth},
+        {name: 'RTK主机电池', quantity: baTable.form.items?.accessories?.r_battery},
+        {name: 'RTK充电器', quantity: baTable.form.items?.accessories?.r_charge_housekeeper},
+        {name: '手簿', quantity: baTable.form.items?.accessories?.r_hand_book},
+        {name: '手簿夹', quantity: baTable.form.items?.accessories?.r_hand_book_holder},
+        {name: '手簿笔', quantity: baTable.form.items?.accessories?.r_hand_book_pen},
+        {name: 'USB线', quantity: baTable.form.items?.accessories?.r_usb},
+        {name: '手电', quantity: baTable.form.items?.accessories?.r_flashlight},
+        {name: '光盘', quantity: baTable.form.items?.accessories?.r_cdrow},
+        {name: '长天线', quantity: baTable.form.items?.accessories?.r_long_antenna},
+        {name: '短天线', quantity: baTable.form.items?.accessories?.r_short_antenna},
+        {name: '测高片', quantity: baTable.form.items?.accessories?.r_height_measuring_plate},
+        {name: '连接头', quantity: baTable.form.items?.accessories?.r_connection_head},
+        {name: '说明书', quantity: baTable.form.items?.accessories?.r_instruction_manual},
+    ]);
+    return accessories.value.filter(item => item.quantity != 0);
+});
 const rules: Partial<Record<string, FormItemRule[]>> = reactive({
     username: [buildValidatorData({name: 'required', message: '请输入使用人'})],
     purpose: [buildValidatorData({name: 'required', message: '请选择申请类型'})],

+ 1 - 2
web/src/views/backend/borrow/common/assetSelection.vue

@@ -90,7 +90,6 @@ const querySearchAsync = (queryString: string, cb: (arg: any) => void) => {
 }
 const createFilter = (queryString: string) => {
     return (restaurant: any) => {
-        console.log(restaurant.value)
         return restaurant.value.toLowerCase().includes(queryString.toLowerCase())
     }
 }
@@ -109,7 +108,7 @@ onMounted(() => {
     loadAll().then((linksData) => {
         links.value = linksData
     })
-    console.log(links.value)
+    // console.log(links.value)
 })
 </script>
 

+ 0 - 1
web/src/views/backend/borrow/common/assetSelectionRecord.vue

@@ -102,7 +102,6 @@ const querySearchAsync = (queryString: string, cb: (arg: any) => void) => {
 }
 const createFilter = (queryString: string) => {
     return (restaurant: any) => {
-        console.log(restaurant.value)
         return restaurant.value.toLowerCase().includes(queryString.toLowerCase())
     }
 }

+ 0 - 1
web/src/views/backend/notification/index/popupForm.vue

@@ -167,7 +167,6 @@ import type {FormInstance, FormItemRule} from 'element-plus'
 import FormItem from '/@/components/formItem/index.vue'
 import {useConfig} from '/@/stores/config'
 import {getAssetGroup} from "/@/api/backend/borrow/borrowApplication";
-import any from "async-validator/dist-types/validator/any";
 
 const config = useConfig()
 const formRef = ref<FormInstance>()