一、排查并移除 App 端所有导入、导出功能及相关接口。
二、优化考勤记录模块,仅保留员工姓名搜索。
三、调整售后工单 Tab 样式,与现有 App 页面保持一致。
四、修复排班管理错误提示“暂无排班查看权限”的问题。
五、完成备件台账、备件入库、领用记录及退回功能开发。
六、完成工序流转卡及工序明细功能开发,支持提交、完工、取消等操作。
七、检查 Web 端 10 月 Git 更新,同步一键排产等 App 端相关功能。
八、修复多个页面悬浮新增按钮“+”号偏移、变形问题。
| | |
| | | return content ? `?${content}` : ""; |
| | | } |
| | | |
| | | export function downloadHrmFile(token: string, path: string, params: Record<string, string | number | boolean | undefined> = {}) { |
| | | return new Promise<void>((resolve, reject) => { |
| | | uni.showLoading({ title: "ä¸è½½ä¸â¦", mask: true }); |
| | | uni.downloadFile({ |
| | | url: `${API_BASE_URL}${path}${query(params)}`, |
| | | header: header(token), |
| | | success: result => { |
| | | if (result.statusCode !== 200) return reject(new Error("æä»¶ä¸è½½å¤±è´¥")); |
| | | uni.openDocument({ filePath: result.tempFilePath, showMenu: true, success: () => resolve(), fail: () => { uni.setClipboardData({ data: `${API_BASE_URL}${path}${query(params)}` }); resolve(); } }); |
| | | }, |
| | | fail: () => reject(new Error("æä»¶ä¸è½½å¤±è´¥")), |
| | | complete: () => uni.hideLoading() |
| | | }); |
| | | }); |
| | | } |
| | | |
| | | export function importAttendanceFile(token: string, filePath: string, updateSupport = false) { |
| | | return new Promise<void>((resolve, reject) => uni.uploadFile({ |
| | | url: `${API_BASE_URL}/hrm/attendance/record/import`, filePath, name: "file", header: header(token), formData: { updateSupport: String(updateSupport) }, |
| | | success: response => { try { const result = JSON.parse(response.data) as ApiResponse<unknown>; result.code === 0 ? resolve() : reject(new Error(result.msg || "导å
¥å¤±è´¥")); } catch { reject(new Error("导å
¥ååºè§£æå¤±è´¥")); } }, |
| | | fail: () => reject(new Error("导å
¥å¤±è´¥")) |
| | | })); |
| | | } |
| | | |
| | | export function getHrmDicts(token: string) { return request<DictData[]>("/system/dict-data/simple-list", { header: header(token) }); } |
| | | export function getHrmDeptList(token: string) { return request<DeptSimple[]>("/system/dept/simple-list", { header: header(token) }); } |
| | | export function getHrmPostList(token: string) { return request<SimpleOption[]>("/system/post/simple-list", { header: header(token) }); } |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | import { request } from "./request"; |
| | | import type { PageResult } from "./basic-data"; |
| | | export interface SparePart { id?:number;code?:string;name?:string;specification?:string;unit?:string;location?:string;stockQuantity?:number;safetyQuantity?:number;status?:number;remark?:string } |
| | | export interface SpareMovement { id?:number;sparePartId?:number;sparePartCode?:string;sparePartName?:string;specification?:string;unit?:string;type?:number;quantity?:number;beforeQuantity?:number;afterQuantity?:number;repairId?:number;repairCode?:string;machineryName?:string;receiverName?:string;receiverUserId?:number;operatorUserId?:number;originalId?:number;returnedQuantity?:number;returnableQuantity?:number;remark?:string;createTime?:string } |
| | | export interface SpareSave extends SparePart { initialQuantity?:number } |
| | | export interface SpareAction { requestKey:string;sparePartId?:number;repairId?:number;originalId?:number;receiverUserId?:number;quantity:number;remark:string } |
| | | export interface TransferCard { id?:number;code?:string;workOrderId?:number;workOrderCode?:string;workOrderName?:string;batchCode?:string;itemId?:number;itemCode?:string;itemName?:string;specification?:string;unitMeasureName?:string;transferedQuantity?:number;status?:number;remark?:string;createTime?:string } |
| | | export interface TransferProcess { id?:number;cardId?:number;sort?:number;processId?:number;processCode?:string;processName?:string;inputTime?:string;outputTime?:string;inputQuantity?:number;outputQuantity?:number;unqualifiedQuantity?:number;workstationId?:number;workstationCode?:string;workstationName?:string;userId?:number;nickname?:string;ipqcId?:number;remark?:string } |
| | | type QueryValue=string|number|boolean|undefined; |
| | | function header(token:string){return {Authorization:"Bearer "+token}} |
| | | function query(params:Record<string,QueryValue>){const value=Object.entries(params).filter(([,v])=>v!==undefined&&v!=="").map(([k,v])=>encodeURIComponent(k)+"="+encodeURIComponent(String(v))).join("&");return value?"?"+value:""} |
| | | export function getSparePage(token:string,params:{pageNo:number;pageSize:number;code?:string;name?:string;status?:number;shortageOnly?:boolean}){return request<PageResult<SparePart>>("/mes/dv/spare/page"+query(params),{header:header(token)})} |
| | | export function getSpare(token:string,id:number){return request<SparePart>("/mes/dv/spare/get"+query({id}),{header:header(token)})} |
| | | export function createSpare(token:string,data:SpareSave){return request<number>("/mes/dv/spare/create",{method:"POST",data:data as Record<string,unknown>,header:header(token)})} |
| | | export function updateSpare(token:string,data:SpareSave){return request<boolean>("/mes/dv/spare/update",{method:"PUT",data:data as Record<string,unknown>,header:header(token)})} |
| | | export function deleteSpare(token:string,id:number){return request<boolean>("/mes/dv/spare/delete"+query({id}),{method:"DELETE",header:header(token)})} |
| | | export function getSpareMovementPage(token:string,params:{pageNo:number;pageSize:number;sparePartId?:number;repairId?:number;repairCode?:string;type?:number}){return request<PageResult<SpareMovement>>("/mes/dv/spare/movement-page"+query(params),{header:header(token)})} |
| | | export function receiveSpare(token:string,data:SpareAction){return request<boolean>("/mes/dv/spare/receive",{method:"POST",data:data as unknown as Record<string,unknown>,header:header(token)})} |
| | | export function issueSpare(token:string,data:SpareAction){return request<boolean>("/mes/dv/spare/issue",{method:"POST",data:data as unknown as Record<string,unknown>,header:header(token)})} |
| | | export function returnSpare(token:string,data:SpareAction){return request<boolean>("/mes/dv/spare/return",{method:"POST",data:data as unknown as Record<string,unknown>,header:header(token)})} |
| | | export function getCardPage(token:string,params:{pageNo:number;pageSize:number;code?:string;workOrderCode?:string;status?:number}){return request<PageResult<TransferCard>>("/mes/pro/card/page"+query(params),{header:header(token)})} |
| | | export function getCard(token:string,id:number){return request<TransferCard>("/mes/pro/card/get"+query({id}),{header:header(token)})} |
| | | export function createCard(token:string,data:TransferCard){return request<number>("/mes/pro/card/create",{method:"POST",data:data as Record<string,unknown>,header:header(token)})} |
| | | export function updateCard(token:string,data:TransferCard){return request<boolean>("/mes/pro/card/update",{method:"PUT",data:data as Record<string,unknown>,header:header(token)})} |
| | | export function deleteCard(token:string,id:number){return request<boolean>("/mes/pro/card/delete"+query({id}),{method:"DELETE",header:header(token)})} |
| | | export function submitCard(token:string,id:number){return request<boolean>("/mes/pro/card/submit"+query({id}),{method:"PUT",header:header(token)})} |
| | | export function finishCard(token:string,id:number){return request<boolean>("/mes/pro/card/finish"+query({id}),{method:"PUT",header:header(token)})} |
| | | export function cancelCard(token:string,id:number){return request<boolean>("/mes/pro/card/cancel"+query({id}),{method:"PUT",header:header(token)})} |
| | | export function getCardProcessPage(token:string,params:{pageNo:number;pageSize:number;cardId:number}){return request<PageResult<TransferProcess>>("/mes/pro/card-process/page"+query(params),{header:header(token)})} |
| | | export function createCardProcess(token:string,data:TransferProcess){return request<number>("/mes/pro/card-process/create",{method:"POST",data:data as Record<string,unknown>,header:header(token)})} |
| | | export function updateCardProcess(token:string,data:TransferProcess){return request<boolean>("/mes/pro/card-process/update",{method:"PUT",data:data as Record<string,unknown>,header:header(token)})} |
| | | export function deleteCardProcess(token:string,id:number){return request<boolean>("/mes/pro/card-process/delete"+query({id}),{method:"DELETE",header:header(token)})} |
| | |
| | | return request<boolean>("/mes/pro/task/resume", { method: "PUT", data, header: header(accessToken) }); |
| | | } |
| | | |
| | | export interface BatchScheduleRequest { |
| | | workOrderIds: number[]; startTime: string; previewHash?: string; previewTime?: string; allowLate?: boolean; |
| | | } |
| | | export interface BatchSchedulePreview { |
| | | canExecute: boolean; previewHash: string; previewTime: string; warnings: string[]; |
| | | orders: Array<{ workOrderId: number; workOrderCode?: string; taskCount: number; endTime?: string; late: boolean; error?: string }>; |
| | | tasks: Array<{ workOrderId: number; processId: number; processName: string; workstationName: string; quantity: number; startTime: string; endTime: string }>; |
| | | } |
| | | export function previewBatchSchedule(accessToken: string, data: BatchScheduleRequest) { |
| | | return request<BatchSchedulePreview>("/mes/pro/task/auto-schedule/preview", { method: "POST", data, header: header(accessToken) }); |
| | | } |
| | | export function executeBatchSchedule(accessToken: string, data: BatchScheduleRequest) { |
| | | return request<{ taskIds: number[] }>("/mes/pro/task/auto-schedule", { method: "POST", data, header: header(accessToken) }); |
| | | } |
| | | |
| | | export function getFeedbackPage(accessToken: string, params: { pageNo: number; pageSize: number; code?: string; type?: number; workOrderId?: number; taskId?: number; itemId?: number; feedbackUserId?: number; creator?: string; status?: number }) { |
| | | return request<PageResult<ProFeedback>>(`/mes/pro/feedback/page${query(params)}`, { header: header(accessToken) }); |
| | | } |
| | |
| | | "mes/dv/checkrecord/index": "/pages/mes/dv/checkrecord/index", |
| | | "mes/dv/maintenrecord/index": "/pages/mes/dv/maintenrecord/index", |
| | | "mes/dv/repair/index": "/pages/mes/dv/repair/index", |
| | | "mes/dv/spare/index": "/pages/mes/dv/spare/index", |
| | | "mes/dv/spare-record/index": "/pages/mes/dv/spare-record/index", |
| | | "mes/dv/metering/index": "/pages/mes/dv/metering/index", |
| | | "mes/dv/meteringcheck/index": "/pages/mes/dv/meteringcheck/index", |
| | | "mes/process-design/parameter/index": "/pages/mes/process-design/parameter/index", |
| | |
| | | "mes/pro/task/index": "/pages/mes/pro/task/index", |
| | | "mes/pro/feedback/index": "/pages/mes/pro/feedback/index", |
| | | "mes/pro/workrecord/index": "/pages/mes/pro/workrecord/index", |
| | | "mes/pro/card/index": "/pages/mes/pro/card/index", |
| | | "mes/qc/indicator/index": "/pages/mes/qc/indicator/index", |
| | | "mes/qc/template/index": "/pages/mes/qc/template/index", |
| | | "mes/qc/pendinginspect/index": "/pages/mes/qc/pendinginspect/index", |
| | |
| | | /** |
| | | * äºå¥ç¯å¢å¯¹ç
§è¡¨ã |
| | | * - apiBaseUrl ç»ä¸ä»¥ `/admin-api` ç»å°¾ï¼yudao åå°æ¥å£åç¼ï¼ã |
| | | * - webBaseUrlï¼åªæä¸»åæ¯æ¯æ¢æé
ç½®ï¼9501ï¼ï¼å
¶ä½æä¸»åæ¯âæ¥å£ç«¯å£ +1âçé¨ç½²è§å¾ |
| | | * - webBaseUrlï¼åªæä¸»åæ¯ï¼MOM æºè½æºé ï¼æ¯æ¢æé
ç½®ï¼9501ï¼ï¼å
¶ä½æä¸»åæ¯ï¼MOM æºè½æºé ï¼âæ¥å£ç«¯å£ +1âçé¨ç½²è§å¾ |
| | | * æ¨å¯¼ï¼9500 â 9501ï¼ã9017 / 9027 / 9025 宿µè½æå¼åå°ï¼1.95.78.124:9007 ç®åè¿ä¸ä¸ |
| | | * ï¼ä»
å½±åæ¥è¡¨ / 大å±é¡µï¼ï¼éè¦æ¶æ¢æå®é
å°åå³å¯ã |
| | | * - åä»å ææ ä¸å±é¦é¡µï¼å
å¤ç¨ classicï¼æè®¾è®¡ç¨¿åå ä¸ä¸ª HomeVariant åæ¹è¿ä¸åã |
| | |
| | | export const COMPANY_PROFILES: Record<CompanyCode, AppCompanyConfig> = { |
| | | main: { |
| | | key: "main", |
| | | name: "䏻忝", |
| | | name: "MOM æºè½æºé ", |
| | | homeVariant: "classic", |
| | | apiBaseUrl: "http://36.213.90.123:9500/admin-api", |
| | | webBaseUrl: "http://36.213.90.123:9501", |
| | |
| | | }; |
| | | |
| | | /** â
æå
å¼å
³ï¼åªæ¹è¿ä¸è¡ */ |
| | | export const ACTIVE_COMPANY: CompanyCode = "trt"; |
| | | export const ACTIVE_COMPANY: CompanyCode = "main"; |
| | | |
| | | export const APP_COMPANY: AppCompanyConfig = COMPANY_PROFILES[ACTIVE_COMPANY]; |
| | |
| | | } |
| | | }, |
| | | { |
| | | "path": "spare/index", |
| | | "style": { |
| | | "navigationBarTitleText": "å¤ä»¶å°è´¦" |
| | | } |
| | | }, |
| | | { |
| | | "path": "spare/form", |
| | | "style": { |
| | | "navigationBarTitleText": "å¤ä»¶ç¼è¾" |
| | | } |
| | | }, |
| | | { |
| | | "path": "spare/action", |
| | | "style": { |
| | | "navigationBarTitleText": "å¤ä»¶åºå
¥åº" |
| | | } |
| | | }, |
| | | { |
| | | "path": "spare-record/index", |
| | | "style": { |
| | | "navigationBarTitleText": "é¢ç¨è®°å½" |
| | | } |
| | | }, |
| | | { |
| | | "path": "metering/index", |
| | | "style": { |
| | | "navigationBarTitleText": "计éå¨å
·" |
| | |
| | | "style": { |
| | | "navigationBarTitleText": "å·¥ä½è®°å½" |
| | | } |
| | | }, |
| | | { |
| | | "path": "card/index", |
| | | "style": { |
| | | "navigationBarTitleText": "å·¥åºæµè½¬" |
| | | } |
| | | }, |
| | | { |
| | | "path": "card/form", |
| | | "style": { |
| | | "navigationBarTitleText": "æµè½¬å¡" |
| | | } |
| | | } |
| | | ] |
| | | }, |
| | |
| | | .page{min-height:100vh;padding:20rpx 30rpx 150rpx;box-sizing:border-box;background:#f3f6fb} |
| | | .scene-tabs{display:flex;gap:12rpx;margin-bottom:16rpx;overflow-x:auto}.scene-tabs text{flex:none;padding:12rpx 22rpx;color:#66778c;font-size:24rpx;background:#fff;border:1rpx solid #e2e8f0;border-radius:999rpx}.scene-tabs .active{color:#1769d8;background:#edf5ff;border-color:#9fc2ef} |
| | | .scene-tabs{height:88rpx;margin-bottom:0;white-space:nowrap}.scene-tabs text{display:inline-block;padding:27rpx 20rpx 18rpx;color:#718198;font-size:27rpx}.scene-tabs .active{color:#1769d8;font-weight:600;border-bottom:4rpx solid #1769d8} |
| | | .search{display:flex;align-items:center;height:80rpx;padding:0 20rpx;margin-bottom:18rpx;background:#fff;border-radius:12rpx}.search input{min-width:0;flex:1;font-size:27rpx}.search text{padding-left:18rpx;color:#1769d8;font-size:24rpx} |
| | | .card{padding:24rpx 22rpx 20rpx;margin-bottom:18rpx;background:#fff;border-radius:14rpx;box-shadow:0 8rpx 20rpx rgba(43,69,107,.07)}.head{display:flex;align-items:flex-start;justify-content:space-between;gap:16rpx}.head-main{display:flex;min-width:0;flex:1;flex-direction:column;gap:8rpx}.name{overflow:hidden;color:#20334c;font-size:30rpx;font-weight:700;text-overflow:ellipsis;white-space:nowrap}.sub{color:#78879b;font-size:23rpx} |
| | | .tag{display:inline-flex;flex:none;align-items:center;height:42rpx;padding:0 15rpx;font-size:22rpx;border-radius:999rpx}.tag-blue{color:#1769d8;background:#eef6ff}.tag-green{color:#0e9663;background:#e9fbf2}.tag-orange{color:#c26a12;background:#fff4e7}.tag-danger{color:#c65050;background:#fff0f0}.tag-gray{color:#66778c;background:#f0f3f7} |
| | |
| | | </template> |
| | | |
| | | <style lang="scss" scoped> |
| | | .page{height:100vh;display:flex;flex-direction:column;padding:0 30rpx;box-sizing:border-box;overflow:hidden;background:#f3f6fb}.search{display:flex;align-items:center;height:80rpx;margin:20rpx 0 16rpx;padding:0 20rpx;background:#fff;border-radius:16rpx;box-shadow:0 8rpx 20rpx rgba(43,69,107,.06)}.search input{min-width:0;flex:1;color:#1e3049;font-size:27rpx}.search text{flex:none;color:#1769d8;font-size:24rpx}.content{height:0;flex:1;padding-bottom:150rpx;box-sizing:border-box}.row{padding:24rpx 22rpx 20rpx;margin-bottom:18rpx;background:#fff;border-radius:16rpx;box-shadow:0 10rpx 24rpx rgba(43,69,107,.08)}.head{display:flex;align-items:flex-start;justify-content:space-between;gap:16rpx}.head>view:first-child{display:flex;min-width:0;flex:1;flex-direction:column;gap:8rpx}.head>view:first-child text:last-child{overflow:hidden;color:#78879b;font-size:23rpx;text-overflow:ellipsis;white-space:nowrap}.name{overflow:hidden;color:#20334c;font-size:30rpx;font-weight:600;text-overflow:ellipsis;white-space:nowrap}.status-wrap{display:flex;align-items:center;flex:none;height:48rpx}.status{display:inline-flex;align-items:center;height:36rpx;padding:0 16rpx;font-size:22rpx;border-radius:999rpx;white-space:nowrap}.grid{display:grid;grid-template-columns:1fr 1fr;gap:10rpx 18rpx;padding:16rpx 0;margin-top:16rpx;color:#66778c;font-size:23rpx;border-top:1rpx solid #edf1f6;border-bottom:1rpx solid #edf1f6}.grid text{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.actions{display:flex;flex-wrap:wrap;justify-content:flex-end;gap:12rpx;padding-top:16rpx}.actions button{min-height:50rpx;padding:0 16rpx;margin:0;color:#1769d8;font-size:22rpx;line-height:48rpx;background:#f5f8ff;border:1rpx solid #8ab3ee;border-radius:8rpx}.actions .danger{color:#c65050;background:#fff7f7;border-color:#e3a0a0}.actions button::after,.fab::after{border:0}.more,.state{display:block;padding:35rpx;color:#8795a8;font-size:26rpx;text-align:center}.error{color:#c3654d}.tag-blue{color:#1769d8;background:#eef6ff;border:1rpx solid #c9e1ff}.tag-orange{color:#b06a00;background:#fff6df;border:1rpx solid #f0d390}.tag-green{color:#0e9663;background:#e9fbf2;border:1rpx solid #b8eed4}.fab{position:fixed;right:30rpx;bottom:calc(32rpx + env(safe-area-inset-bottom));display:flex;align-items:center;justify-content:center;width:132rpx;height:132rpx;min-height:132rpx;padding:0;margin:0;background:#1769d8;border-radius:50%;box-shadow:0 12rpx 24rpx rgba(23,105,216,.3)}.fab view,.fab view::before{display:block;width:38rpx;height:8rpx;background:#fff;border-radius:4rpx;content:""}.fab view{position:relative}.fab view::before{position:absolute;transform:rotate(90deg)} |
| | | .page{height:100vh;display:flex;flex-direction:column;padding:0 30rpx;box-sizing:border-box;overflow:hidden;background:#f3f6fb}.search{display:flex;align-items:center;height:80rpx;margin:20rpx 0 16rpx;padding:0 20rpx;background:#fff;border-radius:16rpx;box-shadow:0 8rpx 20rpx rgba(43,69,107,.06)}.search input{min-width:0;flex:1;color:#1e3049;font-size:27rpx}.search text{flex:none;color:#1769d8;font-size:24rpx}.content{height:0;flex:1;padding-bottom:150rpx;box-sizing:border-box}.row{padding:24rpx 22rpx 20rpx;margin-bottom:18rpx;background:#fff;border-radius:16rpx;box-shadow:0 10rpx 24rpx rgba(43,69,107,.08)}.head{display:flex;align-items:flex-start;justify-content:space-between;gap:16rpx}.head>view:first-child{display:flex;min-width:0;flex:1;flex-direction:column;gap:8rpx}.head>view:first-child text:last-child{overflow:hidden;color:#78879b;font-size:23rpx;text-overflow:ellipsis;white-space:nowrap}.name{overflow:hidden;color:#20334c;font-size:30rpx;font-weight:600;text-overflow:ellipsis;white-space:nowrap}.status-wrap{display:flex;align-items:center;flex:none;height:48rpx}.status{display:inline-flex;align-items:center;height:36rpx;padding:0 16rpx;font-size:22rpx;border-radius:999rpx;white-space:nowrap}.grid{display:grid;grid-template-columns:1fr 1fr;gap:10rpx 18rpx;padding:16rpx 0;margin-top:16rpx;color:#66778c;font-size:23rpx;border-top:1rpx solid #edf1f6;border-bottom:1rpx solid #edf1f6}.grid text{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.actions{display:flex;flex-wrap:wrap;justify-content:flex-end;gap:12rpx;padding-top:16rpx}.actions button{min-height:50rpx;padding:0 16rpx;margin:0;color:#1769d8;font-size:22rpx;line-height:48rpx;background:#f5f8ff;border:1rpx solid #8ab3ee;border-radius:8rpx}.actions .danger{color:#c65050;background:#fff7f7;border-color:#e3a0a0}.actions button::after,.fab::after{border:0}.more,.state{display:block;padding:35rpx;color:#8795a8;font-size:26rpx;text-align:center}.error{color:#c3654d}.tag-blue{color:#1769d8;background:#eef6ff;border:1rpx solid #c9e1ff}.tag-orange{color:#b06a00;background:#fff6df;border:1rpx solid #f0d390}.tag-green{color:#0e9663;background:#e9fbf2;border:1rpx solid #b8eed4}.fab{position:fixed;right:30rpx;bottom:calc(32rpx + env(safe-area-inset-bottom));display:flex;align-items:center;justify-content:center;width:132rpx;height:132rpx;min-height:132rpx;padding:0;margin:0;background:#1769d8;border-radius:50%;box-shadow:0 12rpx 24rpx rgba(23,105,216,.3)}.fab view{width:38rpx;height:38rpx;background:linear-gradient(#fff,#fff) center/38rpx 8rpx no-repeat,linear-gradient(#fff,#fff) center/8rpx 38rpx no-repeat}.fab view::before,.fab view::after{display:none;content:none} |
| | | </style> |
| | |
| | | <script setup lang="ts"> |
| | | import HrmCrudPage, { type CrudConfig } from "../components/HrmCrudPage.vue"; |
| | | import { createHoliday, deleteHoliday, downloadHrmFile, getHolidayPage, updateHoliday } from "../../../api/hrm"; |
| | | import { createHoliday, deleteHoliday, getHolidayPage, updateHoliday } from "../../../api/hrm"; |
| | | const config: CrudConfig = { title:"è忥", permission:"hrm:attendance-holiday", fields:[{key:"name",label:"è忥åç§°",required:true},{key:"startDate",label:"å¼å§æ¥æ",required:true},{key:"endDate",label:"ç»ææ¥æ",required:true},{key:"type",label:"ç±»å",type:"number"},{key:"isLegal",label:"æ³å®è忥",type:"number"},{key:"remark",label:"夿³¨"}], cardFields:[{key:"name",label:"åç§°"},{key:"startDate",label:"å¼å§æ¥æ"},{key:"endDate",label:"ç»ææ¥æ"},{key:"typeName",label:"ç±»å"},{key:"isLegal",label:"æ¯å¦æ³å®"}], load:(t,k)=>getHolidayPage(t,{pageNo:1,pageSize:100,name:k||undefined}), create:createHoliday, update:updateHoliday, remove:deleteHoliday }; |
| | | config.exportData = (token, keyword) => downloadHrmFile(token, "/hrm/attendance/holiday/export-excel", { name: keyword || undefined }); |
| | | </script><template><HrmCrudPage :config="config" /></template> |
| | |
| | | <script setup lang="ts"> |
| | | import { computed, ref } from "vue"; import { onPullDownRefresh, onShow } from "@dcloudio/uni-app"; |
| | | import { getAttendanceRecordPage, type AttendanceRecord } from "../../../api/hrm"; import { useAuth } from "../../../stores/auth"; import { toast } from "../shared"; |
| | | const {hasPermission,state}=useAuth(); const rows=ref<AttendanceRecord[]>([]), keyword=ref(""), date=ref(""), loading=ref(false); const canQuery=computed(()=>hasPermission("hrm:attendance-record:query")); |
| | | async function load(){if(!state.accessToken||!canQuery.value||loading.value)return;loading.value=true;try{const d=await getAttendanceRecordPage(state.accessToken,{pageNo:1,pageSize:100,userName:keyword.value||undefined,date:date.value||undefined});rows.value=d.list||[];}catch(e){toast(e instanceof Error?e.message:"å 载失败");}finally{loading.value=false;uni.stopPullDownRefresh();}} |
| | | const {hasPermission,state}=useAuth(); const rows=ref<AttendanceRecord[]>([]), keyword=ref(""), loading=ref(false); const canQuery=computed(()=>hasPermission("hrm:attendance-record:query")); |
| | | async function load(){if(!state.accessToken||!canQuery.value||loading.value)return;loading.value=true;try{const d=await getAttendanceRecordPage(state.accessToken,{pageNo:1,pageSize:100,userName:keyword.value||undefined});rows.value=d.list||[];}catch(e){toast(e instanceof Error?e.message:"å 载失败");}finally{loading.value=false;uni.stopPullDownRefresh();}} |
| | | onShow(load);onPullDownRefresh(load); |
| | | </script><template><view class="page"><template v-if="canQuery"><view class="search"><input v-model="keyword" placeholder="æç´¢åå·¥å§å" @confirm="load"/><text @click="load">æç´¢</text></view><view class="search date"><input v-model="date" placeholder="è夿¥æ YYYY-MM-DD" @confirm="load"/><text @click="date='';load()">æ¸
é¤</text></view><view v-for="row in rows" :key="row.id" class="card"><view class="head"><view class="head-main"><text class="name">{{row.userName||'--'}}</text><text class="sub">{{row.deptName||'--'}} · {{row.date||'--'}}</text></view><text class="tag tag-blue">{{row.dataSourceName||'èå¤'}}</text></view><view class="grid"><text>ä¸çï¼{{row.clockInTime||'--'}}</text><text>ä¸çï¼{{row.clockOutTime||'--'}}</text><text>ä¸çç¶æï¼{{row.clockInTypeName||'--'}}</text><text>ä¸çç¶æï¼{{row.clockOutTypeName||'--'}}</text><text>å·¥æ¶ï¼{{row.workHours??0}} å°æ¶</text><text>å çï¼{{row.overtimeHours??0}} å°æ¶</text><text>å°ç¹ï¼{{row.location||'--'}}</text></view></view><view v-if="!rows.length" class="state">{{loading?'å è½½ä¸...':'ææ èå¤è®°å½'}}</view></template><view v-else class="state">ææ èå¤è®°å½æ¥çæé</view></view></template><style scoped lang="scss">@import "../list.scss";.date{margin-top:-10rpx}</style> |
| | | </script><template><view class="page"><template v-if="canQuery"><view class="search"><input v-model="keyword" placeholder="æç´¢åå·¥å§å" @confirm="load"/><text @click="load">æç´¢</text></view><view v-for="row in rows" :key="row.id" class="card"><view class="head"><view class="head-main"><text class="name">{{row.userName||'--'}}</text><text class="sub">{{row.deptName||'--'}} · {{row.date||'--'}}</text></view><text class="tag tag-blue">{{row.dataSourceName||'èå¤'}}</text></view><view class="grid"><text>ä¸çï¼{{row.clockInTime||'--'}}</text><text>ä¸çï¼{{row.clockOutTime||'--'}}</text><text>ä¸çç¶æï¼{{row.clockInTypeName||'--'}}</text><text>ä¸çç¶æï¼{{row.clockOutTypeName||'--'}}</text><text>å·¥æ¶ï¼{{row.workHours??0}} å°æ¶</text><text>å çï¼{{row.overtimeHours??0}} å°æ¶</text><text>å°ç¹ï¼{{row.location||'--'}}</text></view></view><view v-if="!rows.length" class="state">{{loading?'å è½½ä¸...':'ææ èå¤è®°å½'}}</view></template><view v-else class="state">ææ èå¤è®°å½æ¥çæé</view></view></template><style scoped lang="scss">@import "../list.scss";</style> |
| | |
| | | <script setup lang="ts"> |
| | | import HrmCrudPage, { type CrudConfig } from "../components/HrmCrudPage.vue"; |
| | | import { createAttendanceRule, deleteAttendanceRule, downloadHrmFile, getAttendanceRulePage, updateAttendanceRule } from "../../../api/hrm"; |
| | | import { createAttendanceRule, deleteAttendanceRule, getAttendanceRulePage, updateAttendanceRule } from "../../../api/hrm"; |
| | | const config: CrudConfig = { title:"èå¤è§å", permission:"hrm:attendance-rule", fields:[{key:"name",label:"è§ååç§°",required:true},{key:"deptId",label:"é¨é¨ID",type:"number"},{key:"workStartTime",label:"ä¸çæ¶é´",required:true},{key:"workEndTime",label:"ä¸çæ¶é´",required:true},{key:"lateAllowMinutes",label:"è¿å°å®½é(åé)",type:"number"},{key:"earlyAllowMinutes",label:"æ©é宽é(åé)",type:"number"},{key:"overtimeThreshold",label:"å çèµ·ç®(åé)",type:"number"},{key:"locationName",label:"æå¡å°ç¹"},{key:"locationAddress",label:"å°ç¹å°å"},{key:"longitude",label:"ç»åº¦",type:"number"},{key:"latitude",label:"纬度",type:"number"},{key:"radiusMeters",label:"ææèå´(ç±³)",type:"number"},{key:"locationRequired",label:"å¿
é¡»å¨èå´å
",type:"switch"},{key:"remark",label:"夿³¨"}], cardFields:[{key:"name",label:"åç§°"},{key:"deptName",label:"é¨é¨"},{key:"workStartTime",label:"ä¸ç"},{key:"workEndTime",label:"ä¸ç"},{key:"locationName",label:"æå¡å°ç¹"},{key:"radiusMeters",label:"èå´(ç±³)"}], load:(t,k)=>getAttendanceRulePage(t,{pageNo:1,pageSize:100,name:k||undefined}), create:createAttendanceRule, update:updateAttendanceRule, remove:deleteAttendanceRule }; |
| | | config.exportData = (token, keyword) => downloadHrmFile(token, "/hrm/attendance/rule/export-excel", { name: keyword || undefined }); |
| | | </script><template><HrmCrudPage :config="config" /></template> |
| | |
| | | create: (token: string, data: Record<string, unknown>) => Promise<unknown>; |
| | | update: (token: string, data: Record<string, unknown>) => Promise<unknown>; |
| | | remove: (token: string, id: number) => Promise<unknown>; |
| | | exportData?: (token: string, keyword: string) => Promise<unknown>; |
| | | |
| | | } |
| | | const props = defineProps<{ config: CrudConfig }>(); |
| | | const { hasPermission, state } = useAuth(); |
| | |
| | | try { await props.config.remove(state.accessToken, Number(row.id)); toast("å 餿å"); await load(); } |
| | | catch (error) { toast(error instanceof Error ? error.message : "å é¤å¤±è´¥"); } |
| | | } |
| | | async function exportData() { |
| | | if (!state.accessToken || !props.config.exportData) return; |
| | | try { await props.config.exportData(state.accessToken, keyword.value.trim()); toast("å¯¼åºæä»¶å·²æå¼"); } |
| | | catch (error) { toast(error instanceof Error ? error.message : "导åºå¤±è´¥"); } |
| | | } |
| | | onShow(load); onPullDownRefresh(load); |
| | | </script> |
| | | |
| | |
| | | <view class="page"> |
| | | <template v-if="state.accessToken && canQuery"> |
| | | <view class="search"><input v-model="keyword" :placeholder="`æç´¢${config.title}`" confirm-type="search" @confirm="load" /><text @click="load">æç´¢</text></view> |
| | | <view v-if="config.exportData && hasPermission(`${config.permission}:export`)" class="export-row"><button @click="exportData">导åº</button></view> |
| | | <view v-for="row in rows" :key="Number(row.id)" class="card"> |
| | | <view class="head"><view class="head-main"><text class="name">{{ text(row[config.cardFields[0]?.key]) }}</text><text class="sub">{{ config.title }}</text></view><text class="tag tag-blue">{{ row.status === 1 ? "åç¨" : "å¯ç¨" }}</text></view> |
| | | <view class="grid"><text v-for="item in config.cardFields.slice(1)" :key="item.key">{{ item.label }}ï¼{{ text(row[item.key]) }}</text></view> |
| | |
| | | @import "../list.scss"; |
| | | @import "../form.scss"; |
| | | .mask{position:fixed;z-index:30;inset:0;display:flex;align-items:flex-end;background:rgba(16,31,51,.48)}.editor{width:100%;max-height:86vh;overflow:auto;padding:24rpx 30rpx 48rpx;background:#f6f7f9;border-radius:24rpx 24rpx 0 0}.editor-title{display:flex;justify-content:space-between;padding:10rpx 4rpx 24rpx;color:#20334c;font-size:30rpx;font-weight:600}.editor-title text:last-child{font-size:40rpx;font-weight:400}.editor .field{background:#fff}.editor .field:first-of-type{border-radius:14rpx 14rpx 0 0}.editor .field input{text-align:right}.editor switch{margin-left:auto} |
| | | .export-row{display:flex;justify-content:flex-end;margin:-8rpx 0 16rpx}.export-row button{margin:0;color:#1769d8;font-size:24rpx;background:#fff} |
| | | </style> |
| | |
| | | <script setup lang="ts"> |
| | | import { computed, ref } from "vue"; |
| | | import { ref } from "vue"; |
| | | import { onShow } from "@dcloudio/uni-app"; |
| | | import { getEmployeePage, getEmployeeScheduleList, getShiftList, saveEmployeeSchedule, type Employee, type EmployeeSchedule, type Shift } from "../../../api/hrm"; |
| | | import { useAuth } from "../../../stores/auth"; |
| | | import PickerSheet from "../../mes/process-design/components/PickerSheet.vue"; |
| | | import { toast } from "../shared"; |
| | | const { hasPermission, state } = useAuth(); |
| | | const { state } = useAuth(); |
| | | const period = ref(new Date().toISOString().slice(0, 7)); const employees = ref<Employee[]>([]); const shifts = ref<Shift[]>([]); const rows = ref<EmployeeSchedule[]>([]); |
| | | const employeeVisible = ref(false); const shiftVisible = ref(false); const selectedEmployee = ref<number>(); const date = ref(""); const selectedShift = ref<number>(); const saving = ref(false); |
| | | const canQuery = computed(() => hasPermission("hrm:schedule:query")); |
| | | async function load() { |
| | | if (!state.accessToken || !canQuery.value) return; |
| | | if (!state.accessToken) return; |
| | | try { |
| | | const [employeeData, shiftData, scheduleData] = await Promise.all([getEmployeePage(state.accessToken, { pageNo: 1, pageSize: 100 }), getShiftList(state.accessToken), getEmployeeScheduleList(state.accessToken, { yearMonth: period.value })]); |
| | | employees.value = employeeData.list || []; shifts.value = shiftData; rows.value = scheduleData; |
| | |
| | | } |
| | | onShow(load); |
| | | </script> |
| | | <template><view class="page"><template v-if="canQuery"><view class="form-card"><view class="field"><text>æçæä»½</text><input v-model="period" placeholder="YYYY-MM" @confirm="load" /></view><view class="field"><text>åå·¥</text><view class="picker" @click="employeeVisible = true"><text>{{ employees.find(item => item.id === selectedEmployee)?.name || "è¯·éæ©åå·¥" }}</text><text>âº</text></view></view><view class="field"><text>æ¥æ</text><input v-model="date" placeholder="YYYY-MM-DD" /></view><view class="field"><text>çæ¬¡</text><view class="picker" @click="shiftVisible = true"><text>{{ shifts.find(item => item.id === selectedShift)?.name || "伿¯/æ¸
é¤" }}</text><text>âº</text></view></view><button class="save" :loading="saving" @click="saveDay">ä¿åå½å¤©æç</button></view><view v-for="row in rows" :key="`${row.employeeId}-${row.date}`" class="card"><view class="head"><view class="head-main"><text class="name">{{ row.employeeName || "--" }}</text><text class="sub">{{ row.employeeNo || "--" }} · {{ row.date }}</text></view><text class="tag tag-blue">{{ row.shiftName || "伿¯" }}</text></view><view class="actions"><button class="danger" @click="clear(row)">æ¸
é¤å½å¤©</button></view></view><view v-if="!rows.length" class="state">ææ æçæ°æ®</view></template><view v-else class="state">ææ æçæ¥çæé</view><PickerSheet v-model:show="employeeVisible" title="éæ©åå·¥" :items="employees.map(item => ({ key: item.id || 0, label: item.name || '--', sub: item.employeeNo }))" :selected-keys="selectedEmployee ? [selectedEmployee] : []" @confirm="keys => selectedEmployee = Number(keys[0])" /><PickerSheet v-model:show="shiftVisible" title="éæ©çæ¬¡" :items="[{ key: 0, label: '伿¯/æ¸
é¤' }, ...shifts.map(item => ({ key: item.id || 0, label: item.name || '--', sub: `${item.startTime}-${item.endTime}` }))]" :selected-keys="[selectedShift || 0]" @confirm="keys => selectedShift = Number(keys[0]) || undefined" /></view></template> |
| | | <template><view class="page"><template v-if="state.accessToken"><view class="form-card"><view class="field"><text>æçæä»½</text><input v-model="period" placeholder="YYYY-MM" @confirm="load" /></view><view class="field"><text>åå·¥</text><view class="picker" @click="employeeVisible = true"><text>{{ employees.find(item => item.id === selectedEmployee)?.name || "è¯·éæ©åå·¥" }}</text><text>âº</text></view></view><view class="field"><text>æ¥æ</text><input v-model="date" placeholder="YYYY-MM-DD" /></view><view class="field"><text>çæ¬¡</text><view class="picker" @click="shiftVisible = true"><text>{{ shifts.find(item => item.id === selectedShift)?.name || "伿¯/æ¸
é¤" }}</text><text>âº</text></view></view><button class="save" :loading="saving" @click="saveDay">ä¿åå½å¤©æç</button></view><view v-for="row in rows" :key="`${row.employeeId}-${row.date}`" class="card"><view class="head"><view class="head-main"><text class="name">{{ row.employeeName || "--" }}</text><text class="sub">{{ row.employeeNo || "--" }} · {{ row.date }}</text></view><text class="tag tag-blue">{{ row.shiftName || "伿¯" }}</text></view><view class="actions"><button class="danger" @click="clear(row)">æ¸
é¤å½å¤©</button></view></view><view v-if="!rows.length" class="state">ææ æçæ°æ®</view></template><view v-else class="state">请å
ç»å½åæ¥çæç</view><PickerSheet v-model:show="employeeVisible" title="éæ©åå·¥" :items="employees.map(item => ({ key: item.id || 0, label: item.name || '--', sub: item.employeeNo }))" :selected-keys="selectedEmployee ? [selectedEmployee] : []" @confirm="keys => selectedEmployee = Number(keys[0])" /><PickerSheet v-model:show="shiftVisible" title="éæ©çæ¬¡" :items="[{ key: 0, label: '伿¯/æ¸
é¤' }, ...shifts.map(item => ({ key: item.id || 0, label: item.name || '--', sub: `${item.startTime}-${item.endTime}` }))]" :selected-keys="[selectedShift || 0]" @confirm="keys => selectedShift = Number(keys[0]) || undefined" /></view></template> |
| | | <style scoped lang="scss">@import "../list.scss";@import "../form.scss";.form-card{padding-bottom:20rpx;margin-bottom:24rpx}.form-card .save{margin:22rpx 24rpx 0}.field input{text-align:right}</style> |
| | |
| | | <script setup lang="ts"> |
| | | import HrmCrudPage, { type CrudConfig } from "../components/HrmCrudPage.vue"; |
| | | import { createShift, deleteShift, downloadHrmFile, getShiftPage, updateShift } from "../../../api/hrm"; |
| | | import { createShift, deleteShift, getShiftPage, updateShift } from "../../../api/hrm"; |
| | | const config: CrudConfig = { title:"çæ¬¡", permission:"hrm:shift", fields:[{key:"name",label:"çæ¬¡åç§°",required:true},{key:"startTime",label:"ä¸çæ¶é´",required:true},{key:"endTime",label:"ä¸çæ¶é´",required:true},{key:"workHours",label:"æ åå·¥æ¶",type:"number",required:true},{key:"crossDay",label:"æ¯å¦è·¨å¤©",type:"switch"},{key:"color",label:"æ ç¾é¢è²"},{key:"remark",label:"夿³¨"}], cardFields:[{key:"name",label:"åç§°"},{key:"startTime",label:"ä¸çæ¶é´"},{key:"endTime",label:"ä¸çæ¶é´"},{key:"workHours",label:"æ åå·¥æ¶"},{key:"crossDay",label:"跨天"}], load:(t,k)=>getShiftPage(t,{pageNo:1,pageSize:100,name:k||undefined}), create:createShift, update:updateShift, remove:deleteShift }; |
| | | config.exportData = (token, keyword) => downloadHrmFile(token, "/hrm/shift/export-excel", { name: keyword || undefined }); |
| | | |
| | | </script><template><HrmCrudPage :config="config" /></template> |
| | |
| | | </template> |
| | | |
| | | <style lang="scss" scoped> |
| | | .page{height:100vh;display:flex;flex-direction:column;padding:0 30rpx;box-sizing:border-box;overflow:hidden;background:#f3f6fb}.search{display:flex;align-items:center;height:80rpx;margin:20rpx 0 16rpx;padding:0 20rpx;background:#fff;border-radius:16rpx;box-shadow:0 8rpx 20rpx rgba(43,69,107,.06)}.search input{flex:1;font-size:27rpx}.search text{color:#1769d8;font-size:24rpx}.content{height:0;flex:1;padding-bottom:150rpx;box-sizing:border-box}.row{padding:24rpx 22rpx 20rpx;margin-bottom:18rpx;background:#fff;border-radius:16rpx;box-shadow:0 10rpx 24rpx rgba(43,69,107,.08)}.head{display:flex;align-items:flex-start;justify-content:space-between;gap:16rpx}.head>view:first-child{display:flex;min-width:0;flex:1;flex-direction:column;gap:8rpx}.head>view:first-child text:last-child{color:#78879b;font-size:23rpx}.name{overflow:hidden;color:#20334c;font-size:30rpx;font-weight:600;text-overflow:ellipsis;white-space:nowrap}.status-wrap{display:flex;align-items:center;flex:none;height:48rpx}.status{display:inline-flex;align-items:center;height:36rpx;padding:0 16rpx;font-size:22rpx;border-radius:999rpx;white-space:nowrap}.tags{display:flex;flex-wrap:wrap;gap:10rpx;margin-top:14rpx}.tags text{padding:4rpx 12rpx;color:#1769d8;font-size:22rpx;background:#edf5ff;border:1rpx solid #bfdbff;border-radius:999rpx}.grid{display:grid;gap:10rpx;padding:16rpx 0;margin-top:16rpx;color:#66778c;font-size:23rpx;border-top:1rpx solid #edf1f6;border-bottom:1rpx solid #edf1f6}.grid text{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.actions{display:flex;flex-wrap:wrap;justify-content:flex-end;gap:12rpx;padding-top:16rpx}.actions button{min-height:50rpx;padding:0 16rpx;margin:0;color:#1769d8;font-size:22rpx;line-height:48rpx;background:#f5f8ff;border:1rpx solid #8ab3ee;border-radius:8rpx}.actions .danger{color:#c65050;background:#fff7f7;border-color:#e3a0a0}.actions button::after,.fab::after{border:0}.more,.state{display:block;padding:35rpx;color:#8795a8;font-size:26rpx;text-align:center}.error{color:#c3654d}.fab{position:fixed;right:30rpx;bottom:calc(32rpx + env(safe-area-inset-bottom));display:flex;align-items:center;justify-content:center;width:132rpx;height:132rpx;min-height:132rpx;padding:0;margin:0;background:#1769d8;border-radius:50%;box-shadow:0 12rpx 24rpx rgba(23,105,216,.3)}.fab view,.fab view::before{display:block;width:38rpx;height:8rpx;background:#fff;border-radius:4rpx;content:""}.fab view{position:relative}.fab view::before{position:absolute;transform:rotate(90deg)} |
| | | .page{height:100vh;display:flex;flex-direction:column;padding:0 30rpx;box-sizing:border-box;overflow:hidden;background:#f3f6fb}.search{display:flex;align-items:center;height:80rpx;margin:20rpx 0 16rpx;padding:0 20rpx;background:#fff;border-radius:16rpx;box-shadow:0 8rpx 20rpx rgba(43,69,107,.06)}.search input{flex:1;font-size:27rpx}.search text{color:#1769d8;font-size:24rpx}.content{height:0;flex:1;padding-bottom:150rpx;box-sizing:border-box}.row{padding:24rpx 22rpx 20rpx;margin-bottom:18rpx;background:#fff;border-radius:16rpx;box-shadow:0 10rpx 24rpx rgba(43,69,107,.08)}.head{display:flex;align-items:flex-start;justify-content:space-between;gap:16rpx}.head>view:first-child{display:flex;min-width:0;flex:1;flex-direction:column;gap:8rpx}.head>view:first-child text:last-child{color:#78879b;font-size:23rpx}.name{overflow:hidden;color:#20334c;font-size:30rpx;font-weight:600;text-overflow:ellipsis;white-space:nowrap}.status-wrap{display:flex;align-items:center;flex:none;height:48rpx}.status{display:inline-flex;align-items:center;height:36rpx;padding:0 16rpx;font-size:22rpx;border-radius:999rpx;white-space:nowrap}.tags{display:flex;flex-wrap:wrap;gap:10rpx;margin-top:14rpx}.tags text{padding:4rpx 12rpx;color:#1769d8;font-size:22rpx;background:#edf5ff;border:1rpx solid #bfdbff;border-radius:999rpx}.grid{display:grid;gap:10rpx;padding:16rpx 0;margin-top:16rpx;color:#66778c;font-size:23rpx;border-top:1rpx solid #edf1f6;border-bottom:1rpx solid #edf1f6}.grid text{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.actions{display:flex;flex-wrap:wrap;justify-content:flex-end;gap:12rpx;padding-top:16rpx}.actions button{min-height:50rpx;padding:0 16rpx;margin:0;color:#1769d8;font-size:22rpx;line-height:48rpx;background:#f5f8ff;border:1rpx solid #8ab3ee;border-radius:8rpx}.actions .danger{color:#c65050;background:#fff7f7;border-color:#e3a0a0}.actions button::after,.fab::after{border:0}.more,.state{display:block;padding:35rpx;color:#8795a8;font-size:26rpx;text-align:center}.error{color:#c3654d}.fab{position:fixed;right:30rpx;bottom:calc(32rpx + env(safe-area-inset-bottom));display:flex;align-items:center;justify-content:center;width:132rpx;height:132rpx;min-height:132rpx;padding:0;margin:0;background:#1769d8;border-radius:50%;box-shadow:0 12rpx 24rpx rgba(23,105,216,.3)}.fab view{width:38rpx;height:38rpx;background:linear-gradient(#fff,#fff) center/38rpx 8rpx no-repeat,linear-gradient(#fff,#fff) center/8rpx 38rpx no-repeat}.fab view::before,.fab view::after{display:none;content:none} |
| | | </style> |
| | |
| | | </template> |
| | | |
| | | <style lang="scss" scoped> |
| | | .page{height:100vh;display:flex;flex-direction:column;padding:0 30rpx;box-sizing:border-box;overflow:hidden;background:#f3f6fb}.search{display:flex;align-items:center;height:80rpx;margin:20rpx 0 16rpx;padding:0 20rpx;background:#fff;border-radius:16rpx;box-shadow:0 8rpx 20rpx rgba(43,69,107,.06)}.search input{flex:1;font-size:27rpx}.search text{color:#1769d8;font-size:24rpx}.content{height:0;flex:1;padding-bottom:150rpx;box-sizing:border-box}.row{padding:24rpx 22rpx 20rpx;margin-bottom:18rpx;background:#fff;border-radius:16rpx;box-shadow:0 10rpx 24rpx rgba(43,69,107,.08)}.head{display:flex;align-items:flex-start;justify-content:space-between;gap:16rpx}.head>view:first-child{display:flex;min-width:0;flex:1;flex-direction:column;gap:8rpx}.head>view:first-child text:last-child{color:#78879b;font-size:23rpx}.name{overflow:hidden;color:#20334c;font-size:30rpx;font-weight:600;text-overflow:ellipsis;white-space:nowrap}.status-wrap{display:flex;align-items:center;flex:none;height:48rpx}.status{display:inline-flex;align-items:center;height:36rpx;padding:0 16rpx;font-size:22rpx;border-radius:999rpx;white-space:nowrap}.tag-approved{color:#1769d8;background:#edf5ff;border:1rpx solid #bfdbff}.grid{display:grid;gap:10rpx;padding:16rpx 0;margin-top:16rpx;color:#66778c;font-size:23rpx;border-top:1rpx solid #edf1f6;border-bottom:1rpx solid #edf1f6}.grid text{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.actions{display:flex;flex-wrap:wrap;justify-content:flex-end;gap:12rpx;padding-top:16rpx}.actions button{min-height:50rpx;padding:0 16rpx;margin:0;color:#1769d8;font-size:22rpx;line-height:48rpx;background:#f5f8ff;border:1rpx solid #8ab3ee;border-radius:8rpx}.actions .danger{color:#c65050;background:#fff7f7;border-color:#e3a0a0}.actions button::after,.fab::after{border:0}.more,.state{display:block;padding:35rpx;color:#8795a8;font-size:26rpx;text-align:center}.error{color:#c3654d}.fab{position:fixed;right:30rpx;bottom:calc(32rpx + env(safe-area-inset-bottom));display:flex;align-items:center;justify-content:center;width:132rpx;height:132rpx;min-height:132rpx;padding:0;margin:0;background:#1769d8;border-radius:50%;box-shadow:0 12rpx 24rpx rgba(23,105,216,.3)}.fab view,.fab view::before{display:block;width:38rpx;height:8rpx;background:#fff;border-radius:4rpx;content:""}.fab view{position:relative}.fab view::before{position:absolute;transform:rotate(90deg)} |
| | | .page{height:100vh;display:flex;flex-direction:column;padding:0 30rpx;box-sizing:border-box;overflow:hidden;background:#f3f6fb}.search{display:flex;align-items:center;height:80rpx;margin:20rpx 0 16rpx;padding:0 20rpx;background:#fff;border-radius:16rpx;box-shadow:0 8rpx 20rpx rgba(43,69,107,.06)}.search input{flex:1;font-size:27rpx}.search text{color:#1769d8;font-size:24rpx}.content{height:0;flex:1;padding-bottom:150rpx;box-sizing:border-box}.row{padding:24rpx 22rpx 20rpx;margin-bottom:18rpx;background:#fff;border-radius:16rpx;box-shadow:0 10rpx 24rpx rgba(43,69,107,.08)}.head{display:flex;align-items:flex-start;justify-content:space-between;gap:16rpx}.head>view:first-child{display:flex;min-width:0;flex:1;flex-direction:column;gap:8rpx}.head>view:first-child text:last-child{color:#78879b;font-size:23rpx}.name{overflow:hidden;color:#20334c;font-size:30rpx;font-weight:600;text-overflow:ellipsis;white-space:nowrap}.status-wrap{display:flex;align-items:center;flex:none;height:48rpx}.status{display:inline-flex;align-items:center;height:36rpx;padding:0 16rpx;font-size:22rpx;border-radius:999rpx;white-space:nowrap}.tag-approved{color:#1769d8;background:#edf5ff;border:1rpx solid #bfdbff}.grid{display:grid;gap:10rpx;padding:16rpx 0;margin-top:16rpx;color:#66778c;font-size:23rpx;border-top:1rpx solid #edf1f6;border-bottom:1rpx solid #edf1f6}.grid text{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.actions{display:flex;flex-wrap:wrap;justify-content:flex-end;gap:12rpx;padding-top:16rpx}.actions button{min-height:50rpx;padding:0 16rpx;margin:0;color:#1769d8;font-size:22rpx;line-height:48rpx;background:#f5f8ff;border:1rpx solid #8ab3ee;border-radius:8rpx}.actions .danger{color:#c65050;background:#fff7f7;border-color:#e3a0a0}.actions button::after,.fab::after{border:0}.more,.state{display:block;padding:35rpx;color:#8795a8;font-size:26rpx;text-align:center}.error{color:#c3654d}.fab{position:fixed;right:30rpx;bottom:calc(32rpx + env(safe-area-inset-bottom));display:flex;align-items:center;justify-content:center;width:132rpx;height:132rpx;min-height:132rpx;padding:0;margin:0;background:#1769d8;border-radius:50%;box-shadow:0 12rpx 24rpx rgba(23,105,216,.3)}.fab view{width:38rpx;height:38rpx;background:linear-gradient(#fff,#fff) center/38rpx 8rpx no-repeat,linear-gradient(#fff,#fff) center/8rpx 38rpx no-repeat}.fab view::before,.fab view::after{display:none;content:none} |
| | | </style> |
| | |
| | | </template> |
| | | |
| | | <style lang="scss" scoped> |
| | | .page{height:100vh;display:flex;flex-direction:column;padding:0 30rpx;box-sizing:border-box;overflow:hidden;background:#f3f6fb}.search{display:flex;align-items:center;height:80rpx;margin:20rpx 0 16rpx;padding:0 20rpx;background:#fff;border-radius:16rpx;box-shadow:0 8rpx 20rpx rgba(43,69,107,.06)}.search input{flex:1;font-size:27rpx}.search text{color:#1769d8;font-size:24rpx}.content{height:0;flex:1;padding-bottom:150rpx;box-sizing:border-box}.row{padding:24rpx 22rpx 20rpx;margin-bottom:18rpx;background:#fff;border-radius:16rpx;box-shadow:0 10rpx 24rpx rgba(43,69,107,.08)}.head{display:flex;justify-content:space-between;gap:16rpx}.head>view{display:flex;min-width:0;flex:1;flex-direction:column;gap:8rpx}.head text:last-child{color:#78879b;font-size:23rpx}.name{overflow:hidden;color:#20334c;font-size:30rpx;font-weight:600;text-overflow:ellipsis;white-space:nowrap}.status{display:inline-flex!important;align-items:center!important;justify-content:center!important;flex:none!important;width:auto!important;min-width:0!important;min-height:36rpx!important;height:36rpx!important;padding:4rpx 14rpx!important;color:#1769d8;background:#eef5ff;border-radius:999rpx!important;line-height:1.2!important;white-space:nowrap}.grid{display:grid;gap:10rpx;padding:16rpx 0;margin-top:16rpx;color:#66778c;font-size:23rpx;border-top:1rpx solid #edf1f6;border-bottom:1rpx solid #edf1f6}.grid text{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.actions{display:flex;flex-wrap:wrap;justify-content:flex-end;gap:12rpx;padding-top:16rpx}.actions button{min-height:50rpx;padding:0 16rpx;margin:0;color:#1769d8;font-size:22rpx;line-height:48rpx;background:#f5f8ff;border:1rpx solid #8ab3ee;border-radius:8rpx}.actions .danger{color:#c65050;background:#fff7f7;border-color:#e3a0a0}.actions button::after,.fab::after{border:0}.more,.state{display:block;padding:35rpx;color:#8795a8;font-size:26rpx;text-align:center}.error{color:#c3654d}.fab{position:fixed;right:30rpx;bottom:calc(32rpx + env(safe-area-inset-bottom));display:flex;align-items:center;justify-content:center;width:132rpx;height:132rpx;min-height:132rpx;padding:0;margin:0;background:#1769d8;border-radius:50%;box-shadow:0 12rpx 24rpx rgba(23,105,216,.3)}.fab view,.fab view::before{display:block;width:38rpx;height:8rpx;background:#fff;border-radius:4rpx;content:""}.fab view{position:relative}.fab view::before{position:absolute;transform:rotate(90deg)} |
| | | .page{height:100vh;display:flex;flex-direction:column;padding:0 30rpx;box-sizing:border-box;overflow:hidden;background:#f3f6fb}.search{display:flex;align-items:center;height:80rpx;margin:20rpx 0 16rpx;padding:0 20rpx;background:#fff;border-radius:16rpx;box-shadow:0 8rpx 20rpx rgba(43,69,107,.06)}.search input{flex:1;font-size:27rpx}.search text{color:#1769d8;font-size:24rpx}.content{height:0;flex:1;padding-bottom:150rpx;box-sizing:border-box}.row{padding:24rpx 22rpx 20rpx;margin-bottom:18rpx;background:#fff;border-radius:16rpx;box-shadow:0 10rpx 24rpx rgba(43,69,107,.08)}.head{display:flex;justify-content:space-between;gap:16rpx}.head>view{display:flex;min-width:0;flex:1;flex-direction:column;gap:8rpx}.head text:last-child{color:#78879b;font-size:23rpx}.name{overflow:hidden;color:#20334c;font-size:30rpx;font-weight:600;text-overflow:ellipsis;white-space:nowrap}.status{display:inline-flex!important;align-items:center!important;justify-content:center!important;flex:none!important;width:auto!important;min-width:0!important;min-height:36rpx!important;height:36rpx!important;padding:4rpx 14rpx!important;color:#1769d8;background:#eef5ff;border-radius:999rpx!important;line-height:1.2!important;white-space:nowrap}.grid{display:grid;gap:10rpx;padding:16rpx 0;margin-top:16rpx;color:#66778c;font-size:23rpx;border-top:1rpx solid #edf1f6;border-bottom:1rpx solid #edf1f6}.grid text{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.actions{display:flex;flex-wrap:wrap;justify-content:flex-end;gap:12rpx;padding-top:16rpx}.actions button{min-height:50rpx;padding:0 16rpx;margin:0;color:#1769d8;font-size:22rpx;line-height:48rpx;background:#f5f8ff;border:1rpx solid #8ab3ee;border-radius:8rpx}.actions .danger{color:#c65050;background:#fff7f7;border-color:#e3a0a0}.actions button::after,.fab::after{border:0}.more,.state{display:block;padding:35rpx;color:#8795a8;font-size:26rpx;text-align:center}.error{color:#c3654d}.fab{position:fixed;right:30rpx;bottom:calc(32rpx + env(safe-area-inset-bottom));display:flex;align-items:center;justify-content:center;width:132rpx;height:132rpx;min-height:132rpx;padding:0;margin:0;background:#1769d8;border-radius:50%;box-shadow:0 12rpx 24rpx rgba(23,105,216,.3)}.fab view{width:38rpx;height:38rpx;background:linear-gradient(#fff,#fff) center/38rpx 8rpx no-repeat,linear-gradient(#fff,#fff) center/8rpx 38rpx no-repeat}.fab view::before,.fab view::after{display:none;content:none} |
| | | </style> |
| | |
| | | </template> |
| | | |
| | | <style lang="scss" scoped> |
| | | .page{height:100vh;display:flex;flex-direction:column;padding:0 24rpx;box-sizing:border-box;overflow:hidden;background:#f3f6fb}.search{display:flex;flex:none;align-items:center;height:80rpx;margin:20rpx 0 14rpx;padding:0 20rpx;background:#fff;border-radius:16rpx;box-shadow:0 8rpx 20rpx rgba(43,69,107,.06)}.search input{flex:1;font-size:27rpx}.search text{color:#1769d8;font-size:24rpx}.main-layout{height:0;min-height:0;flex:1;display:flex;gap:16rpx;padding-bottom:150rpx;box-sizing:border-box}.type-nav{width:188rpx;height:100%;flex:none;background:#fff;border-radius:16rpx;box-shadow:0 8rpx 20rpx rgba(43,69,107,.05)}.type-item{position:relative;display:flex;align-items:center;gap:4rpx;min-height:78rpx;padding:14rpx 12rpx 14rpx 16rpx;box-sizing:border-box;color:#617287;font-size:23rpx;border-bottom:1rpx solid #edf1f6}.type-item:last-child{border-bottom:0}.tree-arrow{width:24rpx;height:34rpx;flex:none;opacity:0}.tree-arrow.show{position:relative;opacity:1}.tree-arrow.show::after{position:absolute;top:11rpx;left:5rpx;width:12rpx;height:12rpx;box-sizing:border-box;border-right:3rpx solid #7a8a9d;border-bottom:3rpx solid #7a8a9d;content:"";transform:rotate(-45deg)}.tree-arrow.open::after{transform:rotate(45deg)}.type-item text{display:-webkit-box;min-width:0;overflow:hidden;line-height:1.25;text-overflow:ellipsis;-webkit-line-clamp:2;-webkit-box-orient:vertical}.type-item.active{color:#1769d8;font-weight:600;background:#eef5ff}.type-item.active::before{position:absolute;top:18rpx;bottom:18rpx;left:0;width:6rpx;background:#1769d8;border-radius:0 6rpx 6rpx 0;content:""}.type-item.active .tree-arrow.show::after{border-color:#1769d8}.content{height:100%;min-width:0;flex:1;box-sizing:border-box}.row{padding:24rpx 22rpx 20rpx;margin-bottom:18rpx;background:#fff;border-radius:16rpx;box-shadow:0 10rpx 24rpx rgba(43,69,107,.08)}.head{display:flex;align-items:center;justify-content:space-between;gap:16rpx}.head>view{display:flex;min-width:0;flex:1;flex-direction:column;gap:8rpx}.head>view text:last-child{overflow:hidden;color:#78879b;font-size:23rpx;text-overflow:ellipsis;white-space:nowrap}.name{overflow:hidden;color:#20334c;font-size:30rpx;font-weight:600;text-overflow:ellipsis;white-space:nowrap}.status{display:inline-flex!important;align-items:center!important;justify-content:center!important;flex:none!important;width:auto!important;min-width:0!important;min-height:36rpx!important;height:36rpx!important;padding:4rpx 14rpx!important;font-size:22rpx!important;border-radius:999rpx!important;line-height:1.2!important;white-space:nowrap}.running{color:#1c9b68;background:#e8f8f0}.maintain{color:#d78321;background:#fff3df}.stopped{color:#8d9bad;background:#f0f3f6}.grid{display:grid;grid-template-columns:1fr;gap:10rpx;padding:16rpx 0;margin-top:16rpx;color:#66778c;font-size:23rpx;border-top:1rpx solid #edf1f6;border-bottom:1rpx solid #edf1f6}.grid text{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.actions{display:flex;flex-wrap:wrap;justify-content:flex-end;gap:12rpx;padding-top:16rpx}.actions button{min-height:50rpx;padding:0 16rpx;margin:0;color:#1769d8;font-size:22rpx;line-height:48rpx;background:#f5f8ff;border:1rpx solid #8ab3ee;border-radius:8rpx}.actions .danger{color:#c65050;background:#fff7f7;border-color:#e3a0a0}.actions button::after,.fab::after{border:0}.more,.state{display:block;padding:35rpx;color:#8795a8;font-size:26rpx;text-align:center}.error{color:#c3654d}.fab{position:fixed;right:30rpx;bottom:calc(32rpx + env(safe-area-inset-bottom));z-index:10;display:flex;align-items:center;justify-content:center;width:132rpx;height:132rpx;min-height:132rpx;padding:0;margin:0;color:#fff;background:#1769d8;border-radius:50%;box-shadow:0 12rpx 24rpx rgba(23,105,216,.3)}.fab view,.fab view::before{display:block;width:38rpx;height:8rpx;background:#fff;border-radius:4rpx;content:""}.fab view{position:relative}.fab view::before{position:absolute;transform:rotate(90deg)} |
| | | .page{height:100vh;display:flex;flex-direction:column;padding:0 24rpx;box-sizing:border-box;overflow:hidden;background:#f3f6fb}.search{display:flex;flex:none;align-items:center;height:80rpx;margin:20rpx 0 14rpx;padding:0 20rpx;background:#fff;border-radius:16rpx;box-shadow:0 8rpx 20rpx rgba(43,69,107,.06)}.search input{flex:1;font-size:27rpx}.search text{color:#1769d8;font-size:24rpx}.main-layout{height:0;min-height:0;flex:1;display:flex;gap:16rpx;padding-bottom:150rpx;box-sizing:border-box}.type-nav{width:188rpx;height:100%;flex:none;background:#fff;border-radius:16rpx;box-shadow:0 8rpx 20rpx rgba(43,69,107,.05)}.type-item{position:relative;display:flex;align-items:center;gap:4rpx;min-height:78rpx;padding:14rpx 12rpx 14rpx 16rpx;box-sizing:border-box;color:#617287;font-size:23rpx;border-bottom:1rpx solid #edf1f6}.type-item:last-child{border-bottom:0}.tree-arrow{width:24rpx;height:34rpx;flex:none;opacity:0}.tree-arrow.show{position:relative;opacity:1}.tree-arrow.show::after{position:absolute;top:11rpx;left:5rpx;width:12rpx;height:12rpx;box-sizing:border-box;border-right:3rpx solid #7a8a9d;border-bottom:3rpx solid #7a8a9d;content:"";transform:rotate(-45deg)}.tree-arrow.open::after{transform:rotate(45deg)}.type-item text{display:-webkit-box;min-width:0;overflow:hidden;line-height:1.25;text-overflow:ellipsis;-webkit-line-clamp:2;-webkit-box-orient:vertical}.type-item.active{color:#1769d8;font-weight:600;background:#eef5ff}.type-item.active::before{position:absolute;top:18rpx;bottom:18rpx;left:0;width:6rpx;background:#1769d8;border-radius:0 6rpx 6rpx 0;content:""}.type-item.active .tree-arrow.show::after{border-color:#1769d8}.content{height:100%;min-width:0;flex:1;box-sizing:border-box}.row{padding:24rpx 22rpx 20rpx;margin-bottom:18rpx;background:#fff;border-radius:16rpx;box-shadow:0 10rpx 24rpx rgba(43,69,107,.08)}.head{display:flex;align-items:center;justify-content:space-between;gap:16rpx}.head>view{display:flex;min-width:0;flex:1;flex-direction:column;gap:8rpx}.head>view text:last-child{overflow:hidden;color:#78879b;font-size:23rpx;text-overflow:ellipsis;white-space:nowrap}.name{overflow:hidden;color:#20334c;font-size:30rpx;font-weight:600;text-overflow:ellipsis;white-space:nowrap}.status{display:inline-flex!important;align-items:center!important;justify-content:center!important;flex:none!important;width:auto!important;min-width:0!important;min-height:36rpx!important;height:36rpx!important;padding:4rpx 14rpx!important;font-size:22rpx!important;border-radius:999rpx!important;line-height:1.2!important;white-space:nowrap}.running{color:#1c9b68;background:#e8f8f0}.maintain{color:#d78321;background:#fff3df}.stopped{color:#8d9bad;background:#f0f3f6}.grid{display:grid;grid-template-columns:1fr;gap:10rpx;padding:16rpx 0;margin-top:16rpx;color:#66778c;font-size:23rpx;border-top:1rpx solid #edf1f6;border-bottom:1rpx solid #edf1f6}.grid text{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.actions{display:flex;flex-wrap:wrap;justify-content:flex-end;gap:12rpx;padding-top:16rpx}.actions button{min-height:50rpx;padding:0 16rpx;margin:0;color:#1769d8;font-size:22rpx;line-height:48rpx;background:#f5f8ff;border:1rpx solid #8ab3ee;border-radius:8rpx}.actions .danger{color:#c65050;background:#fff7f7;border-color:#e3a0a0}.actions button::after,.fab::after{border:0}.more,.state{display:block;padding:35rpx;color:#8795a8;font-size:26rpx;text-align:center}.error{color:#c3654d}.fab{position:fixed;right:30rpx;bottom:calc(32rpx + env(safe-area-inset-bottom));z-index:10;display:flex;align-items:center;justify-content:center;width:132rpx;height:132rpx;min-height:132rpx;padding:0;margin:0;color:#fff;background:#1769d8;border-radius:50%;box-shadow:0 12rpx 24rpx rgba(23,105,216,.3)}.fab view{width:38rpx;height:38rpx;background:linear-gradient(#fff,#fff) center/38rpx 8rpx no-repeat,linear-gradient(#fff,#fff) center/8rpx 38rpx no-repeat}.fab view::before,.fab view::after{display:none;content:none} |
| | | </style> |
| | |
| | | </template> |
| | | |
| | | <style lang="scss" scoped> |
| | | .page{height:100vh;display:flex;flex-direction:column;padding:0 30rpx;box-sizing:border-box;overflow:hidden;background:#f3f6fb}.search{display:flex;align-items:center;height:80rpx;margin:20rpx 0 16rpx;padding:0 20rpx;background:#fff;border-radius:16rpx;box-shadow:0 8rpx 20rpx rgba(43,69,107,.06)}.search input{flex:1;font-size:27rpx}.search text{color:#1769d8;font-size:24rpx}.content{height:0;flex:1;padding-bottom:150rpx;box-sizing:border-box}.tree{overflow:hidden;background:#fff;border-radius:16rpx;box-shadow:0 8rpx 20rpx rgba(43,69,107,.06)}.row{display:flex;align-items:center;gap:12rpx;min-height:94rpx;padding:14rpx 18rpx 14rpx 22rpx;box-sizing:border-box;border-bottom:1rpx solid #edf1f7}.row:last-child{border-bottom:0}.main{display:flex;align-items:center;min-width:0;flex:1;gap:12rpx}.arrow{width:18rpx;height:18rpx;flex:none;opacity:0;border-right:4rpx solid #637891;border-bottom:4rpx solid #637891;transform:rotate(-45deg)}.arrow.show{opacity:1}.arrow.open{transform:rotate(45deg)}.info{display:flex;min-width:0;flex:1;flex-direction:column;gap:6rpx}.title-line{display:flex;align-items:center;gap:10rpx;min-width:0}.name{overflow:hidden;color:#20334c;font-size:29rpx;font-weight:600;text-overflow:ellipsis;white-space:nowrap}.title-line .name{flex:1}.info>text{overflow:hidden;color:#78879b;font-size:22rpx;text-overflow:ellipsis;white-space:nowrap}.status{display:inline-flex!important;align-items:center!important;justify-content:center!important;flex:none!important;width:auto!important;min-width:0!important;min-height:36rpx!important;height:36rpx!important;padding:4rpx 14rpx!important;font-size:22rpx!important;border-radius:999rpx!important;line-height:1.2!important;white-space:nowrap}.actions{display:flex;flex:none;flex-wrap:wrap;justify-content:flex-end;gap:8rpx}.actions button{min-height:50rpx;padding:0 14rpx;margin:0;color:#1769d8;font-size:22rpx;line-height:48rpx;background:#f5f8ff;border:1rpx solid #8ab3ee;border-radius:8rpx}.actions .danger{color:#c65050;background:#fff7f7;border-color:#e3a0a0}.actions button::after,.fab::after{border:0}.state{display:block;padding:70rpx 20rpx;color:#8795a8;font-size:26rpx;text-align:center}.error{color:#c3654d}.fab{position:fixed;right:30rpx;bottom:calc(32rpx + env(safe-area-inset-bottom));z-index:10;display:flex;align-items:center;justify-content:center;width:132rpx;height:132rpx;min-height:132rpx;padding:0;margin:0;color:#fff;background:#1769d8;border-radius:50%;box-shadow:0 12rpx 24rpx rgba(23,105,216,.3)}.fab view,.fab view::before{display:block;width:38rpx;height:8rpx;background:#fff;border-radius:4rpx;content:""}.fab view{position:relative}.fab view::before{position:absolute;transform:rotate(90deg)} |
| | | .page{height:100vh;display:flex;flex-direction:column;padding:0 30rpx;box-sizing:border-box;overflow:hidden;background:#f3f6fb}.search{display:flex;align-items:center;height:80rpx;margin:20rpx 0 16rpx;padding:0 20rpx;background:#fff;border-radius:16rpx;box-shadow:0 8rpx 20rpx rgba(43,69,107,.06)}.search input{flex:1;font-size:27rpx}.search text{color:#1769d8;font-size:24rpx}.content{height:0;flex:1;padding-bottom:150rpx;box-sizing:border-box}.tree{overflow:hidden;background:#fff;border-radius:16rpx;box-shadow:0 8rpx 20rpx rgba(43,69,107,.06)}.row{display:flex;align-items:center;gap:12rpx;min-height:94rpx;padding:14rpx 18rpx 14rpx 22rpx;box-sizing:border-box;border-bottom:1rpx solid #edf1f7}.row:last-child{border-bottom:0}.main{display:flex;align-items:center;min-width:0;flex:1;gap:12rpx}.arrow{width:18rpx;height:18rpx;flex:none;opacity:0;border-right:4rpx solid #637891;border-bottom:4rpx solid #637891;transform:rotate(-45deg)}.arrow.show{opacity:1}.arrow.open{transform:rotate(45deg)}.info{display:flex;min-width:0;flex:1;flex-direction:column;gap:6rpx}.title-line{display:flex;align-items:center;gap:10rpx;min-width:0}.name{overflow:hidden;color:#20334c;font-size:29rpx;font-weight:600;text-overflow:ellipsis;white-space:nowrap}.title-line .name{flex:1}.info>text{overflow:hidden;color:#78879b;font-size:22rpx;text-overflow:ellipsis;white-space:nowrap}.status{display:inline-flex!important;align-items:center!important;justify-content:center!important;flex:none!important;width:auto!important;min-width:0!important;min-height:36rpx!important;height:36rpx!important;padding:4rpx 14rpx!important;font-size:22rpx!important;border-radius:999rpx!important;line-height:1.2!important;white-space:nowrap}.actions{display:flex;flex:none;flex-wrap:wrap;justify-content:flex-end;gap:8rpx}.actions button{min-height:50rpx;padding:0 14rpx;margin:0;color:#1769d8;font-size:22rpx;line-height:48rpx;background:#f5f8ff;border:1rpx solid #8ab3ee;border-radius:8rpx}.actions .danger{color:#c65050;background:#fff7f7;border-color:#e3a0a0}.actions button::after,.fab::after{border:0}.state{display:block;padding:70rpx 20rpx;color:#8795a8;font-size:26rpx;text-align:center}.error{color:#c3654d}.fab{position:fixed;right:30rpx;bottom:calc(32rpx + env(safe-area-inset-bottom));z-index:10;display:flex;align-items:center;justify-content:center;width:132rpx;height:132rpx;min-height:132rpx;padding:0;margin:0;color:#fff;background:#1769d8;border-radius:50%;box-shadow:0 12rpx 24rpx rgba(23,105,216,.3)}.fab view{width:38rpx;height:38rpx;background:linear-gradient(#fff,#fff) center/38rpx 8rpx no-repeat,linear-gradient(#fff,#fff) center/8rpx 38rpx no-repeat}.fab view::before,.fab view::after{display:none;content:none} |
| | | </style> |
| | |
| | | </script> |
| | | <template><view class="page"><template v-if="isLoggedIn"><view v-if="canQuery" class="search"><input v-model="keyword" placeholder="æç´¢è®¾å¤åç§°" confirm-type="search" @confirm="load(true)" /><text v-if="keyword" @click="keyword='';load(true)">æ¸
é¤</text></view><scroll-view v-if="canQuery" class="content" scroll-y lower-threshold="80" @scrolltolower="hasMore&&load()"><view v-if="loadError" class="state error" @click="load(true)">{{loadError}}ï¼ç¹å»éè¯</view><view v-else-if="rows.length"><view v-for="item in rows" :key="item.id" class="row" @click="go(item.id,'detail')"><view class="head"><view><text class="name">{{item.machineryName||'æªå½å设å¤'}}</text><text>{{item.machineryCode||'ææ ç¼ç '}}</text></view><view class="status-wrap"><text :class="['status', item.status === 20 ? 'enabled' : 'disabled']">{{dictLabel(dicts,'mes_mainten_record_status',item.status)}}</text></view></view><view class="grid"><text>计ååç§°ï¼{{item.planName||'--'}}</text><text>ä¿å
»æ¶é´ï¼{{dateText(item.maintenTime)}}</text><text>ä¿å
»äººï¼{{item.nickname||'--'}}</text><text>å建æ¶é´ï¼{{dateText(item.createTime)}}</text></view><view class="actions"><button v-if="canQuery" @click.stop="go(item.id,'detail')">详æ
</button><button v-if="canUpdate&&item.status===10" @click.stop="go(item.id)">ç¼è¾</button><button v-if="canUpdate&&item.status===10" @click.stop="action(item,'submit')">æäº¤</button><button v-if="canDelete&&item.status===10" class="danger" @click.stop="action(item,'delete')">å é¤</button></view></view><text class="more">{{loading?'å è½½ä¸...':hasMore?'䏿å è½½æ´å¤':'æ²¡ææ´å¤äº'}}</text></view><view v-else class="state">{{loading?'å è½½ä¸...':keyword?'没æå¹é
çè®°å½':'ææ ä¿å
»è®°å½'}}</view></scroll-view><view v-else class="state">ææ ä¿å
»è®°å½æ¥çæé</view></template><view v-else class="state">ç»å½åæ¥çä¿å
»è®°å½</view><button v-if="canCreate" class="fab" @click="go()"><view /></button></view></template> |
| | | <style lang="scss" scoped> |
| | | .page{height:100vh;display:flex;flex-direction:column;padding:0 30rpx;box-sizing:border-box;overflow:hidden;background:#f3f6fb}.search{display:flex;align-items:center;height:80rpx;margin:20rpx 0 16rpx;padding:0 20rpx;background:#fff;border-radius:16rpx;box-shadow:0 8rpx 20rpx rgba(43,69,107,.06)}.search input{flex:1;font-size:27rpx}.search text{color:#1769d8;font-size:24rpx}.content{height:0;flex:1;padding-bottom:150rpx;box-sizing:border-box}.row{padding:24rpx 22rpx 20rpx;margin-bottom:18rpx;background:#fff;border-radius:16rpx;box-shadow:0 10rpx 24rpx rgba(43,69,107,.08)}.head{display:flex;justify-content:space-between;gap:16rpx}.head>view{display:flex;min-width:0;flex:1;flex-direction:column;gap:8rpx}.head text:last-child{color:#78879b;font-size:23rpx}.name{overflow:hidden;color:#20334c;font-size:30rpx;font-weight:600;text-overflow:ellipsis;white-space:nowrap}.status{display:inline-flex!important;align-items:center!important;justify-content:center!important;flex:none!important;width:auto!important;min-width:0!important;min-height:36rpx!important;height:36rpx!important;padding:4rpx 14rpx!important;color:#1769d8;background:#eef5ff;border-radius:999rpx!important;line-height:1.2!important;white-space:nowrap}.grid{display:grid;gap:10rpx;padding:16rpx 0;margin-top:16rpx;color:#66778c;font-size:23rpx;border-top:1rpx solid #edf1f6;border-bottom:1rpx solid #edf1f6}.grid text{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.actions{display:flex;flex-wrap:wrap;justify-content:flex-end;gap:12rpx;padding-top:16rpx}.actions button{min-height:50rpx;padding:0 16rpx;margin:0;color:#1769d8;font-size:22rpx;line-height:48rpx;background:#f5f8ff;border:1rpx solid #8ab3ee;border-radius:8rpx}.actions .danger{color:#c65050;background:#fff7f7;border-color:#e3a0a0}.actions button::after,.fab::after{border:0}.more,.state{display:block;padding:35rpx;color:#8795a8;font-size:26rpx;text-align:center}.error{color:#c3654d}.fab{position:fixed;right:30rpx;bottom:calc(32rpx + env(safe-area-inset-bottom));display:flex;align-items:center;justify-content:center;width:132rpx;height:132rpx;min-height:132rpx;padding:0;margin:0;background:#1769d8;border-radius:50%;box-shadow:0 12rpx 24rpx rgba(23,105,216,.3)}.fab view,.fab view::before{display:block;width:38rpx;height:8rpx;background:#fff;border-radius:4rpx;content:""}.fab view{position:relative}.fab view::before{position:absolute;transform:rotate(90deg)} |
| | | .page{height:100vh;display:flex;flex-direction:column;padding:0 30rpx;box-sizing:border-box;overflow:hidden;background:#f3f6fb}.search{display:flex;align-items:center;height:80rpx;margin:20rpx 0 16rpx;padding:0 20rpx;background:#fff;border-radius:16rpx;box-shadow:0 8rpx 20rpx rgba(43,69,107,.06)}.search input{flex:1;font-size:27rpx}.search text{color:#1769d8;font-size:24rpx}.content{height:0;flex:1;padding-bottom:150rpx;box-sizing:border-box}.row{padding:24rpx 22rpx 20rpx;margin-bottom:18rpx;background:#fff;border-radius:16rpx;box-shadow:0 10rpx 24rpx rgba(43,69,107,.08)}.head{display:flex;justify-content:space-between;gap:16rpx}.head>view{display:flex;min-width:0;flex:1;flex-direction:column;gap:8rpx}.head text:last-child{color:#78879b;font-size:23rpx}.name{overflow:hidden;color:#20334c;font-size:30rpx;font-weight:600;text-overflow:ellipsis;white-space:nowrap}.status{display:inline-flex!important;align-items:center!important;justify-content:center!important;flex:none!important;width:auto!important;min-width:0!important;min-height:36rpx!important;height:36rpx!important;padding:4rpx 14rpx!important;color:#1769d8;background:#eef5ff;border-radius:999rpx!important;line-height:1.2!important;white-space:nowrap}.grid{display:grid;gap:10rpx;padding:16rpx 0;margin-top:16rpx;color:#66778c;font-size:23rpx;border-top:1rpx solid #edf1f6;border-bottom:1rpx solid #edf1f6}.grid text{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.actions{display:flex;flex-wrap:wrap;justify-content:flex-end;gap:12rpx;padding-top:16rpx}.actions button{min-height:50rpx;padding:0 16rpx;margin:0;color:#1769d8;font-size:22rpx;line-height:48rpx;background:#f5f8ff;border:1rpx solid #8ab3ee;border-radius:8rpx}.actions .danger{color:#c65050;background:#fff7f7;border-color:#e3a0a0}.actions button::after,.fab::after{border:0}.more,.state{display:block;padding:35rpx;color:#8795a8;font-size:26rpx;text-align:center}.error{color:#c3654d}.fab{position:fixed;right:30rpx;bottom:calc(32rpx + env(safe-area-inset-bottom));display:flex;align-items:center;justify-content:center;width:132rpx;height:132rpx;min-height:132rpx;padding:0;margin:0;background:#1769d8;border-radius:50%;box-shadow:0 12rpx 24rpx rgba(23,105,216,.3)}.fab view{width:38rpx;height:38rpx;background:linear-gradient(#fff,#fff) center/38rpx 8rpx no-repeat,linear-gradient(#fff,#fff) center/8rpx 38rpx no-repeat}.fab view::before,.fab view::after{display:none;content:none} |
| | | </style> |
| | |
| | | </script> |
| | | <template><view class="page"><template v-if="isLoggedIn"><view v-if="canQuery" class="search"><input v-model="keyword" placeholder="æç´¢å¨å
·åç§°" confirm-type="search" @confirm="load(true)" /><text v-if="keyword" @click="keyword='';load(true)">æ¸
é¤</text></view><scroll-view v-if="canQuery" class="content" scroll-y lower-threshold="80" @scrolltolower="hasMore&&load()"><view v-if="loadError" class="state error" @click="load(true)">{{loadError}}ï¼ç¹å»éè¯</view><view v-else-if="rows.length"><view v-for="item in rows" :key="item.id" class="row" @click="go(item.id,'detail')"><view class="head"><view><text class="name">{{item.name||'æªå½åå¨å
·'}}</text><text>{{item.code||'ææ ç¼ç '}}</text></view><view class="status-wrap"><text :class="['status', item.expireStatus === 0 ? 'enabled' : item.expireStatus === 1 ? 'warning' : 'danger']">{{dictLabel(dicts,'mes_dv_metering_expire_status',item.expireStatus)}}</text></view></view><view class="tags"><text>{{dictLabel(dicts,'mes_dv_metering_category',item.category)}}</text><text :class="item.status === 0 ? 'enabled' : 'disabled'">{{dictLabel(dicts,'mes_dv_metering_status',item.status)}}</text></view><view class="grid"><text>è§æ ¼åå·ï¼{{item.specification||'--'}}</text><text>åç/ç产åå®¶ï¼{{item.brand||'--'}}</text><text>使ç¨é¨é¨ï¼{{item.deptName||'--'}}</text><text>责任人ï¼{{item.chargeUserNickname||'--'}}</text><text>䏿¬¡æ£æµæ¥æï¼{{dayText(item.nextCheckDate)}}</text><text>å建æ¶é´ï¼{{dateText(item.createTime)}}</text></view><view class="actions"><button v-if="canQuery" @click.stop="go(item.id,'detail')">详æ
</button><button v-if="canUpdate" @click.stop="go(item.id)">ç¼è¾</button><button v-if="canDelete" class="danger" @click.stop="remove(item)">å é¤</button></view></view><text class="more">{{loading?'å è½½ä¸...':hasMore?'䏿å è½½æ´å¤':'æ²¡ææ´å¤äº'}}</text></view><view v-else class="state">{{loading?'å è½½ä¸...':keyword?'没æå¹é
çå¨å
·':'ææ è®¡éå¨å
·'}}</view></scroll-view><view v-else class="state">ææ è®¡éå¨å
·æ¥çæé</view></template><view v-else class="state">ç»å½åæ¥ç计éå¨å
·</view><button v-if="canCreate" class="fab" @click="go()"><view /></button></view></template> |
| | | <style lang="scss" scoped> |
| | | .page{height:100vh;display:flex;flex-direction:column;padding:0 30rpx;box-sizing:border-box;overflow:hidden;background:#f3f6fb}.search{display:flex;align-items:center;height:80rpx;margin:20rpx 0 16rpx;padding:0 20rpx;background:#fff;border-radius:16rpx;box-shadow:0 8rpx 20rpx rgba(43,69,107,.06)}.search input{flex:1;font-size:27rpx}.search text{color:#1769d8;font-size:24rpx}.content{height:0;flex:1;padding-bottom:150rpx;box-sizing:border-box}.row{padding:24rpx 22rpx 20rpx;margin-bottom:18rpx;background:#fff;border-radius:16rpx;box-shadow:0 10rpx 24rpx rgba(43,69,107,.08)}.head{display:flex;justify-content:space-between;gap:16rpx}.head>view{display:flex;min-width:0;flex:1;flex-direction:column;gap:8rpx}.head text:last-child{color:#78879b;font-size:23rpx}.name{overflow:hidden;color:#20334c;font-size:30rpx;font-weight:600;text-overflow:ellipsis;white-space:nowrap}.status{display:inline-flex!important;align-items:center!important;justify-content:center!important;flex:none!important;width:auto!important;min-width:0!important;min-height:36rpx!important;height:36rpx!important;padding:4rpx 14rpx!important;color:#1769d8;background:#eef5ff;border-radius:999rpx!important;line-height:1.2!important;white-space:nowrap}.grid{display:grid;gap:10rpx;padding:16rpx 0;margin-top:16rpx;color:#66778c;font-size:23rpx;border-top:1rpx solid #edf1f6;border-bottom:1rpx solid #edf1f6}.grid text{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.actions{display:flex;justify-content:flex-end;gap:12rpx;padding-top:16rpx}.actions button{min-height:50rpx;padding:0 16rpx;margin:0;color:#1769d8;font-size:22rpx;line-height:48rpx;background:#f5f8ff;border:1rpx solid #8ab3ee;border-radius:8rpx}.actions .danger{color:#c65050;background:#fff7f7;border-color:#e3a0a0}.actions button::after,.fab::after{border:0}.more,.state{display:block;padding:35rpx;color:#8795a8;font-size:26rpx;text-align:center}.error{color:#c3654d}.fab{position:fixed;right:30rpx;bottom:calc(32rpx + env(safe-area-inset-bottom));display:flex;align-items:center;justify-content:center;width:132rpx;height:132rpx;min-height:132rpx;padding:0;margin:0;background:#1769d8;border-radius:50%;box-shadow:0 12rpx 24rpx rgba(23,105,216,.3)}.fab view,.fab view::before{display:block;width:38rpx;height:8rpx;background:#fff;border-radius:4rpx;content:""}.fab view{position:relative}.fab view::before{position:absolute;transform:rotate(90deg)} |
| | | .page{height:100vh;display:flex;flex-direction:column;padding:0 30rpx;box-sizing:border-box;overflow:hidden;background:#f3f6fb}.search{display:flex;align-items:center;height:80rpx;margin:20rpx 0 16rpx;padding:0 20rpx;background:#fff;border-radius:16rpx;box-shadow:0 8rpx 20rpx rgba(43,69,107,.06)}.search input{flex:1;font-size:27rpx}.search text{color:#1769d8;font-size:24rpx}.content{height:0;flex:1;padding-bottom:150rpx;box-sizing:border-box}.row{padding:24rpx 22rpx 20rpx;margin-bottom:18rpx;background:#fff;border-radius:16rpx;box-shadow:0 10rpx 24rpx rgba(43,69,107,.08)}.head{display:flex;justify-content:space-between;gap:16rpx}.head>view{display:flex;min-width:0;flex:1;flex-direction:column;gap:8rpx}.head text:last-child{color:#78879b;font-size:23rpx}.name{overflow:hidden;color:#20334c;font-size:30rpx;font-weight:600;text-overflow:ellipsis;white-space:nowrap}.status{display:inline-flex!important;align-items:center!important;justify-content:center!important;flex:none!important;width:auto!important;min-width:0!important;min-height:36rpx!important;height:36rpx!important;padding:4rpx 14rpx!important;color:#1769d8;background:#eef5ff;border-radius:999rpx!important;line-height:1.2!important;white-space:nowrap}.grid{display:grid;gap:10rpx;padding:16rpx 0;margin-top:16rpx;color:#66778c;font-size:23rpx;border-top:1rpx solid #edf1f6;border-bottom:1rpx solid #edf1f6}.grid text{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.actions{display:flex;justify-content:flex-end;gap:12rpx;padding-top:16rpx}.actions button{min-height:50rpx;padding:0 16rpx;margin:0;color:#1769d8;font-size:22rpx;line-height:48rpx;background:#f5f8ff;border:1rpx solid #8ab3ee;border-radius:8rpx}.actions .danger{color:#c65050;background:#fff7f7;border-color:#e3a0a0}.actions button::after,.fab::after{border:0}.more,.state{display:block;padding:35rpx;color:#8795a8;font-size:26rpx;text-align:center}.error{color:#c3654d}.fab{position:fixed;right:30rpx;bottom:calc(32rpx + env(safe-area-inset-bottom));display:flex;align-items:center;justify-content:center;width:132rpx;height:132rpx;min-height:132rpx;padding:0;margin:0;background:#1769d8;border-radius:50%;box-shadow:0 12rpx 24rpx rgba(23,105,216,.3)}.fab view{width:38rpx;height:38rpx;background:linear-gradient(#fff,#fff) center/38rpx 8rpx no-repeat,linear-gradient(#fff,#fff) center/8rpx 38rpx no-repeat}.fab view::before,.fab view::after{display:none;content:none} |
| | | </style> |
| | |
| | | </script> |
| | | <template><view class="page"><template v-if="isLoggedIn"><view v-if="canQuery" class="search"><input v-model="keyword" placeholder="æç´¢æ£æµç¼å·" confirm-type="search" @confirm="load(true)" /><text v-if="keyword" @click="keyword='';load(true)">æ¸
é¤</text></view><scroll-view v-if="canQuery" class="content" scroll-y lower-threshold="80" @scrolltolower="hasMore&&load()"><view v-if="loadError" class="state error" @click="load(true)">{{loadError}}ï¼ç¹å»éè¯</view><view v-else-if="rows.length"><view v-for="item in rows" :key="item.id" class="row" @click="go(item.id,'detail')"><view class="head"><view><text class="name">{{item.checkCode||'æ£æµè®°å½'}}</text><text>{{item.meteringName||item.meteringCode||'计éå¨å
·'}}</text></view><view class="status-wrap"><text :class="['status', item.checkResult === 1 ? 'enabled' : 'danger']">{{dictLabel(dicts,'mes_dv_metering_check_result',item.checkResult)}}</text></view></view><view class="grid"><text>å¨å
·ç¼ç ï¼{{item.meteringCode||'--'}}</text><text>æ£æµæ¥æï¼{{dayText(item.checkDate)}}</text><text>æ£æµæºæï¼{{item.checkOrg||'--'}}</text><text>è¯ä¹¦ç¼å·ï¼{{item.certNo||'--'}}</text><text>æ£æµäººï¼{{item.checkUserNickname||'--'}}</text><text>䏿¬¡æ£æµæ¥æï¼{{dayText(item.nextCheckDate)}}</text><text>å建æ¶é´ï¼{{dateText(item.createTime)}}</text></view><view class="actions"><button v-if="canQuery" @click.stop="go(item.id,'detail')">详æ
</button><button v-if="canUpdate" @click.stop="go(item.id)">ç¼è¾</button><button v-if="canDelete" class="danger" @click.stop="remove(item)">å é¤</button></view></view><text class="more">{{loading?'å è½½ä¸...':hasMore?'䏿å è½½æ´å¤':'æ²¡ææ´å¤äº'}}</text></view><view v-else class="state">{{loading?'å è½½ä¸...':keyword?'没æå¹é
çè®°å½':'ææ è®¡éæ£æµè®°å½'}}</view></scroll-view><view v-else class="state">ææ è®¡éæ£æµè®°å½æ¥çæé</view></template><view v-else class="state">ç»å½åæ¥çè®¡éæ£æµè®°å½</view><button v-if="canCreate" class="fab" @click="go()"><view /></button></view></template> |
| | | <style lang="scss" scoped> |
| | | .page{height:100vh;display:flex;flex-direction:column;padding:0 30rpx;box-sizing:border-box;overflow:hidden;background:#f3f6fb}.search{display:flex;align-items:center;height:80rpx;margin:20rpx 0 16rpx;padding:0 20rpx;background:#fff;border-radius:16rpx;box-shadow:0 8rpx 20rpx rgba(43,69,107,.06)}.search input{flex:1;font-size:27rpx}.search text{color:#1769d8;font-size:24rpx}.content{height:0;flex:1;padding-bottom:150rpx;box-sizing:border-box}.row{padding:24rpx 22rpx 20rpx;margin-bottom:18rpx;background:#fff;border-radius:16rpx;box-shadow:0 10rpx 24rpx rgba(43,69,107,.08)}.head{display:flex;justify-content:space-between;gap:16rpx}.head>view{display:flex;min-width:0;flex:1;flex-direction:column;gap:8rpx}.head text:last-child{color:#78879b;font-size:23rpx}.name{overflow:hidden;color:#20334c;font-size:30rpx;font-weight:600;text-overflow:ellipsis;white-space:nowrap}.status{display:inline-flex!important;align-items:center!important;justify-content:center!important;flex:none!important;width:auto!important;min-width:0!important;min-height:36rpx!important;height:36rpx!important;padding:4rpx 14rpx!important;color:#1769d8;background:#eef5ff;border-radius:999rpx!important;line-height:1.2!important;white-space:nowrap}.grid{display:grid;gap:10rpx;padding:16rpx 0;margin-top:16rpx;color:#66778c;font-size:23rpx;border-top:1rpx solid #edf1f6;border-bottom:1rpx solid #edf1f6}.grid text{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.actions{display:flex;justify-content:flex-end;gap:12rpx;padding-top:16rpx}.actions button{min-height:50rpx;padding:0 16rpx;margin:0;color:#1769d8;font-size:22rpx;line-height:48rpx;background:#f5f8ff;border:1rpx solid #8ab3ee;border-radius:8rpx}.actions .danger{color:#c65050;background:#fff7f7;border-color:#e3a0a0}.actions button::after,.fab::after{border:0}.more,.state{display:block;padding:35rpx;color:#8795a8;font-size:26rpx;text-align:center}.error{color:#c3654d}.fab{position:fixed;right:30rpx;bottom:calc(32rpx + env(safe-area-inset-bottom));display:flex;align-items:center;justify-content:center;width:132rpx;height:132rpx;min-height:132rpx;padding:0;margin:0;background:#1769d8;border-radius:50%;box-shadow:0 12rpx 24rpx rgba(23,105,216,.3)}.fab view,.fab view::before{display:block;width:38rpx;height:8rpx;background:#fff;border-radius:4rpx;content:""}.fab view{position:relative}.fab view::before{position:absolute;transform:rotate(90deg)} |
| | | .page{height:100vh;display:flex;flex-direction:column;padding:0 30rpx;box-sizing:border-box;overflow:hidden;background:#f3f6fb}.search{display:flex;align-items:center;height:80rpx;margin:20rpx 0 16rpx;padding:0 20rpx;background:#fff;border-radius:16rpx;box-shadow:0 8rpx 20rpx rgba(43,69,107,.06)}.search input{flex:1;font-size:27rpx}.search text{color:#1769d8;font-size:24rpx}.content{height:0;flex:1;padding-bottom:150rpx;box-sizing:border-box}.row{padding:24rpx 22rpx 20rpx;margin-bottom:18rpx;background:#fff;border-radius:16rpx;box-shadow:0 10rpx 24rpx rgba(43,69,107,.08)}.head{display:flex;justify-content:space-between;gap:16rpx}.head>view{display:flex;min-width:0;flex:1;flex-direction:column;gap:8rpx}.head text:last-child{color:#78879b;font-size:23rpx}.name{overflow:hidden;color:#20334c;font-size:30rpx;font-weight:600;text-overflow:ellipsis;white-space:nowrap}.status{display:inline-flex!important;align-items:center!important;justify-content:center!important;flex:none!important;width:auto!important;min-width:0!important;min-height:36rpx!important;height:36rpx!important;padding:4rpx 14rpx!important;color:#1769d8;background:#eef5ff;border-radius:999rpx!important;line-height:1.2!important;white-space:nowrap}.grid{display:grid;gap:10rpx;padding:16rpx 0;margin-top:16rpx;color:#66778c;font-size:23rpx;border-top:1rpx solid #edf1f6;border-bottom:1rpx solid #edf1f6}.grid text{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.actions{display:flex;justify-content:flex-end;gap:12rpx;padding-top:16rpx}.actions button{min-height:50rpx;padding:0 16rpx;margin:0;color:#1769d8;font-size:22rpx;line-height:48rpx;background:#f5f8ff;border:1rpx solid #8ab3ee;border-radius:8rpx}.actions .danger{color:#c65050;background:#fff7f7;border-color:#e3a0a0}.actions button::after,.fab::after{border:0}.more,.state{display:block;padding:35rpx;color:#8795a8;font-size:26rpx;text-align:center}.error{color:#c3654d}.fab{position:fixed;right:30rpx;bottom:calc(32rpx + env(safe-area-inset-bottom));display:flex;align-items:center;justify-content:center;width:132rpx;height:132rpx;min-height:132rpx;padding:0;margin:0;background:#1769d8;border-radius:50%;box-shadow:0 12rpx 24rpx rgba(23,105,216,.3)}.fab view{width:38rpx;height:38rpx;background:linear-gradient(#fff,#fff) center/38rpx 8rpx no-repeat,linear-gradient(#fff,#fff) center/8rpx 38rpx no-repeat}.fab view::before,.fab view::after{display:none;content:none} |
| | | </style> |
| | |
| | | </script> |
| | | <template><view class="page"><template v-if="isLoggedIn"><view v-if="canQuery" class="search"><input v-model="keyword" placeholder="æç´¢ç»´ä¿®ååç§°" confirm-type="search" @confirm="load(true)" /><text v-if="keyword" @click="keyword='';load(true)">æ¸
é¤</text></view><scroll-view v-if="canQuery" class="content" scroll-y lower-threshold="80" @scrolltolower="hasMore&&load()"><view v-if="loadError" class="state error" @click="load(true)">{{loadError}}ï¼ç¹å»éè¯</view><view v-else-if="rows.length"><view v-for="item in rows" :key="item.id" class="row" @click="go(item.id,'detail')"><view class="head"><view><text class="name">{{item.name||'æªå½åç»´ä¿®å'}}</text><text>{{item.code||'ææ ç¼ç '}}</text></view><view class="status-wrap"><text :class="['status', item.status === 10 ? 'disabled' : item.status === 40 ? 'enabled' : 'warning']">{{dictLabel(dicts,'mes_dv_repair_status',item.status)}}</text></view></view><view v-if="item.result" class="tags"><text :class="item.result === 1 ? 'enabled' : 'danger'">{{dictLabel(dicts,'mes_dv_repair_result',item.result)}}</text></view><view class="grid"><text>设å¤åç§°ï¼{{item.machineryName||'--'}}</text><text>æ¥ä¿®æ¥æï¼{{dateText(item.requireDate)}}</text><text>å®ææ¥æï¼{{dateText(item.finishDate)}}</text><text>å建æ¶é´ï¼{{dateText(item.createTime)}}</text></view><view class="actions"><button v-if="canQuery" @click.stop="go(item.id,'detail')">详æ
</button><button v-if="canUpdate&&item.status===10" @click.stop="go(item.id)">ç¼è¾</button><button v-if="canUpdate&&item.status===10" @click.stop="action(item,'submit')">æäº¤</button><button v-if="canUpdate&&item.status===20" @click.stop="go(item.id,'confirm')">ç¡®è®¤å®æ</button><button v-if="canUpdate&&item.status===30" @click.stop="action(item,'finishPass')">éªæ¶éè¿</button><button v-if="canUpdate&&item.status===30" @click.stop="action(item,'finishFail')">éªæ¶ä¸éè¿</button><button v-if="canDelete&&item.status===10" class="danger" @click.stop="action(item,'delete')">å é¤</button></view></view><text class="more">{{loading?'å è½½ä¸...':hasMore?'䏿å è½½æ´å¤':'æ²¡ææ´å¤äº'}}</text></view><view v-else class="state">{{loading?'å è½½ä¸...':keyword?'没æå¹é
çç»´ä¿®å':'ææ ç»´ä¿®å'}}</view></scroll-view><view v-else class="state">ææ ç»´ä¿®åæ¥çæé</view></template><view v-else class="state">ç»å½åæ¥çç»´ä¿®å</view><button v-if="canCreate" class="fab" @click="go()"><view /></button></view></template> |
| | | <style lang="scss" scoped> |
| | | .page{height:100vh;display:flex;flex-direction:column;padding:0 30rpx;box-sizing:border-box;overflow:hidden;background:#f3f6fb}.search{display:flex;align-items:center;height:80rpx;margin:20rpx 0 16rpx;padding:0 20rpx;background:#fff;border-radius:16rpx;box-shadow:0 8rpx 20rpx rgba(43,69,107,.06)}.search input{flex:1;font-size:27rpx}.search text{color:#1769d8;font-size:24rpx}.content{height:0;flex:1;padding-bottom:150rpx;box-sizing:border-box}.row{padding:24rpx 22rpx 20rpx;margin-bottom:18rpx;background:#fff;border-radius:16rpx;box-shadow:0 10rpx 24rpx rgba(43,69,107,.08)}.head{display:flex;justify-content:space-between;gap:16rpx}.head>view{display:flex;min-width:0;flex:1;flex-direction:column;gap:8rpx}.head text:last-child{color:#78879b;font-size:23rpx}.name{overflow:hidden;color:#20334c;font-size:30rpx;font-weight:600;text-overflow:ellipsis;white-space:nowrap}.status{display:inline-flex!important;align-items:center!important;justify-content:center!important;flex:none!important;width:auto!important;min-width:0!important;min-height:36rpx!important;height:36rpx!important;padding:4rpx 14rpx!important;color:#1769d8;background:#eef5ff;border-radius:999rpx!important;line-height:1.2!important;white-space:nowrap}.grid{display:grid;gap:10rpx;padding:16rpx 0;margin-top:16rpx;color:#66778c;font-size:23rpx;border-top:1rpx solid #edf1f6;border-bottom:1rpx solid #edf1f6}.grid text{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.actions{display:flex;flex-wrap:wrap;justify-content:flex-end;gap:12rpx;padding-top:16rpx}.actions button{min-height:50rpx;padding:0 16rpx;margin:0;color:#1769d8;font-size:22rpx;line-height:48rpx;background:#f5f8ff;border:1rpx solid #8ab3ee;border-radius:8rpx}.actions .danger{color:#c65050;background:#fff7f7;border-color:#e3a0a0}.actions button::after,.fab::after{border:0}.more,.state{display:block;padding:35rpx;color:#8795a8;font-size:26rpx;text-align:center}.error{color:#c3654d}.fab{position:fixed;right:30rpx;bottom:calc(32rpx + env(safe-area-inset-bottom));display:flex;align-items:center;justify-content:center;width:132rpx;height:132rpx;min-height:132rpx;padding:0;margin:0;background:#1769d8;border-radius:50%;box-shadow:0 12rpx 24rpx rgba(23,105,216,.3)}.fab view,.fab view::before{display:block;width:38rpx;height:8rpx;background:#fff;border-radius:4rpx;content:""}.fab view{position:relative}.fab view::before{position:absolute;transform:rotate(90deg)} |
| | | .page{height:100vh;display:flex;flex-direction:column;padding:0 30rpx;box-sizing:border-box;overflow:hidden;background:#f3f6fb}.search{display:flex;align-items:center;height:80rpx;margin:20rpx 0 16rpx;padding:0 20rpx;background:#fff;border-radius:16rpx;box-shadow:0 8rpx 20rpx rgba(43,69,107,.06)}.search input{flex:1;font-size:27rpx}.search text{color:#1769d8;font-size:24rpx}.content{height:0;flex:1;padding-bottom:150rpx;box-sizing:border-box}.row{padding:24rpx 22rpx 20rpx;margin-bottom:18rpx;background:#fff;border-radius:16rpx;box-shadow:0 10rpx 24rpx rgba(43,69,107,.08)}.head{display:flex;justify-content:space-between;gap:16rpx}.head>view{display:flex;min-width:0;flex:1;flex-direction:column;gap:8rpx}.head text:last-child{color:#78879b;font-size:23rpx}.name{overflow:hidden;color:#20334c;font-size:30rpx;font-weight:600;text-overflow:ellipsis;white-space:nowrap}.status{display:inline-flex!important;align-items:center!important;justify-content:center!important;flex:none!important;width:auto!important;min-width:0!important;min-height:36rpx!important;height:36rpx!important;padding:4rpx 14rpx!important;color:#1769d8;background:#eef5ff;border-radius:999rpx!important;line-height:1.2!important;white-space:nowrap}.grid{display:grid;gap:10rpx;padding:16rpx 0;margin-top:16rpx;color:#66778c;font-size:23rpx;border-top:1rpx solid #edf1f6;border-bottom:1rpx solid #edf1f6}.grid text{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.actions{display:flex;flex-wrap:wrap;justify-content:flex-end;gap:12rpx;padding-top:16rpx}.actions button{min-height:50rpx;padding:0 16rpx;margin:0;color:#1769d8;font-size:22rpx;line-height:48rpx;background:#f5f8ff;border:1rpx solid #8ab3ee;border-radius:8rpx}.actions .danger{color:#c65050;background:#fff7f7;border-color:#e3a0a0}.actions button::after,.fab::after{border:0}.more,.state{display:block;padding:35rpx;color:#8795a8;font-size:26rpx;text-align:center}.error{color:#c3654d}.fab{position:fixed;right:30rpx;bottom:calc(32rpx + env(safe-area-inset-bottom));display:flex;align-items:center;justify-content:center;width:132rpx;height:132rpx;min-height:132rpx;padding:0;margin:0;background:#1769d8;border-radius:50%;box-shadow:0 12rpx 24rpx rgba(23,105,216,.3)}.fab view{width:38rpx;height:38rpx;background:linear-gradient(#fff,#fff) center/38rpx 8rpx no-repeat,linear-gradient(#fff,#fff) center/8rpx 38rpx no-repeat}.fab view::before,.fab view::after{display:none;content:none} |
| | | </style> |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | <script setup lang="ts"> |
| | | import { computed, reactive, ref } from "vue"; |
| | | import { onLoad, onPullDownRefresh, onShow } from "@dcloudio/uni-app"; |
| | | import { getSpareMovementPage, returnSpare, type SpareMovement } from "../../../../api/mes-operations"; |
| | | import { useAuth } from "../../../../stores/auth"; |
| | | const { hasPermission, isLoggedIn, state } = useAuth(); |
| | | const sparePartId = ref<number>(), repairCode = ref(""), type = ref<number>(), rows = ref<SpareMovement[]>([]), loading = ref(false); |
| | | const selected = ref<SpareMovement>(), returnOpen = ref(false), form = reactive({ quantity: 1, remark: "" }); |
| | | const labels: Record<number,string> = { 1:"åå§åºå", 2:"å
¥åº", 3:"ç»´ä¿®é¢ç¨", 4:"éå" }; |
| | | const tones: Record<number,string> = { 1:"tag-info", 2:"tag-ok", 3:"tag-warning", 4:"tag-purple" }; |
| | | const canQuery = computed(() => hasPermission("mes:dv-spare:record")); |
| | | const canReturn = computed(() => hasPermission("mes:dv-spare:return")); |
| | | async function load() { |
| | | if (!state.accessToken || !canQuery.value || loading.value) return; |
| | | loading.value = true; |
| | | try { |
| | | rows.value = (await getSpareMovementPage(state.accessToken, { pageNo:1, pageSize:100, sparePartId:sparePartId.value, repairCode:repairCode.value.trim() || undefined, type:type.value })).list; |
| | | } catch (error) { |
| | | uni.showToast({ title:error instanceof Error ? error.message : "è®°å½å 载失败", icon:"none" }); |
| | | } finally { loading.value = false; uni.stopPullDownRefresh(); } |
| | | } |
| | | function startReturn(row: SpareMovement) { selected.value=row; form.quantity=Number(row.returnableQuantity||1); form.remark=""; returnOpen.value=true; } |
| | | async function submitReturn() { |
| | | if (!state.accessToken || !selected.value?.id || form.quantity<=0 || form.quantity>Number(selected.value.returnableQuantity) || !form.remark.trim()) return uni.showToast({title:"è¯·å¡«åæ£ç¡®æ°éåéååå ",icon:"none"}); |
| | | try { |
| | | await returnSpare(state.accessToken,{requestKey:Date.now()+"-"+Math.random(),originalId:selected.value.id,quantity:Number(form.quantity),remark:form.remark}); |
| | | returnOpen.value=false; uni.showToast({title:"éåæå",icon:"success"}); await load(); |
| | | } catch(error) { uni.showToast({title:error instanceof Error?error.message:"éå失败",icon:"none"}); } |
| | | } |
| | | onLoad(query => { sparePartId.value=query.sparePartId?Number(query.sparePartId):undefined; }); |
| | | onShow(load); onPullDownRefresh(load); |
| | | </script> |
| | | <template><view class="page"> |
| | | <template v-if="isLoggedIn"> |
| | | <view v-if="canQuery" class="search"><input v-model="repairCode" placeholder="æç´¢ç»´ä¿®åå·" confirm-type="search" @confirm="load" /><picker :range="['å
¨é¨','åå§åºå','å
¥åº','ç»´ä¿®é¢ç¨','éå']" @change="type=$event.detail.value?Number($event.detail.value):undefined;load()"><view class="type-picker">{{type?labels[type]:'å
¨é¨ç±»å'}}<text>â¾</text></view></picker></view> |
| | | <scroll-view v-if="canQuery" class="content" scroll-y> |
| | | <view v-for="row in rows" :key="row.id" class="row"> |
| | | <view class="head"><view><text class="name">{{row.sparePartName||'å¤ä»¶'}}</text><text>{{row.sparePartCode||'ææ ç¼ç '}}</text></view><view class="status-wrap"><text :class="['status',tones[Number(row.type)]]">{{labels[Number(row.type)]||'åºååå¨'}}</text></view></view> |
| | | <view class="grid"><text>æ°éï¼{{row.quantity??0}} {{row.unit||''}}</text><text>åºåï¼{{row.beforeQuantity??'--'}} â {{row.afterQuantity??'--'}}</text><text>ç»´ä¿®åï¼{{row.repairCode||'--'}}</text><text>设å¤ï¼{{row.machineryName||'--'}}</text><text>é¢ç¨äººï¼{{row.receiverName||'--'}}</text><text>æ¶é´ï¼{{row.createTime||'--'}}</text><text class="full">夿³¨ï¼{{row.remark||'--'}}</text></view> |
| | | <view v-if="canReturn&&row.type===3&&Number(row.returnableQuantity)>0" class="actions"><button @click="startReturn(row)">éåï¼å¯é {{row.returnableQuantity}}ï¼</button></view> |
| | | </view> |
| | | <view v-if="!rows.length" class="state">{{loading?'å è½½ä¸...':'ææ é¢ç¨è®°å½'}}</view> |
| | | </scroll-view> |
| | | <view v-else class="state">ææ é¢ç¨è®°å½æ¥çæé</view> |
| | | </template> |
| | | <view v-else class="state">ç»å½åæ¥çé¢ç¨è®°å½</view> |
| | | <view v-if="returnOpen" class="mask" @click="returnOpen=false"><view class="sheet" @click.stop><view class="sheet-head"><text>å¤ä»¶éå</text><text @click="returnOpen=false">å
³é</text></view><view class="field"><text>éåæ°é</text><input v-model.number="form.quantity" type="digit" /></view><view class="field column"><text>éååå </text><textarea v-model="form.remark" placeholder="请è¾å
¥éååå " /></view><button class="save" @click="submitReturn">确认éå</button></view></view> |
| | | </view></template> |
| | | <style lang="scss" scoped> |
| | | .page{height:100vh;display:flex;flex-direction:column;padding:0 30rpx;box-sizing:border-box;overflow:hidden;background:#f3f6fb} |
| | | .search{display:flex;flex:none;align-items:center;height:80rpx;margin:20rpx 0 16rpx;padding:0 20rpx;background:#fff;border-radius:16rpx;box-shadow:0 8rpx 20rpx rgba(43,69,107,.06)}.search input{min-width:0;flex:1;color:#1e3049;font-size:27rpx}.search picker{flex:none}.type-picker{display:flex;align-items:center;gap:8rpx;color:#1769d8;font-size:24rpx}.type-picker text{font-size:18rpx} |
| | | .content{height:0;flex:1;padding-bottom:60rpx;box-sizing:border-box}.row{padding:24rpx 22rpx 20rpx;margin-bottom:18rpx;background:#fff;border-radius:16rpx;box-shadow:0 10rpx 24rpx rgba(43,69,107,.08)} |
| | | .head{display:flex;align-items:flex-start;justify-content:space-between;gap:16rpx}.head>view:first-child{display:flex;min-width:0;flex:1;flex-direction:column;gap:8rpx}.name{overflow:hidden;color:#20334c;font-size:30rpx;font-weight:600;text-overflow:ellipsis;white-space:nowrap}.head>view:first-child text:last-child{color:#78879b;font-size:23rpx} |
| | | .status-wrap{display:flex;align-items:center;flex:none;height:48rpx}.status{display:inline-flex;align-items:center;height:36rpx;padding:0 16rpx;font-size:22rpx;line-height:36rpx;border-radius:999rpx;white-space:nowrap}.tag-info{color:#1769d8;background:#eef6ff;border:1rpx solid #c9e1ff}.tag-ok{color:#17865a;background:#eafaf2;border:1rpx solid #b8efd5}.tag-warning{color:#b06a00;background:#fff6df;border:1rpx solid #f0d390}.tag-purple{color:#7a52c6;background:#f3edff;border:1rpx solid #d4c0ff} |
| | | .grid{display:grid;grid-template-columns:1fr 1fr;gap:10rpx 18rpx;padding:16rpx 0;margin-top:16rpx;color:#66778c;font-size:23rpx;border-top:1rpx solid #edf1f6;border-bottom:1rpx solid #edf1f6}.grid text{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.grid .full{grid-column:1/3}.actions{display:flex;justify-content:flex-end;padding-top:16rpx}.actions button{min-height:50rpx;padding:0 16rpx;margin:0;color:#1769d8;font-size:22rpx;line-height:48rpx;background:#f5f8ff;border:1rpx solid #8ab3ee;border-radius:8rpx}.actions button::after,.save::after{border:0}.state{display:block;padding:45rpx;color:#8795a8;font-size:26rpx;text-align:center} |
| | | .mask{position:fixed;inset:0;z-index:30;display:flex;align-items:flex-end;background:rgba(18,29,43,.42)}.sheet{width:100%;padding-bottom:40rpx;background:#fff;border-radius:24rpx 24rpx 0 0}.sheet-head{display:flex;align-items:center;justify-content:space-between;height:92rpx;padding:0 30rpx;border-bottom:1rpx solid #edf1f6}.sheet-head text:first-child{color:#20334c;font-size:30rpx;font-weight:600}.sheet-head text:last-child{color:#1769d8;font-size:25rpx}.field{display:flex;align-items:center;min-height:96rpx;padding:0 30rpx;gap:20rpx;border-bottom:1rpx solid #eef1f5}.field>text{width:180rpx;color:#33455d}.field input{flex:1;text-align:right}.column{align-items:flex-start;flex-direction:column;padding-top:20rpx}.column textarea{width:100%;height:120rpx}.save{margin:24rpx 30rpx 0;color:#fff;background:#1769d8;border-radius:12rpx} |
| | | </style> |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | <script setup lang="ts"> |
| | | import{reactive,ref}from"vue";import{onLoad}from"@dcloudio/uni-app";import{getSpare,issueSpare,receiveSpare,type SpareAction,type SparePart}from"../../../../api/mes-operations";import{getRepairPage,type Repair}from"../../../../api/equipment";import{getHrmUserList,type UserOption}from"../../../../api/hrm";import{useAuth}from"../../../../stores/auth";const{state}=useAuth(),type=ref("receive"),spare=ref<SparePart>({}),repairs=ref<Repair[]>([]),users=ref<UserOption[]>([]),form=reactive<SpareAction>({requestKey:"",quantity:1,remark:""});async function save(){if(!state.accessToken||Number(form.quantity)<=0||!form.remark||(type.value==="issue"&&(!form.repairId||!form.receiverUserId)))return uni.showToast({title:"è¯·å®æ´å¡«åå¿
填项",icon:"none"});if(type.value==="issue"&&Number(form.quantity)>Number(spare.value.stockQuantity))return uni.showToast({title:"æ°éä¸è½è¶
è¿åºå",icon:"none"});form.requestKey=Date.now()+"-"+Math.random();try{type.value==="receive"?await receiveSpare(state.accessToken,form):await issueSpare(state.accessToken,form);uni.showToast({title:"æä½æå",icon:"success"});setTimeout(()=>uni.navigateBack(),400)}catch(e){uni.showToast({title:e instanceof Error?e.message:"æä½å¤±è´¥",icon:"none"})}}onLoad(async q=>{type.value=q.type==="issue"?"issue":"receive";form.sparePartId=Number(q.sparePartId);if(!state.accessToken)return;spare.value=await getSpare(state.accessToken,form.sparePartId);if(type.value==="issue"){repairs.value=(await getRepairPage(state.accessToken,{pageNo:1,pageSize:100})).list;users.value=await getHrmUserList(state.accessToken)}}); |
| | | </script><template><view class="page"><view class="card"><view class="field"><text>å¤ä»¶</text><text class="value">{{spare.name}}ï¼åºå {{spare.stockQuantity??0}}ï¼</text></view><view v-if="type==='issue'" class="field"><text>ç»´ä¿®å *</text><picker :range="repairs" range-key="code" @change="form.repairId=repairs[$event.detail.value].id"><view class="value">{{repairs.find(x=>x.id===form.repairId)?.code||'è¯·éæ©'}} âº</view></picker></view><view v-if="type==='issue'" class="field"><text>é¢ç¨äºº *</text><picker :range="users" range-key="nickname" @change="form.receiverUserId=users[$event.detail.value].id"><view class="value">{{users.find(x=>x.id===form.receiverUserId)?.nickname||'è¯·éæ©'}} âº</view></picker></view><view class="field"><text>æ°é *</text><input v-model.number="form.quantity" type="digit"/></view><view class="field col"><text>åå /夿³¨ *</text><textarea v-model="form.remark"/></view></view><button class="save" @click="save">确认{{type==='receive'?'å
¥åº':'é¢ç¨'}}</button></view></template><style lang="scss" scoped>.page{min-height:100vh;padding:24rpx 30rpx;background:#f6f7f9}.card{overflow:hidden;background:#fff;border-radius:16rpx}.field{display:flex;align-items:center;min-height:96rpx;padding:0 24rpx;gap:20rpx;border-bottom:1rpx solid #eee}.field>text:first-child{width:180rpx}.field input,.field picker,.value{flex:1;text-align:right}.col{align-items:flex-start;flex-direction:column;padding-block:20rpx}.col textarea{width:100%;height:130rpx}.save{margin-top:30rpx;color:#fff;background:#1769d8}.save::after{border:0}</style> |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | <script setup lang="ts"> |
| | | import{computed,reactive,ref}from"vue";import{onLoad}from"@dcloudio/uni-app";import{createSpare,getSpare,updateSpare,type SpareSave}from"../../../../api/mes-operations";import{useAuth}from"../../../../stores/auth";const{hasPermission,state}=useAuth(),id=ref<number>(),mode=ref("edit"),saving=ref(false),form=reactive<SpareSave>({code:"",name:"",unit:"",specification:"",location:"",safetyQuantity:0,initialQuantity:0,status:1,remark:""});const readonly=computed(()=>mode.value==="detail"),canSave=computed(()=>id.value?hasPermission("mes:dv-spare:update"):hasPermission("mes:dv-spare:create"));async function save(){if(!state.accessToken||!canSave.value)return;if(!form.code||!form.name||!form.unit)return uni.showToast({title:"请填åç¼ç ãåç§°ååä½",icon:"none"});saving.value=true;try{const d={...form,id:id.value,safetyQuantity:Number(form.safetyQuantity||0),initialQuantity:Number(form.initialQuantity||0)};id.value?await updateSpare(state.accessToken,d):id.value=await createSpare(state.accessToken,d);uni.showToast({title:"ä¿åæå",icon:"success"});setTimeout(()=>uni.navigateBack(),400)}catch(e){uni.showToast({title:e instanceof Error?e.message:"ä¿å失败",icon:"none"})}finally{saving.value=false}}onLoad(async q=>{id.value=q.id?Number(q.id):undefined;mode.value=q.mode||"edit";if(state.accessToken&&id.value)Object.assign(form,await getSpare(state.accessToken,id.value))}); |
| | | </script><template><view class="page"><view class="card"><view class="field"><text>å¤ä»¶ç¼ç *</text><input v-model="form.code" :disabled="readonly||!!id"/></view><view class="field"><text>å¤ä»¶åç§° *</text><input v-model="form.name" :disabled="readonly"/></view><view class="field"><text>è§æ ¼åå·</text><input v-model="form.specification" :disabled="readonly"/></view><view class="field"><text>åä½ *</text><input v-model="form.unit" :disabled="readonly"/></view><view class="field"><text>åºä½</text><input v-model="form.location" :disabled="readonly"/></view><view class="field"><text>å®å
¨åºå *</text><input v-model.number="form.safetyQuantity" :disabled="readonly" type="number"/></view><view v-if="!id" class="field"><text>åå§åºå</text><input v-model.number="form.initialQuantity" type="number"/></view><view v-else class="field"><text>å½ååºå</text><text class="value">{{form.stockQuantity??0}}</text></view><view class="field"><text>ç¶æ</text><switch :checked="form.status===1" :disabled="readonly" @change="form.status=$event.detail.value?1:0"/></view><view class="field col"><text>夿³¨</text><textarea v-model="form.remark" :disabled="readonly"/></view></view><button v-if="!readonly&&canSave" class="save" :loading="saving" @click="save">ä¿å</button></view></template><style lang="scss" scoped>.page{min-height:100vh;padding:24rpx 30rpx;background:#f6f7f9}.card{overflow:hidden;background:#fff;border-radius:16rpx}.field{display:flex;align-items:center;min-height:96rpx;padding:0 24rpx;gap:20rpx;border-bottom:1rpx solid #eee}.field>text:first-child{width:190rpx}.field input,.value{flex:1;text-align:right}.col{align-items:flex-start;flex-direction:column;padding-block:20rpx}.col textarea{width:100%;height:130rpx}.save{margin-top:30rpx;color:#fff;background:#1769d8}.save::after{border:0}</style> |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | <script setup lang="ts"> |
| | | import{computed,ref}from"vue";import{onShow,onPullDownRefresh}from"@dcloudio/uni-app";import{deleteSpare,getSparePage,type SparePart}from"../../../../api/mes-operations";import{useAuth}from"../../../../stores/auth"; |
| | | const{hasPermission,isLoggedIn,state}=useAuth(),keyword=ref(""),shortage=ref(false),rows=ref<SparePart[]>([]),loading=ref(false);const p=(x:string)=>hasPermission("mes:dv-spare:"+x),canQuery=computed(()=>p("query")),canCreate=computed(()=>p("create")); |
| | | async function load(){if(!state.accessToken||!canQuery.value||loading.value)return;loading.value=true;try{rows.value=(await getSparePage(state.accessToken,{pageNo:1,pageSize:100,name:keyword.value||undefined,shortageOnly:shortage.value||undefined})).list}catch(e){uni.showToast({title:e instanceof Error?e.message:"å 载失败",icon:"none"})}finally{loading.value=false;uni.stopPullDownRefresh()}}function go(id?:number,mode="edit"){uni.navigateTo({url:"/pages/mes/dv/spare/form"+(id?"?id="+id+"&mode="+mode:"")})}function action(t:string,x:SparePart){uni.navigateTo({url:"/pages/mes/dv/spare/action?type="+t+"&sparePartId="+x.id})}async function remove(x:SparePart){if(!state.accessToken||!x.id)return;const ok=await new Promise<boolean>(r=>uni.showModal({title:"确认å é¤",content:"ç¡®å®å é¤è¯¥å¤ä»¶åï¼",success:v=>r(v.confirm)}));if(ok){await deleteSpare(state.accessToken,x.id);load()}}onShow(load);onPullDownRefresh(load); |
| | | </script><template><view class="page"><template v-if="isLoggedIn"><view v-if="canQuery" class="search"><input v-model="keyword" placeholder="æç´¢å¤ä»¶åç§°" @confirm="load"/><text @click="shortage=!shortage;load()">{{shortage?'å
¨é¨åºå':'ä»
çåºåä¸è¶³'}}</text></view><scroll-view v-if="canQuery" class="list" scroll-y><view v-for="x in rows" :key="x.id" class="row" @click="go(x.id,'detail')"><view class="head"><view><b>{{x.name||'æªå½åå¤ä»¶'}}</b><text>{{x.code||'ææ ç¼ç '}}</text></view><view class="status-wrap"><text :class="['status',x.status===1?'tag-ok':'tag-stop']">{{x.status===1?'å¯ç¨':'åç¨'}}</text></view></view><view class="stock"><span>å½ååºå<b :class="{low:Number(x.stockQuantity)<Number(x.safetyQuantity)}">{{x.stockQuantity??0}}</b></span><span>å®å
¨åºå<b>{{x.safetyQuantity??0}}</b></span><span>åä½<b>{{x.unit||'--'}}</b></span></view><view class="meta">è§æ ¼ï¼{{x.specification||'--'}}ãåºä½ï¼{{x.location||'--'}}</view><view class="actions" @click.stop><button @click="go(x.id,'detail')">详æ
</button><button v-if="p('update')" @click="go(x.id)">ç¼è¾</button><button v-if="p('receive')" @click="action('receive',x)">å
¥åº</button><button v-if="p('issue')&&Number(x.stockQuantity)>0" @click="action('issue',x)">é¢ç¨</button><button v-if="p('record')" @click="uni.navigateTo({url:'/pages/mes/dv/spare-record/index?sparePartId='+x.id})">è®°å½</button><button v-if="p('delete')" class="danger" @click="remove(x)">å é¤</button></view></view><view v-if="!rows.length" class="state">{{loading?'å è½½ä¸...':'ææ å¤ä»¶'}}</view></scroll-view><view v-else class="state">ææ å¤ä»¶æ¥çæé</view></template><view v-else class="state">ç»å½åæ¥çå¤ä»¶</view><button v-if="canCreate" class="fab" @click="go()"><view/></button></view></template><style lang="scss" scoped> |
| | | .page{height:100vh;display:flex;flex-direction:column;padding:0 30rpx;box-sizing:border-box;overflow:hidden;background:#f3f6fb} |
| | | .search{display:flex;flex:none;align-items:center;height:80rpx;margin:20rpx 0 16rpx;padding:0 20rpx;background:#fff;border-radius:16rpx;box-shadow:0 8rpx 20rpx rgba(43,69,107,.06)}.search input{min-width:0;flex:1;color:#1e3049;font-size:27rpx}.search text{flex:none;color:#1769d8;font-size:24rpx} |
| | | .list{height:0;flex:1;padding-bottom:150rpx;box-sizing:border-box}.row{padding:24rpx 22rpx 20rpx;margin-bottom:18rpx;background:#fff;border-radius:16rpx;box-shadow:0 10rpx 24rpx rgba(43,69,107,.08)} |
| | | .head{display:flex;align-items:flex-start;justify-content:space-between;gap:16rpx}.head>view:first-child{display:flex;min-width:0;flex:1;flex-direction:column;gap:8rpx}.head b{overflow:hidden;color:#20334c;font-size:30rpx;font-weight:600;text-overflow:ellipsis;white-space:nowrap}.head>view:first-child text{color:#78879b;font-size:23rpx} |
| | | .status-wrap{display:flex;align-items:center;flex:none;height:48rpx}.status{display:inline-flex;align-items:center;height:36rpx;padding:0 16rpx;font-size:22rpx;line-height:36rpx;border-radius:999rpx;white-space:nowrap}.tag-ok{color:#17865a;background:#eafaf2;border:1rpx solid #b8efd5}.tag-stop{color:#66778c;background:#f6f8fb;border:1rpx solid #dce4ee} |
| | | .stock{display:grid;grid-template-columns:repeat(3,1fr);gap:12rpx;margin-top:16rpx;padding:16rpx 0;border-top:1rpx solid #edf1f6;border-bottom:1rpx solid #edf1f6}.stock span{display:flex;align-items:center;flex-direction:column;gap:6rpx;color:#8795a8;font-size:21rpx}.stock b{color:#20334c;font-size:29rpx}.stock .low{color:#d45b50}.meta{padding-top:14rpx;color:#66778c;font-size:23rpx} |
| | | .actions{display:flex;flex-wrap:wrap;justify-content:flex-end;gap:12rpx;padding-top:16rpx}.actions button{min-height:50rpx;padding:0 16rpx;margin:0;color:#1769d8;font-size:22rpx;line-height:48rpx;background:#f5f8ff;border:1rpx solid #8ab3ee;border-radius:8rpx}.actions .danger{color:#c65050;background:#fff7f7;border-color:#e3a0a0}.actions button::after,.fab::after{border:0}.state{display:block;padding:35rpx;color:#8795a8;font-size:26rpx;text-align:center} |
| | | .fab{position:fixed;right:30rpx;bottom:calc(32rpx + env(safe-area-inset-bottom));z-index:10;display:flex;align-items:center;justify-content:center;width:132rpx;height:132rpx;min-height:132rpx;padding:0;margin:0;background:#1769d8;border-radius:50%;box-shadow:0 12rpx 24rpx rgba(23,105,216,.3)}.fab view{width:38rpx;height:38rpx;background:linear-gradient(#fff,#fff) center/38rpx 8rpx no-repeat,linear-gradient(#fff,#fff) center/8rpx 38rpx no-repeat}.fab view::before,.fab view::after{display:none;content:none} |
| | | </style> |
| | |
| | | </template> |
| | | |
| | | <style lang="scss" scoped> |
| | | .page{height:100vh;display:flex;flex-direction:column;padding:0 30rpx;box-sizing:border-box;overflow:hidden;background:#f3f6fb}.search{display:flex;align-items:center;height:80rpx;margin:20rpx 0 16rpx;padding:0 20rpx;background:#fff;border-radius:16rpx;box-shadow:0 8rpx 20rpx rgba(43,69,107,.06)}.search input{flex:1;font-size:27rpx}.search text{color:#1769d8;font-size:24rpx}.content{height:0;flex:1;padding-bottom:150rpx;box-sizing:border-box}.row{padding:24rpx 22rpx 20rpx;margin-bottom:18rpx;background:#fff;border-radius:16rpx;box-shadow:0 10rpx 24rpx rgba(43,69,107,.08)}.head{display:flex;align-items:flex-start;justify-content:space-between;gap:16rpx}.head>view{display:flex;min-width:0;flex:1;flex-direction:column;gap:8rpx}.head>view text:last-child{color:#78879b;font-size:23rpx}.name{overflow:hidden;color:#20334c;font-size:30rpx;font-weight:600;text-overflow:ellipsis;white-space:nowrap}.status{display:inline-flex!important;align-items:center!important;justify-content:center!important;flex:none!important;width:auto!important;min-width:0!important;min-height:36rpx!important;height:36rpx!important;padding:4rpx 14rpx!important;font-size:22rpx!important;border-radius:999rpx!important;line-height:1.2!important;white-space:nowrap}.status.enabled{color:#1769d8;background:#edf5ff}.status.disabled{color:#8d9bad;background:#f0f3f6}.tags{display:flex;flex-wrap:wrap;gap:10rpx;margin-top:16rpx}.tags text{max-width:100%;padding:6rpx 14rpx;overflow:hidden;color:#1769d8;font-size:22rpx;font-weight:600;text-overflow:ellipsis;white-space:nowrap;background:#eef5ff;border:1rpx solid #bfdbff;border-radius:999rpx}.grid{display:grid;gap:10rpx;padding:16rpx 0;margin-top:14rpx;color:#66778c;font-size:23rpx;border-top:1rpx solid #edf1f6;border-bottom:1rpx solid #edf1f6}.grid text{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.actions{display:flex;justify-content:flex-end;gap:12rpx;padding-top:16rpx}.actions button{min-height:50rpx;padding:0 16rpx;margin:0;color:#1769d8;font-size:22rpx;line-height:48rpx;background:#f5f8ff;border:1rpx solid #8ab3ee;border-radius:8rpx}.actions .danger{color:#c65050;background:#fff7f7;border-color:#e3a0a0}.actions button::after,.fab::after{border:0}.more,.state{display:block;padding:35rpx;color:#8795a8;font-size:26rpx;text-align:center}.error{color:#c3654d}.fab{position:fixed;right:30rpx;bottom:calc(32rpx + env(safe-area-inset-bottom));display:flex;align-items:center;justify-content:center;width:132rpx;height:132rpx;min-height:132rpx;padding:0;margin:0;background:#1769d8;border-radius:50%;box-shadow:0 12rpx 24rpx rgba(23,105,216,.3)}.fab view,.fab view::before{display:block;width:38rpx;height:8rpx;background:#fff;border-radius:4rpx;content:""}.fab view{position:relative}.fab view::before{position:absolute;transform:rotate(90deg)} |
| | | .page{height:100vh;display:flex;flex-direction:column;padding:0 30rpx;box-sizing:border-box;overflow:hidden;background:#f3f6fb}.search{display:flex;align-items:center;height:80rpx;margin:20rpx 0 16rpx;padding:0 20rpx;background:#fff;border-radius:16rpx;box-shadow:0 8rpx 20rpx rgba(43,69,107,.06)}.search input{flex:1;font-size:27rpx}.search text{color:#1769d8;font-size:24rpx}.content{height:0;flex:1;padding-bottom:150rpx;box-sizing:border-box}.row{padding:24rpx 22rpx 20rpx;margin-bottom:18rpx;background:#fff;border-radius:16rpx;box-shadow:0 10rpx 24rpx rgba(43,69,107,.08)}.head{display:flex;align-items:flex-start;justify-content:space-between;gap:16rpx}.head>view{display:flex;min-width:0;flex:1;flex-direction:column;gap:8rpx}.head>view text:last-child{color:#78879b;font-size:23rpx}.name{overflow:hidden;color:#20334c;font-size:30rpx;font-weight:600;text-overflow:ellipsis;white-space:nowrap}.status{display:inline-flex!important;align-items:center!important;justify-content:center!important;flex:none!important;width:auto!important;min-width:0!important;min-height:36rpx!important;height:36rpx!important;padding:4rpx 14rpx!important;font-size:22rpx!important;border-radius:999rpx!important;line-height:1.2!important;white-space:nowrap}.status.enabled{color:#1769d8;background:#edf5ff}.status.disabled{color:#8d9bad;background:#f0f3f6}.tags{display:flex;flex-wrap:wrap;gap:10rpx;margin-top:16rpx}.tags text{max-width:100%;padding:6rpx 14rpx;overflow:hidden;color:#1769d8;font-size:22rpx;font-weight:600;text-overflow:ellipsis;white-space:nowrap;background:#eef5ff;border:1rpx solid #bfdbff;border-radius:999rpx}.grid{display:grid;gap:10rpx;padding:16rpx 0;margin-top:14rpx;color:#66778c;font-size:23rpx;border-top:1rpx solid #edf1f6;border-bottom:1rpx solid #edf1f6}.grid text{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.actions{display:flex;justify-content:flex-end;gap:12rpx;padding-top:16rpx}.actions button{min-height:50rpx;padding:0 16rpx;margin:0;color:#1769d8;font-size:22rpx;line-height:48rpx;background:#f5f8ff;border:1rpx solid #8ab3ee;border-radius:8rpx}.actions .danger{color:#c65050;background:#fff7f7;border-color:#e3a0a0}.actions button::after,.fab::after{border:0}.more,.state{display:block;padding:35rpx;color:#8795a8;font-size:26rpx;text-align:center}.error{color:#c3654d}.fab{position:fixed;right:30rpx;bottom:calc(32rpx + env(safe-area-inset-bottom));display:flex;align-items:center;justify-content:center;width:132rpx;height:132rpx;min-height:132rpx;padding:0;margin:0;background:#1769d8;border-radius:50%;box-shadow:0 12rpx 24rpx rgba(23,105,216,.3)}.fab view{width:38rpx;height:38rpx;background:linear-gradient(#fff,#fff) center/38rpx 8rpx no-repeat,linear-gradient(#fff,#fff) center/8rpx 38rpx no-repeat}.fab view::before,.fab view::after{display:none;content:none} |
| | | </style> |
| | |
| | | const loadError = ref(""); |
| | | |
| | | /** ä¸ web 端 archive/index.vue ä¸è´ï¼ä»
export æéï¼å表æ è¡æä½ */ |
| | | const canExport = computed(() => hasPermission("mes:pd-archive:export")); |
| | | const hasMore = computed(() => rows.value.length < total.value); |
| | | |
| | | function statusText(status?: number) { |
| | |
| | | </view> |
| | | <view v-else class="state">{{ loading ? 'å è½½ä¸...' : 'ææ å½æ¡£å°è´¦' }}</view> |
| | | </scroll-view> |
| | | <view v-if="canExport" class="export-tip">导åºè¯·å¨ Web 端使ç¨</view> |
| | | </template> |
| | | <view v-else class="state">ç»å½åæ¥ç彿¡£å°è´¦</view> |
| | | </view> |
| | |
| | | .more{display:block;padding:16rpx 0 6rpx;color:#93a1b3;font-size:22rpx;text-align:center} |
| | | .state{padding:60rpx 20rpx;color:#8795a8;font-size:25rpx;text-align:center} |
| | | .state.error{color:#c65050} |
| | | .export-tip{padding:12rpx 0 24rpx;color:#9aa8ba;font-size:22rpx;text-align:center} |
| | | </style> |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | <script setup lang="ts"> |
| | | import{computed,reactive,ref}from"vue";import{onLoad}from"@dcloudio/uni-app";import{createCard,createCardProcess,deleteCardProcess,getCard,getCardProcessPage,updateCard,updateCardProcess,type TransferCard,type TransferProcess}from"../../../../api/mes-operations";import{getWorkOrderPage,type WorkOrder}from"../../../../api/production";import{generateAutoCode,getMesItemPage,getProcessSimpleList,getWorkstationPage,type MesMdItem,type MesWorkstation,type ProProcess}from"../../../../api/process-design";import{getHrmUserList,type UserOption}from"../../../../api/hrm";import{useAuth}from"../../../../stores/auth";const{hasPermission,state}=useAuth(),id=ref<number>(),mode=ref("edit"),orders=ref<WorkOrder[]>([]),items=ref<MesMdItem[]>([]),processes=ref<ProProcess[]>([]),stations=ref<MesWorkstation[]>([]),users=ref<UserOption[]>([]),lines=ref<TransferProcess[]>([]),open=ref(false),editing=ref<TransferProcess>(),form=reactive<TransferCard>({code:"",status:0,transferedQuantity:0}),line=reactive<TransferProcess>({sort:1,inputQuantity:0,outputQuantity:0,unqualifiedQuantity:0});const readonly=computed(()=>mode.value==="detail"||form.status!==0),canSave=computed(()=>id.value?hasPermission("mes:pro-card:update"):hasPermission("mes:pro-card:create"));function selectOrder(i:number){const x=orders.value[i];Object.assign(form,{workOrderId:x.id,workOrderCode:x.code,workOrderName:x.name,itemId:x.productId,itemCode:x.productCode,itemName:x.productName,specification:x.productSpecification,unitMeasureName:x.unitMeasureName})}function selectItem(i:number){const x=items.value[i];Object.assign(form,{itemId:x.id,itemCode:x.code,itemName:x.name,specification:x.specification,unitMeasureName:x.unitMeasureName})}async function save(){if(!state.accessToken||!canSave.value||!form.code||!form.workOrderId||!form.itemId)return uni.showToast({title:"è¯·å®æ´å¡«åå¿
填项",icon:"none"});id.value?await updateCard(state.accessToken,{...form,id:id.value}):id.value=await createCard(state.accessToken,form);uni.showToast({title:"ä¿åæå",icon:"success"});loadLines()}async function loadLines(){if(state.accessToken&&id.value)lines.value=(await getCardProcessPage(state.accessToken,{pageNo:1,pageSize:100,cardId:id.value})).list}function editLine(x?:TransferProcess){editing.value=x;Object.assign(line,x||{id:undefined,sort:lines.value.length+1,processId:undefined,workstationId:undefined,userId:undefined,inputTime:"",outputTime:"",inputQuantity:0,outputQuantity:0,unqualifiedQuantity:0,remark:""});open.value=true}async function saveLine(){if(!state.accessToken||!id.value||!line.processId)return uni.showToast({title:"è¯·éæ©å·¥åº",icon:"none"});const d={...line,cardId:id.value};editing.value?.id?await updateCardProcess(state.accessToken,{...d,id:editing.value.id}):await createCardProcess(state.accessToken,d);open.value=false;loadLines()}async function removeLine(x:TransferProcess){if(state.accessToken&&x.id){await deleteCardProcess(state.accessToken,x.id);loadLines()}}onLoad(async q=>{id.value=q.id?Number(q.id):undefined;mode.value=q.mode||"edit";if(!state.accessToken)return;const[o,m,p,w,u]=await Promise.all([getWorkOrderPage(state.accessToken,{pageNo:1,pageSize:100}),getMesItemPage(state.accessToken,{pageNo:1,pageSize:100,status:0}),getProcessSimpleList(state.accessToken),getWorkstationPage(state.accessToken,{pageNo:1,pageSize:100,status:0}),getHrmUserList(state.accessToken)]);orders.value=o.list;items.value=m.list;processes.value=p;stations.value=w.list;users.value=u;if(id.value){Object.assign(form,await getCard(state.accessToken,id.value));loadLines()}else form.code=await generateAutoCode(state.accessToken,"PRO_CARD_CODE")}); |
| | | </script><template><view class="page"><view class="card"><view class="field"><text>æµè½¬å¡ç¼å· *</text><input v-model="form.code" :disabled="readonly||!!id"/></view><view class="field"><text>ç产订å *</text><picker v-if="!readonly" :range="orders" range-key="code" @change="selectOrder($event.detail.value)"><view class="value">{{form.workOrderCode||'è¯·éæ©'}} âº</view></picker><text v-else class="value">{{form.workOrderCode}}</text></view><view class="field"><text>产å *</text><picker v-if="!readonly" :range="items" range-key="name" @change="selectItem($event.detail.value)"><view class="value">{{form.itemName||'è¯·éæ©'}} âº</view></picker><text v-else class="value">{{form.itemName}}</text></view><view class="field"><text>æ¹æ¬¡å·</text><input v-model="form.batchCode" :disabled="readonly"/></view><view class="field"><text>æµè½¬æ°é *</text><input v-model.number="form.transferedQuantity" :disabled="readonly" type="digit"/></view><view class="field col"><text>夿³¨</text><textarea v-model="form.remark" :disabled="readonly"/></view></view><button v-if="!readonly&&canSave" class="save" @click="save">ä¿å</button><view v-if="id" class="section"><view class="section-head"><b>å·¥åºæç»</b><button v-if="!readonly" @click="editLine()">æ·»å å·¥åº</button></view><view v-for="x in lines" :key="x.id" class="line"><b>{{x.sort}}. {{x.processName||x.processCode}}</b><text>å·¥ä½ï¼{{x.workstationName||'--'}}ãæä½äººï¼{{x.nickname||'--'}}</text><text>æå
¥ {{x.inputQuantity??0}} / äº§åº {{x.outputQuantity??0}} / ä¸åæ ¼ {{x.unqualifiedQuantity??0}}</text><text>{{x.inputTime||'--'}} è³ {{x.outputTime||'--'}}</text><view v-if="!readonly"><button @click="editLine(x)">ç¼è¾</button><button @click="removeLine(x)">å é¤</button></view></view><view v-if="!lines.length" class="state">ææ å·¥åºæç»</view></view><view v-if="open" class="mask" @click="open=false"><scroll-view class="sheet" scroll-y @click.stop><h3>{{editing?'ç¼è¾å·¥åº':'æ·»å å·¥åº'}}</h3><view class="field"><text>顺åº</text><input v-model.number="line.sort" type="number"/></view><view class="field"><text>å·¥åº *</text><picker :range="processes" range-key="name" @change="line.processId=processes[$event.detail.value].id"><view class="value">{{processes.find(x=>x.id===line.processId)?.name||line.processName||'è¯·éæ©'}} âº</view></picker></view><view class="field"><text>å·¥ä½</text><picker :range="stations" range-key="name" @change="line.workstationId=stations[$event.detail.value].id"><view class="value">{{stations.find(x=>x.id===line.workstationId)?.name||line.workstationName||'è¯·éæ©'}} âº</view></picker></view><view class="field"><text>æä½äºº</text><picker :range="users" range-key="nickname" @change="line.userId=users[$event.detail.value].id"><view class="value">{{users.find(x=>x.id===line.userId)?.nickname||line.nickname||'è¯·éæ©'}} âº</view></picker></view><view class="field"><text>æå
¥æ¶é´</text><input v-model="line.inputTime" placeholder="YYYY-MM-DD HH:mm:ss"/></view><view class="field"><text>äº§åºæ¶é´</text><input v-model="line.outputTime" placeholder="YYYY-MM-DD HH:mm:ss"/></view><view class="field"><text>æå
¥æ°é</text><input v-model.number="line.inputQuantity" type="digit"/></view><view class="field"><text>äº§åºæ°é</text><input v-model.number="line.outputQuantity" type="digit"/></view><view class="field"><text>ä¸åæ ¼æ°é</text><input v-model.number="line.unqualifiedQuantity" type="digit"/></view><view class="field col"><text>夿³¨</text><textarea v-model="line.remark"/></view><button class="save inner" @click="saveLine">ä¿åå·¥åº</button></scroll-view></view></view></template><style lang="scss" scoped>.page{min-height:100vh;padding:24rpx 30rpx;background:#f6f7f9}.card,.section{overflow:hidden;background:#fff;border-radius:16rpx}.section{margin-top:24rpx}.field{display:flex;align-items:center;min-height:96rpx;padding:0 24rpx;gap:20rpx;border-bottom:1rpx solid #eee}.field>text:first-child{width:190rpx}.field input,.field picker,.value{flex:1;text-align:right}.col{align-items:flex-start;flex-direction:column;padding-block:20rpx}.col textarea{width:100%;height:120rpx}.save{margin-top:28rpx;color:#fff;background:#1769d8}.section-head{display:flex;justify-content:space-between;padding:22rpx}.section-head button,.line button{min-height:48rpx;margin:0;color:#1769d8;font-size:22rpx;line-height:46rpx}.line{display:flex;flex-direction:column;gap:8rpx;padding:20rpx;border-top:1rpx solid #eee;color:#66778c;font-size:23rpx}.line>view{display:flex;justify-content:flex-end;gap:10rpx}.state{padding:30rpx;text-align:center}.mask{position:fixed;inset:0;display:flex;align-items:flex-end;background:#0006}.sheet{max-height:85vh;background:#fff}.sheet h3{padding:25rpx}.inner{margin:25rpx 30rpx 50rpx}</style> |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | <script setup lang="ts"> |
| | | import{computed,ref}from"vue";import{onShow,onPullDownRefresh}from"@dcloudio/uni-app";import{cancelCard,deleteCard,finishCard,getCardPage,submitCard,type TransferCard}from"../../../../api/mes-operations";import{useAuth}from"../../../../stores/auth";const{hasPermission,isLoggedIn,state}=useAuth(),keyword=ref(""),rows=ref<TransferCard[]>([]),loading=ref(false),p=(x:string)=>hasPermission("mes:pro-card:"+x),canQuery=computed(()=>p("query")),canCreate=computed(()=>p("create")),labels:Record<number,string>={0:"è稿",1:"已确认",2:"å·²å®å·¥",3:"已忶"};async function load(){if(!state.accessToken||!canQuery.value)return;loading.value=true;try{rows.value=(await getCardPage(state.accessToken,{pageNo:1,pageSize:100,code:keyword.value||undefined})).list}finally{loading.value=false;uni.stopPullDownRefresh()}}function go(id?:number,mode="edit"){uni.navigateTo({url:"/pages/mes/pro/card/form"+(id?"?id="+id+"&mode="+mode:"")})}async function run(x:TransferCard,t:string){if(!state.accessToken||!x.id)return;const ok=await new Promise<boolean>(r=>uni.showModal({title:"确认æä½",content:"ç¡®å®æ§è¡è¯¥æä½åï¼",success:v=>r(v.confirm)}));if(!ok)return;if(t==="delete")await deleteCard(state.accessToken,x.id);else if(t==="submit")await submitCard(state.accessToken,x.id);else if(t==="finish")await finishCard(state.accessToken,x.id);else await cancelCard(state.accessToken,x.id);load()}onShow(load);onPullDownRefresh(load); |
| | | </script><template><view class="page"><template v-if="isLoggedIn"><view v-if="canQuery" class="search"><input v-model="keyword" placeholder="æç´¢æµè½¬å¡ç¼å·" @confirm="load"/><text @click="keyword='';load()">æ¸
é¤</text></view><scroll-view v-if="canQuery" class="list" scroll-y><view v-for="x in rows" :key="x.id" class="row" @click="go(x.id,'detail')"><view class="head"><view><b>{{x.code||'ææ ç¼å·'}}</b><text>{{x.workOrderCode||'ææ ç产订å'}}</text></view><view class="status-wrap"><text :class="['status','s'+x.status]">{{labels[Number(x.status)]||'æªç¥'}}</text></view></view><view class="grid"><text>产åï¼{{x.itemCode||'--'}} {{x.itemName||''}}</text><text>è§æ ¼ï¼{{x.specification||'--'}}</text><text>æ¹æ¬¡ï¼{{x.batchCode||'--'}}</text><text>æµè½¬æ°éï¼{{x.transferedQuantity??0}} {{x.unitMeasureName||''}}</text></view><view class="actions" @click.stop><button @click="go(x.id,'detail')">详æ
</button><button v-if="p('update')&&x.status===0" @click="go(x.id)">ç¼è¾</button><button v-if="p('update')&&x.status===0" @click="run(x,'submit')">æäº¤</button><button v-if="p('finish')&&x.status===1" @click="run(x,'finish')">å®å·¥</button><button v-if="p('update')&&x.status===1" @click="run(x,'cancel')">åæ¶</button><button v-if="p('delete')&&x.status===0" @click="run(x,'delete')">å é¤</button></view></view><view v-if="!rows.length" class="state">{{loading?'å è½½ä¸...':'ææ å·¥åºæµè½¬å¡'}}</view></scroll-view><view v-else class="state">ææ å·¥åºæµè½¬æ¥çæé</view></template><view v-else class="state">ç»å½åæ¥çå·¥åºæµè½¬</view><button v-if="canCreate" class="fab" @click="go()"><view/></button></view></template><style lang="scss" scoped> |
| | | .page{height:100vh;display:flex;flex-direction:column;padding:0 30rpx;box-sizing:border-box;overflow:hidden;background:#f3f6fb} |
| | | .search{display:flex;flex:none;align-items:center;height:80rpx;margin:20rpx 0 16rpx;padding:0 20rpx;background:#fff;border-radius:16rpx;box-shadow:0 8rpx 20rpx rgba(43,69,107,.06)}.search input{min-width:0;flex:1;color:#1e3049;font-size:27rpx}.search text{flex:none;color:#1769d8;font-size:24rpx} |
| | | .list{height:0;flex:1;padding-bottom:100rpx;box-sizing:border-box}.row{padding:24rpx 22rpx 20rpx;margin-bottom:18rpx;background:#fff;border-radius:16rpx;box-shadow:0 10rpx 24rpx rgba(43,69,107,.08)} |
| | | .head{display:flex;align-items:flex-start;justify-content:space-between;gap:16rpx}.head>view:first-child{display:flex;min-width:0;flex:1;flex-direction:column;gap:8rpx}.head b{overflow:hidden;color:#20334c;font-size:30rpx;font-weight:600;text-overflow:ellipsis;white-space:nowrap}.head>view:first-child text{color:#78879b;font-size:23rpx} |
| | | .status-wrap{display:flex;align-items:center;flex:none;height:48rpx}.status{display:inline-flex;align-items:center;height:36rpx;padding:0 16rpx;font-size:22rpx;line-height:36rpx;border-radius:999rpx;white-space:nowrap}.s0{color:#1769d8;background:#edf5ff;border:1rpx solid #bfdbff}.s1{color:#17865a;background:#eafaf2;border:1rpx solid #b8efd5}.s2{color:#7a52c6;background:#f3edff;border:1rpx solid #d4c0ff}.s3{color:#c65050;background:#fff7f7;border:1rpx solid #e3a0a0} |
| | | .grid{display:grid;gap:9rpx;padding:14rpx 0;margin-top:14rpx;color:#66778c;font-size:23rpx;border-top:1rpx solid #edf1f6;border-bottom:1rpx solid #edf1f6}.grid text{overflow:hidden;text-overflow:ellipsis;white-space:nowrap} |
| | | .actions{display:flex;flex-wrap:wrap;justify-content:flex-end;gap:12rpx;padding-top:16rpx}.actions button{min-height:50rpx;padding:0 16rpx;margin:0;color:#1769d8;font-size:22rpx;line-height:48rpx;background:#f5f8ff;border:1rpx solid #8ab3ee;border-radius:8rpx}.actions button::after,.fab::after{border:0}.state{display:block;padding:35rpx;color:#8795a8;font-size:26rpx;text-align:center} |
| | | .fab{position:fixed;right:30rpx;bottom:calc(32rpx + env(safe-area-inset-bottom));z-index:10;display:flex;align-items:center;justify-content:center;width:132rpx;height:132rpx;min-height:132rpx;padding:0;margin:0;background:#1769d8;border-radius:50%;box-shadow:0 12rpx 24rpx rgba(23,105,216,.3)}.fab view{width:38rpx;height:38rpx;background:linear-gradient(#fff,#fff) center/38rpx 8rpx no-repeat,linear-gradient(#fff,#fff) center/8rpx 38rpx no-repeat}.fab view::before,.fab view::after{display:none;content:none} |
| | | </style> |
| | |
| | | </template> |
| | | |
| | | <style lang="scss" scoped> |
| | | .page{height:100vh;display:flex;flex-direction:column;padding:0 24rpx;box-sizing:border-box;overflow:hidden;background:#f3f6fb}.search{display:flex;flex:none;align-items:center;height:80rpx;margin:20rpx 0 14rpx;padding:0 20rpx;background:#fff;border-radius:16rpx;box-shadow:0 8rpx 20rpx rgba(43,69,107,.06)}.search input{flex:1;font-size:27rpx}.search text{color:#1769d8;font-size:24rpx}.list{height:0;flex:1;padding-bottom:150rpx;box-sizing:border-box}.row{padding:24rpx 22rpx 20rpx;margin-bottom:18rpx;background:#fff;border-radius:16rpx;box-shadow:0 10rpx 24rpx rgba(43,69,107,.08)}.head{display:flex;align-items:flex-start;justify-content:space-between;gap:16rpx}.head>view:first-child{display:flex;min-width:0;flex:1;flex-direction:column;gap:8rpx}.head>view:first-child text:last-child{color:#78879b;font-size:23rpx}.name{overflow:hidden;color:#20334c;font-size:30rpx;font-weight:600;text-overflow:ellipsis;white-space:nowrap}.status-wrap{display:flex;align-items:center;flex:none;height:48rpx}.status{display:inline-flex;align-items:center;height:36rpx;padding:0 16rpx;font-size:22rpx;border-radius:999rpx;white-space:nowrap}.tag-draft{color:#1769d8;background:#edf5ff;border:1rpx solid #bfdbff}.tag-wait{color:#b58100;background:#fff7e6;border:1rpx solid #ffd591}.tag-ok{color:#17865a;background:#eafaf2;border:1rpx solid #b8efd5}.tag-stop{color:#c65050;background:#fff7f7;border:1rpx solid #e3a0a0}.tag-info{color:#66778c;background:#f6f8fb;border:1rpx solid #dce4ee}.tags{display:flex;flex-wrap:wrap;gap:10rpx;margin-top:14rpx}.tags text{padding:4rpx 12rpx;color:#1769d8;font-size:22rpx;background:#edf5ff;border:1rpx solid #bfdbff;border-radius:999rpx}.grid{display:grid;gap:9rpx;padding:14rpx 0;margin-top:14rpx;color:#66778c;font-size:22rpx;border-top:1rpx solid #edf1f6;border-bottom:1rpx solid #edf1f6}.grid text{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.actions{display:flex;flex-wrap:wrap;justify-content:flex-end;gap:12rpx;padding-top:16rpx}.actions button{min-height:50rpx;padding:0 16rpx;margin:0;color:#1769d8;font-size:22rpx;line-height:48rpx;background:#f5f8ff;border:1rpx solid #8ab3ee;border-radius:8rpx}.actions .danger{color:#c65050;background:#fff7f7;border-color:#e3a0a0}.actions button::after,.fab::after{border:0}.more,.state{display:block;padding:35rpx;color:#8795a8;font-size:26rpx;text-align:center}.error{color:#c3654d}.fab{position:fixed;right:30rpx;bottom:calc(32rpx + env(safe-area-inset-bottom));z-index:10;display:flex;align-items:center;justify-content:center;width:132rpx;height:132rpx;min-height:132rpx;padding:0;margin:0;background:#1769d8;border-radius:50%;box-shadow:0 12rpx 24rpx rgba(23,105,216,.3)}.fab view,.fab view::before{display:block;width:38rpx;height:8rpx;background:#fff;border-radius:4rpx;content:""}.fab view{position:relative}.fab view::before{position:absolute;transform:rotate(90deg)} |
| | | .page{height:100vh;display:flex;flex-direction:column;padding:0 24rpx;box-sizing:border-box;overflow:hidden;background:#f3f6fb}.search{display:flex;flex:none;align-items:center;height:80rpx;margin:20rpx 0 14rpx;padding:0 20rpx;background:#fff;border-radius:16rpx;box-shadow:0 8rpx 20rpx rgba(43,69,107,.06)}.search input{flex:1;font-size:27rpx}.search text{color:#1769d8;font-size:24rpx}.list{height:0;flex:1;padding-bottom:150rpx;box-sizing:border-box}.row{padding:24rpx 22rpx 20rpx;margin-bottom:18rpx;background:#fff;border-radius:16rpx;box-shadow:0 10rpx 24rpx rgba(43,69,107,.08)}.head{display:flex;align-items:flex-start;justify-content:space-between;gap:16rpx}.head>view:first-child{display:flex;min-width:0;flex:1;flex-direction:column;gap:8rpx}.head>view:first-child text:last-child{color:#78879b;font-size:23rpx}.name{overflow:hidden;color:#20334c;font-size:30rpx;font-weight:600;text-overflow:ellipsis;white-space:nowrap}.status-wrap{display:flex;align-items:center;flex:none;height:48rpx}.status{display:inline-flex;align-items:center;height:36rpx;padding:0 16rpx;font-size:22rpx;border-radius:999rpx;white-space:nowrap}.tag-draft{color:#1769d8;background:#edf5ff;border:1rpx solid #bfdbff}.tag-wait{color:#b58100;background:#fff7e6;border:1rpx solid #ffd591}.tag-ok{color:#17865a;background:#eafaf2;border:1rpx solid #b8efd5}.tag-stop{color:#c65050;background:#fff7f7;border:1rpx solid #e3a0a0}.tag-info{color:#66778c;background:#f6f8fb;border:1rpx solid #dce4ee}.tags{display:flex;flex-wrap:wrap;gap:10rpx;margin-top:14rpx}.tags text{padding:4rpx 12rpx;color:#1769d8;font-size:22rpx;background:#edf5ff;border:1rpx solid #bfdbff;border-radius:999rpx}.grid{display:grid;gap:9rpx;padding:14rpx 0;margin-top:14rpx;color:#66778c;font-size:22rpx;border-top:1rpx solid #edf1f6;border-bottom:1rpx solid #edf1f6}.grid text{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.actions{display:flex;flex-wrap:wrap;justify-content:flex-end;gap:12rpx;padding-top:16rpx}.actions button{min-height:50rpx;padding:0 16rpx;margin:0;color:#1769d8;font-size:22rpx;line-height:48rpx;background:#f5f8ff;border:1rpx solid #8ab3ee;border-radius:8rpx}.actions .danger{color:#c65050;background:#fff7f7;border-color:#e3a0a0}.actions button::after,.fab::after{border:0}.more,.state{display:block;padding:35rpx;color:#8795a8;font-size:26rpx;text-align:center}.error{color:#c3654d}.fab{position:fixed;right:30rpx;bottom:calc(32rpx + env(safe-area-inset-bottom));z-index:10;display:flex;align-items:center;justify-content:center;width:132rpx;height:132rpx;min-height:132rpx;padding:0;margin:0;background:#1769d8;border-radius:50%;box-shadow:0 12rpx 24rpx rgba(23,105,216,.3)}.fab view{width:38rpx;height:38rpx;background:linear-gradient(#fff,#fff) center/38rpx 8rpx no-repeat,linear-gradient(#fff,#fff) center/8rpx 38rpx no-repeat}.fab view::before,.fab view::after{display:none;content:none} |
| | | </style> |
| | |
| | | </template> |
| | | |
| | | <style lang="scss" scoped> |
| | | .page{height:100vh;display:flex;flex-direction:column;padding:0 24rpx;box-sizing:border-box;overflow:hidden;background:#f3f6fb}.search{display:flex;flex:none;align-items:center;height:80rpx;margin:20rpx 0 14rpx;padding:0 20rpx;background:#fff;border-radius:16rpx;box-shadow:0 8rpx 20rpx rgba(43,69,107,.06)}.search input{flex:1;font-size:27rpx}.search text,.merge{color:#1769d8;font-size:24rpx}.merge{align-self:flex-end;padding:10rpx 18rpx;margin-bottom:14rpx;background:#eef5ff;border:1rpx solid #9bc1f5;border-radius:999rpx}.list{height:0;flex:1;padding-bottom:150rpx;box-sizing:border-box}.row{padding:24rpx 22rpx 20rpx;margin-bottom:18rpx;background:#fff;border-radius:16rpx;box-shadow:0 10rpx 24rpx rgba(43,69,107,.08)}.head{display:flex;align-items:flex-start;gap:14rpx}.select{width:42rpx;flex:none}.title{display:flex;min-width:0;flex:1;flex-direction:column;gap:8rpx}.title text:last-child{color:#78879b;font-size:23rpx}.name{overflow:hidden;color:#20334c;font-size:30rpx;font-weight:600;text-overflow:ellipsis;white-space:nowrap}.status-wrap{display:flex;align-items:center;flex:none;height:48rpx}.status{display:inline-flex;align-items:center;height:36rpx;padding:0 16rpx;font-size:22rpx;border-radius:999rpx;white-space:nowrap}.tag-draft{color:#1769d8;background:#edf5ff;border:1rpx solid #bfdbff}.tag-ok{color:#17865a;background:#eafaf2;border:1rpx solid #b8efd5}.tag-finish{color:#7a52c6;background:#f3edff;border:1rpx solid #d4c0ff}.tag-stop{color:#c65050;background:#fff7f7;border:1rpx solid #e3a0a0}.tag-info{color:#66778c;background:#f6f8fb;border:1rpx solid #dce4ee}.tags{display:flex;flex-wrap:wrap;gap:10rpx;margin-top:14rpx}.tags text{padding:4rpx 12rpx;color:#1769d8;font-size:22rpx;background:#edf5ff;border:1rpx solid #bfdbff;border-radius:999rpx}.grid{display:grid;gap:9rpx;padding:14rpx 0;margin-top:14rpx;color:#66778c;font-size:22rpx;border-top:1rpx solid #edf1f6;border-bottom:1rpx solid #edf1f6}.grid text{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.actions{display:flex;flex-wrap:wrap;justify-content:flex-end;gap:12rpx;padding-top:16rpx}.actions button{min-height:50rpx;padding:0 16rpx;margin:0;color:#1769d8;font-size:22rpx;line-height:48rpx;background:#f5f8ff;border:1rpx solid #8ab3ee;border-radius:8rpx}.actions .danger{color:#c65050;background:#fff7f7;border-color:#e3a0a0}.actions button::after,.fab::after{border:0}.more,.state{display:block;padding:35rpx;color:#8795a8;font-size:26rpx;text-align:center}.error{color:#c3654d}.fab{position:fixed;right:30rpx;bottom:calc(32rpx + env(safe-area-inset-bottom));z-index:10;display:flex;align-items:center;justify-content:center;width:132rpx;height:132rpx;min-height:132rpx;padding:0;margin:0;background:#1769d8;border-radius:50%;box-shadow:0 12rpx 24rpx rgba(23,105,216,.3)}.fab view,.fab view::before{display:block;width:38rpx;height:8rpx;background:#fff;border-radius:4rpx;content:""}.fab view{position:relative}.fab view::before{position:absolute;transform:rotate(90deg)} |
| | | .page{height:100vh;display:flex;flex-direction:column;padding:0 24rpx;box-sizing:border-box;overflow:hidden;background:#f3f6fb}.search{display:flex;flex:none;align-items:center;height:80rpx;margin:20rpx 0 14rpx;padding:0 20rpx;background:#fff;border-radius:16rpx;box-shadow:0 8rpx 20rpx rgba(43,69,107,.06)}.search input{flex:1;font-size:27rpx}.search text,.merge{color:#1769d8;font-size:24rpx}.merge{align-self:flex-end;padding:10rpx 18rpx;margin-bottom:14rpx;background:#eef5ff;border:1rpx solid #9bc1f5;border-radius:999rpx}.list{height:0;flex:1;padding-bottom:150rpx;box-sizing:border-box}.row{padding:24rpx 22rpx 20rpx;margin-bottom:18rpx;background:#fff;border-radius:16rpx;box-shadow:0 10rpx 24rpx rgba(43,69,107,.08)}.head{display:flex;align-items:flex-start;gap:14rpx}.select{width:42rpx;flex:none}.title{display:flex;min-width:0;flex:1;flex-direction:column;gap:8rpx}.title text:last-child{color:#78879b;font-size:23rpx}.name{overflow:hidden;color:#20334c;font-size:30rpx;font-weight:600;text-overflow:ellipsis;white-space:nowrap}.status-wrap{display:flex;align-items:center;flex:none;height:48rpx}.status{display:inline-flex;align-items:center;height:36rpx;padding:0 16rpx;font-size:22rpx;border-radius:999rpx;white-space:nowrap}.tag-draft{color:#1769d8;background:#edf5ff;border:1rpx solid #bfdbff}.tag-ok{color:#17865a;background:#eafaf2;border:1rpx solid #b8efd5}.tag-finish{color:#7a52c6;background:#f3edff;border:1rpx solid #d4c0ff}.tag-stop{color:#c65050;background:#fff7f7;border:1rpx solid #e3a0a0}.tag-info{color:#66778c;background:#f6f8fb;border:1rpx solid #dce4ee}.tags{display:flex;flex-wrap:wrap;gap:10rpx;margin-top:14rpx}.tags text{padding:4rpx 12rpx;color:#1769d8;font-size:22rpx;background:#edf5ff;border:1rpx solid #bfdbff;border-radius:999rpx}.grid{display:grid;gap:9rpx;padding:14rpx 0;margin-top:14rpx;color:#66778c;font-size:22rpx;border-top:1rpx solid #edf1f6;border-bottom:1rpx solid #edf1f6}.grid text{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.actions{display:flex;flex-wrap:wrap;justify-content:flex-end;gap:12rpx;padding-top:16rpx}.actions button{min-height:50rpx;padding:0 16rpx;margin:0;color:#1769d8;font-size:22rpx;line-height:48rpx;background:#f5f8ff;border:1rpx solid #8ab3ee;border-radius:8rpx}.actions .danger{color:#c65050;background:#fff7f7;border-color:#e3a0a0}.actions button::after,.fab::after{border:0}.more,.state{display:block;padding:35rpx;color:#8795a8;font-size:26rpx;text-align:center}.error{color:#c3654d}.fab{position:fixed;right:30rpx;bottom:calc(32rpx + env(safe-area-inset-bottom));z-index:10;display:flex;align-items:center;justify-content:center;width:132rpx;height:132rpx;min-height:132rpx;padding:0;margin:0;background:#1769d8;border-radius:50%;box-shadow:0 12rpx 24rpx rgba(23,105,216,.3)}.fab view{width:38rpx;height:38rpx;background:linear-gradient(#fff,#fff) center/38rpx 8rpx no-repeat,linear-gradient(#fff,#fff) center/8rpx 38rpx no-repeat}.fab view::before,.fab view::after{display:none;content:none} |
| | | </style> |
| | |
| | | import { computed, ref } from "vue"; |
| | | import { onPullDownRefresh, onShow } from "@dcloudio/uni-app"; |
| | | import { getSimpleDictDataList, type DictData } from "../../../../api/crm"; |
| | | import { getWorkOrderSchedulePage, type WorkOrder } from "../../../../api/production"; |
| | | import { executeBatchSchedule, getWorkOrderSchedulePage, previewBatchSchedule, type WorkOrder } from "../../../../api/production"; |
| | | import { useAuth } from "../../../../stores/auth"; |
| | | import { dateText, dayText, dictLabel } from "../../dv/shared"; |
| | | import { statusToneClass } from "../../../../utils/status"; |
| | |
| | | function goSchedule(row: WorkOrder, mode: "schedule" | "detail" = "detail") { |
| | | uni.navigateTo({ url: `/pages/mes/pro/task/form?workOrderId=${row.id}&mode=${mode}` }); |
| | | } |
| | | function scheduleStartTime() { |
| | | const date = new Date(Date.now() + 5 * 60 * 1000); |
| | | if (date.getHours() >= 18) { date.setDate(date.getDate() + 1); date.setHours(9, 0, 0, 0); } |
| | | else if (date.getHours() < 9) date.setHours(9, 0, 0, 0); |
| | | while (date.getDay() === 0 || date.getDay() === 6) date.setDate(date.getDate() + 1); |
| | | const pad = (value: number) => String(value).padStart(2, "0"); |
| | | return date.getFullYear() + "-" + pad(date.getMonth()+1) + "-" + pad(date.getDate()) + " " + pad(date.getHours()) + ":" + pad(date.getMinutes()) + ":00"; |
| | | } |
| | | async function autoSchedule(row: WorkOrder) { |
| | | if (!state.accessToken || !row.id) return; |
| | | if (row.status !== 1 || row.type !== 1 || isCompleted(row) || Number(row.quantityScheduled || 0) >= Number(row.quantity || 0)) { |
| | | return uni.showToast({ title: "ä»
å¯æäº§å·²ç¡®è®¤ä¸ä»æå¾
ææ°éçèªè¡ç产工å", icon: "none" }); |
| | | } |
| | | const startTime = scheduleStartTime(); |
| | | try { |
| | | uni.showLoading({ title: "çææäº§é¢è§" }); |
| | | const preview = await previewBatchSchedule(state.accessToken, { workOrderIds: [row.id], startTime }); |
| | | uni.hideLoading(); |
| | | const error = preview.orders.find(item => item.error)?.error; |
| | | if (!preview.canExecute || error) return uni.showModal({ title: "æ æ³æäº§", content: error || "å·¥åæªéè¿æäº§æ ¡éª", showCancel: false }); |
| | | const warning = preview.warnings.join("\n"); |
| | | const content = "é¢è®¡çæ " + preview.tasks.length + " 个任å¡ï¼ææ©å¼å·¥ " + startTime + (warning ? "\n\n交ææç¤ºï¼" + warning : ""); |
| | | const confirmed = await new Promise<boolean>(resolve => uni.showModal({ title: "ä¸é®æäº§é¢è§", content, confirmText: warning ? "æ¥åå¹¶æäº§" : "确认æäº§", success: res => resolve(res.confirm) })); |
| | | if (!confirmed) return; |
| | | const result = await executeBatchSchedule(state.accessToken, { workOrderIds: [row.id], startTime, previewHash: preview.previewHash, previewTime: preview.previewTime, allowLate: !!warning }); |
| | | uni.showToast({ title: "å·²çæ" + result.taskIds.length + "个任å¡", icon: "success" }); |
| | | load(true); |
| | | } catch (error) { |
| | | uni.hideLoading(); |
| | | uni.showToast({ title: error instanceof Error ? error.message : "ä¸é®æäº§å¤±è´¥", icon: "none" }); |
| | | } |
| | | } |
| | | function goArchive(row: WorkOrder) { |
| | | if (!row.productCode) return uni.showToast({ title: "ææ äº§åç¼ç ", icon: "none" }); |
| | | uni.navigateTo({ url: `/pages/mes/pd/archive/detail?productCode=${encodeURIComponent(row.productCode)}` }); |
| | |
| | | <view class="progress"><view><view :style="{width:progress(row)+'%'}" /></view><text>{{ progress(row) }}%</text></view> |
| | | <view class="actions" @click.stop> |
| | | <button @click="goSchedule(row,'detail')">详æ
</button> |
| | | <button v-if="canSchedule && row.status === 1 && row.productionStatus !== 2" @click="goSchedule(row,'schedule')">æäº§ç»´æ¤</button> |
| | | <button v-if="canSchedule && row.status === 1 && row.productionStatus !== 2" @click="goSchedule(row,'schedule')">æäº§ç»´æ¤</button><button v-if="canSchedule && row.status === 1 && row.type === 1 && row.productionStatus !== 2 && Number(row.quantityScheduled||0) < Number(row.quantity||0)" @click="autoSchedule(row)">ä¸é®æäº§</button> |
| | | <button @click="goArchive(row)">彿¡£è¯¦æ
</button> |
| | | </view> |
| | | </view> |
| | |
| | | </template> |
| | | |
| | | <style lang="scss" scoped> |
| | | .page{height:100vh;display:flex;flex-direction:column;padding:0 24rpx;box-sizing:border-box;overflow:hidden;background:#f3f6fb}.search{display:flex;flex:none;align-items:center;height:80rpx;margin:20rpx 0 14rpx;padding:0 20rpx;background:#fff;border-radius:16rpx;box-shadow:0 8rpx 20rpx rgba(43,69,107,.06)}.search input{flex:1;font-size:27rpx}.search text{color:#1769d8;font-size:24rpx}.list{height:0;flex:1;padding-bottom:150rpx;box-sizing:border-box}.row{padding:24rpx 22rpx 20rpx;margin-bottom:18rpx;background:#fff;border-radius:16rpx;box-shadow:0 10rpx 24rpx rgba(43,69,107,.08)}.head{display:flex;align-items:flex-start;justify-content:space-between;gap:16rpx}.title{display:flex;min-width:0;flex:1;flex-direction:column;gap:8rpx}.title text:last-child{color:#78879b;font-size:23rpx}.name{overflow:hidden;color:#20334c;font-size:30rpx;font-weight:600;text-overflow:ellipsis;white-space:nowrap}.status-wrap{display:flex;align-items:center;flex:none;height:48rpx}.status{display:inline-flex;align-items:center;height:36rpx;padding:0 16rpx;font-size:22rpx;border-radius:999rpx;white-space:nowrap}.tag-draft{color:#1769d8;background:#edf5ff;border:1rpx solid #bfdbff}.tag-ok{color:#17865a;background:#eafaf2;border:1rpx solid #b8efd5}.tag-finish{color:#7a52c6;background:#f3edff;border:1rpx solid #d4c0ff}.tag-stop{color:#c65050;background:#fff7f7;border:1rpx solid #e3a0a0}.tag-info{color:#66778c;background:#f6f8fb;border:1rpx solid #dce4ee}.tags{display:flex;flex-wrap:wrap;gap:10rpx;margin-top:14rpx}.tags text{padding:4rpx 12rpx;color:#1769d8;font-size:22rpx;background:#edf5ff;border:1rpx solid #bfdbff;border-radius:999rpx}.grid{display:grid;gap:9rpx;padding:14rpx 0;margin-top:14rpx;color:#66778c;font-size:22rpx;border-top:1rpx solid #edf1f6;border-bottom:1rpx solid #edf1f6}.grid text{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.progress{display:flex;align-items:center;gap:12rpx;margin-top:14rpx;color:#66778c;font-size:22rpx}.progress>view{height:12rpx;flex:1;overflow:hidden;background:#eef3f8;border-radius:999rpx}.progress>view>view{height:100%;background:#1769d8;border-radius:999rpx}.actions{display:flex;flex-wrap:wrap;justify-content:flex-end;gap:12rpx;padding-top:16rpx}.actions button{min-height:50rpx;padding:0 16rpx;margin:0;color:#1769d8;font-size:22rpx;line-height:48rpx;background:#f5f8ff;border:1rpx solid #8ab3ee;border-radius:8rpx}.actions .danger{color:#c65050;background:#fff7f7;border-color:#e3a0a0}.actions button::after,.fab::after{border:0}.more,.state{display:block;padding:35rpx;color:#8795a8;font-size:26rpx;text-align:center}.error{color:#c3654d}.fab{position:fixed;right:30rpx;bottom:calc(32rpx + env(safe-area-inset-bottom));z-index:10;display:flex;align-items:center;justify-content:center;width:132rpx;height:132rpx;min-height:132rpx;padding:0;margin:0;background:#1769d8;border-radius:50%;box-shadow:0 12rpx 24rpx rgba(23,105,216,.3)}.fab view,.fab view::before{display:block;width:38rpx;height:8rpx;background:#fff;border-radius:4rpx;content:""}.fab view{position:relative}.fab view::before{position:absolute;transform:rotate(90deg)} |
| | | .page{height:100vh;display:flex;flex-direction:column;padding:0 24rpx;box-sizing:border-box;overflow:hidden;background:#f3f6fb}.search{display:flex;flex:none;align-items:center;height:80rpx;margin:20rpx 0 14rpx;padding:0 20rpx;background:#fff;border-radius:16rpx;box-shadow:0 8rpx 20rpx rgba(43,69,107,.06)}.search input{flex:1;font-size:27rpx}.search text{color:#1769d8;font-size:24rpx}.list{height:0;flex:1;padding-bottom:150rpx;box-sizing:border-box}.row{padding:24rpx 22rpx 20rpx;margin-bottom:18rpx;background:#fff;border-radius:16rpx;box-shadow:0 10rpx 24rpx rgba(43,69,107,.08)}.head{display:flex;align-items:flex-start;justify-content:space-between;gap:16rpx}.title{display:flex;min-width:0;flex:1;flex-direction:column;gap:8rpx}.title text:last-child{color:#78879b;font-size:23rpx}.name{overflow:hidden;color:#20334c;font-size:30rpx;font-weight:600;text-overflow:ellipsis;white-space:nowrap}.status-wrap{display:flex;align-items:center;flex:none;height:48rpx}.status{display:inline-flex;align-items:center;height:36rpx;padding:0 16rpx;font-size:22rpx;border-radius:999rpx;white-space:nowrap}.tag-draft{color:#1769d8;background:#edf5ff;border:1rpx solid #bfdbff}.tag-ok{color:#17865a;background:#eafaf2;border:1rpx solid #b8efd5}.tag-finish{color:#7a52c6;background:#f3edff;border:1rpx solid #d4c0ff}.tag-stop{color:#c65050;background:#fff7f7;border:1rpx solid #e3a0a0}.tag-info{color:#66778c;background:#f6f8fb;border:1rpx solid #dce4ee}.tags{display:flex;flex-wrap:wrap;gap:10rpx;margin-top:14rpx}.tags text{padding:4rpx 12rpx;color:#1769d8;font-size:22rpx;background:#edf5ff;border:1rpx solid #bfdbff;border-radius:999rpx}.grid{display:grid;gap:9rpx;padding:14rpx 0;margin-top:14rpx;color:#66778c;font-size:22rpx;border-top:1rpx solid #edf1f6;border-bottom:1rpx solid #edf1f6}.grid text{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.progress{display:flex;align-items:center;gap:12rpx;margin-top:14rpx;color:#66778c;font-size:22rpx}.progress>view{height:12rpx;flex:1;overflow:hidden;background:#eef3f8;border-radius:999rpx}.progress>view>view{height:100%;background:#1769d8;border-radius:999rpx}.actions{display:flex;flex-wrap:wrap;justify-content:flex-end;gap:12rpx;padding-top:16rpx}.actions button{min-height:50rpx;padding:0 16rpx;margin:0;color:#1769d8;font-size:22rpx;line-height:48rpx;background:#f5f8ff;border:1rpx solid #8ab3ee;border-radius:8rpx}.actions .danger{color:#c65050;background:#fff7f7;border-color:#e3a0a0}.actions button::after,.fab::after{border:0}.more,.state{display:block;padding:35rpx;color:#8795a8;font-size:26rpx;text-align:center}.error{color:#c3654d}.fab{position:fixed;right:30rpx;bottom:calc(32rpx + env(safe-area-inset-bottom));z-index:10;display:flex;align-items:center;justify-content:center;width:132rpx;height:132rpx;min-height:132rpx;padding:0;margin:0;background:#1769d8;border-radius:50%;box-shadow:0 12rpx 24rpx rgba(23,105,216,.3)}.fab view{width:38rpx;height:38rpx;background:linear-gradient(#fff,#fff) center/38rpx 8rpx no-repeat,linear-gradient(#fff,#fff) center/8rpx 38rpx no-repeat}.fab view::before,.fab view::after{display:none;content:none} |
| | | </style> |
| | |
| | | </template> |
| | | |
| | | <style lang="scss" scoped> |
| | | .page{height:100vh;display:flex;flex-direction:column;padding:0 30rpx;box-sizing:border-box;overflow:hidden;background:#f3f6fb}.search{display:flex;align-items:center;height:80rpx;margin:20rpx 0 16rpx;padding:0 20rpx;background:#fff;border-radius:16rpx;box-shadow:0 8rpx 20rpx rgba(43,69,107,.06)}.search input{flex:1;font-size:27rpx}.search text{color:#1769d8;font-size:24rpx}.content{height:0;flex:1;padding-bottom:150rpx;box-sizing:border-box}.row{padding:24rpx 22rpx 20rpx;margin-bottom:18rpx;background:#fff;border-radius:16rpx;box-shadow:0 10rpx 24rpx rgba(43,69,107,.08)}.head{display:flex;align-items:flex-start;justify-content:space-between;gap:16rpx}.head>view:first-child{display:flex;min-width:0;flex:1;flex-direction:column;gap:8rpx}.head>view:first-child text:last-child{color:#78879b;font-size:23rpx}.name{overflow:hidden;color:#20334c;font-size:30rpx;font-weight:600;text-overflow:ellipsis;white-space:nowrap}.status-wrap{display:flex;align-items:center;flex:none;height:48rpx}.status{display:inline-flex;align-items:center;height:36rpx;padding:0 16rpx;font-size:22rpx;border-radius:999rpx;white-space:nowrap}.tags{display:flex;flex-wrap:wrap;gap:10rpx;margin-top:14rpx}.tags text{padding:4rpx 12rpx;font-size:22rpx;border-radius:999rpx}.grid{display:grid;gap:10rpx;padding:16rpx 0;margin-top:16rpx;color:#66778c;font-size:23rpx;border-top:1rpx solid #edf1f6;border-bottom:1rpx solid #edf1f6}.grid text{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.actions{display:flex;flex-wrap:wrap;justify-content:flex-end;gap:12rpx;padding-top:16rpx}.actions button{min-height:50rpx;padding:0 16rpx;margin:0;color:#1769d8;font-size:22rpx;line-height:48rpx;background:#f5f8ff;border:1rpx solid #8ab3ee;border-radius:8rpx}.actions .danger{color:#c65050;background:#fff7f7;border-color:#e3a0a0}.actions button::after,.fab::after{border:0}.more,.state{display:block;padding:35rpx;color:#8795a8;font-size:26rpx;text-align:center}.error{color:#c3654d}.enabled{color:#0e9663;background:#e9fbf2;border:1rpx solid #b8eed4}.warning{color:#b06a00;background:#fff6df;border:1rpx solid #f0d390}.danger{color:#c65050;background:#fff2f2;border:1rpx solid #efb8b8}.info,.tag-info{color:#1769d8;background:#eef6ff;border:1rpx solid #c9e1ff}.tag-approved{color:#1769d8;background:#eef6ff}.tag-progress{color:#8a5a00;background:#fff6df}.tag-success{color:#0e9663;background:#e9fbf2}.tag-finish{color:#6b55c8;background:#f1efff}.fab{position:fixed;right:30rpx;bottom:calc(32rpx + env(safe-area-inset-bottom));display:flex;align-items:center;justify-content:center;width:132rpx;height:132rpx;min-height:132rpx;padding:0;margin:0;background:#1769d8;border-radius:50%;box-shadow:0 12rpx 24rpx rgba(23,105,216,.3)}.fab view,.fab view::before{display:block;width:38rpx;height:8rpx;background:#fff;border-radius:4rpx;content:""}.fab view{position:relative}.fab view::before{position:absolute;transform:rotate(90deg)} |
| | | .page{height:100vh;display:flex;flex-direction:column;padding:0 30rpx;box-sizing:border-box;overflow:hidden;background:#f3f6fb}.search{display:flex;align-items:center;height:80rpx;margin:20rpx 0 16rpx;padding:0 20rpx;background:#fff;border-radius:16rpx;box-shadow:0 8rpx 20rpx rgba(43,69,107,.06)}.search input{flex:1;font-size:27rpx}.search text{color:#1769d8;font-size:24rpx}.content{height:0;flex:1;padding-bottom:150rpx;box-sizing:border-box}.row{padding:24rpx 22rpx 20rpx;margin-bottom:18rpx;background:#fff;border-radius:16rpx;box-shadow:0 10rpx 24rpx rgba(43,69,107,.08)}.head{display:flex;align-items:flex-start;justify-content:space-between;gap:16rpx}.head>view:first-child{display:flex;min-width:0;flex:1;flex-direction:column;gap:8rpx}.head>view:first-child text:last-child{color:#78879b;font-size:23rpx}.name{overflow:hidden;color:#20334c;font-size:30rpx;font-weight:600;text-overflow:ellipsis;white-space:nowrap}.status-wrap{display:flex;align-items:center;flex:none;height:48rpx}.status{display:inline-flex;align-items:center;height:36rpx;padding:0 16rpx;font-size:22rpx;border-radius:999rpx;white-space:nowrap}.tags{display:flex;flex-wrap:wrap;gap:10rpx;margin-top:14rpx}.tags text{padding:4rpx 12rpx;font-size:22rpx;border-radius:999rpx}.grid{display:grid;gap:10rpx;padding:16rpx 0;margin-top:16rpx;color:#66778c;font-size:23rpx;border-top:1rpx solid #edf1f6;border-bottom:1rpx solid #edf1f6}.grid text{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.actions{display:flex;flex-wrap:wrap;justify-content:flex-end;gap:12rpx;padding-top:16rpx}.actions button{min-height:50rpx;padding:0 16rpx;margin:0;color:#1769d8;font-size:22rpx;line-height:48rpx;background:#f5f8ff;border:1rpx solid #8ab3ee;border-radius:8rpx}.actions .danger{color:#c65050;background:#fff7f7;border-color:#e3a0a0}.actions button::after,.fab::after{border:0}.more,.state{display:block;padding:35rpx;color:#8795a8;font-size:26rpx;text-align:center}.error{color:#c3654d}.enabled{color:#0e9663;background:#e9fbf2;border:1rpx solid #b8eed4}.warning{color:#b06a00;background:#fff6df;border:1rpx solid #f0d390}.danger{color:#c65050;background:#fff2f2;border:1rpx solid #efb8b8}.info,.tag-info{color:#1769d8;background:#eef6ff;border:1rpx solid #c9e1ff}.tag-approved{color:#1769d8;background:#eef6ff}.tag-progress{color:#8a5a00;background:#fff6df}.tag-success{color:#0e9663;background:#e9fbf2}.tag-finish{color:#6b55c8;background:#f1efff}.fab{position:fixed;right:30rpx;bottom:calc(32rpx + env(safe-area-inset-bottom));display:flex;align-items:center;justify-content:center;width:132rpx;height:132rpx;min-height:132rpx;padding:0;margin:0;background:#1769d8;border-radius:50%;box-shadow:0 12rpx 24rpx rgba(23,105,216,.3)}.fab view{width:38rpx;height:38rpx;background:linear-gradient(#fff,#fff) center/38rpx 8rpx no-repeat,linear-gradient(#fff,#fff) center/8rpx 38rpx no-repeat}.fab view::before,.fab view::after{display:none;content:none} |
| | | </style> |
| | |
| | | </template> |
| | | |
| | | <style lang="scss" scoped> |
| | | .page{height:100vh;display:flex;flex-direction:column;padding:0 30rpx;box-sizing:border-box;overflow:hidden;background:#f3f6fb}.search{display:flex;align-items:center;height:80rpx;margin:20rpx 0 16rpx;padding:0 20rpx;background:#fff;border-radius:16rpx;box-shadow:0 8rpx 20rpx rgba(43,69,107,.06)}.search input{flex:1;font-size:27rpx}.search text{color:#1769d8;font-size:24rpx}.content{height:0;flex:1;padding-bottom:150rpx;box-sizing:border-box}.row{padding:24rpx 22rpx 20rpx;margin-bottom:18rpx;background:#fff;border-radius:16rpx;box-shadow:0 10rpx 24rpx rgba(43,69,107,.08)}.head{display:flex;align-items:flex-start;justify-content:space-between;gap:16rpx}.head>view:first-child{display:flex;min-width:0;flex:1;flex-direction:column;gap:8rpx}.head>view:first-child text:last-child{color:#78879b;font-size:23rpx}.name{overflow:hidden;color:#20334c;font-size:30rpx;font-weight:600;text-overflow:ellipsis;white-space:nowrap}.status-wrap{display:flex;align-items:center;flex:none;height:48rpx}.status{display:inline-flex;align-items:center;height:36rpx;padding:0 16rpx;font-size:22rpx;border-radius:999rpx;white-space:nowrap}.tags{display:flex;flex-wrap:wrap;gap:10rpx;margin-top:14rpx}.tags text{padding:4rpx 12rpx;font-size:22rpx;border-radius:999rpx}.grid{display:grid;gap:10rpx;padding:16rpx 0;margin-top:16rpx;color:#66778c;font-size:23rpx;border-top:1rpx solid #edf1f6;border-bottom:1rpx solid #edf1f6}.grid text{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.actions{display:flex;flex-wrap:wrap;justify-content:flex-end;gap:12rpx;padding-top:16rpx}.actions button{min-height:50rpx;padding:0 16rpx;margin:0;color:#1769d8;font-size:22rpx;line-height:48rpx;background:#f5f8ff;border:1rpx solid #8ab3ee;border-radius:8rpx}.actions .danger{color:#c65050;background:#fff7f7;border-color:#e3a0a0}.actions button::after,.fab::after{border:0}.more,.state{display:block;padding:35rpx;color:#8795a8;font-size:26rpx;text-align:center}.error{color:#c3654d}.fab{position:fixed;right:30rpx;bottom:calc(32rpx + env(safe-area-inset-bottom));display:flex;align-items:center;justify-content:center;width:132rpx;height:132rpx;min-height:132rpx;padding:0;margin:0;background:#1769d8;border-radius:50%;box-shadow:0 12rpx 24rpx rgba(23,105,216,.3)}.fab view,.fab view::before{display:block;width:38rpx;height:8rpx;background:#fff;border-radius:4rpx;content:""}.fab view{position:relative}.fab view::before{position:absolute;transform:rotate(90deg)} |
| | | .page{height:100vh;display:flex;flex-direction:column;padding:0 30rpx;box-sizing:border-box;overflow:hidden;background:#f3f6fb}.search{display:flex;align-items:center;height:80rpx;margin:20rpx 0 16rpx;padding:0 20rpx;background:#fff;border-radius:16rpx;box-shadow:0 8rpx 20rpx rgba(43,69,107,.06)}.search input{flex:1;font-size:27rpx}.search text{color:#1769d8;font-size:24rpx}.content{height:0;flex:1;padding-bottom:150rpx;box-sizing:border-box}.row{padding:24rpx 22rpx 20rpx;margin-bottom:18rpx;background:#fff;border-radius:16rpx;box-shadow:0 10rpx 24rpx rgba(43,69,107,.08)}.head{display:flex;align-items:flex-start;justify-content:space-between;gap:16rpx}.head>view:first-child{display:flex;min-width:0;flex:1;flex-direction:column;gap:8rpx}.head>view:first-child text:last-child{color:#78879b;font-size:23rpx}.name{overflow:hidden;color:#20334c;font-size:30rpx;font-weight:600;text-overflow:ellipsis;white-space:nowrap}.status-wrap{display:flex;align-items:center;flex:none;height:48rpx}.status{display:inline-flex;align-items:center;height:36rpx;padding:0 16rpx;font-size:22rpx;border-radius:999rpx;white-space:nowrap}.tags{display:flex;flex-wrap:wrap;gap:10rpx;margin-top:14rpx}.tags text{padding:4rpx 12rpx;font-size:22rpx;border-radius:999rpx}.grid{display:grid;gap:10rpx;padding:16rpx 0;margin-top:16rpx;color:#66778c;font-size:23rpx;border-top:1rpx solid #edf1f6;border-bottom:1rpx solid #edf1f6}.grid text{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.actions{display:flex;flex-wrap:wrap;justify-content:flex-end;gap:12rpx;padding-top:16rpx}.actions button{min-height:50rpx;padding:0 16rpx;margin:0;color:#1769d8;font-size:22rpx;line-height:48rpx;background:#f5f8ff;border:1rpx solid #8ab3ee;border-radius:8rpx}.actions .danger{color:#c65050;background:#fff7f7;border-color:#e3a0a0}.actions button::after,.fab::after{border:0}.more,.state{display:block;padding:35rpx;color:#8795a8;font-size:26rpx;text-align:center}.error{color:#c3654d}.fab{position:fixed;right:30rpx;bottom:calc(32rpx + env(safe-area-inset-bottom));display:flex;align-items:center;justify-content:center;width:132rpx;height:132rpx;min-height:132rpx;padding:0;margin:0;background:#1769d8;border-radius:50%;box-shadow:0 12rpx 24rpx rgba(23,105,216,.3)}.fab view{width:38rpx;height:38rpx;background:linear-gradient(#fff,#fff) center/38rpx 8rpx no-repeat,linear-gradient(#fff,#fff) center/8rpx 38rpx no-repeat}.fab view::before,.fab view::after{display:none;content:none} |
| | | </style> |
| | |
| | | </template> |
| | | |
| | | <style lang="scss" scoped> |
| | | .page{height:100vh;display:flex;flex-direction:column;padding:0 30rpx;box-sizing:border-box;overflow:hidden;background:#f3f6fb}.search{display:flex;align-items:center;height:80rpx;margin:20rpx 0 16rpx;padding:0 20rpx;background:#fff;border-radius:16rpx;box-shadow:0 8rpx 20rpx rgba(43,69,107,.06)}.search input{flex:1;font-size:27rpx}.search text{color:#1769d8;font-size:24rpx}.content{height:0;flex:1;padding-bottom:150rpx;box-sizing:border-box}.row{padding:24rpx 22rpx 20rpx;margin-bottom:18rpx;background:#fff;border-radius:16rpx;box-shadow:0 10rpx 24rpx rgba(43,69,107,.08)}.head{display:flex;align-items:flex-start;justify-content:space-between;gap:16rpx}.head>view:first-child{display:flex;min-width:0;flex:1;flex-direction:column;gap:8rpx}.head>view:first-child text:last-child{color:#78879b;font-size:23rpx}.name{overflow:hidden;color:#20334c;font-size:30rpx;font-weight:600;text-overflow:ellipsis;white-space:nowrap}.status-wrap{display:flex;align-items:center;flex:none;height:48rpx}.status{display:inline-flex;align-items:center;height:36rpx;padding:0 16rpx;font-size:22rpx;border-radius:999rpx;white-space:nowrap}.tags{display:flex;flex-wrap:wrap;gap:10rpx;margin-top:14rpx}.tags text{padding:4rpx 12rpx;font-size:22rpx;border-radius:999rpx}.grid{display:grid;grid-template-columns:1fr 1fr;gap:10rpx;padding:16rpx 0;margin-top:16rpx;color:#66778c;font-size:23rpx;border-top:1rpx solid #edf1f6;border-bottom:1rpx solid #edf1f6}.grid text{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.grid .full{grid-column:1/3}.actions{display:flex;flex-wrap:wrap;justify-content:flex-end;gap:12rpx;padding-top:16rpx}.actions button,.modal-actions button{min-height:50rpx;padding:0 16rpx;margin:0;color:#1769d8;font-size:22rpx;line-height:48rpx;background:#f5f8ff;border:1rpx solid #8ab3ee;border-radius:8rpx}.actions .danger{color:#c65050;background:#fff7f7;border-color:#e3a0a0}.actions button::after,.fab::after,.modal-actions button::after{border:0}.more,.state{display:block;padding:35rpx;color:#8795a8;font-size:26rpx;text-align:center}.error{color:#c3654d}.enabled{color:#0e9663;background:#e9fbf2;border:1rpx solid #b8eed4}.warning{color:#b06a00;background:#fff6df;border:1rpx solid #f0d390}.danger{color:#c65050;background:#fff2f2;border:1rpx solid #efb8b8}.info,.tag-info{color:#1769d8;background:#eef6ff;border:1rpx solid #c9e1ff}.tag-approved{color:#1769d8;background:#eef6ff}.tag-progress{color:#6b55c8;background:#f1efff}.fab{position:fixed;right:30rpx;bottom:calc(32rpx + env(safe-area-inset-bottom));display:flex;align-items:center;justify-content:center;width:132rpx;height:132rpx;min-height:132rpx;padding:0;margin:0;background:#1769d8;border-radius:50%;box-shadow:0 12rpx 24rpx rgba(23,105,216,.3)}.fab view,.fab view::before{display:block;width:38rpx;height:8rpx;background:#fff;border-radius:4rpx;content:""}.fab view{position:relative}.fab view::before{position:absolute;transform:rotate(90deg)}.mask{position:fixed;inset:0;z-index:20;display:flex;align-items:flex-end;background:rgba(20,31,48,.42)}.modal{width:100%;max-height:78vh;padding:24rpx 30rpx 34rpx;overflow:auto;background:#fff;border-radius:24rpx 24rpx 0 0}.modal-title{padding:8rpx 0 22rpx;color:#20334c;font-size:31rpx;font-weight:700}.field{display:flex;align-items:center;min-height:92rpx;gap:20rpx;padding:0 6rpx;border-bottom:1rpx solid #eef1f5}.field>text:first-child{width:190rpx;flex:none;color:#33455d;font-size:26rpx}.picker{display:flex;min-width:0;flex:1;align-items:center;justify-content:space-between;gap:12rpx;color:#65758a;font-size:26rpx}.picker text:first-child{min-width:0;flex:1;overflow:hidden;text-align:right;text-overflow:ellipsis;white-space:nowrap}.picker text:last-child{flex:none;width:24rpx;color:#8092a7;font-size:36rpx;text-align:right}.column{align-items:flex-start;flex-direction:column;padding:18rpx 6rpx}.column>text:first-child{width:auto}.column textarea{width:100%;height:140rpx;box-sizing:border-box;font-size:26rpx}.required{color:#e23b3b}.modal-actions{display:flex;justify-content:flex-end;gap:16rpx;padding-top:24rpx}.modal-actions .primary{color:#fff;background:#1769d8} |
| | | .page{height:100vh;display:flex;flex-direction:column;padding:0 30rpx;box-sizing:border-box;overflow:hidden;background:#f3f6fb}.search{display:flex;align-items:center;height:80rpx;margin:20rpx 0 16rpx;padding:0 20rpx;background:#fff;border-radius:16rpx;box-shadow:0 8rpx 20rpx rgba(43,69,107,.06)}.search input{flex:1;font-size:27rpx}.search text{color:#1769d8;font-size:24rpx}.content{height:0;flex:1;padding-bottom:150rpx;box-sizing:border-box}.row{padding:24rpx 22rpx 20rpx;margin-bottom:18rpx;background:#fff;border-radius:16rpx;box-shadow:0 10rpx 24rpx rgba(43,69,107,.08)}.head{display:flex;align-items:flex-start;justify-content:space-between;gap:16rpx}.head>view:first-child{display:flex;min-width:0;flex:1;flex-direction:column;gap:8rpx}.head>view:first-child text:last-child{color:#78879b;font-size:23rpx}.name{overflow:hidden;color:#20334c;font-size:30rpx;font-weight:600;text-overflow:ellipsis;white-space:nowrap}.status-wrap{display:flex;align-items:center;flex:none;height:48rpx}.status{display:inline-flex;align-items:center;height:36rpx;padding:0 16rpx;font-size:22rpx;border-radius:999rpx;white-space:nowrap}.tags{display:flex;flex-wrap:wrap;gap:10rpx;margin-top:14rpx}.tags text{padding:4rpx 12rpx;font-size:22rpx;border-radius:999rpx}.grid{display:grid;grid-template-columns:1fr 1fr;gap:10rpx;padding:16rpx 0;margin-top:16rpx;color:#66778c;font-size:23rpx;border-top:1rpx solid #edf1f6;border-bottom:1rpx solid #edf1f6}.grid text{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.grid .full{grid-column:1/3}.actions{display:flex;flex-wrap:wrap;justify-content:flex-end;gap:12rpx;padding-top:16rpx}.actions button,.modal-actions button{min-height:50rpx;padding:0 16rpx;margin:0;color:#1769d8;font-size:22rpx;line-height:48rpx;background:#f5f8ff;border:1rpx solid #8ab3ee;border-radius:8rpx}.actions .danger{color:#c65050;background:#fff7f7;border-color:#e3a0a0}.actions button::after,.fab::after,.modal-actions button::after{border:0}.more,.state{display:block;padding:35rpx;color:#8795a8;font-size:26rpx;text-align:center}.error{color:#c3654d}.enabled{color:#0e9663;background:#e9fbf2;border:1rpx solid #b8eed4}.warning{color:#b06a00;background:#fff6df;border:1rpx solid #f0d390}.danger{color:#c65050;background:#fff2f2;border:1rpx solid #efb8b8}.info,.tag-info{color:#1769d8;background:#eef6ff;border:1rpx solid #c9e1ff}.tag-approved{color:#1769d8;background:#eef6ff}.tag-progress{color:#6b55c8;background:#f1efff}.fab{position:fixed;right:30rpx;bottom:calc(32rpx + env(safe-area-inset-bottom));display:flex;align-items:center;justify-content:center;width:132rpx;height:132rpx;min-height:132rpx;padding:0;margin:0;background:#1769d8;border-radius:50%;box-shadow:0 12rpx 24rpx rgba(23,105,216,.3)}.fab view{width:38rpx;height:38rpx;background:linear-gradient(#fff,#fff) center/38rpx 8rpx no-repeat,linear-gradient(#fff,#fff) center/8rpx 38rpx no-repeat}.fab view::before,.fab view::after{display:none;content:none}.mask{position:fixed;inset:0;z-index:20;display:flex;align-items:flex-end;background:rgba(20,31,48,.42)}.modal{width:100%;max-height:78vh;padding:24rpx 30rpx 34rpx;overflow:auto;background:#fff;border-radius:24rpx 24rpx 0 0}.modal-title{padding:8rpx 0 22rpx;color:#20334c;font-size:31rpx;font-weight:700}.field{display:flex;align-items:center;min-height:92rpx;gap:20rpx;padding:0 6rpx;border-bottom:1rpx solid #eef1f5}.field>text:first-child{width:190rpx;flex:none;color:#33455d;font-size:26rpx}.picker{display:flex;min-width:0;flex:1;align-items:center;justify-content:space-between;gap:12rpx;color:#65758a;font-size:26rpx}.picker text:first-child{min-width:0;flex:1;overflow:hidden;text-align:right;text-overflow:ellipsis;white-space:nowrap}.picker text:last-child{flex:none;width:24rpx;color:#8092a7;font-size:36rpx;text-align:right}.column{align-items:flex-start;flex-direction:column;padding:18rpx 6rpx}.column>text:first-child{width:auto}.column textarea{width:100%;height:140rpx;box-sizing:border-box;font-size:26rpx}.required{color:#e23b3b}.modal-actions{display:flex;justify-content:flex-end;gap:16rpx;padding-top:24rpx}.modal-actions .primary{color:#fff;background:#1769d8} |
| | | </style> |
| | |
| | | </template><view v-else class="state">ç»å½åæ¥çæ¥å模æ¿</view><button v-if="canCreate" class="fab" @click="go()"><view /></button></view></template> |
| | | |
| | | <style lang="scss" scoped> |
| | | .page{height:100vh;display:flex;flex-direction:column;padding:0 30rpx;box-sizing:border-box;overflow:hidden;background:#f3f6fb}.search{display:flex;align-items:center;height:80rpx;margin:20rpx 0 16rpx;padding:0 20rpx;background:#fff;border-radius:16rpx;box-shadow:0 8rpx 20rpx rgba(43,69,107,.06)}.search input{flex:1;font-size:27rpx}.search text{color:#1769d8;font-size:24rpx}.content{height:0;flex:1;padding-bottom:150rpx;box-sizing:border-box}.row{padding:24rpx 22rpx 20rpx;margin-bottom:18rpx;background:#fff;border-radius:16rpx;box-shadow:0 10rpx 24rpx rgba(43,69,107,.08)}.head{display:flex;align-items:flex-start;justify-content:space-between;gap:16rpx}.head>view:first-child{display:flex;min-width:0;flex:1;flex-direction:column;gap:8rpx}.head>view:first-child text:last-child{color:#78879b;font-size:23rpx}.name{overflow:hidden;color:#20334c;font-size:30rpx;font-weight:600;text-overflow:ellipsis;white-space:nowrap}.status-wrap{display:flex;align-items:center;flex:none;height:48rpx}.status{display:inline-flex;align-items:center;height:36rpx;padding:0 16rpx;font-size:22rpx;border-radius:999rpx;white-space:nowrap}.tags{display:flex;flex-wrap:wrap;gap:10rpx;margin-top:14rpx}.tags text{padding:4rpx 12rpx;font-size:22rpx;border-radius:999rpx;color:#1769d8;background:#eef6ff}.grid{display:grid;grid-template-columns:1fr 1fr;gap:10rpx;padding:16rpx 0;margin-top:16rpx;color:#66778c;font-size:23rpx;border-top:1rpx solid #edf1f6;border-bottom:1rpx solid #edf1f6}.grid text{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.grid .full{grid-column:1/3}.actions{display:flex;flex-wrap:wrap;justify-content:flex-end;gap:12rpx;padding-top:16rpx}.actions button{min-height:50rpx;padding:0 16rpx;margin:0;color:#1769d8;font-size:22rpx;line-height:48rpx;background:#f5f8ff;border:1rpx solid #8ab3ee;border-radius:8rpx}.actions .danger{color:#c65050;background:#fff7f7;border-color:#e3a0a0}.actions button::after,.fab::after{border:0}.more,.state{display:block;padding:35rpx;color:#8795a8;font-size:26rpx;text-align:center}.error{color:#c3654d}.enabled,.tag-success{color:#0e9663!important;background:#e9fbf2!important;border:1rpx solid #b8eed4}.warning{color:#b06a00;background:#fff6df;border:1rpx solid #f0d390}.danger{color:#c65050;background:#fff2f2;border:1rpx solid #efb8b8}.info,.tag-info{color:#1769d8!important;background:#eef6ff!important;border:1rpx solid #c9e1ff}.fab{position:fixed;right:30rpx;bottom:calc(32rpx + env(safe-area-inset-bottom));display:flex;align-items:center;justify-content:center;width:132rpx;height:132rpx;min-height:132rpx;padding:0;margin:0;background:#1769d8;border-radius:50%;box-shadow:0 12rpx 24rpx rgba(23,105,216,.3)}.fab view,.fab view::before{display:block;width:38rpx;height:8rpx;background:#fff;border-radius:4rpx;content:""}.fab view{position:relative}.fab view::before{position:absolute;transform:rotate(90deg)} |
| | | .page{height:100vh;display:flex;flex-direction:column;padding:0 30rpx;box-sizing:border-box;overflow:hidden;background:#f3f6fb}.search{display:flex;align-items:center;height:80rpx;margin:20rpx 0 16rpx;padding:0 20rpx;background:#fff;border-radius:16rpx;box-shadow:0 8rpx 20rpx rgba(43,69,107,.06)}.search input{flex:1;font-size:27rpx}.search text{color:#1769d8;font-size:24rpx}.content{height:0;flex:1;padding-bottom:150rpx;box-sizing:border-box}.row{padding:24rpx 22rpx 20rpx;margin-bottom:18rpx;background:#fff;border-radius:16rpx;box-shadow:0 10rpx 24rpx rgba(43,69,107,.08)}.head{display:flex;align-items:flex-start;justify-content:space-between;gap:16rpx}.head>view:first-child{display:flex;min-width:0;flex:1;flex-direction:column;gap:8rpx}.head>view:first-child text:last-child{color:#78879b;font-size:23rpx}.name{overflow:hidden;color:#20334c;font-size:30rpx;font-weight:600;text-overflow:ellipsis;white-space:nowrap}.status-wrap{display:flex;align-items:center;flex:none;height:48rpx}.status{display:inline-flex;align-items:center;height:36rpx;padding:0 16rpx;font-size:22rpx;border-radius:999rpx;white-space:nowrap}.tags{display:flex;flex-wrap:wrap;gap:10rpx;margin-top:14rpx}.tags text{padding:4rpx 12rpx;font-size:22rpx;border-radius:999rpx;color:#1769d8;background:#eef6ff}.grid{display:grid;grid-template-columns:1fr 1fr;gap:10rpx;padding:16rpx 0;margin-top:16rpx;color:#66778c;font-size:23rpx;border-top:1rpx solid #edf1f6;border-bottom:1rpx solid #edf1f6}.grid text{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.grid .full{grid-column:1/3}.actions{display:flex;flex-wrap:wrap;justify-content:flex-end;gap:12rpx;padding-top:16rpx}.actions button{min-height:50rpx;padding:0 16rpx;margin:0;color:#1769d8;font-size:22rpx;line-height:48rpx;background:#f5f8ff;border:1rpx solid #8ab3ee;border-radius:8rpx}.actions .danger{color:#c65050;background:#fff7f7;border-color:#e3a0a0}.actions button::after,.fab::after{border:0}.more,.state{display:block;padding:35rpx;color:#8795a8;font-size:26rpx;text-align:center}.error{color:#c3654d}.enabled,.tag-success{color:#0e9663!important;background:#e9fbf2!important;border:1rpx solid #b8eed4}.warning{color:#b06a00;background:#fff6df;border:1rpx solid #f0d390}.danger{color:#c65050;background:#fff2f2;border:1rpx solid #efb8b8}.info,.tag-info{color:#1769d8!important;background:#eef6ff!important;border:1rpx solid #c9e1ff}.fab{position:fixed;right:30rpx;bottom:calc(32rpx + env(safe-area-inset-bottom));display:flex;align-items:center;justify-content:center;width:132rpx;height:132rpx;min-height:132rpx;padding:0;margin:0;background:#1769d8;border-radius:50%;box-shadow:0 12rpx 24rpx rgba(23,105,216,.3)}.fab view{width:38rpx;height:38rpx;background:linear-gradient(#fff,#fff) center/38rpx 8rpx no-repeat,linear-gradient(#fff,#fff) center/8rpx 38rpx no-repeat}.fab view::before,.fab view::after{display:none;content:none} |
| | | </style> |
| | |
| | | </template> |
| | | |
| | | <style lang="scss" scoped> |
| | | .page{height:100vh;display:flex;flex-direction:column;padding:0 30rpx;box-sizing:border-box;overflow:hidden;background:#f3f6fb}.search{display:flex;align-items:center;height:80rpx;margin:20rpx 0 16rpx;padding:0 20rpx;background:#fff;border-radius:16rpx;box-shadow:0 8rpx 20rpx rgba(43,69,107,.06)}.search input{flex:1;font-size:27rpx}.search text{color:#1769d8;font-size:24rpx}.content{height:0;flex:1;padding-bottom:150rpx;box-sizing:border-box}.row{padding:24rpx 22rpx 20rpx;margin-bottom:18rpx;background:#fff;border-radius:16rpx;box-shadow:0 10rpx 24rpx rgba(43,69,107,.08)}.head{display:flex;align-items:flex-start;justify-content:space-between;gap:16rpx}.head>view:first-child{display:flex;min-width:0;flex:1;flex-direction:column;gap:8rpx}.head>view:first-child text:last-child{color:#78879b;font-size:23rpx}.name{overflow:hidden;color:#20334c;font-size:30rpx;font-weight:600;text-overflow:ellipsis;white-space:nowrap}.status-wrap{display:flex;align-items:center;flex:none;height:48rpx}.status{display:inline-flex;align-items:center;height:36rpx;padding:0 16rpx;font-size:22rpx;border-radius:999rpx;white-space:nowrap}.tags{display:flex;flex-wrap:wrap;gap:10rpx;margin-top:14rpx}.tags text{padding:4rpx 12rpx;font-size:22rpx;border-radius:999rpx}.grid{display:grid;gap:10rpx;padding:16rpx 0;margin-top:16rpx;color:#66778c;font-size:23rpx;border-top:1rpx solid #edf1f6;border-bottom:1rpx solid #edf1f6}.grid text{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.actions{display:flex;flex-wrap:wrap;justify-content:flex-end;gap:12rpx;padding-top:16rpx}.actions button{min-height:50rpx;padding:0 16rpx;margin:0;color:#1769d8;font-size:22rpx;line-height:48rpx;background:#f5f8ff;border:1rpx solid #8ab3ee;border-radius:8rpx}.actions .danger{color:#c65050;background:#fff7f7;border-color:#e3a0a0}.actions button::after,.fab::after{border:0}.more,.state{display:block;padding:35rpx;color:#8795a8;font-size:26rpx;text-align:center}.error{color:#c3654d}.fab{position:fixed;right:30rpx;bottom:calc(32rpx + env(safe-area-inset-bottom));display:flex;align-items:center;justify-content:center;width:132rpx;height:132rpx;min-height:132rpx;padding:0;margin:0;background:#1769d8;border-radius:50%;box-shadow:0 12rpx 24rpx rgba(23,105,216,.3)}.fab view,.fab view::before{display:block;width:38rpx;height:8rpx;background:#fff;border-radius:4rpx;content:""}.fab view{position:relative}.fab view::before{position:absolute;transform:rotate(90deg)} |
| | | .page{height:100vh;display:flex;flex-direction:column;padding:0 30rpx;box-sizing:border-box;overflow:hidden;background:#f3f6fb}.search{display:flex;align-items:center;height:80rpx;margin:20rpx 0 16rpx;padding:0 20rpx;background:#fff;border-radius:16rpx;box-shadow:0 8rpx 20rpx rgba(43,69,107,.06)}.search input{flex:1;font-size:27rpx}.search text{color:#1769d8;font-size:24rpx}.content{height:0;flex:1;padding-bottom:150rpx;box-sizing:border-box}.row{padding:24rpx 22rpx 20rpx;margin-bottom:18rpx;background:#fff;border-radius:16rpx;box-shadow:0 10rpx 24rpx rgba(43,69,107,.08)}.head{display:flex;align-items:flex-start;justify-content:space-between;gap:16rpx}.head>view:first-child{display:flex;min-width:0;flex:1;flex-direction:column;gap:8rpx}.head>view:first-child text:last-child{color:#78879b;font-size:23rpx}.name{overflow:hidden;color:#20334c;font-size:30rpx;font-weight:600;text-overflow:ellipsis;white-space:nowrap}.status-wrap{display:flex;align-items:center;flex:none;height:48rpx}.status{display:inline-flex;align-items:center;height:36rpx;padding:0 16rpx;font-size:22rpx;border-radius:999rpx;white-space:nowrap}.tags{display:flex;flex-wrap:wrap;gap:10rpx;margin-top:14rpx}.tags text{padding:4rpx 12rpx;font-size:22rpx;border-radius:999rpx}.grid{display:grid;gap:10rpx;padding:16rpx 0;margin-top:16rpx;color:#66778c;font-size:23rpx;border-top:1rpx solid #edf1f6;border-bottom:1rpx solid #edf1f6}.grid text{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.actions{display:flex;flex-wrap:wrap;justify-content:flex-end;gap:12rpx;padding-top:16rpx}.actions button{min-height:50rpx;padding:0 16rpx;margin:0;color:#1769d8;font-size:22rpx;line-height:48rpx;background:#f5f8ff;border:1rpx solid #8ab3ee;border-radius:8rpx}.actions .danger{color:#c65050;background:#fff7f7;border-color:#e3a0a0}.actions button::after,.fab::after{border:0}.more,.state{display:block;padding:35rpx;color:#8795a8;font-size:26rpx;text-align:center}.error{color:#c3654d}.fab{position:fixed;right:30rpx;bottom:calc(32rpx + env(safe-area-inset-bottom));display:flex;align-items:center;justify-content:center;width:132rpx;height:132rpx;min-height:132rpx;padding:0;margin:0;background:#1769d8;border-radius:50%;box-shadow:0 12rpx 24rpx rgba(23,105,216,.3)}.fab view{width:38rpx;height:38rpx;background:linear-gradient(#fff,#fff) center/38rpx 8rpx no-repeat,linear-gradient(#fff,#fff) center/8rpx 38rpx no-repeat}.fab view::before,.fab view::after{display:none;content:none} |
| | | </style> |
| | |
| | | </template> |
| | | |
| | | <style lang="scss" scoped> |
| | | .page{height:100vh;display:flex;flex-direction:column;padding:0 24rpx;box-sizing:border-box;overflow:hidden;background:#f3f6fb}.search{display:flex;flex:none;align-items:center;height:80rpx;margin:20rpx 0 14rpx;padding:0 20rpx;background:#fff;border-radius:16rpx;box-shadow:0 8rpx 20rpx rgba(43,69,107,.06)}.search input{flex:1;font-size:27rpx}.search text{color:#1769d8;font-size:24rpx}.main-layout{height:0;min-height:0;flex:1;display:flex;gap:16rpx;padding-bottom:150rpx;box-sizing:border-box}.type-nav{width:188rpx;height:100%;flex:none;background:#fff;border-radius:16rpx;box-shadow:0 8rpx 20rpx rgba(43,69,107,.05)}.type-item{position:relative;display:flex;align-items:center;min-height:78rpx;padding:14rpx 12rpx 14rpx 18rpx;box-sizing:border-box;color:#617287;font-size:23rpx;border-bottom:1rpx solid #edf1f6}.type-item text{display:-webkit-box;min-width:0;overflow:hidden;line-height:1.25;text-overflow:ellipsis;-webkit-line-clamp:2;-webkit-box-orient:vertical}.type-item.active{color:#1769d8;font-weight:600;background:#eef5ff}.type-item.active::before{position:absolute;top:18rpx;bottom:18rpx;left:0;width:6rpx;background:#1769d8;border-radius:0 6rpx 6rpx 0;content:""}.content{height:100%;min-width:0;flex:1;box-sizing:border-box}.row{padding:24rpx 22rpx 20rpx;margin-bottom:18rpx;background:#fff;border-radius:16rpx;box-shadow:0 10rpx 24rpx rgba(43,69,107,.08)}.head{display:flex;align-items:flex-start;justify-content:space-between;gap:16rpx}.head>view:first-child{display:flex;min-width:0;flex:1;flex-direction:column;gap:8rpx}.head>view:first-child text:last-child{color:#78879b;font-size:23rpx}.name{overflow:hidden;color:#20334c;font-size:30rpx;font-weight:600;text-overflow:ellipsis;white-space:nowrap}.status-wrap{display:flex;align-items:center;flex:none;height:48rpx}.status{display:inline-flex;align-items:center;height:36rpx;padding:0 16rpx;font-size:22rpx;border-radius:999rpx;white-space:nowrap}.tag-store{color:#17865a;background:#eafaf2;border:1rpx solid #b8efd5}.tag-issue{color:#1769d8;background:#edf5ff;border:1rpx solid #bfdbff}.tag-repair{color:#b57800;background:#fff7dd;border:1rpx solid #f3dc98}.tag-scrap{color:#c65050;background:#fff7f7;border:1rpx solid #e3a0a0}.tag-info{color:#66778c;background:#f6f8fb;border:1rpx solid #dce4ee}.tags{display:flex;gap:10rpx;margin-top:14rpx}.tags text{padding:4rpx 12rpx;color:#1769d8;font-size:22rpx;background:#edf5ff;border:1rpx solid #bfdbff;border-radius:999rpx}.grid{display:grid;gap:9rpx;padding:14rpx 0;margin-top:14rpx;color:#66778c;font-size:22rpx;border-top:1rpx solid #edf1f6;border-bottom:1rpx solid #edf1f6}.grid text{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.actions{display:flex;flex-wrap:wrap;justify-content:flex-end;gap:12rpx;padding-top:16rpx}.actions button{min-height:50rpx;padding:0 16rpx;margin:0;color:#1769d8;font-size:22rpx;line-height:48rpx;background:#f5f8ff;border:1rpx solid #8ab3ee;border-radius:8rpx}.actions .danger{color:#c65050;background:#fff7f7;border-color:#e3a0a0}.actions button::after,.fab::after{border:0}.more,.state{display:block;padding:35rpx;color:#8795a8;font-size:26rpx;text-align:center}.error{color:#c3654d}.fab{position:fixed;right:30rpx;bottom:calc(32rpx + env(safe-area-inset-bottom));z-index:10;display:flex;align-items:center;justify-content:center;width:132rpx;height:132rpx;min-height:132rpx;padding:0;margin:0;background:#1769d8;border-radius:50%;box-shadow:0 12rpx 24rpx rgba(23,105,216,.3)}.fab view,.fab view::before{display:block;width:38rpx;height:8rpx;background:#fff;border-radius:4rpx;content:""}.fab view{position:relative}.fab view::before{position:absolute;transform:rotate(90deg)} |
| | | .page{height:100vh;display:flex;flex-direction:column;padding:0 24rpx;box-sizing:border-box;overflow:hidden;background:#f3f6fb}.search{display:flex;flex:none;align-items:center;height:80rpx;margin:20rpx 0 14rpx;padding:0 20rpx;background:#fff;border-radius:16rpx;box-shadow:0 8rpx 20rpx rgba(43,69,107,.06)}.search input{flex:1;font-size:27rpx}.search text{color:#1769d8;font-size:24rpx}.main-layout{height:0;min-height:0;flex:1;display:flex;gap:16rpx;padding-bottom:150rpx;box-sizing:border-box}.type-nav{width:188rpx;height:100%;flex:none;background:#fff;border-radius:16rpx;box-shadow:0 8rpx 20rpx rgba(43,69,107,.05)}.type-item{position:relative;display:flex;align-items:center;min-height:78rpx;padding:14rpx 12rpx 14rpx 18rpx;box-sizing:border-box;color:#617287;font-size:23rpx;border-bottom:1rpx solid #edf1f6}.type-item text{display:-webkit-box;min-width:0;overflow:hidden;line-height:1.25;text-overflow:ellipsis;-webkit-line-clamp:2;-webkit-box-orient:vertical}.type-item.active{color:#1769d8;font-weight:600;background:#eef5ff}.type-item.active::before{position:absolute;top:18rpx;bottom:18rpx;left:0;width:6rpx;background:#1769d8;border-radius:0 6rpx 6rpx 0;content:""}.content{height:100%;min-width:0;flex:1;box-sizing:border-box}.row{padding:24rpx 22rpx 20rpx;margin-bottom:18rpx;background:#fff;border-radius:16rpx;box-shadow:0 10rpx 24rpx rgba(43,69,107,.08)}.head{display:flex;align-items:flex-start;justify-content:space-between;gap:16rpx}.head>view:first-child{display:flex;min-width:0;flex:1;flex-direction:column;gap:8rpx}.head>view:first-child text:last-child{color:#78879b;font-size:23rpx}.name{overflow:hidden;color:#20334c;font-size:30rpx;font-weight:600;text-overflow:ellipsis;white-space:nowrap}.status-wrap{display:flex;align-items:center;flex:none;height:48rpx}.status{display:inline-flex;align-items:center;height:36rpx;padding:0 16rpx;font-size:22rpx;border-radius:999rpx;white-space:nowrap}.tag-store{color:#17865a;background:#eafaf2;border:1rpx solid #b8efd5}.tag-issue{color:#1769d8;background:#edf5ff;border:1rpx solid #bfdbff}.tag-repair{color:#b57800;background:#fff7dd;border:1rpx solid #f3dc98}.tag-scrap{color:#c65050;background:#fff7f7;border:1rpx solid #e3a0a0}.tag-info{color:#66778c;background:#f6f8fb;border:1rpx solid #dce4ee}.tags{display:flex;gap:10rpx;margin-top:14rpx}.tags text{padding:4rpx 12rpx;color:#1769d8;font-size:22rpx;background:#edf5ff;border:1rpx solid #bfdbff;border-radius:999rpx}.grid{display:grid;gap:9rpx;padding:14rpx 0;margin-top:14rpx;color:#66778c;font-size:22rpx;border-top:1rpx solid #edf1f6;border-bottom:1rpx solid #edf1f6}.grid text{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.actions{display:flex;flex-wrap:wrap;justify-content:flex-end;gap:12rpx;padding-top:16rpx}.actions button{min-height:50rpx;padding:0 16rpx;margin:0;color:#1769d8;font-size:22rpx;line-height:48rpx;background:#f5f8ff;border:1rpx solid #8ab3ee;border-radius:8rpx}.actions .danger{color:#c65050;background:#fff7f7;border-color:#e3a0a0}.actions button::after,.fab::after{border:0}.more,.state{display:block;padding:35rpx;color:#8795a8;font-size:26rpx;text-align:center}.error{color:#c3654d}.fab{position:fixed;right:30rpx;bottom:calc(32rpx + env(safe-area-inset-bottom));z-index:10;display:flex;align-items:center;justify-content:center;width:132rpx;height:132rpx;min-height:132rpx;padding:0;margin:0;background:#1769d8;border-radius:50%;box-shadow:0 12rpx 24rpx rgba(23,105,216,.3)}.fab view{width:38rpx;height:38rpx;background:linear-gradient(#fff,#fff) center/38rpx 8rpx no-repeat,linear-gradient(#fff,#fff) center/8rpx 38rpx no-repeat}.fab view::before,.fab view::after{display:none;content:none} |
| | | </style> |
| | |
| | | </template> |
| | | |
| | | <style lang="scss" scoped> |
| | | .page{height:100vh;display:flex;flex-direction:column;padding:0 30rpx;box-sizing:border-box;overflow:hidden;background:#f3f6fb}.search{display:flex;align-items:center;height:80rpx;margin:20rpx 0 16rpx;padding:0 20rpx;background:#fff;border-radius:16rpx;box-shadow:0 8rpx 20rpx rgba(43,69,107,.06)}.search input{flex:1;font-size:27rpx}.search text{color:#1769d8;font-size:24rpx}.content{height:0;flex:1;padding-bottom:150rpx;box-sizing:border-box}.row{padding:24rpx 22rpx 20rpx;margin-bottom:18rpx;background:#fff;border-radius:16rpx;box-shadow:0 10rpx 24rpx rgba(43,69,107,.08)}.head{display:flex;align-items:flex-start;justify-content:space-between;gap:16rpx}.head>view:first-child{display:flex;min-width:0;flex:1;flex-direction:column;gap:8rpx}.head>view:first-child text:last-child{color:#78879b;font-size:23rpx}.name{overflow:hidden;color:#20334c;font-size:30rpx;font-weight:600;text-overflow:ellipsis;white-space:nowrap}.status-wrap{display:flex;align-items:center;flex:none;height:48rpx}.status{display:inline-flex;align-items:center;height:36rpx;padding:0 16rpx;font-size:22rpx;border-radius:999rpx;white-space:nowrap}.enabled{color:#17865a;background:#eafaf2;border:1rpx solid #b8efd5}.disabled{color:#66778c;background:#f6f8fb;border:1rpx solid #dce4ee}.grid{display:grid;gap:10rpx;padding:16rpx 0;margin-top:16rpx;color:#66778c;font-size:23rpx;border-top:1rpx solid #edf1f6;border-bottom:1rpx solid #edf1f6}.grid text{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.actions{display:flex;flex-wrap:wrap;justify-content:flex-end;gap:12rpx;padding-top:16rpx}.actions button{min-height:50rpx;padding:0 16rpx;margin:0;color:#1769d8;font-size:22rpx;line-height:48rpx;background:#f5f8ff;border:1rpx solid #8ab3ee;border-radius:8rpx}.actions .danger{color:#c65050;background:#fff7f7;border-color:#e3a0a0}.actions button::after,.fab::after{border:0}.more,.state{display:block;padding:35rpx;color:#8795a8;font-size:26rpx;text-align:center}.error{color:#c3654d}.fab{position:fixed;right:30rpx;bottom:calc(32rpx + env(safe-area-inset-bottom));display:flex;align-items:center;justify-content:center;width:132rpx;height:132rpx;min-height:132rpx;padding:0;margin:0;background:#1769d8;border-radius:50%;box-shadow:0 12rpx 24rpx rgba(23,105,216,.3)}.fab view,.fab view::before{display:block;width:38rpx;height:8rpx;background:#fff;border-radius:4rpx;content:""}.fab view{position:relative}.fab view::before{position:absolute;transform:rotate(90deg)} |
| | | .page{height:100vh;display:flex;flex-direction:column;padding:0 30rpx;box-sizing:border-box;overflow:hidden;background:#f3f6fb}.search{display:flex;align-items:center;height:80rpx;margin:20rpx 0 16rpx;padding:0 20rpx;background:#fff;border-radius:16rpx;box-shadow:0 8rpx 20rpx rgba(43,69,107,.06)}.search input{flex:1;font-size:27rpx}.search text{color:#1769d8;font-size:24rpx}.content{height:0;flex:1;padding-bottom:150rpx;box-sizing:border-box}.row{padding:24rpx 22rpx 20rpx;margin-bottom:18rpx;background:#fff;border-radius:16rpx;box-shadow:0 10rpx 24rpx rgba(43,69,107,.08)}.head{display:flex;align-items:flex-start;justify-content:space-between;gap:16rpx}.head>view:first-child{display:flex;min-width:0;flex:1;flex-direction:column;gap:8rpx}.head>view:first-child text:last-child{color:#78879b;font-size:23rpx}.name{overflow:hidden;color:#20334c;font-size:30rpx;font-weight:600;text-overflow:ellipsis;white-space:nowrap}.status-wrap{display:flex;align-items:center;flex:none;height:48rpx}.status{display:inline-flex;align-items:center;height:36rpx;padding:0 16rpx;font-size:22rpx;border-radius:999rpx;white-space:nowrap}.enabled{color:#17865a;background:#eafaf2;border:1rpx solid #b8efd5}.disabled{color:#66778c;background:#f6f8fb;border:1rpx solid #dce4ee}.grid{display:grid;gap:10rpx;padding:16rpx 0;margin-top:16rpx;color:#66778c;font-size:23rpx;border-top:1rpx solid #edf1f6;border-bottom:1rpx solid #edf1f6}.grid text{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.actions{display:flex;flex-wrap:wrap;justify-content:flex-end;gap:12rpx;padding-top:16rpx}.actions button{min-height:50rpx;padding:0 16rpx;margin:0;color:#1769d8;font-size:22rpx;line-height:48rpx;background:#f5f8ff;border:1rpx solid #8ab3ee;border-radius:8rpx}.actions .danger{color:#c65050;background:#fff7f7;border-color:#e3a0a0}.actions button::after,.fab::after{border:0}.more,.state{display:block;padding:35rpx;color:#8795a8;font-size:26rpx;text-align:center}.error{color:#c3654d}.fab{position:fixed;right:30rpx;bottom:calc(32rpx + env(safe-area-inset-bottom));display:flex;align-items:center;justify-content:center;width:132rpx;height:132rpx;min-height:132rpx;padding:0;margin:0;background:#1769d8;border-radius:50%;box-shadow:0 12rpx 24rpx rgba(23,105,216,.3)}.fab view{width:38rpx;height:38rpx;background:linear-gradient(#fff,#fff) center/38rpx 8rpx no-repeat,linear-gradient(#fff,#fff) center/8rpx 38rpx no-repeat}.fab view::before,.fab view::after{display:none;content:none} |
| | | </style> |
| | |
| | | </template> |
| | | |
| | | <style lang="scss" scoped> |
| | | .page{height:100vh;display:flex;flex-direction:column;padding:0 30rpx;box-sizing:border-box;overflow:hidden;background:#f3f6fb}.search{display:flex;align-items:center;height:80rpx;margin:20rpx 0 16rpx;padding:0 20rpx;background:#fff;border-radius:16rpx;box-shadow:0 8rpx 20rpx rgba(43,69,107,.06)}.search input{flex:1;font-size:27rpx}.search text{color:#1769d8;font-size:24rpx}.content{height:0;flex:1;padding-bottom:150rpx;box-sizing:border-box}.row{padding:24rpx 22rpx 20rpx;margin-bottom:18rpx;background:#fff;border-radius:16rpx;box-shadow:0 10rpx 24rpx rgba(43,69,107,.08)}.head{display:flex;align-items:flex-start;justify-content:space-between;gap:16rpx}.head>view:first-child{display:flex;min-width:0;flex:1;flex-direction:column;gap:8rpx}.head>view:first-child text:last-child{color:#78879b;font-size:23rpx}.name{overflow:hidden;color:#20334c;font-size:30rpx;font-weight:600;text-overflow:ellipsis;white-space:nowrap}.status-wrap{display:flex;align-items:flex-start;flex:none}.status{display:inline-flex;align-items:center;height:44rpx;padding:0 18rpx;font-size:23rpx;border-radius:999rpx}.enabled{color:#17865a;background:#eafaf2;border:1rpx solid #b8efd5}.disabled{color:#c65050;background:#fff7f7;border:1rpx solid #e3a0a0}.grid{display:grid;gap:10rpx;padding:16rpx 0;margin-top:16rpx;color:#66778c;font-size:23rpx;border-top:1rpx solid #edf1f6;border-bottom:1rpx solid #edf1f6}.grid text{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.actions{display:flex;flex-wrap:wrap;justify-content:flex-end;gap:12rpx;padding-top:16rpx}.actions button{min-height:50rpx;padding:0 16rpx;margin:0;color:#1769d8;font-size:22rpx;line-height:48rpx;background:#f5f8ff;border:1rpx solid #8ab3ee;border-radius:8rpx}.danger{color:#c65050!important;background:#fff7f7!important;border-color:#e3a0a0!important}.more,.state{display:block;padding:35rpx;color:#8795a8;font-size:26rpx;text-align:center}.error{color:#c3654d}.fab{position:fixed;right:30rpx;bottom:calc(32rpx + env(safe-area-inset-bottom));display:flex;align-items:center;justify-content:center;width:132rpx;height:132rpx;min-height:132rpx;padding:0;margin:0;background:#1769d8;border-radius:50%;box-shadow:0 12rpx 24rpx rgba(23,105,216,.3)}.fab view,.fab view::before{display:block;width:38rpx;height:8rpx;background:#fff;border-radius:4rpx;content:""}.fab view{position:relative}.fab view::before{position:absolute;transform:rotate(90deg)}.mask{position:fixed;left:0;right:0;top:0;bottom:0;z-index:60;display:flex;align-items:flex-end;background:rgba(0,0,0,.35)}.modal{width:100%;max-height:86vh;overflow:auto;padding-bottom:28rpx;box-sizing:border-box;background:#fff;border-radius:24rpx 24rpx 0 0}.modal-title{height:88rpx;line-height:88rpx;color:#10233f;font-size:30rpx;font-weight:600;text-align:center}.field{display:flex;align-items:center;min-height:86rpx;padding:0 22rpx;border-bottom:1rpx solid #edf1f6;box-sizing:border-box}.field>text:first-child{flex:none;width:190rpx;color:#10233f;font-size:26rpx}.field>picker{display:block;flex:1;min-width:0}.field input,.field textarea,.value,.picker{flex:1;min-width:0;color:#10233f;font-size:26rpx;text-align:right}.field textarea{height:120rpx;padding:22rpx 0}.field.column{align-items:flex-start;flex-direction:column;padding:22rpx}.field.column>text:first-child{width:auto;margin-bottom:12rpx}.field.column textarea{text-align:left;width:100%;height:120rpx;padding:0}.required{color:#e23b3b}.picker{display:flex;width:100%;align-items:center;justify-content:space-between;gap:10rpx}.picker text:first-child{min-width:0;flex:1;overflow:hidden;text-align:right;text-overflow:ellipsis;white-space:nowrap}.picker text:last-child{flex:none;width:24rpx;text-align:right}.modal-actions{display:flex;gap:18rpx;padding:24rpx}.modal-actions button{flex:1;height:72rpx;line-height:72rpx;font-size:27rpx;border-radius:10rpx}.modal-actions .primary{color:#fff;background:#1769d8}.actions button::after,.fab::after,.modal-actions button::after{border:0} |
| | | .page{height:100vh;display:flex;flex-direction:column;padding:0 30rpx;box-sizing:border-box;overflow:hidden;background:#f3f6fb}.search{display:flex;align-items:center;height:80rpx;margin:20rpx 0 16rpx;padding:0 20rpx;background:#fff;border-radius:16rpx;box-shadow:0 8rpx 20rpx rgba(43,69,107,.06)}.search input{flex:1;font-size:27rpx}.search text{color:#1769d8;font-size:24rpx}.content{height:0;flex:1;padding-bottom:150rpx;box-sizing:border-box}.row{padding:24rpx 22rpx 20rpx;margin-bottom:18rpx;background:#fff;border-radius:16rpx;box-shadow:0 10rpx 24rpx rgba(43,69,107,.08)}.head{display:flex;align-items:flex-start;justify-content:space-between;gap:16rpx}.head>view:first-child{display:flex;min-width:0;flex:1;flex-direction:column;gap:8rpx}.head>view:first-child text:last-child{color:#78879b;font-size:23rpx}.name{overflow:hidden;color:#20334c;font-size:30rpx;font-weight:600;text-overflow:ellipsis;white-space:nowrap}.status-wrap{display:flex;align-items:flex-start;flex:none}.status{display:inline-flex;align-items:center;height:44rpx;padding:0 18rpx;font-size:23rpx;border-radius:999rpx}.enabled{color:#17865a;background:#eafaf2;border:1rpx solid #b8efd5}.disabled{color:#c65050;background:#fff7f7;border:1rpx solid #e3a0a0}.grid{display:grid;gap:10rpx;padding:16rpx 0;margin-top:16rpx;color:#66778c;font-size:23rpx;border-top:1rpx solid #edf1f6;border-bottom:1rpx solid #edf1f6}.grid text{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.actions{display:flex;flex-wrap:wrap;justify-content:flex-end;gap:12rpx;padding-top:16rpx}.actions button{min-height:50rpx;padding:0 16rpx;margin:0;color:#1769d8;font-size:22rpx;line-height:48rpx;background:#f5f8ff;border:1rpx solid #8ab3ee;border-radius:8rpx}.danger{color:#c65050!important;background:#fff7f7!important;border-color:#e3a0a0!important}.more,.state{display:block;padding:35rpx;color:#8795a8;font-size:26rpx;text-align:center}.error{color:#c3654d}.fab{position:fixed;right:30rpx;bottom:calc(32rpx + env(safe-area-inset-bottom));display:flex;align-items:center;justify-content:center;width:132rpx;height:132rpx;min-height:132rpx;padding:0;margin:0;background:#1769d8;border-radius:50%;box-shadow:0 12rpx 24rpx rgba(23,105,216,.3)}.fab view{width:38rpx;height:38rpx;background:linear-gradient(#fff,#fff) center/38rpx 8rpx no-repeat,linear-gradient(#fff,#fff) center/8rpx 38rpx no-repeat}.fab view::before,.fab view::after{display:none;content:none}.mask{position:fixed;left:0;right:0;top:0;bottom:0;z-index:60;display:flex;align-items:flex-end;background:rgba(0,0,0,.35)}.modal{width:100%;max-height:86vh;overflow:auto;padding-bottom:28rpx;box-sizing:border-box;background:#fff;border-radius:24rpx 24rpx 0 0}.modal-title{height:88rpx;line-height:88rpx;color:#10233f;font-size:30rpx;font-weight:600;text-align:center}.field{display:flex;align-items:center;min-height:86rpx;padding:0 22rpx;border-bottom:1rpx solid #edf1f6;box-sizing:border-box}.field>text:first-child{flex:none;width:190rpx;color:#10233f;font-size:26rpx}.field>picker{display:block;flex:1;min-width:0}.field input,.field textarea,.value,.picker{flex:1;min-width:0;color:#10233f;font-size:26rpx;text-align:right}.field textarea{height:120rpx;padding:22rpx 0}.field.column{align-items:flex-start;flex-direction:column;padding:22rpx}.field.column>text:first-child{width:auto;margin-bottom:12rpx}.field.column textarea{text-align:left;width:100%;height:120rpx;padding:0}.required{color:#e23b3b}.picker{display:flex;width:100%;align-items:center;justify-content:space-between;gap:10rpx}.picker text:first-child{min-width:0;flex:1;overflow:hidden;text-align:right;text-overflow:ellipsis;white-space:nowrap}.picker text:last-child{flex:none;width:24rpx;text-align:right}.modal-actions{display:flex;gap:18rpx;padding:24rpx}.modal-actions button{flex:1;height:72rpx;line-height:72rpx;font-size:27rpx;border-radius:10rpx}.modal-actions .primary{color:#fff;background:#1769d8}.actions button::after,.fab::after,.modal-actions button::after{border:0} |
| | | </style> |
| | |
| | | </template> |
| | | |
| | | <style lang="scss" scoped> |
| | | .page{height:100vh;display:flex;flex-direction:column;padding:0 30rpx;box-sizing:border-box;overflow:hidden;background:#f3f6fb}.search{display:flex;align-items:center;height:80rpx;margin:20rpx 0 16rpx;padding:0 20rpx;background:#fff;border-radius:16rpx;box-shadow:0 8rpx 20rpx rgba(43,69,107,.06)}.search input{flex:1;font-size:27rpx}.search text{color:#1769d8;font-size:24rpx}.content{height:0;flex:1;padding-bottom:150rpx;box-sizing:border-box}.row{padding:24rpx 22rpx 20rpx;margin-bottom:18rpx;background:#fff;border-radius:16rpx;box-shadow:0 10rpx 24rpx rgba(43,69,107,.08)}.head{display:flex;align-items:flex-start;justify-content:space-between;gap:16rpx}.head>view:first-child{display:flex;min-width:0;flex:1;flex-direction:column;gap:8rpx}.head>view:first-child text:last-child{color:#78879b;font-size:23rpx}.name{overflow:hidden;color:#20334c;font-size:30rpx;font-weight:600;text-overflow:ellipsis;white-space:nowrap}.status-wrap{display:flex;align-items:flex-start;flex:none}.status{display:inline-flex;align-items:center;height:44rpx;padding:0 18rpx;font-size:23rpx;border-radius:999rpx}.enabled{color:#17865a;background:#eafaf2;border:1rpx solid #b8efd5}.disabled{color:#c65050;background:#fff7f7;border:1rpx solid #e3a0a0}.grid{display:grid;gap:10rpx;padding:16rpx 0;margin-top:16rpx;color:#66778c;font-size:23rpx;border-top:1rpx solid #edf1f6;border-bottom:1rpx solid #edf1f6}.grid text{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.actions{display:flex;flex-wrap:wrap;justify-content:flex-end;align-items:center;gap:12rpx;padding-top:16rpx}.actions button,.close{min-height:50rpx;padding:0 16rpx;margin:0;color:#1769d8;font-size:22rpx;line-height:48rpx;background:#f5f8ff;border:1rpx solid #8ab3ee;border-radius:8rpx}.danger{color:#c65050!important;background:#fff7f7!important;border-color:#e3a0a0!important}.more,.state{display:block;padding:35rpx;color:#8795a8;font-size:26rpx;text-align:center}.error{color:#c3654d}.fab{position:fixed;right:30rpx;bottom:calc(32rpx + env(safe-area-inset-bottom));display:flex;align-items:center;justify-content:center;width:132rpx;height:132rpx;min-height:132rpx;padding:0;margin:0;background:#1769d8;border-radius:50%;box-shadow:0 12rpx 24rpx rgba(23,105,216,.3)}.config-fab{position:fixed;right:42rpx;bottom:calc(194rpx + env(safe-area-inset-bottom));display:flex;flex-direction:column;align-items:center;justify-content:center;width:112rpx;height:112rpx;min-height:112rpx;padding:0;margin:0;color:#1769d8;font-size:22rpx;line-height:1.25;background:#fff;border:1rpx solid #8ab3ee;border-radius:50%;box-shadow:0 10rpx 24rpx rgba(43,69,107,.16)}.config-fab text{display:block;color:#1769d8;font-size:22rpx;line-height:1.25;text-align:center}.fab view,.fab view::before{display:block;width:38rpx;height:8rpx;background:#fff;border-radius:4rpx;content:""}.fab view{position:relative}.fab view::before{position:absolute;transform:rotate(90deg)}.mask{position:fixed;left:0;right:0;top:0;bottom:0;z-index:60;display:flex;align-items:flex-end;background:rgba(0,0,0,.35)}.modal{width:100%;max-height:86vh;overflow:auto;padding-bottom:28rpx;box-sizing:border-box;background:#fff;border-radius:24rpx 24rpx 0 0}.modal-title{height:88rpx;line-height:88rpx;color:#10233f;font-size:30rpx;font-weight:600;text-align:center}.field{display:flex;align-items:center;min-height:86rpx;padding:0 22rpx;border-bottom:1rpx solid #edf1f6;box-sizing:border-box}.field>text:first-child{flex:none;width:190rpx;color:#10233f;font-size:26rpx}.field>picker{display:block;flex:1;min-width:0}.field input,.field textarea,.value,.picker{flex:1;min-width:0;color:#10233f;font-size:26rpx;text-align:right}.field textarea{height:120rpx;padding:22rpx 0}.field.column{align-items:flex-start;flex-direction:column;padding:22rpx}.field.column>text:first-child{width:auto;margin-bottom:12rpx}.field.column textarea{text-align:left;width:100%;height:120rpx;padding:0}.required{color:#e23b3b}.picker{display:flex;width:100%;align-items:center;justify-content:space-between;gap:10rpx}.picker text:first-child{min-width:0;flex:1;overflow:hidden;text-align:right;text-overflow:ellipsis;white-space:nowrap}.picker text:last-child{flex:none;width:24rpx;text-align:right}.code-field input{text-align:left}.code-field button{height:52rpx;min-height:52rpx;padding:0 16rpx;margin:0;color:#1769d8;font-size:23rpx;line-height:50rpx;background:#f5f8ff;border:1rpx solid #8ab3ee;border-radius:8rpx}.modal-actions{display:flex;gap:18rpx;padding:24rpx}.modal-actions button{flex:1;height:72rpx;line-height:72rpx;font-size:27rpx;border-radius:10rpx}.modal-actions .primary{color:#fff;background:#1769d8}.actions button::after,.fab::after,.config-fab::after,.modal-actions button::after,.close::after,.code-field button::after{border:0}.close{width:calc(100% - 48rpx);height:72rpx;margin:24rpx} |
| | | .page{height:100vh;display:flex;flex-direction:column;padding:0 30rpx;box-sizing:border-box;overflow:hidden;background:#f3f6fb}.search{display:flex;align-items:center;height:80rpx;margin:20rpx 0 16rpx;padding:0 20rpx;background:#fff;border-radius:16rpx;box-shadow:0 8rpx 20rpx rgba(43,69,107,.06)}.search input{flex:1;font-size:27rpx}.search text{color:#1769d8;font-size:24rpx}.content{height:0;flex:1;padding-bottom:150rpx;box-sizing:border-box}.row{padding:24rpx 22rpx 20rpx;margin-bottom:18rpx;background:#fff;border-radius:16rpx;box-shadow:0 10rpx 24rpx rgba(43,69,107,.08)}.head{display:flex;align-items:flex-start;justify-content:space-between;gap:16rpx}.head>view:first-child{display:flex;min-width:0;flex:1;flex-direction:column;gap:8rpx}.head>view:first-child text:last-child{color:#78879b;font-size:23rpx}.name{overflow:hidden;color:#20334c;font-size:30rpx;font-weight:600;text-overflow:ellipsis;white-space:nowrap}.status-wrap{display:flex;align-items:flex-start;flex:none}.status{display:inline-flex;align-items:center;height:44rpx;padding:0 18rpx;font-size:23rpx;border-radius:999rpx}.enabled{color:#17865a;background:#eafaf2;border:1rpx solid #b8efd5}.disabled{color:#c65050;background:#fff7f7;border:1rpx solid #e3a0a0}.grid{display:grid;gap:10rpx;padding:16rpx 0;margin-top:16rpx;color:#66778c;font-size:23rpx;border-top:1rpx solid #edf1f6;border-bottom:1rpx solid #edf1f6}.grid text{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.actions{display:flex;flex-wrap:wrap;justify-content:flex-end;align-items:center;gap:12rpx;padding-top:16rpx}.actions button,.close{min-height:50rpx;padding:0 16rpx;margin:0;color:#1769d8;font-size:22rpx;line-height:48rpx;background:#f5f8ff;border:1rpx solid #8ab3ee;border-radius:8rpx}.danger{color:#c65050!important;background:#fff7f7!important;border-color:#e3a0a0!important}.more,.state{display:block;padding:35rpx;color:#8795a8;font-size:26rpx;text-align:center}.error{color:#c3654d}.fab{position:fixed;right:30rpx;bottom:calc(32rpx + env(safe-area-inset-bottom));display:flex;align-items:center;justify-content:center;width:132rpx;height:132rpx;min-height:132rpx;padding:0;margin:0;background:#1769d8;border-radius:50%;box-shadow:0 12rpx 24rpx rgba(23,105,216,.3)}.config-fab{position:fixed;right:42rpx;bottom:calc(194rpx + env(safe-area-inset-bottom));display:flex;flex-direction:column;align-items:center;justify-content:center;width:112rpx;height:112rpx;min-height:112rpx;padding:0;margin:0;color:#1769d8;font-size:22rpx;line-height:1.25;background:#fff;border:1rpx solid #8ab3ee;border-radius:50%;box-shadow:0 10rpx 24rpx rgba(43,69,107,.16)}.config-fab text{display:block;color:#1769d8;font-size:22rpx;line-height:1.25;text-align:center}.fab view{width:38rpx;height:38rpx;background:linear-gradient(#fff,#fff) center/38rpx 8rpx no-repeat,linear-gradient(#fff,#fff) center/8rpx 38rpx no-repeat}.fab view::before,.fab view::after{display:none;content:none}.mask{position:fixed;left:0;right:0;top:0;bottom:0;z-index:60;display:flex;align-items:flex-end;background:rgba(0,0,0,.35)}.modal{width:100%;max-height:86vh;overflow:auto;padding-bottom:28rpx;box-sizing:border-box;background:#fff;border-radius:24rpx 24rpx 0 0}.modal-title{height:88rpx;line-height:88rpx;color:#10233f;font-size:30rpx;font-weight:600;text-align:center}.field{display:flex;align-items:center;min-height:86rpx;padding:0 22rpx;border-bottom:1rpx solid #edf1f6;box-sizing:border-box}.field>text:first-child{flex:none;width:190rpx;color:#10233f;font-size:26rpx}.field>picker{display:block;flex:1;min-width:0}.field input,.field textarea,.value,.picker{flex:1;min-width:0;color:#10233f;font-size:26rpx;text-align:right}.field textarea{height:120rpx;padding:22rpx 0}.field.column{align-items:flex-start;flex-direction:column;padding:22rpx}.field.column>text:first-child{width:auto;margin-bottom:12rpx}.field.column textarea{text-align:left;width:100%;height:120rpx;padding:0}.required{color:#e23b3b}.picker{display:flex;width:100%;align-items:center;justify-content:space-between;gap:10rpx}.picker text:first-child{min-width:0;flex:1;overflow:hidden;text-align:right;text-overflow:ellipsis;white-space:nowrap}.picker text:last-child{flex:none;width:24rpx;text-align:right}.code-field input{text-align:left}.code-field button{height:52rpx;min-height:52rpx;padding:0 16rpx;margin:0;color:#1769d8;font-size:23rpx;line-height:50rpx;background:#f5f8ff;border:1rpx solid #8ab3ee;border-radius:8rpx}.modal-actions{display:flex;gap:18rpx;padding:24rpx}.modal-actions button{flex:1;height:72rpx;line-height:72rpx;font-size:27rpx;border-radius:10rpx}.modal-actions .primary{color:#fff;background:#1769d8}.actions button::after,.fab::after,.config-fab::after,.modal-actions button::after,.close::after,.code-field button::after{border:0}.close{width:calc(100% - 48rpx);height:72rpx;margin:24rpx} |
| | | </style> |
| | |
| | | </template> |
| | | |
| | | <style lang="scss" scoped> |
| | | .page{height:100vh;display:flex;flex-direction:column;padding:0 30rpx;box-sizing:border-box;overflow:hidden;background:#f3f6fb}.search{display:flex;align-items:center;height:80rpx;margin:20rpx 0 16rpx;padding:0 20rpx;background:#fff;border-radius:16rpx;box-shadow:0 8rpx 20rpx rgba(43,69,107,.06)}.search input{flex:1;font-size:27rpx}.search text{color:#1769d8;font-size:24rpx}.content{height:0;flex:1;padding-bottom:150rpx;box-sizing:border-box}.row{padding:24rpx 22rpx 20rpx;margin-bottom:18rpx;background:#fff;border-radius:16rpx;box-shadow:0 10rpx 24rpx rgba(43,69,107,.08)}.head{display:flex;align-items:flex-start;justify-content:space-between;gap:16rpx}.head>view:first-child{display:flex;min-width:0;flex:1;flex-direction:column;gap:8rpx}.head>view:first-child text:last-child{color:#78879b;font-size:23rpx}.name{overflow:hidden;color:#20334c;font-size:30rpx;font-weight:600;text-overflow:ellipsis;white-space:nowrap}.status-wrap{display:flex;align-items:flex-start;flex:none}.status{display:inline-flex;align-items:center;height:44rpx;padding:0 18rpx;font-size:23rpx;border-radius:999rpx}.tag-draft{color:#1769d8;background:#edf5ff;border:1rpx solid #bfdbff}.tag-progress{color:#b57800;background:#fff7dd;border:1rpx solid #f3dc98}.tag-approved{color:#1769d8;background:#edf5ff;border:1rpx solid #bfdbff}.tag-finished{color:#17865a;background:#eafaf2;border:1rpx solid #b8efd5}.tag-cancelled{color:#c65050;background:#fff7f7;border:1rpx solid #e3a0a0}.tag-info{color:#66778c;background:#f6f8fb;border:1rpx solid #dce4ee}.grid{display:grid;gap:10rpx;padding:16rpx 0;margin-top:16rpx;color:#66778c;font-size:23rpx;border-top:1rpx solid #edf1f6;border-bottom:1rpx solid #edf1f6}.grid text{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.actions{display:flex;flex-wrap:wrap;justify-content:flex-end;gap:12rpx;padding-top:16rpx}.actions button{min-height:50rpx;padding:0 16rpx;margin:0;color:#1769d8;font-size:22rpx;line-height:48rpx;background:#f5f8ff;border:1rpx solid #8ab3ee;border-radius:8rpx}.actions .danger{color:#c65050;background:#fff7f7;border-color:#e3a0a0}.actions button::after,.fab::after{border:0}.more,.state{display:block;padding:35rpx;color:#8795a8;font-size:26rpx;text-align:center}.error{color:#c3654d}.fab{position:fixed;right:30rpx;bottom:calc(32rpx + env(safe-area-inset-bottom));display:flex;align-items:center;justify-content:center;width:132rpx;height:132rpx;min-height:132rpx;padding:0;margin:0;background:#1769d8;border-radius:50%;box-shadow:0 12rpx 24rpx rgba(23,105,216,.3)}.fab view,.fab view::before{display:block;width:38rpx;height:8rpx;background:#fff;border-radius:4rpx;content:""}.fab view{position:relative}.fab view::before{position:absolute;transform:rotate(90deg)} |
| | | .page{height:100vh;display:flex;flex-direction:column;padding:0 30rpx;box-sizing:border-box;overflow:hidden;background:#f3f6fb}.search{display:flex;align-items:center;height:80rpx;margin:20rpx 0 16rpx;padding:0 20rpx;background:#fff;border-radius:16rpx;box-shadow:0 8rpx 20rpx rgba(43,69,107,.06)}.search input{flex:1;font-size:27rpx}.search text{color:#1769d8;font-size:24rpx}.content{height:0;flex:1;padding-bottom:150rpx;box-sizing:border-box}.row{padding:24rpx 22rpx 20rpx;margin-bottom:18rpx;background:#fff;border-radius:16rpx;box-shadow:0 10rpx 24rpx rgba(43,69,107,.08)}.head{display:flex;align-items:flex-start;justify-content:space-between;gap:16rpx}.head>view:first-child{display:flex;min-width:0;flex:1;flex-direction:column;gap:8rpx}.head>view:first-child text:last-child{color:#78879b;font-size:23rpx}.name{overflow:hidden;color:#20334c;font-size:30rpx;font-weight:600;text-overflow:ellipsis;white-space:nowrap}.status-wrap{display:flex;align-items:flex-start;flex:none}.status{display:inline-flex;align-items:center;height:44rpx;padding:0 18rpx;font-size:23rpx;border-radius:999rpx}.tag-draft{color:#1769d8;background:#edf5ff;border:1rpx solid #bfdbff}.tag-progress{color:#b57800;background:#fff7dd;border:1rpx solid #f3dc98}.tag-approved{color:#1769d8;background:#edf5ff;border:1rpx solid #bfdbff}.tag-finished{color:#17865a;background:#eafaf2;border:1rpx solid #b8efd5}.tag-cancelled{color:#c65050;background:#fff7f7;border:1rpx solid #e3a0a0}.tag-info{color:#66778c;background:#f6f8fb;border:1rpx solid #dce4ee}.grid{display:grid;gap:10rpx;padding:16rpx 0;margin-top:16rpx;color:#66778c;font-size:23rpx;border-top:1rpx solid #edf1f6;border-bottom:1rpx solid #edf1f6}.grid text{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.actions{display:flex;flex-wrap:wrap;justify-content:flex-end;gap:12rpx;padding-top:16rpx}.actions button{min-height:50rpx;padding:0 16rpx;margin:0;color:#1769d8;font-size:22rpx;line-height:48rpx;background:#f5f8ff;border:1rpx solid #8ab3ee;border-radius:8rpx}.actions .danger{color:#c65050;background:#fff7f7;border-color:#e3a0a0}.actions button::after,.fab::after{border:0}.more,.state{display:block;padding:35rpx;color:#8795a8;font-size:26rpx;text-align:center}.error{color:#c3654d}.fab{position:fixed;right:30rpx;bottom:calc(32rpx + env(safe-area-inset-bottom));display:flex;align-items:center;justify-content:center;width:132rpx;height:132rpx;min-height:132rpx;padding:0;margin:0;background:#1769d8;border-radius:50%;box-shadow:0 12rpx 24rpx rgba(23,105,216,.3)}.fab view{width:38rpx;height:38rpx;background:linear-gradient(#fff,#fff) center/38rpx 8rpx no-repeat,linear-gradient(#fff,#fff) center/8rpx 38rpx no-repeat}.fab view::before,.fab view::after{display:none;content:none} |
| | | </style> |
| | |
| | | </template> |
| | | |
| | | <style lang="scss" scoped> |
| | | .page{height:100vh;display:flex;flex-direction:column;padding:0 30rpx;box-sizing:border-box;overflow:hidden;background:#f3f6fb}.search{display:flex;align-items:center;height:80rpx;margin:20rpx 0 16rpx;padding:0 20rpx;background:#fff;border-radius:16rpx;box-shadow:0 8rpx 20rpx rgba(43,69,107,.06)}.search input{flex:1;font-size:27rpx}.search text{color:#1769d8;font-size:24rpx}.toolbar{display:flex;justify-content:flex-end;padding-bottom:16rpx}.toolbar button{height:62rpx;padding:0 22rpx;margin:0;color:#1769d8;font-size:24rpx;line-height:62rpx;background:#fff;border:1rpx solid #8ab3ee;border-radius:12rpx}.content{height:0;flex:1;padding-bottom:150rpx;box-sizing:border-box}.row{padding:24rpx 22rpx 20rpx;margin-bottom:18rpx;background:#fff;border-radius:16rpx;box-shadow:0 10rpx 24rpx rgba(43,69,107,.08)}.head{display:flex;align-items:flex-start;justify-content:space-between;gap:16rpx}.head>view:first-child{display:flex;min-width:0;flex:1;flex-direction:column;gap:8rpx}.head>view:first-child text:last-child{color:#78879b;font-size:23rpx}.name{overflow:hidden;color:#20334c;font-size:30rpx;font-weight:600;text-overflow:ellipsis;white-space:nowrap}.status-wrap{display:flex;align-items:flex-start;flex:none}.status{display:inline-flex;align-items:center;height:44rpx;padding:0 18rpx;font-size:23rpx;border-radius:999rpx}.tag-draft{color:#6f7e92;background:#f3f6fa;border:1rpx solid #dce4ee}.tag-progress{color:#b57800;background:#fff7dd;border:1rpx solid #f3dc98}.tag-approved{color:#1769d8;background:#edf5ff;border:1rpx solid #bfdbff}.tag-finished{color:#17865a;background:#eafaf2;border:1rpx solid #b8efd5}.tag-cancelled{color:#c65050;background:#fff7f7;border:1rpx solid #e3a0a0}.tag-info{color:#66778c;background:#f6f8fb;border:1rpx solid #dce4ee}.grid{display:grid;gap:10rpx;padding:16rpx 0;margin-top:16rpx;color:#66778c;font-size:23rpx;border-top:1rpx solid #edf1f6;border-bottom:1rpx solid #edf1f6}.grid text{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.actions{display:flex;flex-wrap:wrap;justify-content:flex-end;gap:12rpx;padding-top:16rpx}.actions button{min-height:50rpx;padding:0 16rpx;margin:0;color:#1769d8;font-size:22rpx;line-height:48rpx;background:#f5f8ff;border:1rpx solid #8ab3ee;border-radius:8rpx}.actions .danger{color:#c65050;background:#fff7f7;border-color:#e3a0a0}.actions button::after,.fab::after,.modal-close::after{border:0}.more,.state{display:block;padding:35rpx;color:#8795a8;font-size:26rpx;text-align:center}.error{color:#c3654d}.fab{position:fixed;right:30rpx;bottom:calc(32rpx + env(safe-area-inset-bottom));display:flex;align-items:center;justify-content:center;width:132rpx;height:132rpx;min-height:132rpx;padding:0;margin:0;background:#1769d8;border-radius:50%;box-shadow:0 12rpx 24rpx rgba(23,105,216,.3)}.fab view,.fab view::before{display:block;width:38rpx;height:8rpx;background:#fff;border-radius:4rpx;content:""}.fab view{position:relative}.fab view::before{position:absolute;transform:rotate(90deg)}.mask{position:fixed;left:0;right:0;top:0;bottom:0;z-index:50;display:flex;align-items:flex-end;background:rgba(0,0,0,.35)}.modal{width:100%;max-height:82vh;padding-bottom:24rpx;background:#f3f6fb;border-radius:24rpx 24rpx 0 0}.modal-title{height:88rpx;line-height:88rpx;color:#1d2f46;font-size:30rpx;font-weight:600;text-align:center;background:#fff;border-radius:24rpx 24rpx 0 0}.modal-list{max-height:60vh;padding:20rpx 24rpx;box-sizing:border-box}.select-row{display:grid;gap:9rpx;padding:22rpx;margin-bottom:16rpx;color:#66778c;font-size:23rpx;background:#fff;border-radius:14rpx}.select-title{color:#20334c;font-size:29rpx;font-weight:600}.modal-close{margin:0 24rpx;color:#1769d8;background:#fff;border-radius:12rpx} |
| | | .page{height:100vh;display:flex;flex-direction:column;padding:0 30rpx;box-sizing:border-box;overflow:hidden;background:#f3f6fb}.search{display:flex;align-items:center;height:80rpx;margin:20rpx 0 16rpx;padding:0 20rpx;background:#fff;border-radius:16rpx;box-shadow:0 8rpx 20rpx rgba(43,69,107,.06)}.search input{flex:1;font-size:27rpx}.search text{color:#1769d8;font-size:24rpx}.toolbar{display:flex;justify-content:flex-end;padding-bottom:16rpx}.toolbar button{height:62rpx;padding:0 22rpx;margin:0;color:#1769d8;font-size:24rpx;line-height:62rpx;background:#fff;border:1rpx solid #8ab3ee;border-radius:12rpx}.content{height:0;flex:1;padding-bottom:150rpx;box-sizing:border-box}.row{padding:24rpx 22rpx 20rpx;margin-bottom:18rpx;background:#fff;border-radius:16rpx;box-shadow:0 10rpx 24rpx rgba(43,69,107,.08)}.head{display:flex;align-items:flex-start;justify-content:space-between;gap:16rpx}.head>view:first-child{display:flex;min-width:0;flex:1;flex-direction:column;gap:8rpx}.head>view:first-child text:last-child{color:#78879b;font-size:23rpx}.name{overflow:hidden;color:#20334c;font-size:30rpx;font-weight:600;text-overflow:ellipsis;white-space:nowrap}.status-wrap{display:flex;align-items:flex-start;flex:none}.status{display:inline-flex;align-items:center;height:44rpx;padding:0 18rpx;font-size:23rpx;border-radius:999rpx}.tag-draft{color:#6f7e92;background:#f3f6fa;border:1rpx solid #dce4ee}.tag-progress{color:#b57800;background:#fff7dd;border:1rpx solid #f3dc98}.tag-approved{color:#1769d8;background:#edf5ff;border:1rpx solid #bfdbff}.tag-finished{color:#17865a;background:#eafaf2;border:1rpx solid #b8efd5}.tag-cancelled{color:#c65050;background:#fff7f7;border:1rpx solid #e3a0a0}.tag-info{color:#66778c;background:#f6f8fb;border:1rpx solid #dce4ee}.grid{display:grid;gap:10rpx;padding:16rpx 0;margin-top:16rpx;color:#66778c;font-size:23rpx;border-top:1rpx solid #edf1f6;border-bottom:1rpx solid #edf1f6}.grid text{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.actions{display:flex;flex-wrap:wrap;justify-content:flex-end;gap:12rpx;padding-top:16rpx}.actions button{min-height:50rpx;padding:0 16rpx;margin:0;color:#1769d8;font-size:22rpx;line-height:48rpx;background:#f5f8ff;border:1rpx solid #8ab3ee;border-radius:8rpx}.actions .danger{color:#c65050;background:#fff7f7;border-color:#e3a0a0}.actions button::after,.fab::after,.modal-close::after{border:0}.more,.state{display:block;padding:35rpx;color:#8795a8;font-size:26rpx;text-align:center}.error{color:#c3654d}.fab{position:fixed;right:30rpx;bottom:calc(32rpx + env(safe-area-inset-bottom));display:flex;align-items:center;justify-content:center;width:132rpx;height:132rpx;min-height:132rpx;padding:0;margin:0;background:#1769d8;border-radius:50%;box-shadow:0 12rpx 24rpx rgba(23,105,216,.3)}.fab view{width:38rpx;height:38rpx;background:linear-gradient(#fff,#fff) center/38rpx 8rpx no-repeat,linear-gradient(#fff,#fff) center/8rpx 38rpx no-repeat}.fab view::before,.fab view::after{display:none;content:none}.mask{position:fixed;left:0;right:0;top:0;bottom:0;z-index:50;display:flex;align-items:flex-end;background:rgba(0,0,0,.35)}.modal{width:100%;max-height:82vh;padding-bottom:24rpx;background:#f3f6fb;border-radius:24rpx 24rpx 0 0}.modal-title{height:88rpx;line-height:88rpx;color:#1d2f46;font-size:30rpx;font-weight:600;text-align:center;background:#fff;border-radius:24rpx 24rpx 0 0}.modal-list{max-height:60vh;padding:20rpx 24rpx;box-sizing:border-box}.select-row{display:grid;gap:9rpx;padding:22rpx;margin-bottom:16rpx;color:#66778c;font-size:23rpx;background:#fff;border-radius:14rpx}.select-title{color:#20334c;font-size:29rpx;font-weight:600}.modal-close{margin:0 24rpx;color:#1769d8;background:#fff;border-radius:12rpx} |
| | | </style> |
| | |
| | | </template> |
| | | |
| | | <style lang="scss" scoped> |
| | | .page{height:100vh;display:flex;flex-direction:column;padding:0 30rpx;box-sizing:border-box;overflow:hidden;background:#f3f6fb}.search{display:flex;align-items:center;height:80rpx;margin:20rpx 0 16rpx;padding:0 20rpx;background:#fff;border-radius:16rpx;box-shadow:0 8rpx 20rpx rgba(43,69,107,.06)}.search input{flex:1;font-size:27rpx}.search text{color:#1769d8;font-size:24rpx}.content{height:0;flex:1;padding-bottom:150rpx;box-sizing:border-box}.row{padding:24rpx 22rpx 20rpx;margin-bottom:18rpx;background:#fff;border-radius:16rpx;box-shadow:0 10rpx 24rpx rgba(43,69,107,.08)}.head{display:flex;align-items:flex-start;justify-content:space-between;gap:16rpx}.head>view:first-child{display:flex;min-width:0;flex:1;flex-direction:column;gap:8rpx}.head>view:first-child text:last-child{color:#78879b;font-size:23rpx}.name{overflow:hidden;color:#20334c;font-size:30rpx;font-weight:600;text-overflow:ellipsis;white-space:nowrap}.status-wrap{display:flex;align-items:center;justify-content:center;flex:none;height:44rpx}.status{display:inline-flex;align-items:center;justify-content:center;height:44rpx;padding:0 18rpx;font-size:23rpx;line-height:44rpx;border-radius:999rpx;white-space:nowrap}.tag-draft{color:#6f7e92;background:#f3f6fa;border:1rpx solid #dce4ee}.tag-progress{color:#b57800;background:#fff7dd;border:1rpx solid #f3dc98}.tag-approved{color:#1769d8;background:#edf5ff;border:1rpx solid #bfdbff}.tag-finished{color:#17865a;background:#eafaf2;border:1rpx solid #b8efd5}.tag-cancelled{color:#c65050;background:#fff7f7;border:1rpx solid #e3a0a0}.tag-info{color:#66778c;background:#f6f8fb;border:1rpx solid #dce4ee}.grid{display:grid;gap:10rpx;padding:16rpx 0;margin-top:16rpx;color:#66778c;font-size:23rpx;border-top:1rpx solid #edf1f6;border-bottom:1rpx solid #edf1f6}.grid text{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.actions{display:flex;flex-wrap:wrap;justify-content:flex-end;gap:12rpx;padding-top:16rpx}.actions button{min-height:50rpx;padding:0 16rpx;margin:0;color:#1769d8;font-size:22rpx;line-height:48rpx;background:#f5f8ff;border:1rpx solid #8ab3ee;border-radius:8rpx}.actions .danger{color:#c65050;background:#fff7f7;border-color:#e3a0a0}.actions button::after,.fab::after{border:0}.more,.state{display:block;padding:35rpx;color:#8795a8;font-size:26rpx;text-align:center}.error{color:#c3654d}.fab{position:fixed;right:30rpx;bottom:calc(32rpx + env(safe-area-inset-bottom));display:flex;align-items:center;justify-content:center;width:132rpx;height:132rpx;min-height:132rpx;padding:0;margin:0;background:#1769d8;border-radius:50%;box-shadow:0 12rpx 24rpx rgba(23,105,216,.3)}.fab view,.fab view::before{display:block;width:38rpx;height:8rpx;background:#fff;border-radius:4rpx;content:""}.fab view{position:relative}.fab view::before{position:absolute;transform:rotate(90deg)} |
| | | .page{height:100vh;display:flex;flex-direction:column;padding:0 30rpx;box-sizing:border-box;overflow:hidden;background:#f3f6fb}.search{display:flex;align-items:center;height:80rpx;margin:20rpx 0 16rpx;padding:0 20rpx;background:#fff;border-radius:16rpx;box-shadow:0 8rpx 20rpx rgba(43,69,107,.06)}.search input{flex:1;font-size:27rpx}.search text{color:#1769d8;font-size:24rpx}.content{height:0;flex:1;padding-bottom:150rpx;box-sizing:border-box}.row{padding:24rpx 22rpx 20rpx;margin-bottom:18rpx;background:#fff;border-radius:16rpx;box-shadow:0 10rpx 24rpx rgba(43,69,107,.08)}.head{display:flex;align-items:flex-start;justify-content:space-between;gap:16rpx}.head>view:first-child{display:flex;min-width:0;flex:1;flex-direction:column;gap:8rpx}.head>view:first-child text:last-child{color:#78879b;font-size:23rpx}.name{overflow:hidden;color:#20334c;font-size:30rpx;font-weight:600;text-overflow:ellipsis;white-space:nowrap}.status-wrap{display:flex;align-items:center;justify-content:center;flex:none;height:44rpx}.status{display:inline-flex;align-items:center;justify-content:center;height:44rpx;padding:0 18rpx;font-size:23rpx;line-height:44rpx;border-radius:999rpx;white-space:nowrap}.tag-draft{color:#6f7e92;background:#f3f6fa;border:1rpx solid #dce4ee}.tag-progress{color:#b57800;background:#fff7dd;border:1rpx solid #f3dc98}.tag-approved{color:#1769d8;background:#edf5ff;border:1rpx solid #bfdbff}.tag-finished{color:#17865a;background:#eafaf2;border:1rpx solid #b8efd5}.tag-cancelled{color:#c65050;background:#fff7f7;border:1rpx solid #e3a0a0}.tag-info{color:#66778c;background:#f6f8fb;border:1rpx solid #dce4ee}.grid{display:grid;gap:10rpx;padding:16rpx 0;margin-top:16rpx;color:#66778c;font-size:23rpx;border-top:1rpx solid #edf1f6;border-bottom:1rpx solid #edf1f6}.grid text{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.actions{display:flex;flex-wrap:wrap;justify-content:flex-end;gap:12rpx;padding-top:16rpx}.actions button{min-height:50rpx;padding:0 16rpx;margin:0;color:#1769d8;font-size:22rpx;line-height:48rpx;background:#f5f8ff;border:1rpx solid #8ab3ee;border-radius:8rpx}.actions .danger{color:#c65050;background:#fff7f7;border-color:#e3a0a0}.actions button::after,.fab::after{border:0}.more,.state{display:block;padding:35rpx;color:#8795a8;font-size:26rpx;text-align:center}.error{color:#c3654d}.fab{position:fixed;right:30rpx;bottom:calc(32rpx + env(safe-area-inset-bottom));display:flex;align-items:center;justify-content:center;width:132rpx;height:132rpx;min-height:132rpx;padding:0;margin:0;background:#1769d8;border-radius:50%;box-shadow:0 12rpx 24rpx rgba(23,105,216,.3)}.fab view{width:38rpx;height:38rpx;background:linear-gradient(#fff,#fff) center/38rpx 8rpx no-repeat,linear-gradient(#fff,#fff) center/8rpx 38rpx no-repeat}.fab view::before,.fab view::after{display:none;content:none} |
| | | </style> |
| | |
| | | </template> |
| | | |
| | | <style lang="scss" scoped> |
| | | .page{height:100vh;display:flex;flex-direction:column;padding:0 30rpx;box-sizing:border-box;overflow:hidden;background:#f3f6fb}.search{display:flex;align-items:center;height:80rpx;margin:20rpx 0 16rpx;padding:0 20rpx;background:#fff;border-radius:16rpx;box-shadow:0 8rpx 20rpx rgba(43,69,107,.06)}.search input{flex:1;font-size:27rpx}.search text{color:#1769d8;font-size:24rpx}.content{height:0;flex:1;padding-bottom:150rpx;box-sizing:border-box}.row{padding:24rpx 22rpx 20rpx;margin-bottom:18rpx;background:#fff;border-radius:16rpx;box-shadow:0 10rpx 24rpx rgba(43,69,107,.08)}.head{display:flex;align-items:flex-start;justify-content:space-between;gap:16rpx}.head>view:first-child{display:flex;min-width:0;flex:1;flex-direction:column;gap:8rpx}.head>view:first-child text:last-child{color:#78879b;font-size:23rpx}.name{overflow:hidden;color:#20334c;font-size:30rpx;font-weight:600;text-overflow:ellipsis;white-space:nowrap}.status-wrap{display:flex;align-items:flex-start;justify-content:center;flex:none;min-height:44rpx}.status{display:inline-flex;align-items:center;justify-content:center;height:44rpx;padding:0 18rpx;font-size:23rpx;line-height:44rpx;border-radius:999rpx;white-space:nowrap}.tag-draft{color:#6f7e92;background:#f3f6fa;border:1rpx solid #dce4ee}.tag-progress{color:#b57800;background:#fff7dd;border:1rpx solid #f3dc98}.tag-approved{color:#1769d8;background:#edf5ff;border:1rpx solid #bfdbff}.tag-finished{color:#17865a;background:#eafaf2;border:1rpx solid #b8efd5}.tag-cancelled{color:#c65050;background:#fff7f7;border:1rpx solid #e3a0a0}.tag-info{color:#66778c;background:#f6f8fb;border:1rpx solid #dce4ee}.grid{display:grid;gap:10rpx;padding:16rpx 0;margin-top:16rpx;color:#66778c;font-size:23rpx;border-top:1rpx solid #edf1f6;border-bottom:1rpx solid #edf1f6}.grid text{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.actions{display:flex;flex-wrap:wrap;justify-content:flex-end;gap:12rpx;padding-top:16rpx}.actions button{min-height:50rpx;padding:0 16rpx;margin:0;color:#1769d8;font-size:22rpx;line-height:48rpx;background:#f5f8ff;border:1rpx solid #8ab3ee;border-radius:8rpx}.actions .danger{color:#c65050;background:#fff7f7;border-color:#e3a0a0}.actions button::after,.fab::after{border:0}.more,.state{display:block;padding:35rpx;color:#8795a8;font-size:26rpx;text-align:center}.error{color:#c3654d}.fab{position:fixed;right:30rpx;bottom:calc(32rpx + env(safe-area-inset-bottom));display:flex;align-items:center;justify-content:center;width:132rpx;height:132rpx;min-height:132rpx;padding:0;margin:0;background:#1769d8;border-radius:50%;box-shadow:0 12rpx 24rpx rgba(23,105,216,.3)}.fab view,.fab view::before{display:block;width:38rpx;height:8rpx;background:#fff;border-radius:4rpx;content:""}.fab view{position:relative}.fab view::before{position:absolute;transform:rotate(90deg)} |
| | | .page{height:100vh;display:flex;flex-direction:column;padding:0 30rpx;box-sizing:border-box;overflow:hidden;background:#f3f6fb}.search{display:flex;align-items:center;height:80rpx;margin:20rpx 0 16rpx;padding:0 20rpx;background:#fff;border-radius:16rpx;box-shadow:0 8rpx 20rpx rgba(43,69,107,.06)}.search input{flex:1;font-size:27rpx}.search text{color:#1769d8;font-size:24rpx}.content{height:0;flex:1;padding-bottom:150rpx;box-sizing:border-box}.row{padding:24rpx 22rpx 20rpx;margin-bottom:18rpx;background:#fff;border-radius:16rpx;box-shadow:0 10rpx 24rpx rgba(43,69,107,.08)}.head{display:flex;align-items:flex-start;justify-content:space-between;gap:16rpx}.head>view:first-child{display:flex;min-width:0;flex:1;flex-direction:column;gap:8rpx}.head>view:first-child text:last-child{color:#78879b;font-size:23rpx}.name{overflow:hidden;color:#20334c;font-size:30rpx;font-weight:600;text-overflow:ellipsis;white-space:nowrap}.status-wrap{display:flex;align-items:flex-start;justify-content:center;flex:none;min-height:44rpx}.status{display:inline-flex;align-items:center;justify-content:center;height:44rpx;padding:0 18rpx;font-size:23rpx;line-height:44rpx;border-radius:999rpx;white-space:nowrap}.tag-draft{color:#6f7e92;background:#f3f6fa;border:1rpx solid #dce4ee}.tag-progress{color:#b57800;background:#fff7dd;border:1rpx solid #f3dc98}.tag-approved{color:#1769d8;background:#edf5ff;border:1rpx solid #bfdbff}.tag-finished{color:#17865a;background:#eafaf2;border:1rpx solid #b8efd5}.tag-cancelled{color:#c65050;background:#fff7f7;border:1rpx solid #e3a0a0}.tag-info{color:#66778c;background:#f6f8fb;border:1rpx solid #dce4ee}.grid{display:grid;gap:10rpx;padding:16rpx 0;margin-top:16rpx;color:#66778c;font-size:23rpx;border-top:1rpx solid #edf1f6;border-bottom:1rpx solid #edf1f6}.grid text{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.actions{display:flex;flex-wrap:wrap;justify-content:flex-end;gap:12rpx;padding-top:16rpx}.actions button{min-height:50rpx;padding:0 16rpx;margin:0;color:#1769d8;font-size:22rpx;line-height:48rpx;background:#f5f8ff;border:1rpx solid #8ab3ee;border-radius:8rpx}.actions .danger{color:#c65050;background:#fff7f7;border-color:#e3a0a0}.actions button::after,.fab::after{border:0}.more,.state{display:block;padding:35rpx;color:#8795a8;font-size:26rpx;text-align:center}.error{color:#c3654d}.fab{position:fixed;right:30rpx;bottom:calc(32rpx + env(safe-area-inset-bottom));display:flex;align-items:center;justify-content:center;width:132rpx;height:132rpx;min-height:132rpx;padding:0;margin:0;background:#1769d8;border-radius:50%;box-shadow:0 12rpx 24rpx rgba(23,105,216,.3)}.fab view{width:38rpx;height:38rpx;background:linear-gradient(#fff,#fff) center/38rpx 8rpx no-repeat,linear-gradient(#fff,#fff) center/8rpx 38rpx no-repeat}.fab view::before,.fab view::after{display:none;content:none} |
| | | </style> |
| | |
| | | </template> |
| | | |
| | | <style lang="scss" scoped> |
| | | .page{height:100vh;display:flex;flex-direction:column;padding:0 30rpx;box-sizing:border-box;overflow:hidden;background:#f3f6fb}.search{display:flex;align-items:center;height:80rpx;margin:20rpx 0 16rpx;padding:0 20rpx;background:#fff;border-radius:16rpx;box-shadow:0 8rpx 20rpx rgba(43,69,107,.06)}.search input{flex:1;font-size:27rpx}.search text{color:#1769d8;font-size:24rpx}.content{height:0;flex:1;padding-bottom:150rpx}.row{padding:24rpx 22rpx 20rpx;margin-bottom:18rpx;background:#fff;border-radius:16rpx;box-shadow:0 10rpx 24rpx rgba(43,69,107,.08)}.head{display:flex;align-items:flex-start;justify-content:space-between;gap:16rpx}.head>view:first-child{display:flex;min-width:0;flex:1;flex-direction:column;gap:8rpx}.head>view:first-child text:last-child{color:#78879b;font-size:23rpx}.name{overflow:hidden;color:#20334c;font-size:30rpx;font-weight:600;text-overflow:ellipsis;white-space:nowrap}.status{display:inline-flex;align-items:center;height:44rpx;padding:0 18rpx;font-size:23rpx;border-radius:999rpx}.tag-approved{color:#1769d8;background:#edf5ff;border:1rpx solid #bfdbff}.grid{display:grid;gap:10rpx;padding:16rpx 0;margin-top:16rpx;color:#66778c;font-size:23rpx;border-top:1rpx solid #edf1f6;border-bottom:1rpx solid #edf1f6}.grid text{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.actions{display:flex;justify-content:flex-end;gap:12rpx;padding-top:16rpx}.actions button{min-height:50rpx;padding:0 16rpx;margin:0;color:#1769d8;font-size:22rpx;line-height:48rpx;background:#f5f8ff;border:1rpx solid #8ab3ee;border-radius:8rpx}.actions .danger{color:#c65050;background:#fff7f7;border-color:#e3a0a0}.more,.state{display:block;padding:35rpx;color:#8795a8;font-size:26rpx;text-align:center}.error{color:#c3654d}.fab{position:fixed;right:30rpx;bottom:calc(32rpx + env(safe-area-inset-bottom));display:flex;align-items:center;justify-content:center;width:132rpx;height:132rpx;min-height:132rpx;padding:0;margin:0;background:#1769d8;border-radius:50%;box-shadow:0 12rpx 24rpx rgba(23,105,216,.3)}.fab view,.fab view::before{display:block;width:38rpx;height:8rpx;background:#fff;border-radius:4rpx;content:""}.fab view{position:relative}.fab view::before{position:absolute;transform:rotate(90deg)}.mask{position:fixed;left:0;right:0;top:0;bottom:0;z-index:50;display:flex;align-items:flex-end;background:rgba(0,0,0,.35)}.modal{width:100%;max-height:86vh;overflow:auto;padding-bottom:24rpx;background:#fff;border-radius:24rpx 24rpx 0 0}.modal-title{height:88rpx;line-height:88rpx;color:#1d2f46;font-size:30rpx;font-weight:600;text-align:center;border-bottom:1rpx solid #eef1f5}.field{display:flex;align-items:center;min-height:92rpx;padding:0 24rpx;gap:20rpx;border-bottom:1rpx solid #eef1f5}.field>text:first-child{width:190rpx;flex:none;color:#33455d;font-size:26rpx}.field>picker{display:block;flex:1;min-width:0}.required{color:#e64340}.field input,.picker{min-width:0;flex:1;color:#1e3049;font-size:26rpx;text-align:right}.picker{display:flex;width:100%;align-items:center;justify-content:space-between;gap:12rpx}.picker text:first-child{min-width:0;flex:1;overflow:hidden;text-align:right;text-overflow:ellipsis;white-space:nowrap}.picker text:last-child{flex:none;width:24rpx;color:#8092a7;font-size:34rpx;text-align:right}.modal-actions{display:flex;gap:18rpx;padding:24rpx}.modal-actions button{flex:1;margin:0;color:#1769d8;background:#edf5ff;border-radius:12rpx}.modal-actions .primary{color:#fff;background:#1769d8}.modal-list{max-height:60vh;padding:20rpx 24rpx;box-sizing:border-box;background:#f3f6fb}.select-row{display:grid;gap:9rpx;padding:22rpx;margin-bottom:16rpx;color:#66778c;font-size:23rpx;background:#fff;border-radius:14rpx}.select-title{color:#20334c;font-size:29rpx;font-weight:600}button::after{border:0} |
| | | .page{height:100vh;display:flex;flex-direction:column;padding:0 30rpx;box-sizing:border-box;overflow:hidden;background:#f3f6fb}.search{display:flex;align-items:center;height:80rpx;margin:20rpx 0 16rpx;padding:0 20rpx;background:#fff;border-radius:16rpx;box-shadow:0 8rpx 20rpx rgba(43,69,107,.06)}.search input{flex:1;font-size:27rpx}.search text{color:#1769d8;font-size:24rpx}.content{height:0;flex:1;padding-bottom:150rpx}.row{padding:24rpx 22rpx 20rpx;margin-bottom:18rpx;background:#fff;border-radius:16rpx;box-shadow:0 10rpx 24rpx rgba(43,69,107,.08)}.head{display:flex;align-items:flex-start;justify-content:space-between;gap:16rpx}.head>view:first-child{display:flex;min-width:0;flex:1;flex-direction:column;gap:8rpx}.head>view:first-child text:last-child{color:#78879b;font-size:23rpx}.name{overflow:hidden;color:#20334c;font-size:30rpx;font-weight:600;text-overflow:ellipsis;white-space:nowrap}.status{display:inline-flex;align-items:center;height:44rpx;padding:0 18rpx;font-size:23rpx;border-radius:999rpx}.tag-approved{color:#1769d8;background:#edf5ff;border:1rpx solid #bfdbff}.grid{display:grid;gap:10rpx;padding:16rpx 0;margin-top:16rpx;color:#66778c;font-size:23rpx;border-top:1rpx solid #edf1f6;border-bottom:1rpx solid #edf1f6}.grid text{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.actions{display:flex;justify-content:flex-end;gap:12rpx;padding-top:16rpx}.actions button{min-height:50rpx;padding:0 16rpx;margin:0;color:#1769d8;font-size:22rpx;line-height:48rpx;background:#f5f8ff;border:1rpx solid #8ab3ee;border-radius:8rpx}.actions .danger{color:#c65050;background:#fff7f7;border-color:#e3a0a0}.more,.state{display:block;padding:35rpx;color:#8795a8;font-size:26rpx;text-align:center}.error{color:#c3654d}.fab{position:fixed;right:30rpx;bottom:calc(32rpx + env(safe-area-inset-bottom));display:flex;align-items:center;justify-content:center;width:132rpx;height:132rpx;min-height:132rpx;padding:0;margin:0;background:#1769d8;border-radius:50%;box-shadow:0 12rpx 24rpx rgba(23,105,216,.3)}.fab view{width:38rpx;height:38rpx;background:linear-gradient(#fff,#fff) center/38rpx 8rpx no-repeat,linear-gradient(#fff,#fff) center/8rpx 38rpx no-repeat}.fab view::before,.fab view::after{display:none;content:none}.mask{position:fixed;left:0;right:0;top:0;bottom:0;z-index:50;display:flex;align-items:flex-end;background:rgba(0,0,0,.35)}.modal{width:100%;max-height:86vh;overflow:auto;padding-bottom:24rpx;background:#fff;border-radius:24rpx 24rpx 0 0}.modal-title{height:88rpx;line-height:88rpx;color:#1d2f46;font-size:30rpx;font-weight:600;text-align:center;border-bottom:1rpx solid #eef1f5}.field{display:flex;align-items:center;min-height:92rpx;padding:0 24rpx;gap:20rpx;border-bottom:1rpx solid #eef1f5}.field>text:first-child{width:190rpx;flex:none;color:#33455d;font-size:26rpx}.field>picker{display:block;flex:1;min-width:0}.required{color:#e64340}.field input,.picker{min-width:0;flex:1;color:#1e3049;font-size:26rpx;text-align:right}.picker{display:flex;width:100%;align-items:center;justify-content:space-between;gap:12rpx}.picker text:first-child{min-width:0;flex:1;overflow:hidden;text-align:right;text-overflow:ellipsis;white-space:nowrap}.picker text:last-child{flex:none;width:24rpx;color:#8092a7;font-size:34rpx;text-align:right}.modal-actions{display:flex;gap:18rpx;padding:24rpx}.modal-actions button{flex:1;margin:0;color:#1769d8;background:#edf5ff;border-radius:12rpx}.modal-actions .primary{color:#fff;background:#1769d8}.modal-list{max-height:60vh;padding:20rpx 24rpx;box-sizing:border-box;background:#f3f6fb}.select-row{display:grid;gap:9rpx;padding:22rpx;margin-bottom:16rpx;color:#66778c;font-size:23rpx;background:#fff;border-radius:14rpx}.select-title{color:#20334c;font-size:29rpx;font-weight:600}button::after{border:0} |
| | | </style> |
| | |
| | | </template> |
| | | |
| | | <style lang="scss" scoped> |
| | | .page{height:100vh;display:flex;flex-direction:column;padding:0 30rpx;box-sizing:border-box;overflow:hidden;background:#f3f6fb}.tip{margin:18rpx 0 0;color:#53677f;font-size:24rpx}.search{display:flex;align-items:center;height:80rpx;margin:16rpx 0;padding:0 20rpx;background:#fff;border-radius:16rpx}.search input{flex:1;font-size:27rpx}.search text{color:#1769d8;font-size:24rpx}.content{height:0;flex:1;padding-bottom:120rpx}.row{padding:24rpx 22rpx 20rpx;margin-bottom:18rpx;background:#fff;border-radius:16rpx;box-shadow:0 10rpx 24rpx rgba(43,69,107,.08)}.head{display:flex;align-items:flex-start;justify-content:space-between;gap:16rpx}.head>view:first-child{display:flex;min-width:0;flex:1;flex-direction:column;gap:8rpx}.head>view:first-child text:last-child{color:#78879b;font-size:23rpx}.name{overflow:hidden;color:#20334c;font-size:30rpx;font-weight:600;text-overflow:ellipsis;white-space:nowrap}.status-wrap{display:flex;align-items:flex-start;flex:none}.status{display:inline-flex;align-items:center;height:44rpx;padding:0 18rpx;font-size:23rpx;border-radius:999rpx}.tag-success,.tag-draft{color:#17865a;background:#eafaf2;border:1rpx solid #b8efd5}.tag-danger,.tag-cancelled{color:#c65050;background:#fff7f7;border:1rpx solid #e3a0a0}.tag-progress{color:#b57800;background:#fff7dd;border:1rpx solid #f3dc98}.tag-approved{color:#1769d8;background:#edf5ff;border:1rpx solid #bfdbff}.tag-finished{color:#17865a;background:#eafaf2;border:1rpx solid #b8efd5}.tag-info{color:#66778c;background:#f6f8fb;border:1rpx solid #dce4ee}.grid{display:grid;gap:10rpx;padding:16rpx 0;margin-top:16rpx;color:#66778c;font-size:23rpx;border-top:1rpx solid #edf1f6;border-bottom:1rpx solid #edf1f6}.grid text{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.actions{display:flex;flex-wrap:wrap;justify-content:flex-end;gap:12rpx;padding-top:16rpx}.actions button{min-height:50rpx;padding:0 16rpx;margin:0;color:#1769d8;font-size:22rpx;line-height:48rpx;background:#f5f8ff;border:1rpx solid #8ab3ee;border-radius:8rpx}.actions .danger{color:#c65050;background:#fff7f7;border-color:#e3a0a0}.more,.state{display:block;padding:35rpx;color:#8795a8;font-size:26rpx;text-align:center}.error{color:#c3654d}.fab{position:fixed;right:30rpx;bottom:calc(32rpx + env(safe-area-inset-bottom));display:flex;align-items:center;justify-content:center;width:132rpx;height:132rpx;min-height:132rpx;padding:0;margin:0;background:#1769d8;border-radius:50%;box-shadow:0 12rpx 24rpx rgba(23,105,216,.3)}.fab view,.fab view::before{display:block;width:38rpx;height:8rpx;background:#fff;border-radius:4rpx;content:""}.fab view{position:relative}.fab view::before{position:absolute;transform:rotate(90deg)}.mask{position:fixed;left:0;right:0;top:0;bottom:0;z-index:50;display:flex;align-items:flex-end;background:rgba(0,0,0,.35)}.modal{width:100%;max-height:86vh;overflow:auto;padding-bottom:24rpx;background:#fff;border-radius:24rpx 24rpx 0 0}.modal-title{height:88rpx;line-height:88rpx;color:#1d2f46;font-size:30rpx;font-weight:600;text-align:center;border-bottom:1rpx solid #eef1f5}.field{display:flex;align-items:center;min-height:92rpx;padding:0 24rpx;gap:20rpx;border-bottom:1rpx solid #eef1f5}.field>text:first-child{width:190rpx;flex:none;color:#33455d;font-size:26rpx}.required{color:#e64340}.field>picker{display:block;flex:1;min-width:0}.field input,.picker,.value{min-width:0;flex:1;color:#1e3049;font-size:26rpx;text-align:right}.picker{display:flex;width:100%;align-items:center;justify-content:space-between;gap:12rpx;color:#65758a}.picker text:first-child,.value{min-width:0;flex:1;overflow:hidden;text-align:right;text-overflow:ellipsis;white-space:nowrap}.picker text:last-child{flex:none;width:24rpx;color:#8092a7;font-size:34rpx;text-align:right}.code-field input{flex:1}.code-field button{flex:none;min-width:132rpx;padding:0 14rpx;margin:0;color:#1769d8;font-size:23rpx;line-height:54rpx;background:#fff;border:1rpx solid #1769d8;border-radius:8rpx}.column{align-items:flex-start;flex-direction:column;padding:18rpx 24rpx}.column>text:first-child{width:auto}.column textarea{width:100%;height:118rpx;font-size:26rpx}.modal-actions{display:flex;gap:18rpx;padding:24rpx}.modal-actions button{flex:1;margin:0;color:#1769d8;background:#edf5ff;border-radius:12rpx}.modal-actions .primary{color:#fff;background:#1769d8}button::after{border:0} |
| | | .page{height:100vh;display:flex;flex-direction:column;padding:0 30rpx;box-sizing:border-box;overflow:hidden;background:#f3f6fb}.tip{margin:18rpx 0 0;color:#53677f;font-size:24rpx}.search{display:flex;align-items:center;height:80rpx;margin:16rpx 0;padding:0 20rpx;background:#fff;border-radius:16rpx}.search input{flex:1;font-size:27rpx}.search text{color:#1769d8;font-size:24rpx}.content{height:0;flex:1;padding-bottom:120rpx}.row{padding:24rpx 22rpx 20rpx;margin-bottom:18rpx;background:#fff;border-radius:16rpx;box-shadow:0 10rpx 24rpx rgba(43,69,107,.08)}.head{display:flex;align-items:flex-start;justify-content:space-between;gap:16rpx}.head>view:first-child{display:flex;min-width:0;flex:1;flex-direction:column;gap:8rpx}.head>view:first-child text:last-child{color:#78879b;font-size:23rpx}.name{overflow:hidden;color:#20334c;font-size:30rpx;font-weight:600;text-overflow:ellipsis;white-space:nowrap}.status-wrap{display:flex;align-items:flex-start;flex:none}.status{display:inline-flex;align-items:center;height:44rpx;padding:0 18rpx;font-size:23rpx;border-radius:999rpx}.tag-success,.tag-draft{color:#17865a;background:#eafaf2;border:1rpx solid #b8efd5}.tag-danger,.tag-cancelled{color:#c65050;background:#fff7f7;border:1rpx solid #e3a0a0}.tag-progress{color:#b57800;background:#fff7dd;border:1rpx solid #f3dc98}.tag-approved{color:#1769d8;background:#edf5ff;border:1rpx solid #bfdbff}.tag-finished{color:#17865a;background:#eafaf2;border:1rpx solid #b8efd5}.tag-info{color:#66778c;background:#f6f8fb;border:1rpx solid #dce4ee}.grid{display:grid;gap:10rpx;padding:16rpx 0;margin-top:16rpx;color:#66778c;font-size:23rpx;border-top:1rpx solid #edf1f6;border-bottom:1rpx solid #edf1f6}.grid text{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.actions{display:flex;flex-wrap:wrap;justify-content:flex-end;gap:12rpx;padding-top:16rpx}.actions button{min-height:50rpx;padding:0 16rpx;margin:0;color:#1769d8;font-size:22rpx;line-height:48rpx;background:#f5f8ff;border:1rpx solid #8ab3ee;border-radius:8rpx}.actions .danger{color:#c65050;background:#fff7f7;border-color:#e3a0a0}.more,.state{display:block;padding:35rpx;color:#8795a8;font-size:26rpx;text-align:center}.error{color:#c3654d}.fab{position:fixed;right:30rpx;bottom:calc(32rpx + env(safe-area-inset-bottom));display:flex;align-items:center;justify-content:center;width:132rpx;height:132rpx;min-height:132rpx;padding:0;margin:0;background:#1769d8;border-radius:50%;box-shadow:0 12rpx 24rpx rgba(23,105,216,.3)}.fab view{width:38rpx;height:38rpx;background:linear-gradient(#fff,#fff) center/38rpx 8rpx no-repeat,linear-gradient(#fff,#fff) center/8rpx 38rpx no-repeat}.fab view::before,.fab view::after{display:none;content:none}.mask{position:fixed;left:0;right:0;top:0;bottom:0;z-index:50;display:flex;align-items:flex-end;background:rgba(0,0,0,.35)}.modal{width:100%;max-height:86vh;overflow:auto;padding-bottom:24rpx;background:#fff;border-radius:24rpx 24rpx 0 0}.modal-title{height:88rpx;line-height:88rpx;color:#1d2f46;font-size:30rpx;font-weight:600;text-align:center;border-bottom:1rpx solid #eef1f5}.field{display:flex;align-items:center;min-height:92rpx;padding:0 24rpx;gap:20rpx;border-bottom:1rpx solid #eef1f5}.field>text:first-child{width:190rpx;flex:none;color:#33455d;font-size:26rpx}.required{color:#e64340}.field>picker{display:block;flex:1;min-width:0}.field input,.picker,.value{min-width:0;flex:1;color:#1e3049;font-size:26rpx;text-align:right}.picker{display:flex;width:100%;align-items:center;justify-content:space-between;gap:12rpx;color:#65758a}.picker text:first-child,.value{min-width:0;flex:1;overflow:hidden;text-align:right;text-overflow:ellipsis;white-space:nowrap}.picker text:last-child{flex:none;width:24rpx;color:#8092a7;font-size:34rpx;text-align:right}.code-field input{flex:1}.code-field button{flex:none;min-width:132rpx;padding:0 14rpx;margin:0;color:#1769d8;font-size:23rpx;line-height:54rpx;background:#fff;border:1rpx solid #1769d8;border-radius:8rpx}.column{align-items:flex-start;flex-direction:column;padding:18rpx 24rpx}.column>text:first-child{width:auto}.column textarea{width:100%;height:118rpx;font-size:26rpx}.modal-actions{display:flex;gap:18rpx;padding:24rpx}.modal-actions button{flex:1;margin:0;color:#1769d8;background:#edf5ff;border-radius:12rpx}.modal-actions .primary{color:#fff;background:#1769d8}button::after{border:0} |
| | | </style> |
| | |
| | | </template> |
| | | |
| | | <style lang="scss" scoped> |
| | | .page{height:100vh;display:flex;flex-direction:column;padding:0 30rpx;box-sizing:border-box;overflow:hidden;background:#f3f6fb}.search{display:flex;align-items:center;height:80rpx;margin:20rpx 0 16rpx;padding:0 20rpx;background:#fff;border-radius:16rpx;box-shadow:0 8rpx 20rpx rgba(43,69,107,.06)}.search input{flex:1;font-size:27rpx}.search text{color:#1769d8;font-size:24rpx}.content{height:0;flex:1;padding-bottom:150rpx;box-sizing:border-box}.row{padding:24rpx 22rpx 20rpx;margin-bottom:18rpx;background:#fff;border-radius:16rpx;box-shadow:0 10rpx 24rpx rgba(43,69,107,.08)}.head{display:flex;align-items:flex-start;justify-content:space-between;gap:16rpx}.head>view:first-child{display:flex;min-width:0;flex:1;flex-direction:column;gap:8rpx}.head>view:first-child text:last-child{color:#78879b;font-size:23rpx}.name{overflow:hidden;color:#20334c;font-size:30rpx;font-weight:600;text-overflow:ellipsis;white-space:nowrap}.status-wrap{display:flex;align-items:flex-start;flex:none}.status{display:inline-flex;align-items:center;height:44rpx;padding:0 18rpx;font-size:23rpx;border-radius:999rpx}.tag-success{color:#17865a;background:#eafaf2;border:1rpx solid #b8efd5}.tag-danger{color:#c65050;background:#fff7f7;border:1rpx solid #e3a0a0}.grid{display:grid;gap:10rpx;padding:16rpx 0;margin-top:16rpx;color:#66778c;font-size:23rpx;border-top:1rpx solid #edf1f6;border-bottom:1rpx solid #edf1f6}.grid text{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.actions{display:flex;justify-content:flex-end;gap:12rpx;padding-top:16rpx}.actions button{min-height:50rpx;padding:0 16rpx;margin:0;color:#1769d8;font-size:22rpx;line-height:48rpx;background:#f5f8ff;border:1rpx solid #8ab3ee;border-radius:8rpx}.actions .danger{color:#c65050;background:#fff7f7;border-color:#e3a0a0}.actions button::after,.fab::after{border:0}.more,.state{display:block;padding:35rpx;color:#8795a8;font-size:26rpx;text-align:center}.error{color:#c3654d}.fab{position:fixed;right:30rpx;bottom:calc(32rpx + env(safe-area-inset-bottom));display:flex;align-items:center;justify-content:center;width:132rpx;height:132rpx;min-height:132rpx;padding:0;margin:0;background:#1769d8;border-radius:50%;box-shadow:0 12rpx 24rpx rgba(23,105,216,.3)}.fab view,.fab view::before{display:block;width:38rpx;height:8rpx;background:#fff;border-radius:4rpx;content:""}.fab view{position:relative}.fab view::before{position:absolute;transform:rotate(90deg)} |
| | | .page{height:100vh;display:flex;flex-direction:column;padding:0 30rpx;box-sizing:border-box;overflow:hidden;background:#f3f6fb}.search{display:flex;align-items:center;height:80rpx;margin:20rpx 0 16rpx;padding:0 20rpx;background:#fff;border-radius:16rpx;box-shadow:0 8rpx 20rpx rgba(43,69,107,.06)}.search input{flex:1;font-size:27rpx}.search text{color:#1769d8;font-size:24rpx}.content{height:0;flex:1;padding-bottom:150rpx;box-sizing:border-box}.row{padding:24rpx 22rpx 20rpx;margin-bottom:18rpx;background:#fff;border-radius:16rpx;box-shadow:0 10rpx 24rpx rgba(43,69,107,.08)}.head{display:flex;align-items:flex-start;justify-content:space-between;gap:16rpx}.head>view:first-child{display:flex;min-width:0;flex:1;flex-direction:column;gap:8rpx}.head>view:first-child text:last-child{color:#78879b;font-size:23rpx}.name{overflow:hidden;color:#20334c;font-size:30rpx;font-weight:600;text-overflow:ellipsis;white-space:nowrap}.status-wrap{display:flex;align-items:flex-start;flex:none}.status{display:inline-flex;align-items:center;height:44rpx;padding:0 18rpx;font-size:23rpx;border-radius:999rpx}.tag-success{color:#17865a;background:#eafaf2;border:1rpx solid #b8efd5}.tag-danger{color:#c65050;background:#fff7f7;border:1rpx solid #e3a0a0}.grid{display:grid;gap:10rpx;padding:16rpx 0;margin-top:16rpx;color:#66778c;font-size:23rpx;border-top:1rpx solid #edf1f6;border-bottom:1rpx solid #edf1f6}.grid text{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.actions{display:flex;justify-content:flex-end;gap:12rpx;padding-top:16rpx}.actions button{min-height:50rpx;padding:0 16rpx;margin:0;color:#1769d8;font-size:22rpx;line-height:48rpx;background:#f5f8ff;border:1rpx solid #8ab3ee;border-radius:8rpx}.actions .danger{color:#c65050;background:#fff7f7;border-color:#e3a0a0}.actions button::after,.fab::after{border:0}.more,.state{display:block;padding:35rpx;color:#8795a8;font-size:26rpx;text-align:center}.error{color:#c3654d}.fab{position:fixed;right:30rpx;bottom:calc(32rpx + env(safe-area-inset-bottom));display:flex;align-items:center;justify-content:center;width:132rpx;height:132rpx;min-height:132rpx;padding:0;margin:0;background:#1769d8;border-radius:50%;box-shadow:0 12rpx 24rpx rgba(23,105,216,.3)}.fab view{width:38rpx;height:38rpx;background:linear-gradient(#fff,#fff) center/38rpx 8rpx no-repeat,linear-gradient(#fff,#fff) center/8rpx 38rpx no-repeat}.fab view::before,.fab view::after{display:none;content:none} |
| | | </style> |
| | |
| | | </template> |
| | | |
| | | <style lang="scss" scoped> |
| | | .page{height:100vh;display:flex;flex-direction:column;padding:0 30rpx;box-sizing:border-box;overflow:hidden;background:#f3f6fb}.tip{margin:18rpx 0 0;color:#53677f;font-size:24rpx}.search{display:flex;align-items:center;height:80rpx;margin:16rpx 0;padding:0 20rpx;background:#fff;border-radius:16rpx}.search input{flex:1;font-size:27rpx}.search text{color:#1769d8;font-size:24rpx}.content{height:0;flex:1;padding-bottom:120rpx}.row{padding:24rpx 22rpx 20rpx;margin-bottom:18rpx;background:#fff;border-radius:16rpx;box-shadow:0 10rpx 24rpx rgba(43,69,107,.08)}.head{display:flex;align-items:flex-start;justify-content:space-between;gap:16rpx}.head>view:first-child{display:flex;min-width:0;flex:1;flex-direction:column;gap:8rpx}.head>view:first-child text:last-child{color:#78879b;font-size:23rpx}.name{overflow:hidden;color:#20334c;font-size:30rpx;font-weight:600;text-overflow:ellipsis;white-space:nowrap}.status-wrap{display:flex;align-items:flex-start;flex:none}.status{display:inline-flex;align-items:center;height:44rpx;padding:0 18rpx;font-size:23rpx;border-radius:999rpx}.tag-success{color:#17865a;background:#eafaf2;border:1rpx solid #b8efd5}.tag-danger{color:#c65050;background:#fff7f7;border:1rpx solid #e3a0a0}.grid{display:grid;gap:10rpx;padding:16rpx 0;margin-top:16rpx;color:#66778c;font-size:23rpx;border-top:1rpx solid #edf1f6;border-bottom:1rpx solid #edf1f6}.grid text{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.actions{display:flex;flex-wrap:wrap;justify-content:flex-end;gap:12rpx;padding-top:16rpx}.actions button{min-height:50rpx;padding:0 16rpx;margin:0;color:#1769d8;font-size:22rpx;line-height:48rpx;background:#f5f8ff;border:1rpx solid #8ab3ee;border-radius:8rpx}.actions .danger{color:#c65050;background:#fff7f7;border-color:#e3a0a0}.more,.state{display:block;padding:35rpx;color:#8795a8;font-size:26rpx;text-align:center}.error{color:#c3654d}.fab{position:fixed;right:30rpx;bottom:calc(32rpx + env(safe-area-inset-bottom));display:flex;align-items:center;justify-content:center;width:132rpx;height:132rpx;min-height:132rpx;padding:0;margin:0;background:#1769d8;border-radius:50%;box-shadow:0 12rpx 24rpx rgba(23,105,216,.3)}.fab view,.fab view::before{display:block;width:38rpx;height:8rpx;background:#fff;border-radius:4rpx;content:""}.fab view{position:relative}.fab view::before{position:absolute;transform:rotate(90deg)}.mask{position:fixed;left:0;right:0;top:0;bottom:0;z-index:50;display:flex;align-items:flex-end;background:rgba(0,0,0,.35)}.modal{width:100%;max-height:86vh;overflow:auto;padding-bottom:24rpx;background:#fff;border-radius:24rpx 24rpx 0 0}.modal-title{height:88rpx;line-height:88rpx;color:#1d2f46;font-size:30rpx;font-weight:600;text-align:center;border-bottom:1rpx solid #eef1f5}.field{display:flex;align-items:center;min-height:92rpx;padding:0 24rpx;gap:20rpx;border-bottom:1rpx solid #eef1f5}.field>text:first-child{width:180rpx;flex:none;color:#33455d;font-size:26rpx}.required{color:#e64340}.field>picker{display:block;flex:1;min-width:0}.field input,.picker,.value{min-width:0;flex:1;color:#1e3049;font-size:26rpx;text-align:right}.picker{display:flex;width:100%;align-items:center;justify-content:space-between;gap:12rpx;color:#65758a}.picker text:first-child,.value{min-width:0;flex:1;overflow:hidden;text-align:right;text-overflow:ellipsis;white-space:nowrap}.picker text:last-child{flex:none;width:24rpx;color:#8092a7;font-size:34rpx;text-align:right}.code-field input{flex:1}.code-field button{flex:none;min-width:132rpx;padding:0 14rpx;margin:0;color:#1769d8;font-size:23rpx;line-height:54rpx;background:#fff;border:1rpx solid #1769d8;border-radius:8rpx}.column{align-items:flex-start;flex-direction:column;padding:18rpx 24rpx}.column>text:first-child{width:auto}.column textarea{width:100%;height:118rpx;font-size:26rpx}.modal-actions{display:flex;gap:18rpx;padding:24rpx}.modal-actions button{flex:1;margin:0;color:#1769d8;background:#edf5ff;border-radius:12rpx}.modal-actions .primary{color:#fff;background:#1769d8}button::after{border:0} |
| | | .page{height:100vh;display:flex;flex-direction:column;padding:0 30rpx;box-sizing:border-box;overflow:hidden;background:#f3f6fb}.tip{margin:18rpx 0 0;color:#53677f;font-size:24rpx}.search{display:flex;align-items:center;height:80rpx;margin:16rpx 0;padding:0 20rpx;background:#fff;border-radius:16rpx}.search input{flex:1;font-size:27rpx}.search text{color:#1769d8;font-size:24rpx}.content{height:0;flex:1;padding-bottom:120rpx}.row{padding:24rpx 22rpx 20rpx;margin-bottom:18rpx;background:#fff;border-radius:16rpx;box-shadow:0 10rpx 24rpx rgba(43,69,107,.08)}.head{display:flex;align-items:flex-start;justify-content:space-between;gap:16rpx}.head>view:first-child{display:flex;min-width:0;flex:1;flex-direction:column;gap:8rpx}.head>view:first-child text:last-child{color:#78879b;font-size:23rpx}.name{overflow:hidden;color:#20334c;font-size:30rpx;font-weight:600;text-overflow:ellipsis;white-space:nowrap}.status-wrap{display:flex;align-items:flex-start;flex:none}.status{display:inline-flex;align-items:center;height:44rpx;padding:0 18rpx;font-size:23rpx;border-radius:999rpx}.tag-success{color:#17865a;background:#eafaf2;border:1rpx solid #b8efd5}.tag-danger{color:#c65050;background:#fff7f7;border:1rpx solid #e3a0a0}.grid{display:grid;gap:10rpx;padding:16rpx 0;margin-top:16rpx;color:#66778c;font-size:23rpx;border-top:1rpx solid #edf1f6;border-bottom:1rpx solid #edf1f6}.grid text{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.actions{display:flex;flex-wrap:wrap;justify-content:flex-end;gap:12rpx;padding-top:16rpx}.actions button{min-height:50rpx;padding:0 16rpx;margin:0;color:#1769d8;font-size:22rpx;line-height:48rpx;background:#f5f8ff;border:1rpx solid #8ab3ee;border-radius:8rpx}.actions .danger{color:#c65050;background:#fff7f7;border-color:#e3a0a0}.more,.state{display:block;padding:35rpx;color:#8795a8;font-size:26rpx;text-align:center}.error{color:#c3654d}.fab{position:fixed;right:30rpx;bottom:calc(32rpx + env(safe-area-inset-bottom));display:flex;align-items:center;justify-content:center;width:132rpx;height:132rpx;min-height:132rpx;padding:0;margin:0;background:#1769d8;border-radius:50%;box-shadow:0 12rpx 24rpx rgba(23,105,216,.3)}.fab view{width:38rpx;height:38rpx;background:linear-gradient(#fff,#fff) center/38rpx 8rpx no-repeat,linear-gradient(#fff,#fff) center/8rpx 38rpx no-repeat}.fab view::before,.fab view::after{display:none;content:none}.mask{position:fixed;left:0;right:0;top:0;bottom:0;z-index:50;display:flex;align-items:flex-end;background:rgba(0,0,0,.35)}.modal{width:100%;max-height:86vh;overflow:auto;padding-bottom:24rpx;background:#fff;border-radius:24rpx 24rpx 0 0}.modal-title{height:88rpx;line-height:88rpx;color:#1d2f46;font-size:30rpx;font-weight:600;text-align:center;border-bottom:1rpx solid #eef1f5}.field{display:flex;align-items:center;min-height:92rpx;padding:0 24rpx;gap:20rpx;border-bottom:1rpx solid #eef1f5}.field>text:first-child{width:180rpx;flex:none;color:#33455d;font-size:26rpx}.required{color:#e64340}.field>picker{display:block;flex:1;min-width:0}.field input,.picker,.value{min-width:0;flex:1;color:#1e3049;font-size:26rpx;text-align:right}.picker{display:flex;width:100%;align-items:center;justify-content:space-between;gap:12rpx;color:#65758a}.picker text:first-child,.value{min-width:0;flex:1;overflow:hidden;text-align:right;text-overflow:ellipsis;white-space:nowrap}.picker text:last-child{flex:none;width:24rpx;color:#8092a7;font-size:34rpx;text-align:right}.code-field input{flex:1}.code-field button{flex:none;min-width:132rpx;padding:0 14rpx;margin:0;color:#1769d8;font-size:23rpx;line-height:54rpx;background:#fff;border:1rpx solid #1769d8;border-radius:8rpx}.column{align-items:flex-start;flex-direction:column;padding:18rpx 24rpx}.column>text:first-child{width:auto}.column textarea{width:100%;height:118rpx;font-size:26rpx}.modal-actions{display:flex;gap:18rpx;padding:24rpx}.modal-actions button{flex:1;margin:0;color:#1769d8;background:#edf5ff;border-radius:12rpx}.modal-actions .primary{color:#fff;background:#1769d8}button::after{border:0} |
| | | </style> |