| | |
| | | node_modules/ |
| | | /dist/ |
| | | dist-ssr/ |
| | | build/ |
| | | build/cool/eps.d.ts |
| | | build/cool/eps.json |
| | | |
| | | # Log files |
| | | npm-debug.log* |
| | |
| | | |
| | | æºæ å¿§æ åºæ ¡å-å端 |
| | | |
| | | |
| | | 使ç¨ç»ä»¶ https://lvzhao1995.github.io/vue-tianditu/ é vue-tianditu |
| | | |
| | | pnpm add vue-tianditu2 |
| | |
| | | user-select: none; |
| | | |
| | | img { |
| | | height: 24px; |
| | | width: 24px; |
| | | height: 40px; |
| | | width: 48px; |
| | | } |
| | | |
| | | span { |
| | |
| | | "身份è¯å·":"身份è¯å·", |
| | | "å§å":"å§å", |
| | | "ææºå·":"ææºå·", |
| | | "å¯ç ":"å¯ç ", |
| | | "æ§å«":"æ§å«", |
| | | "ç·":"ç·", |
| | | "女":"女", |
| | | "æªç¥":"æªç¥", |
| | | "çæ¥":"çæ¥", |
| | | "å
¥èæ¥æ":"å
¥èæ¥æ", |
| | | "ç¦»èæ¥æ":"ç¦»èæ¥æ", |
| | | "å·¥ä½ç«ç¹":"å·¥ä½ç«ç¹", |
| | | "èº«ä»½è¯æ£é¢ç
§":"èº«ä»½è¯æ£é¢ç
§", |
| | | "身份è¯åé¢ç
§":"身份è¯åé¢ç
§", |
| | |
| | | "身份è¯å·":"身份è¯å·", |
| | | "å§å":"å§å", |
| | | "ææºå·":"ææºå·", |
| | | "å¯ç ":"å¯ç ", |
| | | "æ§å«":"æ§å«", |
| | | "ç·":"ç·", |
| | | "女":"女", |
| | | "æªç¥":"æªç¥", |
| | | "çæ¥":"çæ¥", |
| | | "å
¥èæ¥æ":"å
¥èæ¥æ", |
| | | "ç¦»èæ¥æ":"ç¦»èæ¥æ", |
| | | "å·¥ä½ç«ç¹":"å·¥ä½ç«ç¹", |
| | | "èº«ä»½è¯æ£é¢ç
§":"èº«ä»½è¯æ£é¢ç
§", |
| | | "身份è¯åé¢ç
§":"身份è¯åé¢ç
§", |
| | |
| | | "身份è¯å·":"身份è¯å·", |
| | | "å§å":"å§å", |
| | | "ææºå·":"ææºå·", |
| | | "å¯ç ":"å¯ç ", |
| | | "æ§å«":"æ§å«", |
| | | "ç·":"ç·", |
| | | "女":"女", |
| | | "æªç¥":"æªç¥", |
| | | "çæ¥":"çæ¥", |
| | | "å
¥èæ¥æ":"å
¥èæ¥æ", |
| | | "ç¦»èæ¥æ":"ç¦»èæ¥æ", |
| | | "å·¥ä½ç«ç¹":"å·¥ä½ç«ç¹", |
| | | "èº«ä»½è¯æ£é¢ç
§":"èº«ä»½è¯æ£é¢ç
§", |
| | | "身份è¯åé¢ç
§":"身份è¯åé¢ç
§", |
| | |
| | | |
| | | // cl-upsert |
| | | const Upsert = useUpsert({ |
| | | items: [ |
| | | { |
| | | label: t("ç«ç¹ç¼ç "), |
| | | prop: "businessId", |
| | | component: { name: "el-input", props: { clearable: true } }, |
| | | span: 12, |
| | | required: true, |
| | | }, |
| | | { |
| | | label: t("åç§°"), |
| | | prop: "businessName", |
| | | component: { name: "el-input", props: { clearable: true } }, |
| | | span: 12, |
| | | required: true, |
| | | }, |
| | | { |
| | | label: t("éæ©é¨é¨"), |
| | | prop: "departmentId", |
| | | //component: { name: "el-input", props: { clearable: true } }, |
| | | component: { |
| | | name: 'cl-dept-select', |
| | | props: { |
| | | multiple: false, // åé / true å¤é |
| | | placeholder: "è¯·éæ©é¨é¨", |
| | | checkStrictly: true, // ç¶åèç¹ä¸èå¨ |
| | | immediate: true // ç«å³å è½½é¨é¨æ |
| | | } |
| | | }, |
| | | required: true, |
| | | }, |
| | | { |
| | | label: t("ç«ç¹ç±»å"), |
| | | prop: "siteType", |
| | | component: { |
| | | name: "cl-select", |
| | | props: { options: dict.get("sitetype") }, |
| | | }, |
| | | value: "æ¶éç¹", |
| | | span: 12, |
| | | required: true, |
| | | }, |
| | | { |
| | | label: t("å°å"), |
| | | prop: "address", |
| | | component: { name: "el-input", props: { clearable: true } }, |
| | | span: 12, |
| | | required: true, |
| | | }, |
| | | { |
| | | label: t("è´è´£äºº"), |
| | | prop: "leader", |
| | | component: { name: "el-input", props: { clearable: true } }, |
| | | span: 12, |
| | | required: true, |
| | | }, |
| | | { |
| | | label: t("ç»åº¦"), |
| | | prop: "longitude", |
| | | hook: "number", |
| | | component: { name: "el-input-number", props: { min: 0 } }, |
| | | span: 12, |
| | | required: true, |
| | | }, |
| | | { |
| | | label: t("纬度"), |
| | | prop: "latitude", |
| | | hook: "number", |
| | | component: { name: "el-input-number", props: { min: 0 } }, |
| | | span: 12, |
| | | required: true, |
| | | }, |
| | | { label: t("ç
§ç"), prop: "photo", component: { name: "cl-upload" } }, |
| | | { |
| | | label: t("æ¯å¦å¯ç¨"), |
| | | prop: "status", |
| | | component: { name: "el-radio-group", options: options.status }, |
| | | value: 1, |
| | | required: true, |
| | | }, |
| | | { |
| | | label: t("夿³¨"), |
| | | prop: "remark", |
| | | component: { |
| | | name: "el-input", |
| | | props: { type: "textarea", rows: 4 }, |
| | | }, |
| | | }, |
| | | ], |
| | | onOpen: (mode, data) => { |
| | | if (mode === 'update' && data?.departmentId) { |
| | | data.departmentId = Number(data.departmentId); |
| | | } |
| | | return data; |
| | | }, |
| | | |
| | | items: [ |
| | | { |
| | | label: t("ç«ç¹ç¼ç "), |
| | | prop: "businessId", |
| | | component: { name: "el-input", props: { clearable: true } }, |
| | | span: 12, |
| | | required: true, |
| | | }, |
| | | { |
| | | label: t("åç§°"), |
| | | prop: "businessName", |
| | | component: { name: "el-input", props: { clearable: true } }, |
| | | span: 12, |
| | | required: true, |
| | | }, |
| | | { |
| | | label: t("éæ©é¨é¨"), |
| | | prop: "departmentId", |
| | | component: { |
| | | name: 'cl-dept-select', |
| | | props: { |
| | | multiple: false, |
| | | placeholder: "è¯·éæ©é¨é¨", |
| | | checkStrictly: true, |
| | | immediate: true, |
| | | clearable: true, |
| | | defaultExpandAll: true, |
| | | }, |
| | | }, |
| | | value: undefined, |
| | | span: 12, |
| | | required: true, |
| | | }, |
| | | { |
| | | label: t("ç«ç¹ç±»å"), |
| | | prop: "siteType", |
| | | component: { |
| | | name: "cl-select", |
| | | props: { options: dict.get("sitetype") }, |
| | | }, |
| | | value: "æ¶éç¹", |
| | | span: 12, |
| | | required: true, |
| | | }, |
| | | { |
| | | label: t("å°å"), |
| | | prop: "address", |
| | | component: { name: "el-input", props: { clearable: true } }, |
| | | span: 12, |
| | | required: true, |
| | | }, |
| | | { |
| | | label: t("è´è´£äºº"), |
| | | prop: "leader", |
| | | component: { name: "el-input", props: { clearable: true } }, |
| | | span: 12, |
| | | required: true, |
| | | }, |
| | | { |
| | | label: t("ç»åº¦"), |
| | | prop: "longitude", |
| | | hook: "number", |
| | | component: { name: "el-input-number", props: { min: 0 } }, |
| | | span: 12, |
| | | required: true, |
| | | }, |
| | | { |
| | | label: t("纬度"), |
| | | prop: "latitude", |
| | | hook: "number", |
| | | component: { name: "el-input-number", props: { min: 0 } }, |
| | | span: 12, |
| | | required: true, |
| | | }, |
| | | { label: t("ç
§ç"), prop: "photo", component: { name: "cl-upload" } }, |
| | | { |
| | | label: t("æ¯å¦å¯ç¨"), |
| | | prop: "status", |
| | | component: { name: "el-radio-group", options: options.status }, |
| | | value: 1, |
| | | required: true, |
| | | }, |
| | | { |
| | | label: t("夿³¨"), |
| | | prop: "remark", |
| | | component: { |
| | | name: "el-input", |
| | | props: { type: "textarea", rows: 4 }, |
| | | }, |
| | | }, |
| | | ], |
| | | }); |
| | | |
| | | // cl-table |
| | |
| | | }); |
| | | |
| | | // cl-search |
| | | const Search = useSearch(); |
| | | const Search = useSearch({ |
| | | items: [ |
| | | { |
| | | label: t('å½å±åä½'), |
| | | prop: 'departmentId', |
| | | component: { |
| | | name: 'cl-dept-select', |
| | | props: { |
| | | placeholder: t('è¯·éæ©å½å±åä½'), |
| | | checkStrictly: true, // ç¶åä¸èå¨ |
| | | immediate: true, // æå½åç¨æ·æéå è½½ |
| | | clearable: true, |
| | | }, |
| | | }, |
| | | }, |
| | | { |
| | | label: t('ç«ç¹ç±»å'), |
| | | prop: 'siteType', |
| | | component: { |
| | | name: 'cl-select', |
| | | props: { |
| | | options: dict.get('sitetype'), |
| | | placeholder: t('è¯·éæ©ç«ç¹ç±»å'), |
| | | clearable: true, |
| | | }, |
| | | }, |
| | | }, |
| | | { |
| | | label: t('ç¶æ'), |
| | | prop: 'status', |
| | | component: { |
| | | name: 'cl-select', |
| | | props: { |
| | | options: options.status, |
| | | placeholder: t('è¯·éæ©ç¶æ'), |
| | | clearable: true, |
| | | }, |
| | | }, |
| | | }, |
| | | { |
| | | label: t('å
³é®å'), |
| | | prop: 'keyWord', |
| | | component: { |
| | | name: 'el-input', |
| | | props: { |
| | | placeholder: t('ç«ç¹ç¼ç / åç§° / å°å / è´è´£äºº'), |
| | | clearable: true, |
| | | }, |
| | | }, |
| | | }, |
| | | ], |
| | | }); |
| | | |
| | | // cl-crud |
| | | const Crud = useCrud( |
| | |
| | | const workSiteOptions = ref<{ label: string; value: any }[]>([]); |
| | | |
| | | // é项 |
| | | |
| | | const options = reactive({ |
| | | status: [ |
| | | { label: t("å¨è"), value: 0 }, |
| | | { label: t("离è"), value: 1 }, |
| | | { label: t("ç¦ç¨"), value: 2 }, |
| | | sex: [ |
| | | { label: t('æªç¥'), value: 'æªç¥' }, |
| | | { label: t('ç·'), value: 'ç·' }, |
| | | { label: t('女'), value: '女' } |
| | | ], |
| | | status: [ |
| | | { label: t('å¨è'), value: 0 }, |
| | | { label: t('离è'), value: 1 }, |
| | | { label: t('ç¦ç¨'), value: 2 } |
| | | ] |
| | | }); |
| | | |
| | | // cl-upsert |
| | |
| | | span: 12, |
| | | required: true, |
| | | }, |
| | | |
| | | { |
| | | label: t("ææºå·"), |
| | | label: t('ææºå·'), |
| | | prop: "phone", |
| | | component: { name: "el-input", props: { clearable: true } }, |
| | | span: 12, |
| | | required: true |
| | | }, |
| | | { |
| | | label: t('å¯ç '), |
| | | prop: "password", |
| | | component: { name: "el-input", props: { clearable: true } }, |
| | | span: 12, |
| | | required: true |
| | | |
| | | }, |
| | | { |
| | | label: t('æ§å«'), |
| | | prop: "sex", |
| | | component: { name: "el-radio-group", options: options.sex }, |
| | | value: 0, |
| | | required: true |
| | | }, |
| | | { |
| | | label: t('çæ¥'), |
| | | prop: "birthday", |
| | | component: { |
| | | name: "el-date-picker", |
| | | props: { type: "date", valueFormat: "YYYY-MM-DD" } |
| | | }, |
| | | span: 12 |
| | | }, |
| | | { |
| | | label: t("å
¥èæ¥æ"), |
| | | prop: "hireDate", |
| | | component: { |
| | | name: "el-date-picker", |
| | | props: { type: "date", valueFormat: "YYYY-MM-DD" }, |
| | | }, |
| | | span: 12, |
| | | }, |
| | | { |
| | | label: t("ç¦»èæ¥æ"), |
| | | prop: "leaveDate", |
| | | component: { |
| | | name: "el-date-picker", |
| | | props: { type: "date", valueFormat: "YYYY-MM-DD" }, |
| | |
| | | const Table = useTable({ |
| | | columns: [ |
| | | { type: "selection" }, |
| | | { label: t("æå±åä½"), prop: "departmentName", minWidth: 120 }, |
| | | { label: t("身份è¯å·"), prop: "businessId", minWidth: 140 }, |
| | | { label: t("å§å"), prop: "businessName", minWidth: 140 }, |
| | | { label: t("ææºå·"), prop: "phone", minWidth: 140 }, |
| | | { label: t("æ§å«"), prop: "sex", minWidth: 140 }, |
| | | { |
| | | label: t("å
¥èæ¥æ"), |
| | | prop: "hireDate", |
| | | minWidth: 140, |
| | | sortable: "custom", |
| | | component: { |
| | | name: "cl-date-text", |
| | | props: { format: "YYYY-MM-DD" }, |
| | | }, |
| | | }, |
| | | { |
| | | label: t("ç¦»èæ¥æ"), |
| | | prop: "leaveDate", |
| | | minWidth: 140, |
| | | sortable: "custom", |
| | | component: { |
| | |
| | | minWidth: 120, |
| | | dict: options.status, |
| | | }, |
| | | { label: t("æå±åä½"), prop: "departmentName", minWidth: 120 }, |
| | | { label: t("å·¥ä½ç«ç¹"), prop: "workSiteName", minWidth: 120 }, |
| | | { |
| | | label: t("èº«ä»½è¯æ£é¢ç
§"), |
| | |
| | | } |
| | | }; |
| | | |
| | | let playedOnce = false; |
| | | const init = () => { |
| | | if (player) { |
| | | destroy(); |
| | |
| | | id: props.containerId, |
| | | accessToken: props.accessToken, |
| | | url: props.url, |
| | | autoplay: false, |
| | | autoplay: true, |
| | | template: "pcLive", |
| | | height: 400, |
| | | height: 360, |
| | | scaleMode: 1, |
| | | staticPath: props.staticPath || "", |
| | | env: { |
| | |
| | | console.error("handleError", err); |
| | | } |
| | | }); |
| | | |
| | | player.on(EZUIKitPlayer.EVENTS.firstFrameDisplay, () => { |
| | | if (playedOnce) return; |
| | | playedOnce = true; |
| | | setTimeout(() => { |
| | | player?.pause(); |
| | | }, 1000); |
| | | }); |
| | | |
| | | // äºä»¶çå¬ |
| | | player.on(EZUIKitPlayer.EVENTS.videoInfo, (info: any) => { |
| | |
| | | <div class="ez-player-card"> |
| | | <!-- IDç±ç¶ç»ä»¶ä¼ å
¥ï¼ä¿è¯å
¨å±å¯ä¸ --> |
| | | <div :id="containerId" style="height: 400px;width:100%"></div> |
| | | <!-- |
| | | <div class="player-buttons" style="margin-top:8px;display:flex;gap:6px;flex-wrap:wrap"> |
| | | <button @click="init">init</button> |
| | | <button @click="stop">stop</button> |
| | |
| | | <button @click="capturePicture">æªå¾</button> |
| | | <button @click="fullscreen">å
¨å±</button> |
| | | </div> |
| | | --> |
| | | </div> |
| | | </template> |
| | | |
| | | <style scoped> |
| | | .ez-player-card { |
| | | border: 1px solid #e4e7ed; |
| | | border: 0px solid #e4e7ed; |
| | | border-radius: 6px; |
| | | padding: 8px; |
| | | padding: 0px; |
| | | background: #000; |
| | | } |
| | | </style> |
| New file |
| | |
| | | { |
| | | "设å¤å·":"设å¤å·", |
| | | "设å¤åç§°":"设å¤åç§°", |
| | | "ä¸ä¼ æ¶é´":"ä¸ä¼ æ¶é´", |
| | | "åå¾ç±»å":"åå¾ç±»å", |
| | | "åå¾åç§°":"åå¾åç§°", |
| | | "åå¾éé":"åå¾ééKG", |
| | | "å
¶ä»æ°æ®":"å
¶ä»æ°æ®", |
| | | "ç«ç¹ç¼å·":"ç«ç¹ç¼å·", |
| | | "ç«ç¹åç§°":"ç«ç¹åç§°", |
| | | "ç«ç¹ç±»å":"ç«ç¹ç±»å", |
| | | "ç§°é设å¤":"ç§°é设å¤", |
| | | "weight":"weight", |
| | | "health_gps":"health_gps", |
| | | "vehicle_gps":"vehicle_gps", |
| | | "driver_anomaly":"driver_anomaly", |
| | | "others":"others", |
| | | "æ¥å¿æ¶é´":"æ¥å¿æ¶é´", |
| | | "æ¨éç±»å":"æ¨éç±»å", |
| | | "客æ·ç«¯ID":"客æ·ç«¯ID", |
| | | "åå§è¯·æ±å
容":"åå§è¯·æ±å
容", |
| | | "é误è¿åä¿¡æ¯":"é误è¿åä¿¡æ¯", |
| | | "å建æ¶é´":"å建æ¶é´", |
| | | "æ´æ°æ¶é´":"æ´æ°æ¶é´", |
| | | "设å¤åºåå·":"设å¤åºåå·", |
| | | "æ¶æ¯åºåå·":"æ¶æ¯åºåå·", |
| | | "æ¶æ¯å建æ¶é´":"æ¶æ¯å建æ¶é´", |
| | | "GPSå®ä½æ¶é´":"GPSå®ä½æ¶é´", |
| | | "é度":"é度", |
| | | "æ¹åè§":"æ¹åè§", |
| | | "æµ·æé«åº¦":"æµ·æé«åº¦", |
| | | "å®ä½ç²¾åº¦":"å®ä½ç²¾åº¦", |
| | | "ææå®ä½":"ææå®ä½", |
| | | "æ æå®ä½":"æ æå®ä½", |
| | | "设å¤ID":"设å¤ID", |
| | | "ééå·":"ééå·", |
| | | "æ¶æ¯å¯ä¸ID":"æ¶æ¯å¯ä¸ID", |
| | | "æ¶æ¯æ¶é´":"æ¶æ¯æ¶é´", |
| | | "æ¶æ¯ç±»å":"æ¶æ¯ç±»å", |
| | | "设å¤ç±»å":"设å¤ç±»å", |
| | | "ååºåå·":"ååºåå·", |
| | | "æºç«¯ID":"æºç«¯ID", |
| | | "NATçIP":"NATçIP", |
| | | "äºä»¶åçæ¶é´":"äºä»¶åçæ¶é´", |
| | | "æ³¨åæ¶é´":"æ³¨åæ¶é´", |
| | | "éé":"éé", |
| | | "åä»·(å
/Kg)":"åä»·(å
/Kg)", |
| | | "æ»ä»·(å
)":"æ»ä»·(å
)", |
| | | "ç»æäººID":"ç»æäººID", |
| | | "ç»æäºº":"ç»æäºº", |
| | | "æ¶è´æ¹":"æ¶è´æ¹", |
| | | "æ¶éç¹":"æ¶éç¹", |
| | | "æ¥ææ¶é´":"æ¥ææ¶é´", |
| | | "æ»ä»·":"æ»ä»·", |
| | | "äº¤ææ¶é´":"äº¤ææ¶é´", |
| | | "交æç±»å":"交æç±»å", |
| | | "交æå¯¹æ¹":"交æå¯¹æ¹", |
| | | "åååç§°":"åååç§°", |
| | | "æ¶æ¯ç±»å":"æ¶æ¯ç±»å", |
| | | "éé¢":"éé¢", |
| | | "æ¯ä»æ¹å¼":"æ¯ä»æ¹å¼", |
| | | "å½åç¶æ":"å½åç¶æ", |
| | | "夿³¨":"夿³¨", |
| | | "æä»¶è·¯å¾":"æä»¶è·¯å¾", |
| | | "æä»¶å":"æä»¶å", |
| | | "交æåå·":"交æåå·", |
| | | "åæ·åå·":"åæ·åå·", |
| | | "æ¶å
¥":"æ¶å
¥", |
| | | "æ¯åº":"æ¯åº", |
| | | "å
¶ä»":"å
¶ä»" |
| | | } |
| New file |
| | |
| | | { |
| | | "设å¤å·":"设å¤å·", |
| | | "设å¤åç§°":"设å¤åç§°", |
| | | "ä¸ä¼ æ¶é´":"ä¸ä¼ æ¶é´", |
| | | "åå¾ç±»å":"åå¾ç±»å", |
| | | "åå¾åç§°":"åå¾åç§°", |
| | | "åå¾éé":"åå¾ééKG", |
| | | "å
¶ä»æ°æ®":"å
¶ä»æ°æ®", |
| | | "ç«ç¹ç¼å·":"ç«ç¹ç¼å·", |
| | | "ç«ç¹åç§°":"ç«ç¹åç§°", |
| | | "ç«ç¹ç±»å":"ç«ç¹ç±»å", |
| | | "ç§°é设å¤":"ç§°é设å¤", |
| | | "weight":"weight", |
| | | "health_gps":"health_gps", |
| | | "vehicle_gps":"vehicle_gps", |
| | | "driver_anomaly":"driver_anomaly", |
| | | "others":"others", |
| | | "æ¥å¿æ¶é´":"æ¥å¿æ¶é´", |
| | | "æ¨éç±»å":"æ¨éç±»å", |
| | | "客æ·ç«¯ID":"客æ·ç«¯ID", |
| | | "åå§è¯·æ±å
容":"åå§è¯·æ±å
容", |
| | | "é误è¿åä¿¡æ¯":"é误è¿åä¿¡æ¯", |
| | | "å建æ¶é´":"å建æ¶é´", |
| | | "æ´æ°æ¶é´":"æ´æ°æ¶é´", |
| | | "设å¤åºåå·":"设å¤åºåå·", |
| | | "æ¶æ¯åºåå·":"æ¶æ¯åºåå·", |
| | | "æ¶æ¯å建æ¶é´":"æ¶æ¯å建æ¶é´", |
| | | "GPSå®ä½æ¶é´":"GPSå®ä½æ¶é´", |
| | | "é度":"é度", |
| | | "æ¹åè§":"æ¹åè§", |
| | | "æµ·æé«åº¦":"æµ·æé«åº¦", |
| | | "å®ä½ç²¾åº¦":"å®ä½ç²¾åº¦", |
| | | "ææå®ä½":"ææå®ä½", |
| | | "æ æå®ä½":"æ æå®ä½", |
| | | "设å¤ID":"设å¤ID", |
| | | "ééå·":"ééå·", |
| | | "æ¶æ¯å¯ä¸ID":"æ¶æ¯å¯ä¸ID", |
| | | "æ¶æ¯æ¶é´":"æ¶æ¯æ¶é´", |
| | | "æ¶æ¯ç±»å":"æ¶æ¯ç±»å", |
| | | "设å¤ç±»å":"设å¤ç±»å", |
| | | "ååºåå·":"ååºåå·", |
| | | "æºç«¯ID":"æºç«¯ID", |
| | | "NATçIP":"NATçIP", |
| | | "äºä»¶åçæ¶é´":"äºä»¶åçæ¶é´", |
| | | "æ³¨åæ¶é´":"æ³¨åæ¶é´", |
| | | "éé":"éé", |
| | | "åä»·(å
/Kg)":"åä»·(å
/Kg)", |
| | | "æ»ä»·(å
)":"æ»ä»·(å
)", |
| | | "ç»æäººID":"ç»æäººID", |
| | | "ç»æäºº":"ç»æäºº", |
| | | "æ¶è´æ¹":"æ¶è´æ¹", |
| | | "æ¶éç¹":"æ¶éç¹", |
| | | "æ¥ææ¶é´":"æ¥ææ¶é´", |
| | | "æ»ä»·":"æ»ä»·", |
| | | "äº¤ææ¶é´":"äº¤ææ¶é´", |
| | | "交æç±»å":"交æç±»å", |
| | | "交æå¯¹æ¹":"交æå¯¹æ¹", |
| | | "åååç§°":"åååç§°", |
| | | "æ¶æ¯ç±»å":"æ¶æ¯ç±»å", |
| | | "éé¢":"éé¢", |
| | | "æ¯ä»æ¹å¼":"æ¯ä»æ¹å¼", |
| | | "å½åç¶æ":"å½åç¶æ", |
| | | "夿³¨":"夿³¨", |
| | | "æä»¶è·¯å¾":"æä»¶è·¯å¾", |
| | | "æä»¶å":"æä»¶å", |
| | | "交æåå·":"交æåå·", |
| | | "åæ·åå·":"åæ·åå·", |
| | | "æ¶å
¥":"æ¶å
¥", |
| | | "æ¯åº":"æ¯åº", |
| | | "å
¶ä»":"å
¶ä»" |
| | | } |
| New file |
| | |
| | | { |
| | | "设å¤å·":"设å¤å·", |
| | | "设å¤åç§°":"设å¤åç§°", |
| | | "ä¸ä¼ æ¶é´":"ä¸ä¼ æ¶é´", |
| | | "åå¾ç±»å":"åå¾ç±»å", |
| | | "åå¾åç§°":"åå¾åç§°", |
| | | "åå¾éé":"åå¾ééKG", |
| | | "å
¶ä»æ°æ®":"å
¶ä»æ°æ®", |
| | | "ç«ç¹ç¼å·":"ç«ç¹ç¼å·", |
| | | "ç«ç¹åç§°":"ç«ç¹åç§°", |
| | | "ç«ç¹ç±»å":"ç«ç¹ç±»å", |
| | | "ç§°é设å¤":"ç§°é设å¤", |
| | | "weight":"weight", |
| | | "health_gps":"health_gps", |
| | | "vehicle_gps":"vehicle_gps", |
| | | "driver_anomaly":"driver_anomaly", |
| | | "others":"others", |
| | | "æ¥å¿æ¶é´":"æ¥å¿æ¶é´", |
| | | "æ¨éç±»å":"æ¨éç±»å", |
| | | "客æ·ç«¯ID":"客æ·ç«¯ID", |
| | | "åå§è¯·æ±å
容":"åå§è¯·æ±å
容", |
| | | "é误è¿åä¿¡æ¯":"é误è¿åä¿¡æ¯", |
| | | "å建æ¶é´":"å建æ¶é´", |
| | | "æ´æ°æ¶é´":"æ´æ°æ¶é´", |
| | | "设å¤åºåå·":"设å¤åºåå·", |
| | | "æ¶æ¯åºåå·":"æ¶æ¯åºåå·", |
| | | "æ¶æ¯å建æ¶é´":"æ¶æ¯å建æ¶é´", |
| | | "GPSå®ä½æ¶é´":"GPSå®ä½æ¶é´", |
| | | "é度":"é度", |
| | | "æ¹åè§":"æ¹åè§", |
| | | "æµ·æé«åº¦":"æµ·æé«åº¦", |
| | | "å®ä½ç²¾åº¦":"å®ä½ç²¾åº¦", |
| | | "ææå®ä½":"ææå®ä½", |
| | | "æ æå®ä½":"æ æå®ä½", |
| | | "设å¤ID":"设å¤ID", |
| | | "ééå·":"ééå·", |
| | | "æ¶æ¯å¯ä¸ID":"æ¶æ¯å¯ä¸ID", |
| | | "æ¶æ¯æ¶é´":"æ¶æ¯æ¶é´", |
| | | "æ¶æ¯ç±»å":"æ¶æ¯ç±»å", |
| | | "设å¤ç±»å":"设å¤ç±»å", |
| | | "ååºåå·":"ååºåå·", |
| | | "æºç«¯ID":"æºç«¯ID", |
| | | "NATçIP":"NATçIP", |
| | | "äºä»¶åçæ¶é´":"äºä»¶åçæ¶é´", |
| | | "æ³¨åæ¶é´":"æ³¨åæ¶é´", |
| | | "éé":"éé", |
| | | "åä»·(å
/Kg)":"åä»·(å
/Kg)", |
| | | "æ»ä»·(å
)":"æ»ä»·(å
)", |
| | | "ç»æäººID":"ç»æäººID", |
| | | "ç»æäºº":"ç»æäºº", |
| | | "æ¶è´æ¹":"æ¶è´æ¹", |
| | | "æ¶éç¹":"æ¶éç¹", |
| | | "æ¥ææ¶é´":"æ¥ææ¶é´", |
| | | "æ»ä»·":"æ»ä»·", |
| | | "äº¤ææ¶é´":"äº¤ææ¶é´", |
| | | "交æç±»å":"交æç±»å", |
| | | "交æå¯¹æ¹":"交æå¯¹æ¹", |
| | | "åååç§°":"åååç§°", |
| | | "æ¶æ¯ç±»å":"æ¶æ¯ç±»å", |
| | | "éé¢":"éé¢", |
| | | "æ¯ä»æ¹å¼":"æ¯ä»æ¹å¼", |
| | | "å½åç¶æ":"å½åç¶æ", |
| | | "夿³¨":"夿³¨", |
| | | "æä»¶è·¯å¾":"æä»¶è·¯å¾", |
| | | "æä»¶å":"æä»¶å", |
| | | "交æåå·":"交æåå·", |
| | | "åæ·åå·":"åæ·åå·", |
| | | "æ¶å
¥":"æ¶å
¥", |
| | | "æ¯åº":"æ¯åº", |
| | | "å
¶ä»":"å
¶ä»" |
| | | } |
| New file |
| | |
| | | <!--App.vue--> |
| | | <template> |
| | | <div :class="state.copyright ? '' : 'hide-copyright'" class="mapDiv"> |
| | | <tdt-map :center="state.center" :controls="state.controls" :zoom="state.zoom" :loadConfig="loadConfig"> |
| | | <tdt-control :visible="state.visible" position="topright"> |
| | | </tdt-control> |
| | | </tdt-map> |
| | | </div> |
| | | </template> |
| | | |
| | | <script lang="ts" setup> |
| | | import { reactive } from "vue"; |
| | | import { TdtMap, type LngLat } from "vue-tianditu2"; |
| | | |
| | | const loadConfig = { v: "4.0", tk: "51915011aa0997aa2ddd7e38504fa8bc" }; |
| | | const state = reactive({ |
| | | center: [121.280637, 32.125178] as LngLat, |
| | | zoom: 12, |
| | | visible: true, |
| | | copyright: false, |
| | | controls: [ |
| | | "Zoom", |
| | | "Scale", |
| | | { |
| | | name: "MapType", |
| | | position: "topright", |
| | | mapTypes: [ |
| | | { |
| | | title: "å°å¾", //å°å¾æ§ä»¶ä¸æè¦æ¾ç¤ºçå¾å±åç§° |
| | | icon: "https://api.tianditu.gov.cn/v4.0/image/map/maptype/vector.png", //å°å¾æ§ä»¶ä¸æè¦æ¾ç¤ºçå¾å±å¾æ ï¼é»è®¤å¾æ å¤§å° 80x80ï¼ |
| | | layer: "TMAP_NORMAL_MAP" //å°å¾ç±»åï¼å¨å天å°å¾apiä¸ä»¥window.TMAP_NORMAL_MAPè¡¨ç¤ºï¼æ¤å¤ä¸ºå符串 |
| | | }, |
| | | { |
| | | title: "嫿", |
| | | icon: " https://api.tianditu.gov.cn/v4.0/image/map/maptype/satellite.png", |
| | | layer: "TMAP_SATELLITE_MAP" |
| | | }, |
| | | { |
| | | title: "å«ææ··å", |
| | | icon: "https://api.tianditu.gov.cn/v4.0/image/map/maptype/satellitepoi.png", |
| | | layer: "TMAP_HYBRID_MAP" |
| | | } |
| | | // { |
| | | // title: "å°å½¢", |
| | | // icon: "https://api.tianditu.gov.cn/v4.0/image/map/maptype/terrain.png", |
| | | // layer: "TMAP_TERRAIN_MAP" |
| | | // }, |
| | | // { |
| | | // title: "å°å½¢æ··å", |
| | | // icon: "https://api.tianditu.gov.cn/v4.0/image/map/maptype/terrainpoi.png", |
| | | // layer: "TMAP_TERRAIN_HYBRID_MAP" |
| | | // } |
| | | ] |
| | | }, |
| | | { |
| | | name: "OverviewMap", |
| | | isOpen: true, |
| | | anchor: "bottomright" |
| | | }, |
| | | { |
| | | name: "Copyright", |
| | | id: "custom", |
| | | content: `<div style="height:40px"><button class="demo-button">èªå®ä¹ççææ§ä»¶</button></div>`, |
| | | position: "bottomleft", |
| | | bounds: [ |
| | | [113.52791, 23.21989], |
| | | [113.03352, 23.03045] |
| | | ] |
| | | } |
| | | ] |
| | | }); |
| | | </script> |
| | | |
| | | <style> |
| | | .mapDiv { |
| | | width: 100%; |
| | | height: 100%; |
| | | padding: 0%; |
| | | } |
| | | |
| | | .hide-copyright :deep(.tdt-control-copyright.tdt-control > div:not(.tdt-control-copyright)) { |
| | | display: none; |
| | | } |
| | | </style> |
| | |
| | | selectId.value = item.a_id; |
| | | const numReg = /^\d+$/; |
| | | const isSite = !numReg.test(item.a_id); |
| | | if (!isSite) { |
| | | ElMessage.info(t('è¯·éæ©ç«ç¹èç¹æ¥ççæ§')); |
| | | emit('select', null); |
| | | return; |
| | | } |
| | | emit('select', item.a_id); |
| | | } |
| | | |
| New file |
| | |
| | | <template> |
| | | <cl-crud ref="Crud"> |
| | | <cl-row> |
| | | <!-- å·æ°æé® --> |
| | | <cl-refresh-btn /> |
| | | <!-- æ°å¢æé® --> |
| | | <cl-add-btn /> |
| | | <!-- å é¤æé® --> |
| | | <cl-multi-delete-btn /> |
| | | <cl-flex1 /> |
| | | <!-- æ¡ä»¶æç´¢ --> |
| | | <cl-search ref="Search" /> |
| | | </cl-row> |
| | | |
| | | <cl-row> |
| | | <!-- æ°æ®è¡¨æ ¼ --> |
| | | <cl-table ref="Table" /> |
| | | </cl-row> |
| | | |
| | | <cl-row> |
| | | <cl-flex1 /> |
| | | <!-- å页æ§ä»¶ --> |
| | | <cl-pagination /> |
| | | </cl-row> |
| | | |
| | | <!-- æ°å¢ãç¼è¾ --> |
| | | <cl-upsert ref="Upsert" /> |
| | | </cl-crud> |
| | | </template> |
| | | |
| | | <script lang="ts" setup> |
| | | defineOptions({ |
| | | name: "monitor-capturetask" |
| | | }); |
| | | |
| | | import { useCrud, useTable, useUpsert, useSearch } from "@cool-vue/crud"; |
| | | import { useCool } from "/@/cool"; |
| | | import { useI18n } from "vue-i18n"; |
| | | import { reactive } from "vue"; |
| | | |
| | | const { service } = useCool(); |
| | | const { t } = useI18n(); |
| | | |
| | | // é项 |
| | | const options = reactive({ |
| | | status: [ |
| | | { label: t('PENDING'), value: 0 }, |
| | | { label: t('SUCCESS'), value: 1 }, |
| | | { label: t('FAILED'), value: 2 } |
| | | ] |
| | | }); |
| | | |
| | | // cl-upsert |
| | | const Upsert = useUpsert({ |
| | | items: [ |
| | | { |
| | | label: t('设å¤åºåå·'), |
| | | prop: "deviceSerial", |
| | | component: { name: "el-input", props: { clearable: true } }, |
| | | span: 12, |
| | | required: true |
| | | }, |
| | | { |
| | | label: t('ééå·'), |
| | | prop: "channelNo", |
| | | hook: "number", |
| | | component: { name: "el-input-number", props: { min: 0 } }, |
| | | span: 12, |
| | | required: true |
| | | }, |
| | | { |
| | | label: t('éæ©æå¾ä»»å¡'), |
| | | prop: "captureTaskId", |
| | | component: { name: "el-input", props: { clearable: true } }, |
| | | span: 12 |
| | | }, |
| | | { |
| | | label: t('éæ©äºç©ºé´'), |
| | | prop: "spaceId", |
| | | component: { name: "el-input", props: { clearable: true } }, |
| | | span: 12 |
| | | }, |
| | | { |
| | | label: t('äºç©ºé´å¾ç龿¥'), |
| | | prop: "cloudUrl", |
| | | component: { name: "cl-upload" } |
| | | }, |
| | | { label: t('æ¬å°å¾ç龿¥'), prop: "localUrl", component: { name: "cl-upload" } }, |
| | | { |
| | | label: t('æ¬å°åå¨è·¯å¾'), |
| | | prop: "localPath", |
| | | component: { name: "el-input", props: { clearable: true } }, |
| | | span: 12 |
| | | }, |
| | | { |
| | | label: t('ææç¶æ'), |
| | | prop: "status", |
| | | component: { name: "el-radio-group", options: options.status }, |
| | | value: 0, |
| | | required: true |
| | | }, |
| | | { |
| | | label: t('任塿§è¡æ¥æ'), |
| | | prop: "captureDate", |
| | | component: { |
| | | name: "el-date-picker", |
| | | props: { type: "date", valueFormat: "YYYY-MM-DD" } |
| | | }, |
| | | span: 12 |
| | | } |
| | | ] |
| | | }); |
| | | |
| | | // cl-table |
| | | const Table = useTable({ |
| | | columns: [ |
| | | { type: "selection" }, |
| | | { label: t('设å¤åºåå·'), prop: "deviceSerial", minWidth: 140 }, |
| | | { label: t('ééå·'), prop: "channelNo", minWidth: 140, sortable: "custom" }, |
| | | { label: t('æå¾ä»»å¡ID'), prop: "captureTaskId", minWidth: 140 }, |
| | | { label: t('äºç©ºé´ID'), prop: "spaceId", minWidth: 140 }, |
| | | { |
| | | label: t('äºç©ºé´å¾ç龿¥'), |
| | | prop: "cloudUrl", |
| | | minWidth: 100, |
| | | component: { name: "cl-image", props: { size: 60 } } |
| | | }, |
| | | { |
| | | label: t('æ¬å°å¾ç龿¥'), |
| | | prop: "localUrl", |
| | | minWidth: 100, |
| | | component: { name: "cl-image", props: { size: 60 } } |
| | | }, |
| | | { label: t('æ¬å°åå¨è·¯å¾'), prop: "localPath", minWidth: 140 }, |
| | | { |
| | | label: t('ææç¶æ'), |
| | | prop: "status", |
| | | minWidth: 120, |
| | | dict: options.status |
| | | }, |
| | | { |
| | | label: t('任塿§è¡æ¥æ'), |
| | | prop: "captureDate", |
| | | minWidth: 140, |
| | | sortable: "custom", |
| | | component: { name: "cl-date-text", props: { format: "YYYY-MM-DD" } } |
| | | }, |
| | | { |
| | | label: t('å建æ¶é´'), |
| | | prop: "createTime", |
| | | minWidth: 170, |
| | | sortable: "desc", |
| | | component: { name: "cl-date-text" } |
| | | }, |
| | | { |
| | | label: t('æ´æ°æ¶é´'), |
| | | prop: "updateTime", |
| | | minWidth: 170, |
| | | sortable: "custom", |
| | | component: { name: "cl-date-text" } |
| | | }, |
| | | { type: "op", buttons: ["edit", "delete"] } |
| | | ] |
| | | }); |
| | | |
| | | // cl-search |
| | | const Search = useSearch(); |
| | | |
| | | // cl-crud |
| | | const Crud = useCrud( |
| | | { |
| | | service: service.monitor.capturetask |
| | | }, |
| | | (app) => { |
| | | app.refresh(); |
| | | } |
| | | ); |
| | | |
| | | // å·æ° |
| | | function refresh(params?: any) { |
| | | Crud.value?.refresh(params); |
| | | } |
| | | </script> |
| | |
| | | <template> |
| | | <div class="monitor-page" style="height:100%;display:flex;gap:12px;"> |
| | | <!-- 左侧æ å½¢ --> |
| | | <div class="left-tree" style="width:280px;border:1px solid var(--el-border-color);border-radius:6px;"> |
| | | <site-tree @select="handleTreeSelect" /> |
| | | </div> |
| | | <div class="monitor-page"> |
| | | <!-- 左侧æ å½¢ --> |
| | | <div class="left-tree"> |
| | | <site-tree @select="handleTreeSelect" /> |
| | | </div> |
| | | |
| | | <!-- å³ä¾§çæ§åºå --> |
| | | <div class="right-player" style="flex:1;border:1px solid var(--el-border-color);border-radius:6px;padding:12px;overflow:auto;"> |
| | | <el-empty v-if="deviceList.length === 0" description="è¯·å·¦ä¾§éæ©ç«ç¹å è½½çæ§è®¾å¤" /> |
| | | <div class="player-grid" v-if="deviceList.length"> |
| | | <div v-for="dev in deviceList" :key="dev.id" class="player-card"> |
| | | <div class="title">{{ dev.iotName }}</div> |
| | | <EzuikitPlayer |
| | | v-if="ysToken" |
| | | :key="'p_' + dev.id + '_' + ysToken" |
| | | :container-id="'player_' + dev.id" |
| | | :access-token="ysToken" |
| | | :url="`ezopen://open.ys7.com/${dev.iotCode}/1.hd.live`" |
| | | /> |
| | | </div> |
| | | </div> |
| | | </div> |
| | | </div> |
| | | <!-- å³ä¾§çæ§åºå --> |
| | | <div class="right-player"> |
| | | <el-empty v-if="deviceList.length === 0" description="è¯·å·¦ä¾§éæ©ç«ç¹å è½½çæ§è®¾å¤" /> |
| | | <div v-else class="player-grid" :style="gridStyle"> |
| | | <div v-for="dev in deviceList" :key="dev.id" class="player-card"> |
| | | <!-- <div class="title">{{ dev.iotName }}</div> --> |
| | | <ezuikit-player v-if="ysToken" :key="'p_' + dev.id + '_' + ysToken" :container-id="'player_' + dev.id" |
| | | :access-token="ysToken" :url="`ezopen://open.ys7.com/${dev.iotCode}/1.hd.live`" |
| | | :pause-at-first-frame="true" /> |
| | | </div> |
| | | </div> |
| | | </div> |
| | | </div> |
| | | </template> |
| | | |
| | | <script lang="ts" setup> |
| | |
| | | name: 'monitor-device', |
| | | }); |
| | | |
| | | import { ref, onMounted } from 'vue'; |
| | | import { ref, computed, onMounted } from 'vue'; |
| | | import { useCool } from '/@/cool'; |
| | | import SiteTree from '../components/site-tree.vue'; |
| | | import EzuikitPlayer from '../../ezuikit/components/ezuikit-player.vue'; |
| | |
| | | const { service } = useCool(); |
| | | |
| | | const deviceList = ref<any[]>([]); |
| | | const ysToken = ref<string>(''); |
| | | const ysToken = ref(''); |
| | | |
| | | // â
æ ¹æ®è®¾å¤æ°éèªå¨è®¡ç®ç½æ ¼åæ° |
| | | const gridCols = computed(() => { |
| | | const n = deviceList.value.length; |
| | | if (n <= 1) return 1; |
| | | if (n <= 4) return 2; // 2~4 个 â 2 å |
| | | if (n <= 6) return 3; // 5~6 个 â 3 å |
| | | if (n <= 8) return 4; // 7~8 个 â 4 å |
| | | return 4; |
| | | }); |
| | | |
| | | const gridStyle = computed(() => ({ |
| | | gridTemplateColumns: `repeat(${gridCols.value}, 1fr)`, |
| | | })); |
| | | |
| | | /** æ¿è¤ç³ token */ |
| | | async function fetchYsToken() { |
| | | if (ysToken.value) return; // å·²æå°±ä¸åé夿¿ |
| | | try { |
| | | const res = await service.monitor.ys7.getToken(); |
| | | ysToken.value = res.accessToken; |
| | | } catch (e) { |
| | | console.error('è¤ç³ Token è·å失败', e); |
| | | const res = await service.base.sys.param.stringbykey({ key: 'ys7.accessToken' }); |
| | | ysToken.value = res as string; // â
ä¿®æ£ï¼èµå¼ç» .value |
| | | } catch (e: any) { |
| | | console.error('è¤ç³ Token è·å失败', e?.response?.data?.message || e.message); |
| | | } |
| | | } |
| | | |
| | | onMounted(() => { |
| | | fetchYsToken(); |
| | | }); |
| | | onMounted(fetchYsToken); // â
ä¿®æ£ï¼onMounted |
| | | |
| | | /** æ èç¹ç¹å» */ |
| | | async function handleTreeSelect(businessId: string | number | null) { |
| | |
| | | |
| | | try { |
| | | const res = await service.basicdata.iot.getYsDevices({ businessId }); |
| | | deviceList.value = res || []; |
| | | } catch (err) { |
| | | console.error('è·åè¤ç³è®¾å¤å表失败', err); |
| | | deviceList.value = (res || []) as any[]; |
| | | } catch { |
| | | deviceList.value = []; |
| | | } |
| | | } |
| | |
| | | |
| | | <style lang="scss" scoped> |
| | | .monitor-page { |
| | | height: 100%; |
| | | height: 100%; |
| | | display: flex; |
| | | gap: 12px; |
| | | } |
| | | |
| | | .left-tree { |
| | | height: 100%; |
| | | width: 280px; |
| | | height: 100%; |
| | | border: 1px solid var(--el-border-color); |
| | | border-radius: 6px; |
| | | } |
| | | |
| | | .right-player { |
| | | height: 100%; |
| | | flex: 1; |
| | | height: 100%; |
| | | border: 1px solid var(--el-border-color); |
| | | border-radius: 6px; |
| | | padding: 12px; |
| | | overflow: auto; |
| | | } |
| | | |
| | | .player-grid { |
| | | display: grid; |
| | | grid-template-columns: repeat(auto-fill, minmax(440px, 1fr)); |
| | | gap: 16px; |
| | | display: grid; |
| | | gap: 16px; |
| | | } |
| | | |
| | | .player-card { |
| | | .title { |
| | | padding: 6px 0; |
| | | font-weight: 500; |
| | | } |
| | | .title { |
| | | padding: 6px 0; |
| | | font-weight: 500; |
| | | } |
| | | } |
| | | </style> |
| New file |
| | |
| | | <template> |
| | | <cl-select-table v-model="value" :title="t('éæ©è®¢å详æ
')" :service="service.shop.recycleitem" :columns="columns" |
| | | :multiple="multiple" :dict='{ "text": "itemname" }' pickerType="text" /> |
| | | </template> |
| | | |
| | | <script setup lang="ts"> |
| | | defineOptions({ |
| | | name: "recycle-item-select" |
| | | }); |
| | | |
| | | import { useCool } from "/@/cool"; |
| | | import { useI18n } from "vue-i18n"; |
| | | import { CrudProps } from "/#/crud"; |
| | | import { ref, useModel } from "vue"; |
| | | |
| | | const props = defineProps({ |
| | | ...CrudProps, |
| | | modelValue: null, |
| | | multiple: Boolean |
| | | }); |
| | | |
| | | const { service } = useCool(); |
| | | const { t } = useI18n(); |
| | | |
| | | const value = useModel(props, "modelValue"); |
| | | |
| | | const columns = ref([ |
| | | { label: t("订åç¼å·"), prop: "orderNo", minWidth: 140 }, |
| | | { label: t("项ç®åç§°"), prop: "itemName", minWidth: 140 }, |
| | | { label: t("åç±»ID"), prop: "categoryId", minWidth: 120 }, |
| | | { label: t("éé"), prop: "weight", minWidth: 140, sortable: "custom" }, |
| | | { label: t("åä»·"), prop: "unitPrice", minWidth: 140, sortable: "custom" }, |
| | | { label: t("éé¢"), prop: "amount", minWidth: 140, sortable: "custom" }, |
| | | { label: t("碳积å"), prop: "carbonPoint", minWidth: 140, sortable: "custom" } |
| | | ]); |
| | | </script> |
| New file |
| | |
| | | <template> |
| | | <cl-form ref="Form"> |
| | | <template #slot-order-detail> |
| | | <cl-crud padding="0"> |
| | | <cl-row> |
| | | <el-button type="success" @click="add">æ·»å åæ¶ç©</el-button> |
| | | <el-button :disabled="Table?.selection.length === 0" type="danger" @click="remove()"> |
| | | å é¤ |
| | | </el-button> |
| | | </cl-row> |
| | | |
| | | <cl-row> |
| | | <cl-table ref="Table" :data="data" :auto-height="false"> |
| | | <!-- åæ¶ç©éæ© --> |
| | | <template #column-itemName="{ scope }"> |
| | | <el-form-item :prop="`items.${scope.$index}.itemId`" |
| | | :rules="{ required: true, message: 'è¯·éæ©åæ¶ç©' }"> |
| | | <el-select v-model="scope.row.itemId" filterable placeholder="è¯·éæ©åæ¶ç©" |
| | | style="width: 100%" @change="onItemChange(scope.row)"> |
| | | <el-option v-for="item in itemOptions" :key="item.itemId" :label="item.itemName" |
| | | :value="item.itemId" /> |
| | | </el-select> |
| | | </el-form-item> |
| | | </template> |
| | | |
| | | <!-- éé --> |
| | | <template #column-weight="{ scope }"> |
| | | <el-form-item :prop="`items.${scope.$index}.weight`" |
| | | :rules="{ required: true, message: 'ééä¸è½ä¸ºç©º' }"> |
| | | <el-input-number v-model="scope.row.weight" :min="0" :max="100000" :precision="2" |
| | | :controls="false" placeholder="éé/ä»¶æ°" @change="calcRow(scope.row)" /> |
| | | </el-form-item> |
| | | </template> |
| | | |
| | | <!-- åä»·ï¼åªè¯»ï¼ --> |
| | | <template #column-unitPrice="{ scope }"> |
| | | <el-form-item> |
| | | <el-input-number v-model="scope.row.unitPrice" :controls="false" :precision="2" |
| | | disabled /> |
| | | </el-form-item> |
| | | </template> |
| | | |
| | | <!-- éé¢ï¼åªè¯»ï¼ --> |
| | | <template #column-amount="{ scope }"> |
| | | <el-form-item> |
| | | <el-input-number v-model="scope.row.amount" :controls="false" :precision="2" disabled /> |
| | | </el-form-item> |
| | | </template> |
| | | |
| | | <!-- 碳积åï¼åªè¯»ï¼ --> |
| | | <template #column-carbonPoint="{ scope }"> |
| | | <el-form-item> |
| | | <el-input-number v-model="scope.row.carbonPoint" :controls="false" :precision="2" |
| | | disabled /> |
| | | </el-form-item> |
| | | </template> |
| | | |
| | | <!-- 碳积åï¼åªè¯»ï¼ --> |
| | | <template #column-category="{ scope }"> |
| | | <el-form-item> |
| | | <el-input v-model="scope.row.category" :controls="false" disabled /> |
| | | </el-form-item> |
| | | </template> |
| | | |
| | | <template #slot-btn="{ scope }"> |
| | | <el-icon class="del-btn" @click="remove(scope.row.uid)"> |
| | | <delete /> |
| | | </el-icon> |
| | | </template> |
| | | </cl-table> |
| | | </cl-row> |
| | | </cl-crud> |
| | | </template> |
| | | </cl-form> |
| | | </template> |
| | | |
| | | <script lang="ts" setup name="order-detail"> |
| | | import { useForm, useTable } from "@cool-vue/crud"; |
| | | import { computed, ref, onMounted } from "vue"; |
| | | import { useCool } from "/@/cool"; |
| | | import { ElMessage } from "element-plus"; |
| | | import { isEmpty, find } from "lodash-es"; |
| | | import { Delete } from "@element-plus/icons-vue"; |
| | | import { uuid } from "/@/cool/utils"; |
| | | |
| | | const { service } = useCool(); |
| | | const Form = useForm(); |
| | | |
| | | // åæ¶ç©åå
¸ |
| | | const itemOptions = ref<any[]>([]); |
| | | |
| | | const currentOrderNo = ref<string>(); |
| | | // æç»å表 |
| | | const list = ref<any[]>([]); |
| | | |
| | | // è¡¨æ ¼æ°æ® |
| | | const data = computed(() => list.value.filter((e) => !e.isDel)); |
| | | |
| | | // æå¼ |
| | | async function open(orderNo: string) { |
| | | currentOrderNo.value = orderNo; |
| | | await refresh(orderNo); |
| | | |
| | | Form.value?.open({ |
| | | title: "åæ¶è®¢åæç»", |
| | | form: { items: list.value }, |
| | | width: "80%", |
| | | items: [ |
| | | { |
| | | prop: "items", |
| | | component: { name: "slot-order-detail" } |
| | | } |
| | | ], |
| | | on: { |
| | | submit(_, { close, done }) { |
| | | const delIds: number[] = []; |
| | | const add: any[] = []; |
| | | const update: any[] = []; |
| | | |
| | | list.value.forEach((e) => { |
| | | if (e.id) { |
| | | if (e.isDel) { |
| | | delIds.push(e.id); |
| | | } else if (e.isEdit) { |
| | | update.push(e); |
| | | } |
| | | } else if (!e.isDel) { |
| | | add.push(e); |
| | | } |
| | | }); |
| | | |
| | | /* |
| | | const tasks: Promise<any>[] = []; |
| | | |
| | | if (!isEmpty(delIds)) { |
| | | tasks.push(service.shop.recycleorderitem.delete({ ids: delIds })); |
| | | } |
| | | |
| | | if (!isEmpty(update)) { |
| | | update.forEach((e) => tasks.push(service.shop.recycleorderitem.update(e))); |
| | | } |
| | | |
| | | if (!isEmpty(add)) { |
| | | tasks.push( |
| | | service.shop.recycleorderitem.add( |
| | | add.map((e) => ({ |
| | | ...e, |
| | | orderNo: currentOrderNo.value! |
| | | })) |
| | | ) |
| | | ); |
| | | } |
| | | |
| | | Promise.all(tasks) |
| | | .then(() => { |
| | | ElMessage.success("ä¿åæå"); |
| | | close(); |
| | | }) |
| | | .catch((err) => { |
| | | ElMessage.error(err.message); |
| | | refresh(orderNo); |
| | | done(); |
| | | }); |
| | | */ |
| | | |
| | | const items = list.value |
| | | .filter(e => !e.isDel) |
| | | .map(e => ({ |
| | | id: e.id, |
| | | itemId: e.itemId, |
| | | itemName: e.itemName, |
| | | weight: e.weight, |
| | | unitPrice: e.unitPrice, |
| | | amount: e.amount, |
| | | carbonPoint: e.carbonPoint, |
| | | category: e.category |
| | | })); |
| | | |
| | | service.shop.recycleorder.saveWithSummary({ |
| | | orderNo: currentOrderNo.value!, |
| | | items |
| | | }) |
| | | .then(() => { |
| | | ElMessage.success("ä¿åæå"); |
| | | close(); |
| | | }) |
| | | .catch((err) => { |
| | | ElMessage.error(err.message); |
| | | refresh(currentOrderNo.value!); |
| | | done(); |
| | | }); |
| | | } |
| | | } |
| | | }); |
| | | } |
| | | |
| | | // å·æ°æç» |
| | | async function refresh(orderNo: string) { |
| | | const [items, details] = await Promise.all([ |
| | | service.shop.recycleitem.list({ |
| | | status: 0, |
| | | order: "id", |
| | | sort: "asc" |
| | | }), |
| | | service.shop.recycleorderitem.list({ |
| | | orderNo, |
| | | order: "id", |
| | | sort: "asc" |
| | | }) |
| | | ]); |
| | | |
| | | itemOptions.value = items; |
| | | |
| | | list.value = details.map((e: any) => ({ |
| | | ...e, |
| | | weight: Number(e.weight), |
| | | unitPrice: Number(e.unitPrice), |
| | | amount: Number(e.amount), |
| | | carbonPoint: Number(e.carbonPoint), |
| | | uid: e.id |
| | | })); |
| | | } |
| | | |
| | | // æ°å¢ |
| | | function add() { |
| | | list.value.push({ |
| | | uid: uuid(), |
| | | itemId: "", |
| | | itemName: "", |
| | | category: "", |
| | | unit: "", |
| | | weight: 0, |
| | | unitPrice: 0, |
| | | amount: 0, |
| | | carbonPoint: 0, |
| | | isDel: false, // â
è¡¥ä¸ |
| | | isEdit: false // â
è¡¥ä¸ |
| | | }); |
| | | } |
| | | |
| | | // å é¤ |
| | | function remove(uid?: string) { |
| | | const arr = uid ? [uid] : Table.value?.selection.map((e) => e.uid); |
| | | list.value.forEach((e) => { |
| | | if (arr?.includes(e.uid)) { |
| | | e.isDel = true; |
| | | } |
| | | }); |
| | | } |
| | | |
| | | // éæ©åæ¶ç© |
| | | function onItemChange(row: any) { |
| | | const item = find(itemOptions.value, { itemId: row.itemId }); |
| | | |
| | | if (item) { |
| | | row.itemName = item.itemName; |
| | | row.category = item.category; |
| | | row.unitPrice = Number(item.price); |
| | | row.carbonPoint = Number(item.carbonPoint); |
| | | row.unit = item.unit; |
| | | } |
| | | |
| | | row.isEdit = true; |
| | | calcRow(row); |
| | | } |
| | | |
| | | // 计ç®éé¢ |
| | | function calcRow(row: any) { |
| | | row.amount = Number((row.weight * row.unitPrice).toFixed(2)); |
| | | row.carbonPoint = Number((row.amount * 100).toFixed(2)); |
| | | } |
| | | |
| | | const Table = useTable({ |
| | | columns: [ |
| | | { type: "selection" }, |
| | | { label: "åæ¶ç©", prop: "itemName", minWidth: 180 }, |
| | | { label: "éé/ä»¶æ°", prop: "weight", minWidth: 120 }, |
| | | { label: "åä»·", prop: "unitPrice", minWidth: 120 }, |
| | | { label: "éé¢", prop: "amount", minWidth: 120 }, |
| | | { label: "彿 åç±»", prop: "category", minWidth: 120 }, |
| | | { label: "碳积å", prop: "carbonPoint", minWidth: 120 }, |
| | | { type: "op", width: 80, buttons: ["slot-btn"] } |
| | | ] |
| | | }); |
| | | |
| | | defineExpose({ |
| | | open |
| | | }); |
| | | </script> |
| | | |
| | | <style lang="scss" scoped> |
| | | .el-form-item { |
| | | margin-bottom: 0; |
| | | } |
| | | |
| | | .del-btn { |
| | | cursor: pointer; |
| | | |
| | | &:hover { |
| | | color: red; |
| | | } |
| | | } |
| | | </style> |
| New file |
| | |
| | | <template> |
| | | <cl-select-table v-model="value" :title="t('éæ©è®¢å管ç')" :service="service.shop.recycleorder" :columns="columns" |
| | | :multiple="multiple" :dict='{ "text": "username" }' pickerType="text" /> |
| | | </template> |
| | | |
| | | <script setup lang="ts"> |
| | | defineOptions({ |
| | | name: "recycle-order-select" |
| | | }); |
| | | |
| | | import { useCool } from "/@/cool"; |
| | | import { useI18n } from "vue-i18n"; |
| | | import { CrudProps } from "/#/crud"; |
| | | import { reactive, ref, useModel } from "vue"; |
| | | |
| | | const props = defineProps({ |
| | | ...CrudProps, |
| | | modelValue: null, |
| | | multiple: Boolean |
| | | }); |
| | | |
| | | const { service } = useCool(); |
| | | const { t } = useI18n(); |
| | | |
| | | const value = useModel(props, "modelValue"); |
| | | |
| | | // é项 |
| | | const options = reactive({ |
| | | orderType: [ |
| | | { label: t("ä¸é¨åæ¶"), value: 0 }, |
| | | { label: t("ç«ç¹åæ¶"), value: 1 }, |
| | | { label: t("æéåæ¶"), value: 2 } |
| | | ], |
| | | status: [ |
| | | { label: t("å¾
å¤ç"), value: 0 }, |
| | | { label: t("è¿è¡ä¸"), value: 1 }, |
| | | { label: t("已宿"), value: 2 }, |
| | | { label: t("已忶"), value: 3 } |
| | | ] |
| | | }); |
| | | |
| | | const columns = ref([ |
| | | { label: t("ææºå·"), prop: "userPhone", minWidth: 140 }, |
| | | { label: t("æµç§°"), prop: "userName", minWidth: 140 }, |
| | | { label: t("订åç¼å·"), prop: "orderNo", minWidth: 140 }, |
| | | { label: t("æ ¡åç¨æ·ID"), prop: "campusUserId", minWidth: 120 }, |
| | | { |
| | | label: t("订åç±»å"), |
| | | prop: "orderType", |
| | | minWidth: 120, |
| | | dict: options.orderType |
| | | }, |
| | | { label: t("ç«ç¹ID"), prop: "siteId", minWidth: 120 }, |
| | | { label: t("忣åID"), prop: "sorterId", minWidth: 120 }, |
| | | { label: t("ç¶æ"), prop: "status", minWidth: 120, dict: options.status }, |
| | | { label: t("æ»éé"), prop: "totalWeight", minWidth: 140, sortable: "custom" }, |
| | | { label: t("æ»ç¢³ç§¯å"), prop: "totalCarbonPoint", minWidth: 140, sortable: "custom" }, |
| | | { |
| | | label: t("宿æ¶é´"), |
| | | prop: "finishTime", |
| | | minWidth: 170, |
| | | sortable: "custom", |
| | | component: { name: "cl-date-text" } |
| | | } |
| | | ]); |
| | | </script> |
| New file |
| | |
| | | { |
| | | "设å¤å·":"设å¤å·", |
| | | "设å¤åç§°":"设å¤åç§°", |
| | | "ä¸ä¼ æ¶é´":"ä¸ä¼ æ¶é´", |
| | | "åå¾ç±»å":"åå¾ç±»å", |
| | | "åå¾åç§°":"åå¾åç§°", |
| | | "åå¾éé":"åå¾ééKG", |
| | | "å
¶ä»æ°æ®":"å
¶ä»æ°æ®", |
| | | "ç«ç¹ç¼å·":"ç«ç¹ç¼å·", |
| | | "ç«ç¹åç§°":"ç«ç¹åç§°", |
| | | "ç«ç¹ç±»å":"ç«ç¹ç±»å", |
| | | "ç§°é设å¤":"ç§°é设å¤", |
| | | "weight":"weight", |
| | | "health_gps":"health_gps", |
| | | "vehicle_gps":"vehicle_gps", |
| | | "driver_anomaly":"driver_anomaly", |
| | | "others":"others", |
| | | "æ¥å¿æ¶é´":"æ¥å¿æ¶é´", |
| | | "æ¨éç±»å":"æ¨éç±»å", |
| | | "客æ·ç«¯ID":"客æ·ç«¯ID", |
| | | "åå§è¯·æ±å
容":"åå§è¯·æ±å
容", |
| | | "é误è¿åä¿¡æ¯":"é误è¿åä¿¡æ¯", |
| | | "å建æ¶é´":"å建æ¶é´", |
| | | "æ´æ°æ¶é´":"æ´æ°æ¶é´", |
| | | "设å¤åºåå·":"设å¤åºåå·", |
| | | "æ¶æ¯åºåå·":"æ¶æ¯åºåå·", |
| | | "æ¶æ¯å建æ¶é´":"æ¶æ¯å建æ¶é´", |
| | | "GPSå®ä½æ¶é´":"GPSå®ä½æ¶é´", |
| | | "é度":"é度", |
| | | "æ¹åè§":"æ¹åè§", |
| | | "æµ·æé«åº¦":"æµ·æé«åº¦", |
| | | "å®ä½ç²¾åº¦":"å®ä½ç²¾åº¦", |
| | | "ææå®ä½":"ææå®ä½", |
| | | "æ æå®ä½":"æ æå®ä½", |
| | | "设å¤ID":"设å¤ID", |
| | | "ééå·":"ééå·", |
| | | "æ¶æ¯å¯ä¸ID":"æ¶æ¯å¯ä¸ID", |
| | | "æ¶æ¯æ¶é´":"æ¶æ¯æ¶é´", |
| | | "æ¶æ¯ç±»å":"æ¶æ¯ç±»å", |
| | | "设å¤ç±»å":"设å¤ç±»å", |
| | | "ååºåå·":"ååºåå·", |
| | | "æºç«¯ID":"æºç«¯ID", |
| | | "NATçIP":"NATçIP", |
| | | "äºä»¶åçæ¶é´":"äºä»¶åçæ¶é´", |
| | | "æ³¨åæ¶é´":"æ³¨åæ¶é´", |
| | | "éé":"éé", |
| | | "åä»·(å
/Kg)":"åä»·(å
/Kg)", |
| | | "æ»ä»·(å
)":"æ»ä»·(å
)", |
| | | "ç»æäººID":"ç»æäººID", |
| | | "ç»æäºº":"ç»æäºº", |
| | | "æ¶è´æ¹":"æ¶è´æ¹", |
| | | "æ¶éç¹":"æ¶éç¹", |
| | | "æ¥ææ¶é´":"æ¥ææ¶é´", |
| | | "æ»ä»·":"æ»ä»·", |
| | | "äº¤ææ¶é´":"äº¤ææ¶é´", |
| | | "交æç±»å":"交æç±»å", |
| | | "交æå¯¹æ¹":"交æå¯¹æ¹", |
| | | "åååç§°":"åååç§°", |
| | | "æ¶æ¯ç±»å":"æ¶æ¯ç±»å", |
| | | "éé¢":"éé¢", |
| | | "æ¯ä»æ¹å¼":"æ¯ä»æ¹å¼", |
| | | "å½åç¶æ":"å½åç¶æ", |
| | | "夿³¨":"夿³¨", |
| | | "æä»¶è·¯å¾":"æä»¶è·¯å¾", |
| | | "æä»¶å":"æä»¶å", |
| | | "交æåå·":"交æåå·", |
| | | "åæ·åå·":"åæ·åå·", |
| | | "æ¶å
¥":"æ¶å
¥", |
| | | "æ¯åº":"æ¯åº", |
| | | "å
¶ä»":"å
¶ä»" |
| | | } |
| New file |
| | |
| | | { |
| | | "设å¤å·":"设å¤å·", |
| | | "设å¤åç§°":"设å¤åç§°", |
| | | "ä¸ä¼ æ¶é´":"ä¸ä¼ æ¶é´", |
| | | "åå¾ç±»å":"åå¾ç±»å", |
| | | "åå¾åç§°":"åå¾åç§°", |
| | | "åå¾éé":"åå¾ééKG", |
| | | "å
¶ä»æ°æ®":"å
¶ä»æ°æ®", |
| | | "ç«ç¹ç¼å·":"ç«ç¹ç¼å·", |
| | | "ç«ç¹åç§°":"ç«ç¹åç§°", |
| | | "ç«ç¹ç±»å":"ç«ç¹ç±»å", |
| | | "ç§°é设å¤":"ç§°é设å¤", |
| | | "weight":"weight", |
| | | "health_gps":"health_gps", |
| | | "vehicle_gps":"vehicle_gps", |
| | | "driver_anomaly":"driver_anomaly", |
| | | "others":"others", |
| | | "æ¥å¿æ¶é´":"æ¥å¿æ¶é´", |
| | | "æ¨éç±»å":"æ¨éç±»å", |
| | | "客æ·ç«¯ID":"客æ·ç«¯ID", |
| | | "åå§è¯·æ±å
容":"åå§è¯·æ±å
容", |
| | | "é误è¿åä¿¡æ¯":"é误è¿åä¿¡æ¯", |
| | | "å建æ¶é´":"å建æ¶é´", |
| | | "æ´æ°æ¶é´":"æ´æ°æ¶é´", |
| | | "设å¤åºåå·":"设å¤åºåå·", |
| | | "æ¶æ¯åºåå·":"æ¶æ¯åºåå·", |
| | | "æ¶æ¯å建æ¶é´":"æ¶æ¯å建æ¶é´", |
| | | "GPSå®ä½æ¶é´":"GPSå®ä½æ¶é´", |
| | | "é度":"é度", |
| | | "æ¹åè§":"æ¹åè§", |
| | | "æµ·æé«åº¦":"æµ·æé«åº¦", |
| | | "å®ä½ç²¾åº¦":"å®ä½ç²¾åº¦", |
| | | "ææå®ä½":"ææå®ä½", |
| | | "æ æå®ä½":"æ æå®ä½", |
| | | "设å¤ID":"设å¤ID", |
| | | "ééå·":"ééå·", |
| | | "æ¶æ¯å¯ä¸ID":"æ¶æ¯å¯ä¸ID", |
| | | "æ¶æ¯æ¶é´":"æ¶æ¯æ¶é´", |
| | | "æ¶æ¯ç±»å":"æ¶æ¯ç±»å", |
| | | "设å¤ç±»å":"设å¤ç±»å", |
| | | "ååºåå·":"ååºåå·", |
| | | "æºç«¯ID":"æºç«¯ID", |
| | | "NATçIP":"NATçIP", |
| | | "äºä»¶åçæ¶é´":"äºä»¶åçæ¶é´", |
| | | "æ³¨åæ¶é´":"æ³¨åæ¶é´", |
| | | "éé":"éé", |
| | | "åä»·(å
/Kg)":"åä»·(å
/Kg)", |
| | | "æ»ä»·(å
)":"æ»ä»·(å
)", |
| | | "ç»æäººID":"ç»æäººID", |
| | | "ç»æäºº":"ç»æäºº", |
| | | "æ¶è´æ¹":"æ¶è´æ¹", |
| | | "æ¶éç¹":"æ¶éç¹", |
| | | "æ¥ææ¶é´":"æ¥ææ¶é´", |
| | | "æ»ä»·":"æ»ä»·", |
| | | "äº¤ææ¶é´":"äº¤ææ¶é´", |
| | | "交æç±»å":"交æç±»å", |
| | | "交æå¯¹æ¹":"交æå¯¹æ¹", |
| | | "åååç§°":"åååç§°", |
| | | "æ¶æ¯ç±»å":"æ¶æ¯ç±»å", |
| | | "éé¢":"éé¢", |
| | | "æ¯ä»æ¹å¼":"æ¯ä»æ¹å¼", |
| | | "å½åç¶æ":"å½åç¶æ", |
| | | "夿³¨":"夿³¨", |
| | | "æä»¶è·¯å¾":"æä»¶è·¯å¾", |
| | | "æä»¶å":"æä»¶å", |
| | | "交æåå·":"交æåå·", |
| | | "åæ·åå·":"åæ·åå·", |
| | | "æ¶å
¥":"æ¶å
¥", |
| | | "æ¯åº":"æ¯åº", |
| | | "å
¶ä»":"å
¶ä»", |
| | | "å¯åæ¶ç©ç¼ç ":"å¯åæ¶ç©ç¼ç ", |
| | | "åºåç±»å«ç¼ç ":"åºåç±»å«ç¼ç ", |
| | | "计éåä½":"计éåä½", |
| | | "ä»·æ ¼(å
)":"ä»·æ ¼(å
)", |
| | | "碳积å":"碳积å", |
| | | "åºåºç¼ç ":"åºåºç¼ç ", |
| | | "å
å«åç±»":"å
å«åç±»", |
| | | "ç°åº":"ç°åº", |
| | | "é¢çº¦":"é¢çº¦", |
| | | "大å±":"大å±", |
| | | "æ´»å¨":"æ´»å¨", |
| | | "æ¥å":"æ¥å", |
| | | "è¿è¾":"è¿è¾", |
| | | "宿":"宿", |
| | | "å¾
å¤ç":"å¾
å¤ç", |
| | | "已宿":"已宿", |
| | | "已忶":"已忶", |
| | | "订åç¼å·":"订åç¼å·", |
| | | "订åç±»å":"订åç±»å", |
| | | "鿩妿 ¡":"鿩妿 ¡", |
| | | "éæ©ç«ç¹":"éæ©ç«ç¹", |
| | | "鿩忣å":"鿩忣å", |
| | | "éæ©é¢çº¦ID":"éæ©é¢çº¦ID", |
| | | "宿æ¶é´":"宿æ¶é´", |
| | | "æºæåç§°":"æºæåç§°", |
| | | "å¦å·/å·¥å·":"å¦å·/å·¥å·", |
| | | "忣åID":"忣åID", |
| | | "é¢çº¦ID":"é¢çº¦ID", |
| | | "å¾
å®¡æ ¸":"å¾
å®¡æ ¸", |
| | | "å¾
æ¥å":"å¾
æ¥å", |
| | | "å·²æ¥å":"å·²æ¥å", |
| | | "ä¸é¨ä¸":"ä¸é¨ä¸", |
| | | "é¢çº¦ç¼å·":"é¢çº¦ç¼å·", |
| | | "详ç»å°å":"详ç»å°å", |
| | | "é¢çº¦æ¥æ":"é¢çº¦æ¥æ", |
| | | "é¢è®¡éé":"é¢è®¡éé", |
| | | "ç¨æ·å§å":"ç¨æ·å§å", |
| | | "忣åå§å":"忣åå§å", |
| | | "åæ¶è®¢å":"åæ¶è®¢å", |
| | | "妿 ¡ID":"妿 ¡ID", |
| | | "ç»åº¦":"ç»åº¦", |
| | | "纬度":"纬度", |
| | | "é¢çº¦æ¶æ®µ":"é¢çº¦æ¶æ®µ", |
| | | "æå±æºæ":"æå±æºæ", |
| | | "忣å":"忣å", |
| | | "åæ¶è®¢åID":"åæ¶è®¢åID" |
| | | } |
| New file |
| | |
| | | { |
| | | "设å¤å·":"设å¤å·", |
| | | "设å¤åç§°":"设å¤åç§°", |
| | | "ä¸ä¼ æ¶é´":"ä¸ä¼ æ¶é´", |
| | | "åå¾ç±»å":"åå¾ç±»å", |
| | | "åå¾åç§°":"åå¾åç§°", |
| | | "åå¾éé":"åå¾ééKG", |
| | | "å
¶ä»æ°æ®":"å
¶ä»æ°æ®", |
| | | "ç«ç¹ç¼å·":"ç«ç¹ç¼å·", |
| | | "ç«ç¹åç§°":"ç«ç¹åç§°", |
| | | "ç«ç¹ç±»å":"ç«ç¹ç±»å", |
| | | "ç§°é设å¤":"ç§°é设å¤", |
| | | "weight":"weight", |
| | | "health_gps":"health_gps", |
| | | "vehicle_gps":"vehicle_gps", |
| | | "driver_anomaly":"driver_anomaly", |
| | | "others":"others", |
| | | "æ¥å¿æ¶é´":"æ¥å¿æ¶é´", |
| | | "æ¨éç±»å":"æ¨éç±»å", |
| | | "客æ·ç«¯ID":"客æ·ç«¯ID", |
| | | "åå§è¯·æ±å
容":"åå§è¯·æ±å
容", |
| | | "é误è¿åä¿¡æ¯":"é误è¿åä¿¡æ¯", |
| | | "å建æ¶é´":"å建æ¶é´", |
| | | "æ´æ°æ¶é´":"æ´æ°æ¶é´", |
| | | "设å¤åºåå·":"设å¤åºåå·", |
| | | "æ¶æ¯åºåå·":"æ¶æ¯åºåå·", |
| | | "æ¶æ¯å建æ¶é´":"æ¶æ¯å建æ¶é´", |
| | | "GPSå®ä½æ¶é´":"GPSå®ä½æ¶é´", |
| | | "é度":"é度", |
| | | "æ¹åè§":"æ¹åè§", |
| | | "æµ·æé«åº¦":"æµ·æé«åº¦", |
| | | "å®ä½ç²¾åº¦":"å®ä½ç²¾åº¦", |
| | | "ææå®ä½":"ææå®ä½", |
| | | "æ æå®ä½":"æ æå®ä½", |
| | | "设å¤ID":"设å¤ID", |
| | | "ééå·":"ééå·", |
| | | "æ¶æ¯å¯ä¸ID":"æ¶æ¯å¯ä¸ID", |
| | | "æ¶æ¯æ¶é´":"æ¶æ¯æ¶é´", |
| | | "æ¶æ¯ç±»å":"æ¶æ¯ç±»å", |
| | | "设å¤ç±»å":"设å¤ç±»å", |
| | | "ååºåå·":"ååºåå·", |
| | | "æºç«¯ID":"æºç«¯ID", |
| | | "NATçIP":"NATçIP", |
| | | "äºä»¶åçæ¶é´":"äºä»¶åçæ¶é´", |
| | | "æ³¨åæ¶é´":"æ³¨åæ¶é´", |
| | | "éé":"éé", |
| | | "åä»·(å
/Kg)":"åä»·(å
/Kg)", |
| | | "æ»ä»·(å
)":"æ»ä»·(å
)", |
| | | "ç»æäººID":"ç»æäººID", |
| | | "ç»æäºº":"ç»æäºº", |
| | | "æ¶è´æ¹":"æ¶è´æ¹", |
| | | "æ¶éç¹":"æ¶éç¹", |
| | | "æ¥ææ¶é´":"æ¥ææ¶é´", |
| | | "æ»ä»·":"æ»ä»·", |
| | | "äº¤ææ¶é´":"äº¤ææ¶é´", |
| | | "交æç±»å":"交æç±»å", |
| | | "交æå¯¹æ¹":"交æå¯¹æ¹", |
| | | "åååç§°":"åååç§°", |
| | | "æ¶æ¯ç±»å":"æ¶æ¯ç±»å", |
| | | "éé¢":"éé¢", |
| | | "æ¯ä»æ¹å¼":"æ¯ä»æ¹å¼", |
| | | "å½åç¶æ":"å½åç¶æ", |
| | | "夿³¨":"夿³¨", |
| | | "æä»¶è·¯å¾":"æä»¶è·¯å¾", |
| | | "æä»¶å":"æä»¶å", |
| | | "交æåå·":"交æåå·", |
| | | "åæ·åå·":"åæ·åå·", |
| | | "æ¶å
¥":"æ¶å
¥", |
| | | "æ¯åº":"æ¯åº", |
| | | "å
¶ä»":"å
¶ä»" |
| | | } |
| New file |
| | |
| | | <template> |
| | | <cl-crud ref="Crud"> |
| | | <cl-row> |
| | | <!-- å·æ°æé® --> |
| | | <cl-refresh-btn /> |
| | | <!-- æ°å¢æé® --> |
| | | <cl-add-btn /> |
| | | <!-- å é¤æé® --> |
| | | <cl-multi-delete-btn /> |
| | | <cl-flex1 /> |
| | | <!-- æ¡ä»¶æç´¢ --> |
| | | <cl-search ref="Search" /> |
| | | </cl-row> |
| | | |
| | | <cl-row> |
| | | <!-- æ°æ®è¡¨æ ¼ --> |
| | | <cl-table ref="Table" /> |
| | | </cl-row> |
| | | |
| | | <cl-row> |
| | | <cl-flex1 /> |
| | | <!-- å页æ§ä»¶ --> |
| | | <cl-pagination /> |
| | | </cl-row> |
| | | |
| | | <!-- æ°å¢ãç¼è¾ --> |
| | | <cl-upsert ref="Upsert" /> |
| | | |
| | | |
| | | |
| | | </cl-crud> |
| | | </template> |
| | | |
| | | <script lang="ts" setup> |
| | | defineOptions({ |
| | | name: "recycle-appointment" |
| | | }); |
| | | |
| | | import { useCrud, useTable, useUpsert, useSearch } from "@cool-vue/crud"; |
| | | import { useDict } from '/$/dict'; |
| | | import { useCool } from "/@/cool"; |
| | | import { useI18n } from "vue-i18n"; |
| | | import { reactive, computed } from "vue"; |
| | | |
| | | const { service } = useCool(); |
| | | const { t } = useI18n(); |
| | | const { dict } = useDict(); |
| | | |
| | | // é项 |
| | | const options = reactive({ |
| | | status: [ |
| | | { label: t('æªç¥'), value: 'æªç¥' }, |
| | | { label: t('å¾
å®¡æ ¸'), value: 'å¾
å®¡æ ¸' }, |
| | | { label: t('å¾
æ¥å'), value: 'å¾
æ¥å' }, |
| | | { label: t('å·²æ¥å'), value: 'å·²æ¥å' }, |
| | | { label: t('ä¸é¨ä¸'), value: 'ä¸é¨ä¸' }, |
| | | { label: t('已宿'), value: '已宿' }, |
| | | { label: t('已忶'), value: '已忶' } |
| | | ] |
| | | }); |
| | | console.log( |
| | | JSON.stringify( |
| | | dict.get('appointmentslot').value, |
| | | null, |
| | | 2 |
| | | ) |
| | | ); |
| | | const appointmentSlotOptions = computed(() => |
| | | dict.get('appointmentslot').value.map(item => ({ |
| | | label: item.name, |
| | | value: String(item.value) |
| | | })) |
| | | ); |
| | | |
| | | // cl-upsert |
| | | const Upsert = useUpsert({ |
| | | items: [ |
| | | { |
| | | label: t('é¢çº¦ç¼å·'), |
| | | prop: "appointmentNo", |
| | | component: { name: "el-input", props: { clearable: true } }, |
| | | span: 12, |
| | | required: true |
| | | }, |
| | | { |
| | | label: t('è系人'), |
| | | prop: "contactName", |
| | | component: { name: "el-input", props: { clearable: true } }, |
| | | span: 12, |
| | | required: true |
| | | }, |
| | | { |
| | | label: t('èç³»çµè¯'), |
| | | prop: "contactPhone", |
| | | component: { name: "el-input", props: { clearable: true } }, |
| | | span: 12, |
| | | required: true |
| | | }, |
| | | { |
| | | label: t('详ç»å°å'), |
| | | prop: "address", |
| | | component: { name: "el-input", props: { type: "textarea", rows: 4 } }, |
| | | required: true |
| | | }, |
| | | { |
| | | label: t('ç»åº¦'), |
| | | prop: "longitude", |
| | | hook: "number", |
| | | component: { name: "el-input-number", props: { min: 0 } }, |
| | | span: 12 |
| | | }, |
| | | { |
| | | label: t('纬度'), |
| | | prop: "latitude", |
| | | hook: "number", |
| | | component: { name: "el-input-number", props: { min: 0 } }, |
| | | span: 12 |
| | | }, |
| | | { |
| | | label: t('é¢çº¦æ¥æ'), |
| | | prop: "appointmentDate", |
| | | component: { |
| | | name: "el-date-picker", |
| | | props: { type: "date", valueFormat: "YYYY-MM-DD" } |
| | | }, |
| | | span: 12, |
| | | required: true |
| | | }, |
| | | { |
| | | label: 'é¢çº¦æ¶é´æ®µ', |
| | | prop: 'appointmentSlot', |
| | | component: { |
| | | name: 'cl-select', |
| | | props: { |
| | | options: appointmentSlotOptions |
| | | } |
| | | }, |
| | | required: true |
| | | }, |
| | | { |
| | | label: t('é¢è®¡éé'), |
| | | prop: "expectedWeight", |
| | | hook: "number", |
| | | component: { name: "el-input-number", props: { min: 0 } }, |
| | | span: 12, |
| | | required: true |
| | | }, |
| | | { |
| | | label: t('ç¶æ'), |
| | | prop: "status", |
| | | component: { name: "cl-select", props: { options: options.status } }, |
| | | value: 0, |
| | | span: 12, |
| | | required: true |
| | | }, |
| | | { |
| | | label: t("鿩妿 ¡"), |
| | | prop: "departmentId", |
| | | component: { |
| | | name: 'cl-dept-select', |
| | | props: { |
| | | multiple: false, // åé / true å¤é |
| | | placeholder: "è¯·éæ©å¦æ ¡", |
| | | checkStrictly: true, // ç¶åèç¹ä¸èå¨ |
| | | immediate: true // ç«å³å è½½é¨é¨æ |
| | | } |
| | | }, |
| | | required: true, |
| | | }, |
| | | { |
| | | label: t('ç¨æ·ID'), |
| | | prop: "campusUserId", |
| | | component: { name: "el-input", props: { clearable: true } }, |
| | | span: 12, |
| | | required: true |
| | | }, |
| | | { |
| | | label: t('ç¨æ·å§å'), |
| | | prop: "campusUserName", |
| | | component: { name: "el-input", props: { clearable: true } }, |
| | | span: 12, |
| | | required: true |
| | | }, |
| | | { |
| | | label: t('忣åID'), |
| | | prop: "sorterId", |
| | | component: { name: "el-input", props: { clearable: true } }, |
| | | span: 12 |
| | | }, |
| | | { |
| | | label: t('忣åå§å'), |
| | | prop: "sorterName", |
| | | component: { name: "el-input", props: { clearable: true } }, |
| | | span: 12 |
| | | }, |
| | | { |
| | | label: t('åæ¶è®¢å'), |
| | | prop: "recycleOrderId", |
| | | component: { name: "el-input", props: { clearable: true } }, |
| | | span: 12 |
| | | } |
| | | ] |
| | | }); |
| | | |
| | | // cl-table |
| | | const Table = useTable({ |
| | | columns: [ |
| | | { type: "selection" }, |
| | | { label: t('ç¨æ·ID'), prop: "campusUserId", minWidth: 120 }, |
| | | { label: t('å§å'), prop: "campusUserName", minWidth: 140 }, |
| | | { label: t('é¢çº¦ç¼å·'), prop: "appointmentNo", minWidth: 140 }, |
| | | { label: t('è系人'), prop: "contactName", minWidth: 140 }, |
| | | { label: t('èç³»çµè¯'), prop: "contactPhone", minWidth: 140 }, |
| | | { |
| | | label: t('详ç»å°å'), |
| | | prop: "address", |
| | | showOverflowTooltip: true, |
| | | minWidth: 200 |
| | | }, |
| | | /* |
| | | { label: t('ç»åº¦'), prop: "longitude", minWidth: 140, sortable: "custom" }, |
| | | { label: t('纬度'), prop: "latitude", minWidth: 140, sortable: "custom" }, |
| | | */ |
| | | { |
| | | label: t('é¢çº¦æ¥æ'), |
| | | prop: "appointmentDate", |
| | | minWidth: 140, |
| | | sortable: "custom", |
| | | component: { name: "cl-date-text", props: { format: "YYYY-MM-DD" } } |
| | | }, |
| | | { label: t('é¢çº¦æ¶é´æ®µ'), prop: "appointmentSlot", minWidth: 120 }, |
| | | { |
| | | label: t('é¢è®¡éé'), |
| | | prop: "expectedWeight", |
| | | minWidth: 140, |
| | | sortable: "custom" |
| | | }, |
| | | { label: t('ç¶æ'), prop: "status", minWidth: 120, dict: options.status }, |
| | | { label: t('æå±æºæ'), prop: "departmentName", minWidth: 120 }, |
| | | { label: t('忣å'), prop: "sorterName", minWidth: 120 }, |
| | | { |
| | | label: t('åæ¶è®¢åID'), |
| | | prop: "recycleOrderId", |
| | | minWidth: 140, |
| | | sortable: "custom" |
| | | }, |
| | | { |
| | | label: t('å建æ¶é´'), |
| | | prop: "createTime", |
| | | minWidth: 170, |
| | | sortable: "desc", |
| | | component: { name: "cl-date-text" } |
| | | }, |
| | | { |
| | | label: t('æ´æ°æ¶é´'), |
| | | prop: "updateTime", |
| | | minWidth: 170, |
| | | sortable: "custom", |
| | | component: { name: "cl-date-text" } |
| | | }, |
| | | { type: "op", buttons: ["edit", "delete"] } |
| | | ] |
| | | }); |
| | | |
| | | // cl-search |
| | | const Search = useSearch(); |
| | | |
| | | // cl-crud |
| | | const Crud = useCrud( |
| | | { |
| | | service: service.shop.recycleappointment |
| | | }, |
| | | (app) => { |
| | | app.refresh(); |
| | | } |
| | | ); |
| | | |
| | | // å·æ° |
| | | function refresh(params?: any) { |
| | | Crud.value?.refresh(params); |
| | | } |
| | | </script> |
| New file |
| | |
| | | <template> |
| | | <cl-crud ref="Crud"> |
| | | <cl-row> |
| | | <!-- å·æ°æé® --> |
| | | <cl-refresh-btn /> |
| | | <!-- æ°å¢æé® --> |
| | | <cl-add-btn /> |
| | | <!-- å é¤æé® --> |
| | | <cl-multi-delete-btn /> |
| | | <cl-flex1 /> |
| | | <!-- æ¡ä»¶æç´¢ --> |
| | | <cl-search ref="Search" /> |
| | | </cl-row> |
| | | |
| | | <cl-row> |
| | | <!-- æ°æ®è¡¨æ ¼ --> |
| | | <cl-table ref="Table" /> |
| | | </cl-row> |
| | | |
| | | <cl-row> |
| | | <cl-flex1 /> |
| | | <!-- å页æ§ä»¶ --> |
| | | <cl-pagination /> |
| | | </cl-row> |
| | | |
| | | <!-- æ°å¢ãç¼è¾ --> |
| | | <cl-upsert ref="Upsert" /> |
| | | </cl-crud> |
| | | </template> |
| | | |
| | | <script lang="ts" setup> |
| | | defineOptions({ |
| | | name: "recycle-recycleitem" |
| | | }); |
| | | |
| | | import { useCrud, useTable, useUpsert, useSearch } from "@cool-vue/crud"; |
| | | import { useCool } from "/@/cool"; |
| | | import { useI18n } from "vue-i18n"; |
| | | import { reactive } from "vue"; |
| | | |
| | | const { service } = useCool(); |
| | | const { t } = useI18n(); |
| | | |
| | | // é项 |
| | | const options = reactive({ |
| | | status: [ |
| | | { label: t('å¯ç¨'), value: 0, type: "danger" }, |
| | | { label: t('ç¦ç¨'), value: 1, type: "success" } |
| | | ] |
| | | }); |
| | | |
| | | // cl-upsert |
| | | const Upsert = useUpsert({ |
| | | items: [ |
| | | { |
| | | label: t('å¯åæ¶ç©ç¼ç '), |
| | | prop: "itemId", |
| | | component: { name: "el-input", props: { clearable: true } }, |
| | | span: 12, |
| | | required: true |
| | | }, |
| | | { |
| | | label: t("éæ©é¨é¨"), |
| | | prop: "departmentId", |
| | | component: { |
| | | name: 'cl-dept-select', |
| | | props: { |
| | | multiple: false, // åé |
| | | placeholder: "è¯·éæ©é¨é¨", |
| | | checkStrictly: true, // ç¶åèç¹ä¸èå¨ |
| | | immediate: true // ç«å³å è½½é¨é¨æ |
| | | } |
| | | }, |
| | | span: 12, |
| | | required: true, |
| | | }, |
| | | |
| | | { |
| | | label: t('åç§°'), |
| | | prop: "itemName", |
| | | component: { name: "el-input", props: { clearable: true } }, |
| | | span: 12, |
| | | required: true |
| | | }, |
| | | { |
| | | label: t('å
å«åç±»'), |
| | | prop: "including", |
| | | component: { name: "el-input", props: { clearable: true } }, |
| | | span: 12 |
| | | }, |
| | | { |
| | | label: t('计éåä½'), |
| | | prop: "unit", |
| | | component: { name: "el-input", props: { clearable: true } }, |
| | | span: 12, |
| | | required: true |
| | | }, |
| | | { |
| | | label: t('ä»·æ ¼(å
)'), |
| | | prop: "price", |
| | | hook: "number", |
| | | component: { name: "el-input-number", props: { min: 0 } }, |
| | | span: 12, |
| | | required: true |
| | | }, |
| | | { |
| | | label: t('碳积å'), |
| | | prop: "carbonPoint", |
| | | hook: "number", |
| | | component: { name: "el-input-number", props: { min: 0 } }, |
| | | span: 12, |
| | | required: true |
| | | }, |
| | | { |
| | | label: t('åºåºç¼ç '), |
| | | prop: "category", |
| | | component: { name: "el-input", props: { clearable: true } }, |
| | | span: 12, |
| | | required: true |
| | | }, |
| | | { |
| | | label: t('ç¶æ'), |
| | | prop: "status", |
| | | component: { name: "el-radio-group", options: options.status }, |
| | | value: 0, |
| | | required: true |
| | | } |
| | | ] |
| | | }); |
| | | |
| | | // cl-table |
| | | const Table = useTable({ |
| | | columns: [ |
| | | { type: "selection" }, |
| | | { label: t('å¯åæ¶ç©ç¼ç '), prop: "itemId", minWidth: 120 }, |
| | | { label: t('åç§°'), prop: "itemName", minWidth: 140 }, |
| | | { label: t('å
å«åç±»'), prop: "including", minWidth: 140 }, |
| | | { label: t('æå±åä½'), prop: "departmentName", minWidth: 140 }, |
| | | { label: t('计éåä½'), prop: "unit", minWidth: 140 }, |
| | | { label: t('ä»·æ ¼(å
)'), prop: "price", minWidth: 140, sortable: "custom" }, |
| | | { label: t('碳积å'), prop: "carbonPoint", minWidth: 140, sortable: "custom" }, |
| | | { label: t('åºåºç¼ç '), prop: "category", minWidth: 120 }, |
| | | { |
| | | label: t('ç¶æ'), |
| | | prop: "status", |
| | | minWidth: 100, |
| | | component: { name: "cl-switch" }, |
| | | dict: options.status |
| | | }, |
| | | /*{ |
| | | label: t('å建æ¶é´'), |
| | | prop: "createTime", |
| | | minWidth: 170, |
| | | sortable: "desc", |
| | | component: { name: "cl-date-text" } |
| | | }, |
| | | */ |
| | | { |
| | | label: t('æ´æ°æ¶é´'), |
| | | prop: "updateTime", |
| | | minWidth: 170, |
| | | sortable: "custom", |
| | | component: { name: "cl-date-text" } |
| | | }, |
| | | { type: "op", buttons: ["edit", "delete"] } |
| | | ] |
| | | }); |
| | | |
| | | // cl-search |
| | | const Search = useSearch(); |
| | | |
| | | // cl-crud |
| | | const Crud = useCrud( |
| | | { |
| | | service: service.shop.recycleitem |
| | | }, |
| | | (app) => { |
| | | app.refresh(); |
| | | } |
| | | ); |
| | | |
| | | // å·æ° |
| | | function refresh(params?: any) { |
| | | Crud.value?.refresh(params); |
| | | } |
| | | </script> |
| New file |
| | |
| | | <template> |
| | | <cl-crud ref="Crud"> |
| | | <cl-row> |
| | | <!-- å·æ°æé® --> |
| | | <cl-refresh-btn /> |
| | | <!-- æ°å¢æé® --> |
| | | <cl-add-btn /> |
| | | <!-- å é¤æé® --> |
| | | <cl-multi-delete-btn /> |
| | | <cl-flex1 /> |
| | | <!-- æ¡ä»¶æç´¢ --> |
| | | <cl-search ref="Search" /> |
| | | </cl-row> |
| | | |
| | | <cl-row> |
| | | <!-- æ°æ®è¡¨æ ¼ --> |
| | | <cl-table ref="Table" /> |
| | | </cl-row> |
| | | |
| | | <cl-row> |
| | | <cl-flex1 /> |
| | | <!-- å页æ§ä»¶ --> |
| | | <cl-pagination /> |
| | | </cl-row> |
| | | |
| | | <!-- æ°å¢ãç¼è¾ --> |
| | | <cl-upsert ref="Upsert" /> |
| | | |
| | | <!-- ååè§æ ¼ --> |
| | | <order-detail :ref="setRefs('orderDetail')" /> |
| | | </cl-crud> |
| | | </template> |
| | | |
| | | <script lang="ts" setup> |
| | | defineOptions({ |
| | | name: "recycle-order" |
| | | }); |
| | | |
| | | import { useCrud, useTable, useUpsert, useSearch } from "@cool-vue/crud"; |
| | | import { useCool } from "/@/cool"; |
| | | import { useI18n } from "vue-i18n"; |
| | | import { reactive } from "vue"; |
| | | import OrderDetail from '../components/order-detail.vue'; |
| | | |
| | | const { service, refs, setRefs } = useCool(); |
| | | |
| | | const { t } = useI18n(); |
| | | |
| | | // é项 |
| | | const options = reactive({ |
| | | orderType: [ |
| | | { label: t('ç°åº'), value: 'ç°åº' }, |
| | | { label: t('é¢çº¦'), value: 'é¢çº¦' }, |
| | | { label: t('大å±'), value: '大å±' }, |
| | | { label: t('æ´»å¨'), value: 'æ´»å¨' } |
| | | ], |
| | | status: [ |
| | | { label: t('é¢çº¦'), value: 'é¢çº¦' }, |
| | | { label: t('æ¥å'), value: 'æ¥å' }, |
| | | { label: t('è¿è¾'), value: 'è¿è¾' }, |
| | | { label: t('宿'), value: '宿' }, |
| | | { label: t('åæ¶'), value: 'åæ¶' }, |
| | | { label: t('æªç¥'), value: 'æªç¥' }, |
| | | ] |
| | | }); |
| | | |
| | | // cl-upsert |
| | | const Upsert = useUpsert({ |
| | | items: [ |
| | | { |
| | | label: t('订åç¼å·'), |
| | | prop: "orderNo", |
| | | component: { name: "el-input", props: { clearable: true } }, |
| | | span: 12, |
| | | required: true |
| | | }, |
| | | { |
| | | label: t('订åç±»å'), |
| | | prop: "orderType", |
| | | component: { name: "el-radio-group", options: options.orderType }, |
| | | value: "ç°åº", |
| | | required: true |
| | | }, |
| | | { |
| | | label: t("鿩妿 ¡"), |
| | | prop: "departmentId", |
| | | component: { |
| | | name: 'cl-dept-select', |
| | | props: { |
| | | multiple: false, // åé / true å¤é |
| | | placeholder: "è¯·éæ©å¦æ ¡", |
| | | checkStrictly: true, // ç¶åèç¹ä¸èå¨ |
| | | immediate: true // ç«å³å è½½é¨é¨æ |
| | | } |
| | | }, |
| | | required: true, |
| | | }, |
| | | { |
| | | label: t('éæ©ç¨æ·'), |
| | | prop: "campusUserId", |
| | | component: { name: "el-input", props: { clearable: true } }, |
| | | span: 12, |
| | | required: true |
| | | }, |
| | | { |
| | | label: t('éæ©ç«ç¹'), |
| | | prop: "siteId", |
| | | component: { name: "el-input", props: { clearable: true } }, |
| | | span: 12, |
| | | required: true |
| | | }, |
| | | { |
| | | label: t('鿩忣å'), |
| | | prop: "sorterId", |
| | | component: { name: "el-input", props: { clearable: true } }, |
| | | span: 12, |
| | | required: true |
| | | }, |
| | | { |
| | | label: t('éæ©é¢çº¦ID'), |
| | | prop: "appointmentId", |
| | | component: { name: "el-input", props: { clearable: true } }, |
| | | span: 12 |
| | | }, |
| | | { |
| | | label: t('ç¶æ'), |
| | | prop: "status", |
| | | component: { name: "cl-select", props: { options: options.status } }, |
| | | value: "æªç¥", |
| | | span: 12, |
| | | required: true |
| | | }, |
| | | { |
| | | label: t('æ»éé'), |
| | | prop: "totalWeight", |
| | | hook: "number", |
| | | component: { name: "el-input-number", props: { min: 0 } }, |
| | | span: 12, |
| | | required: true |
| | | }, |
| | | { |
| | | label: t('碳积å'), |
| | | prop: "carbonPoint", |
| | | hook: "number", |
| | | component: { name: "el-input-number", props: { min: 0 } }, |
| | | span: 12, |
| | | required: true |
| | | }, |
| | | { |
| | | label: t('宿æ¶é´'), |
| | | prop: "finishTime", |
| | | component: { |
| | | name: "el-date-picker", |
| | | props: { type: "datetime", valueFormat: "YYYY-MM-DD HH:mm:ss" } |
| | | }, |
| | | span: 12 |
| | | } |
| | | ] |
| | | }); |
| | | |
| | | // cl-table |
| | | const Table = useTable({ |
| | | columns: [ |
| | | { type: "selection" }, |
| | | { label: t('æºæåç§°'), prop: "departmentName", minWidth: 140 }, |
| | | { label: t('ææºå·'), prop: "campusUserPhone", minWidth: 140 }, |
| | | { label: t('ç¨æ·å'), prop: "campusUserName", minWidth: 140 }, |
| | | { label: t('订åç¼å·'), prop: "orderNo", minWidth: 140 }, |
| | | { |
| | | label: t('订åç±»å'), |
| | | prop: "orderType", |
| | | minWidth: 120, |
| | | dict: options.orderType |
| | | }, |
| | | { label: t('å¦å·/å·¥å·'), prop: "campusUserId", minWidth: 120 }, |
| | | { label: t('ç«ç¹ID'), prop: "siteId", minWidth: 120 }, |
| | | { label: t('忣åID'), prop: "sorterId", minWidth: 120 }, |
| | | { label: t('é¢çº¦ID'), prop: "appointmentId", minWidth: 120 }, |
| | | { label: t('ç¶æ'), prop: "status", minWidth: 120, dict: options.status }, |
| | | { label: t('æ»éé'), prop: "totalWeight", minWidth: 140, sortable: "custom" }, |
| | | { label: t('碳积å'), prop: "carbonPoint", minWidth: 140, sortable: "custom" }, |
| | | { |
| | | label: t('宿æ¶é´'), |
| | | prop: "finishTime", |
| | | minWidth: 170, |
| | | sortable: "custom", |
| | | component: { name: "cl-date-text" } |
| | | }, |
| | | { |
| | | label: t('å建æ¶é´'), |
| | | prop: "createTime", |
| | | minWidth: 170, |
| | | sortable: "desc", |
| | | component: { name: "cl-date-text" } |
| | | }, |
| | | /*{ |
| | | label: t('æ´æ°æ¶é´'), |
| | | prop: "updateTime", |
| | | minWidth: 170, |
| | | sortable: "custom", |
| | | component: { name: "cl-date-text" } |
| | | }, |
| | | */ |
| | | { |
| | | type: 'op', |
| | | width: 300, |
| | | buttons({ scope }) { |
| | | return [ |
| | | 'edit', |
| | | 'delete', |
| | | { |
| | | label: '详æ
', |
| | | onClick() { |
| | | refs.orderDetail.open(scope.row.orderNo); |
| | | } |
| | | } |
| | | ]; |
| | | } |
| | | } |
| | | ] |
| | | }); |
| | | |
| | | // cl-search |
| | | const Search = useSearch(); |
| | | |
| | | // cl-crud |
| | | const Crud = useCrud( |
| | | { |
| | | service: service.shop.recycleorder |
| | | }, |
| | | (app) => { |
| | | app.refresh(); |
| | | } |
| | | ); |
| | | |
| | | // å·æ° |
| | | function refresh(params?: any) { |
| | | Crud.value?.refresh(params); |
| | | } |
| | | </script> |
| New file |
| | |
| | | <template> |
| | | <cl-crud ref="Crud"> |
| | | <cl-row> |
| | | <!-- å·æ°æé® --> |
| | | <cl-refresh-btn /> |
| | | <!-- æ°å¢æé® --> |
| | | <cl-add-btn /> |
| | | <!-- å é¤æé® --> |
| | | <cl-multi-delete-btn /> |
| | | <cl-flex1 /> |
| | | <!-- æ¡ä»¶æç´¢ --> |
| | | <cl-search ref="Search" /> |
| | | </cl-row> |
| | | |
| | | <cl-row> |
| | | <!-- æ°æ®è¡¨æ ¼ --> |
| | | <cl-table ref="Table" /> |
| | | </cl-row> |
| | | |
| | | <cl-row> |
| | | <cl-flex1 /> |
| | | <!-- å页æ§ä»¶ --> |
| | | <cl-pagination /> |
| | | </cl-row> |
| | | |
| | | <!-- æ°å¢ãç¼è¾ --> |
| | | <cl-upsert ref="Upsert" /> |
| | | </cl-crud> |
| | | </template> |
| | | |
| | | <script lang="ts" setup> |
| | | defineOptions({ |
| | | name: "recycle-recycleorderitem" |
| | | }); |
| | | |
| | | import { useCrud, useTable, useUpsert, useSearch } from "@cool-vue/crud"; |
| | | import { useCool } from "/@/cool"; |
| | | import { useI18n } from "vue-i18n"; |
| | | import { reactive } from "vue"; |
| | | import OrderSelect from "/$/recycle/components/order-select.vue"; |
| | | import ItemSelect from "/$/recycle/components/item-select.vue"; |
| | | |
| | | const { service } = useCool(); |
| | | const { t } = useI18n(); |
| | | |
| | | // é项 |
| | | const options = reactive({ |
| | | status: [ |
| | | { label: t('å¯ç¨'), value: 0, type: "danger" }, |
| | | { label: t('ç¦ç¨'), value: 1, type: "success" } |
| | | ] |
| | | }); |
| | | |
| | | // cl-upsert |
| | | const Upsert = useUpsert({ |
| | | items: [ |
| | | { |
| | | label: t('éæ©è®¢å'), |
| | | prop: "orderId", |
| | | component: { vm: OrderSelect }, |
| | | span: 12, |
| | | required: true |
| | | }, |
| | | { |
| | | label: t('å¯åæ¶ç©åç¼å·'), |
| | | prop: "typeId", |
| | | component: { name: "el-input", props: { clearable: true } }, |
| | | span: 12, |
| | | required: true |
| | | }, |
| | | { |
| | | label: t('åç§°'), |
| | | prop: "name", |
| | | component: { name: "el-input", props: { clearable: true } }, |
| | | span: 12, |
| | | required: true |
| | | }, |
| | | { |
| | | label: t('计éåä½'), |
| | | prop: "unit", |
| | | component: { name: "el-input", props: { clearable: true } }, |
| | | span: 12, |
| | | required: true |
| | | }, |
| | | { |
| | | label: t('ä»·æ ¼(å
)'), |
| | | prop: "price", |
| | | hook: "number", |
| | | component: { name: "el-input-number", props: { min: 0 } }, |
| | | span: 12, |
| | | required: true |
| | | }, |
| | | { |
| | | label: t('碳积å'), |
| | | prop: "carbonPoint", |
| | | hook: "number", |
| | | component: { name: "el-input-number", props: { min: 0 } }, |
| | | span: 12, |
| | | required: true |
| | | }, |
| | | { |
| | | label: t('åºåºç¼ç '), |
| | | prop: "category", |
| | | component: { name: "el-input", props: { clearable: true } }, |
| | | span: 12, |
| | | required: true |
| | | }, |
| | | { |
| | | label: t('ç¶æ'), |
| | | prop: "status", |
| | | component: { name: "el-radio-group", options: options.status }, |
| | | value: 0, |
| | | required: true |
| | | } |
| | | ] |
| | | }); |
| | | |
| | | // cl-table |
| | | const Table = useTable({ |
| | | columns: [ |
| | | { type: "selection" }, |
| | | { label: t('订åç¼å·'), prop: "orderNo", minWidth: 140 }, |
| | | { label: t('å¯åæ¶ç©ç¼ç '), prop: "typeId", minWidth: 120 }, |
| | | { label: t('åç§°'), prop: "name", minWidth: 140 }, |
| | | { label: t('计éåä½'), prop: "unit", minWidth: 140 }, |
| | | { label: t('ä»·æ ¼(å
)'), prop: "price", minWidth: 140, sortable: "custom" }, |
| | | { label: t('碳积å'), prop: "carbonPoint", minWidth: 140, sortable: "custom" }, |
| | | { label: t('åºåºç¼ç '), prop: "category", minWidth: 120 }, |
| | | { |
| | | label: t('ç¶æ'), |
| | | prop: "status", |
| | | minWidth: 100, |
| | | component: { name: "cl-switch" }, |
| | | dict: options.status |
| | | }, |
| | | { |
| | | label: t('å建æ¶é´'), |
| | | prop: "createTime", |
| | | minWidth: 170, |
| | | sortable: "desc", |
| | | component: { name: "cl-date-text" } |
| | | }, |
| | | { |
| | | label: t('æ´æ°æ¶é´'), |
| | | prop: "updateTime", |
| | | minWidth: 170, |
| | | sortable: "custom", |
| | | component: { name: "cl-date-text" } |
| | | }, |
| | | { type: "op", buttons: ["edit", "delete"] } |
| | | ] |
| | | }); |
| | | |
| | | // cl-search |
| | | const Search = useSearch(); |
| | | |
| | | // cl-crud |
| | | const Crud = useCrud( |
| | | { |
| | | service: service.shop.recycleorderitem |
| | | }, |
| | | (app) => { |
| | | app.refresh(); |
| | | } |
| | | ); |
| | | |
| | | // å·æ° |
| | | function refresh(params?: any) { |
| | | Crud.value?.refresh(params); |
| | | } |
| | | </script> |
| New file |
| | |
| | | <template> |
| | | <cl-crud ref="Crud"> |
| | | <cl-row> |
| | | <!-- å·æ°æé® --> |
| | | <cl-refresh-btn /> |
| | | <!-- æ°å¢æé® --> |
| | | <cl-add-btn /> |
| | | <!-- å é¤æé® --> |
| | | <cl-multi-delete-btn /> |
| | | <cl-flex1 /> |
| | | <!-- æ¡ä»¶æç´¢ --> |
| | | <cl-search ref="Search" /> |
| | | </cl-row> |
| | | |
| | | <cl-row> |
| | | <!-- æ°æ®è¡¨æ ¼ --> |
| | | <cl-table ref="Table" /> |
| | | </cl-row> |
| | | |
| | | <cl-row> |
| | | <cl-flex1 /> |
| | | <!-- å页æ§ä»¶ --> |
| | | <cl-pagination /> |
| | | </cl-row> |
| | | |
| | | <!-- æ°å¢ãç¼è¾ --> |
| | | <cl-upsert ref="Upsert" /> |
| | | </cl-crud> |
| | | </template> |
| | | |
| | | <script lang="ts" setup> |
| | | defineOptions({ |
| | | name: "finance-transaction" |
| | | }); |
| | | |
| | | import { useCrud, useTable, useUpsert, useSearch } from "@cool-vue/crud"; |
| | | import { useCool } from "/@/cool"; |
| | | import { useI18n } from "vue-i18n"; |
| | | import { reactive } from "vue"; |
| | | import UserSelect from "/$/user/components/user-select.vue"; |
| | | |
| | | const { service } = useCool(); |
| | | const { t } = useI18n(); |
| | | |
| | | // é项 |
| | | const options = reactive({ |
| | | type: [ |
| | | { label: t('æ¶å
¥'), value: "æ¶å
¥", type: "danger" }, |
| | | { label: t('æ¯åº'), value: "æ¯åº", type: "success" } |
| | | ], |
| | | sourceType: [ |
| | | { label: t('åæ¶'), value: 'åæ¶' }, |
| | | { label: t('åå'), value: 'åå' }, |
| | | { label: t('èµ é'), value: 'èµ é' }, |
| | | { label: t('æ¥å'), value: 'æ¥å' }, |
| | | { label: t('æèµ '), value: 'æèµ ' }, |
| | | { label: t('ç¾å°'), value: 'ç¾å°' }, |
| | | ] |
| | | }); |
| | | |
| | | // cl-upsert |
| | | const Upsert = useUpsert({ |
| | | items: [ |
| | | { |
| | | label: t('éæ©ç¨æ·'), |
| | | prop: "userId", |
| | | component: { vm: UserSelect }, |
| | | required: true |
| | | }, |
| | | { |
| | | label: t("鿩妿 ¡"), |
| | | prop: "departmentId", |
| | | component: { |
| | | name: 'cl-dept-select', |
| | | props: { |
| | | multiple: false, // åé / true å¤é |
| | | placeholder: "è¯·éæ©å¦æ ¡", |
| | | checkStrictly: true, // ç¶åèç¹ä¸èå¨ |
| | | immediate: true // ç«å³å è½½é¨é¨æ |
| | | } |
| | | }, |
| | | required: true, |
| | | }, |
| | | { |
| | | label: t('æµæ°´ç±»å'), |
| | | prop: "type", |
| | | component: { name: "el-radio-group", options: options.type }, |
| | | value: "æ¶å
¥", |
| | | required: true |
| | | }, |
| | | { |
| | | label: t('éé¢'), |
| | | prop: "amount", |
| | | hook: "number", |
| | | component: { name: "el-input-number", props: { min: 0 } }, |
| | | span: 12, |
| | | required: true |
| | | }, |
| | | { |
| | | label: t('æ¥æºç±»å'), |
| | | prop: "sourceType", |
| | | component: { name: "cl-select", props: { options: options.sourceType } }, |
| | | value: "åæ¶", |
| | | span: 12, |
| | | required: true |
| | | }, |
| | | { |
| | | label: t('夿³¨'), |
| | | prop: "remark", |
| | | component: { name: "el-input", props: { type: "textarea", rows: 4 } } |
| | | }, |
| | | { |
| | | label: t('订åID'), |
| | | prop: "orderId", |
| | | component: { name: "el-input", props: { clearable: true } }, |
| | | span: 12 |
| | | } |
| | | ] |
| | | }); |
| | | |
| | | // cl-table |
| | | const Table = useTable({ |
| | | columns: [ |
| | | { type: "selection" }, |
| | | { label: t('æµç§°'), prop: "userName", minWidth: 140 }, |
| | | { label: t('æå±æºæ'), prop: "departmentName", minWidth: 120 }, |
| | | { label: t('æµæ°´ç±»å'), prop: "type", minWidth: 120, dict: options.type }, |
| | | { label: t('éé¢'), prop: "amount", minWidth: 140, sortable: "custom" }, |
| | | { |
| | | label: t('æ¥æºç±»å'), |
| | | prop: "sourceType", |
| | | minWidth: 120, |
| | | dict: options.sourceType |
| | | }, |
| | | { label: t('夿³¨'), prop: "remark", showOverflowTooltip: true, minWidth: 200 }, |
| | | { label: t('订åID'), prop: "orderId", minWidth: 140 }, |
| | | { |
| | | label: t('å建æ¶é´'), |
| | | prop: "createTime", |
| | | minWidth: 170, |
| | | sortable: "desc", |
| | | component: { name: "cl-date-text" } |
| | | }, |
| | | /*{ |
| | | label: t('æ´æ°æ¶é´'), |
| | | prop: "updateTime", |
| | | minWidth: 170, |
| | | sortable: "custom", |
| | | component: { name: "cl-date-text" } |
| | | }, |
| | | */ |
| | | { type: "op", buttons: ["edit", "delete"] } |
| | | ] |
| | | }); |
| | | |
| | | // cl-search |
| | | const Search = useSearch(); |
| | | |
| | | // cl-crud |
| | | const Crud = useCrud( |
| | | { |
| | | service: service.shop.transaction |
| | | }, |
| | | (app) => { |
| | | app.refresh(); |
| | | } |
| | | ); |
| | | |
| | | // å·æ° |
| | | function refresh(params?: any) { |
| | | Crud.value?.refresh(params); |
| | | } |
| | | </script> |
| | |
| | | "ç¶æ": "ç¶æ", |
| | | "å建æ¶é´": "å建æ¶é´", |
| | | "éæ©ç¨æ·": "éæ©ç¨æ·", |
| | | "å§å": "å§å" |
| | | "å§å": "å§å", |
| | | "å¦ç": "å¦ç", |
| | | "èå¸": "èå¸", |
| | | "å¦é¢åç§°": "å¦é¢åç§°", |
| | | "ä¸ä¸åç§°": "ä¸ä¸åç§°", |
| | | "ç级åç§°": "ç级åç§°", |
| | | "å¦é¢ID": "å¦é¢ID", |
| | | "ä¸ä¸ID": "ä¸ä¸ID", |
| | | "ç级ID": "ç级ID", |
| | | "ç¢³ç§¯åæ»é¢":"ç¢³ç§¯åæ»é¢", |
| | | "å¯ä¸æ è¯":"å¯ä¸æ è¯" |
| | | } |
| | |
| | | <cl-row> |
| | | <!-- å·æ°æé® --> |
| | | <cl-refresh-btn /> |
| | | <!-- æ°å¢æé® --> |
| | | <cl-add-btn /> |
| | | <!-- å é¤æé® --> |
| | | <cl-multi-delete-btn /> |
| | | <cl-flex1 /> |
| | |
| | | value: 2, |
| | | type: 'warning' |
| | | } |
| | | ], |
| | | role: [ |
| | | { |
| | | label: t('å¦ç'), |
| | | value: 'å¦ç' |
| | | }, |
| | | { |
| | | label: t('èå¸'), |
| | | value: 'èå¸' |
| | | }, |
| | | { |
| | | label: t('æªç¥'), |
| | | value: 'æªç¥' |
| | | } |
| | | ] |
| | | }); |
| | | |
| | |
| | | width: 60 |
| | | }, |
| | | { |
| | | label: t('æå±åä½'), |
| | | prop: 'departmentName', |
| | | minWidth: 150 |
| | | }, |
| | | { |
| | | label: t('æµç§°'), |
| | | prop: 'nickName', |
| | | minWidth: 150 |
| | | }, |
| | | { |
| | | label: t('çæ¥'), |
| | | prop: 'birthday', |
| | | minWidth: 150 |
| | | }, |
| | | { |
| | |
| | | minWidth: 120 |
| | | }, |
| | | { |
| | | label: t('è§è²'), |
| | | prop: 'role', |
| | | minWidth: 120 |
| | | }, |
| | | { |
| | | label: t('æ§å«'), |
| | | prop: 'gender', |
| | | dict: options.gender, |
| | | minWidth: 120 |
| | | }, |
| | | { |
| | | label: t('ç¢³ç§¯åæ»é¢'), |
| | | prop: 'carbonBalance', |
| | | minWidth: 120 |
| | | }, |
| | | { |
| | | label: t('å¦é¢åç§°'), |
| | | prop: 'collegeName', |
| | | minWidth: 120 |
| | | }, |
| | | { |
| | | label: t('ä¸ä¸åç§°'), |
| | | prop: 'majorName', |
| | | minWidth: 120 |
| | | }, |
| | | { |
| | | label: t('ç级åç§°'), |
| | | prop: 'className', |
| | | minWidth: 120 |
| | | }, |
| | | { |
| | |
| | | component: { name: 'cl-upload' } |
| | | }, |
| | | { |
| | | label: t("éæ©é¨é¨"), |
| | | prop: "departmentId", |
| | | component: { |
| | | name: 'cl-dept-select', |
| | | props: { |
| | | multiple: false, // åé / true å¤é |
| | | placeholder: "è¯·éæ©é¨é¨", |
| | | checkStrictly: true, // ç¶åèç¹ä¸èå¨ |
| | | immediate: true // ç«å³å è½½é¨é¨æ |
| | | } |
| | | }, |
| | | required: true, |
| | | }, |
| | | { |
| | | prop: 'unionid', |
| | | label: t('å¯ä¸æ è¯'), |
| | | component: { name: 'el-input' }, |
| | | required: true |
| | | }, |
| | | { |
| | | prop: 'nickName', |
| | | label: t('æµç§°'), |
| | | component: { name: 'el-input' }, |
| | | required: true |
| | | }, |
| | | { |
| | | prop: 'birthday', |
| | | label: t('çæ¥'), |
| | | component: { name: 'el-input' } |
| | | }, |
| | | |
| | | { |
| | | prop: 'phone', |
| | | label: t('ææºå·'), |
| | |
| | | } |
| | | }, |
| | | { |
| | | prop: 'role', |
| | | label: t('è§è²'), |
| | | value: 'å¦ç', |
| | | component: { |
| | | name: 'el-radio-group', |
| | | options: options.role |
| | | } |
| | | }, |
| | | { |
| | | prop: 'carbonBalance', |
| | | label: t('ç¢³ç§¯åæ»é¢'), |
| | | value: 0, |
| | | component: { name: 'el-input' } |
| | | }, |
| | | { |
| | | prop: 'collegeId', |
| | | label: t('å¦é¢ID'), |
| | | component: { name: 'el-input' } |
| | | }, |
| | | { |
| | | prop: 'collegeName', |
| | | label: t('å¦é¢åç§°'), |
| | | component: { name: 'el-input' } |
| | | }, |
| | | { |
| | | prop: 'majorId', |
| | | label: t('ä¸ä¸ID'), |
| | | component: { name: 'el-input' } |
| | | }, |
| | | { |
| | | prop: 'majorName', |
| | | label: t('ä¸ä¸åç§°'), |
| | | component: { name: 'el-input' } |
| | | }, |
| | | { |
| | | prop: 'classId', |
| | | label: t('ç级ID'), |
| | | component: { name: 'el-input' } |
| | | }, |
| | | { |
| | | prop: 'className', |
| | | label: t('ç级åç§°'), |
| | | component: { name: 'el-input' } |
| | | }, |
| | | { |
| | | prop: 'status', |
| | | label: t('ç¶æ'), |
| | | value: 1, |
| New file |
| | |
| | | ç°å¨ç»ä¸ä¸ªå¦æ ¡çåå¾åæ¶è¿è¥å¹³å°è®¾è®¡ä¸ä¸ªæ¨¡åï¼å³åæ£äººåç®¡çæ¨¡åã |
| | | |
| | | 人å以身份è¯å·ç 为å¯ä¸æ è¯ï¼ä»¥ææºå·ç 为ç»å½è´¦å·ï¼å¯ç åç¬è®¾ç½®ã |
| | | |
| | | |
| | | |
| | | ä¸å¡åè½å
æ¬ï¼ |
| | | |
| | | ç»å½ æå¡å·¥ä½ï¼æå¡ä¸çï¼ |
| | | |
| | | gpsä½ç½®é带å¥åº·æ°æ®ï¼æ¯é´é5åéï¼ å¥åº·æ°æ®å
æ¬ä½æ¸©ï¼è¡åï¼è¡æ°§... çã |
| | | |
| | | 宿¶æ¶æ¯ï¼ç±»ä¼¼äºåè¦æ°æ®ï¼æ¯å¦ä½æ¸©å¼å¸¸ï¼è¡åå¼å¸¸ï¼è¡æ°§å¼å¸¸çï¼è¿ä¸ªæ¯å³æ¶çï¼ä¸åå°5åéçéå¶ã |
| | | |
| | | |
| | | |
| | | ææç¸å
³çè¡¨æ ¼ï¼é½å
å«èº«ä»½è¯å·ç ådepartmentId(departmentId ä» sorteråºæ¬ä¿¡æ¯è¡¨ä¸è·å)ã |
| | | |
| | | |
| | | |
| | | è¿æä¸ç±»ç¨æ·æ¯å¦æ ¡å¸çï¼ä»¥å·¥å·/å¦å·ä¸ºå¯ä¸æ è¯ï¼å¦å¤å
¶å½å±äºä¸ä¸ªå¦æ ¡é¢ç³»ï¼ä¸ä¸ï¼ç级ã |
| | | |
| | | |
| | | |
| | | æ¯ä¸ªå¸çæä¸ä¸ªç¢³ç§¯åbalanceè¡¨ï¼æå¯åæ¶ç©éå°æ¶éç¹æè
æ¯é¢çº¦ä¸é¨åï¼æå
æ¢æç¢³ç§¯åï¼ ä»ç¢³ç§¯åååè´ä¹°ï¼è½¬å¢ç»å
¶ä»äººï¼æè
æ å¿æèµ ï¼è¿äºæ¯ç¢³ç§¯åçæ¶èè¡ä¸ºã |
| | | |
| | | |
| | | |
| | | åæä¼è¡ææç
§ç级ï¼ä¸ä¸ï¼é¢ç³»ï¼æ»æ°å人åç碳积åæåçã |
| | | |
| | | |
| | | |
| | | é¢çº¦ä¸é¨åæ¶å¯åæ¶ç©ç±»ä¼¼äºä¸ä¸ªè®¢åç管çï¼ä»é¢çº¦å¼å§ï¼å°æç»ç»æã |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | åå¾ç大类ï¼å
æ¬ï¼ |
| | | |
| | | ææ¯æå®³ \x6709\x6BD2\x6709\x5BB3 |
| | | |
| | | 湿åå¾ \x6E7F\x5783\x573E |
| | | |
| | | å¯åæ¶-åºçº¸å¼ \x53EF\x56DE\x6536\x002D\x5E9F\x7EB8\x5F20 |
| | | |
| | | å¯åæ¶-åºå¡æ \x53EF\x56DE\x6536\x002D\x5E9F\x5851\x6599 |
| | | |
| | | å¯åæ¶-åºéå± \x53EF\x56DE\x6536\x002D\x5E9F\x91D1\x5C5E |
| | | |
| | | å¯åæ¶-åºç»ç \x53EF\x56DE\x6536\x002D\x5E9F\x73BB\x7483 |
| | | |
| | | å¯åæ¶-åºç»ç© \x53EF\x56DE\x6536\x002D\x5E9F\x7EC7\x7269\x0020 |
| | | |
| | | å¯åæ¶-åºæ§çµå产å \x53EF\x56DE\x6536\x002D\x5E9F\x65E7\x7535\x5B50\x4EA7\x54C1 |
| | | |
| | | å¯åæ¶-åºæ§çµæºçµæ± \x53EF\x56DE\x6536\x002D\x5E9F\x65E7\x7535\x6E90\x7535\x6C60 |
| | | |
| | | 大件åå¾ \x5927\x4EF6\x5783\x573E |
| | | |
| | | å¹²åå¾ \x5E72\x5783\x573E |
| | | |
| | | |
| | | |
| | | 使¯ä»å¸çç妿 ¡åºæ¯åºåï¼ææ¥å¸¸è½è§å°çä¸äºå¯åæ¶ç©-ç©å 对åºå°è¿äºå¤§ç±»ï¼ä»èè½¬æ¢æä¸å¥åºç¡ä¿¡æ¯è¡¨/é
置表ï¼å³æ¯ç§ç±»çå¯åæ¶ç©çå®ä»·ï¼æ¹ä¾¿å¸çååæ£äººåç¸äºäºè§£ã |
| | | |
| | | |
| | | |
| | | æ 论æ¯åæ¶å¯åæ¶ç©-为å¸çåæ¾ç¢³ç§¯åï¼è¿æ¯è´ä¹°ç¢³ç§¯åç妿 ¡æåå°ååï¼é½æ¯ç±åæ£äººåæ¥æ«ç (å¸ççå¯ä¸äºç»´ç /妿 ¡ä¸ç é)ï¼è¿æ ·ç¡®è®¤æµç¨æ¯okã |
| | | |
| | | |
| | | |
| | | æç»è¿è½æç
§åæ£ç¹ï¼åæ£äººåæ¥ç»è®¡åç±»ééï¼ä»·å¼çï¼ä¸é¨åæ¶è®¢åæ°éï¼é宿åååæ°éçã |
| | | |
| | | |
| | | |
| | | åå¾åæ£ç¹è¿è¦æ¾ä¸ä¸ªç«æ±å¼çå±å¹ï¼è®©å¦çèªå·±æå¡-å°±æ¯åªæéäºé常å°çä»·å¼çå¹²å徿è
å¯åæ¶ç©ï¼å°±åºå®åæ¾5个碳积åï¼å°±ä¸ç¨åæ£äººåçandroid app æ¥æä½ï¼ï¼å°±ç±å¤§å±ä¸çæ«ç æºå¨æ«é¢ï¼ä¹åå¼¹åºä¸ä¸ªæåæè
æè°¢ä¹ç±»çã |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | ä½ å
帮æåæä¸äºè¿äºå®ä½å
³ç³»ï¼è®¾è®¡ä¸ä¸æ°æ®ç»æã |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |