1、整理APP端主题变量,统一主色、浅色背景、边框色、页面背景及卡片背景等公共样式
2、排查APP端列表分页情况,区分主列表分页与下拉选择器数据请求
3、补齐考勤记录、考勤异常、考勤汇总、员工社保档案、薪酬核算、薪资发放、班次、节假日、考勤规则、备件台账、领用记录及工序流转等页面分页
| | |
| | | <script setup lang="ts"> |
| | | import { onHide, onShow } from '@dcloudio/uni-app'; |
| | | import { onHide, onLaunch, onShow } from '@dcloudio/uni-app'; |
| | | |
| | | import { restoreTheme } from './stores/theme'; |
| | | |
| | | onLaunch(() => { |
| | | restoreTheme(); |
| | | }); |
| | | |
| | | onShow(() => { |
| | | restoreTheme(); |
| | | console.info('[App] åºç¨è¿å
¥åå°'); |
| | | }); |
| | | |
| | |
| | | </script> |
| | | |
| | | <style lang="scss"> |
| | | /* #ifdef H5 */ |
| | | :root { |
| | | --color-primary: #1769d8; |
| | | --color-primary-dark: #0f54b8; |
| | | --color-primary-light: #4b8ee8; |
| | | --color-primary-soft: #eef5ff; |
| | | --color-primary-border: #bfdbff; |
| | | --color-bg-page: #f6f7f9; |
| | | --color-bg-card: #ffffff; |
| | | --color-text-primary: #202c3d; |
| | | --color-text-secondary: #65758b; |
| | | --color-text-muted: #8a96a8; |
| | | --color-border: #e5eaf0; |
| | | } |
| | | /* #endif */ |
| | | |
| | | /* #ifndef H5 */ |
| | | page { |
| | | --color-primary: #1769d8; |
| | | --color-primary-dark: #0f54b8; |
| | | --color-primary-light: #4b8ee8; |
| | | --color-primary-soft: #eef5ff; |
| | | --color-primary-border: #bfdbff; |
| | | --color-bg-page: #f6f7f9; |
| | | --color-bg-card: #ffffff; |
| | | --color-text-primary: #202c3d; |
| | | --color-text-secondary: #65758b; |
| | | --color-text-muted: #8a96a8; |
| | | --color-border: #e5eaf0; |
| | | } |
| | | /* #endif */ |
| | | |
| | | page { |
| | | min-height: 100%; |
| | | color: #202c3d; |
| | | background: #f6f7f9; |
| | | color: var(--color-text-primary, #202c3d); |
| | | background: var(--color-bg-page, #f6f7f9); |
| | | font-family: -apple-system, BlinkMacSystemFont, 'PingFang SC', 'Microsoft YaHei', sans-serif; |
| | | font-size: 28rpx; |
| | | line-height: 1.5; |
| | |
| | | height: 36rpx !important; |
| | | min-height: 36rpx; |
| | | padding: 4rpx 12rpx !important; |
| | | color: #1769d8 !important; |
| | | color: var(--color-primary, #1769d8) !important; |
| | | font-size: 22rpx !important; |
| | | line-height: 1.2 !important; |
| | | background: #eef5ff !important; |
| | | border: 1rpx solid #bfdbff !important; |
| | | background: var(--color-primary-soft, #eef5ff) !important; |
| | | border: 1rpx solid var(--color-primary-border, #bfdbff) !important; |
| | | border-radius: 999rpx !important; |
| | | white-space: nowrap; |
| | | word-break: keep-all; |
| | |
| | | text.status.tag-approved, |
| | | text.tag.tag-approved, |
| | | .tags text.tag-approved { |
| | | color: #1769d8 !important; |
| | | background: #edf5ff !important; |
| | | border-color: #bfdbff !important; |
| | | color: var(--color-primary, #1769d8) !important; |
| | | background: var(--color-primary-soft, #edf5ff) !important; |
| | | border-color: var(--color-primary-border, #bfdbff) !important; |
| | | } |
| | | |
| | | text.status.tag-ok, |
| | |
| | | color: #8092a7 !important; |
| | | font-size: 34rpx !important; |
| | | line-height: 1 !important; |
| | | } |
| | | |
| | | /* å°ç¨åºç«¯ä¸ä¼å¯é å°ä¸ºç»å¯¹å®ä½ä¼ªå
ç´ è¡¥é½éæä½ç½®ï¼æç¡®é宿µ®å¨æ°å¢æé®ç两æ¡çº¿ã */ |
| | | .fab > view::before { |
| | | top: 17rpx !important; |
| | | left: 0 !important; |
| | | } |
| | | |
| | | .fab > view::after { |
| | | top: 0 !important; |
| | | left: 17rpx !important; |
| | | } |
| | | |
| | | .safe-top { padding-top: calc(30rpx + env(safe-area-inset-top)); } |
| | |
| | | import { onShow } from "@dcloudio/uni-app"; |
| | | |
| | | import { useNotify } from "../stores/notify"; |
| | | import { useAppTheme } from "../stores/theme"; |
| | | |
| | | const currentPath = ref(""); |
| | | const { hasUnread, unreadLabel, refreshUnreadCount } = useNotify(); |
| | | const { primaryColor } = useAppTheme(); |
| | | |
| | | const tabs = [ |
| | | { |
| | |
| | | :key="tab.path" |
| | | class="tab-item" |
| | | :class="{ active: activePath === tab.path }" |
| | | :style="activePath === tab.path ? { color: primaryColor } : undefined" |
| | | @click="switchTab(tab.path)"> |
| | | <view class="icon"> |
| | | <image class="icon-image" |
| | |
| | | font-size: 20rpx; |
| | | } |
| | | .tab-item.active { |
| | | color: #1769d8; |
| | | color: var(--color-primary, #1769d8); |
| | | font-weight: 600; |
| | | } |
| | | .icon { |
| | |
| | | } |
| | | </script> |
| | | <template><view class="attachments"><view class="attachment-head"><text>éä»¶</text><button v-if="!readonly" :loading="uploading" @click="addFiles">æ·»å éä»¶</button></view><view v-for="(file,index) in files" :key="file.id" class="file"><text class="file-name" @click="preview(file)">{{ file.name || `éä»¶ ${index+1}` }}</text><text v-if="!readonly" @click="remove(index)">å é¤</text></view><text v-if="!files.length" class="empty">ææ éä»¶</text></view></template> |
| | | <style scoped lang="scss">.attachments{padding:20rpx 24rpx}.attachment-head,.file{display:flex;align-items:center;justify-content:space-between;gap:20rpx}.attachment-head{color:#33455d;font-size:27rpx}.attachment-head button{width:150rpx;height:56rpx;margin:0;color:#1769d8;font-size:23rpx;line-height:54rpx;background:#f3f7fd;border:1rpx solid #b9d1f2}.attachment-head button::after{border:0}.file{padding:14rpx 0;color:#526780;font-size:24rpx}.file-name{min-width:0;flex:1;overflow:hidden;color:#1769d8;text-decoration:underline;text-overflow:ellipsis;white-space:nowrap}.file text:last-child{flex:none;color:#cf4d4d}.empty{display:block;margin-top:14rpx;color:#9aa7b8;font-size:24rpx}</style> |
| | | <style scoped lang="scss">.attachments{padding:20rpx 24rpx}.attachment-head,.file{display:flex;align-items:center;justify-content:space-between;gap:20rpx}.attachment-head{color:#33455d;font-size:27rpx}.attachment-head button{width:150rpx;height:56rpx;margin:0;color:var(--color-primary, #1769d8);font-size:23rpx;line-height:54rpx;background:#f3f7fd;border:1rpx solid #b9d1f2}.attachment-head button::after{border:0}.file{padding:14rpx 0;color:#526780;font-size:24rpx}.file-name{min-width:0;flex:1;overflow:hidden;color:var(--color-primary, #1769d8);text-decoration:underline;text-overflow:ellipsis;white-space:nowrap}.file text:last-child{flex:none;color:#cf4d4d}.empty{display:block;margin-top:14rpx;color:#9aa7b8;font-size:24rpx}</style> |
| | |
| | | .page{min-height:100vh;padding:24rpx 30rpx 70rpx;box-sizing:border-box;background:#f6f7f9}.section-title{padding:18rpx 6rpx 12rpx;color:#728197;font-size:23rpx}.form-card,.detail-card{overflow:hidden;margin-bottom:20rpx;background:#fff;border-radius:14rpx}.field{display:flex;align-items:center;min-height:96rpx;padding:0 24rpx;gap:18rpx;border-bottom:1rpx solid #eef1f5}.field>text:first-child{width:205rpx;flex:none;color:#33455d;font-size:27rpx}.field input,.field picker,.picker,.value{min-width:0;flex:1;color:#1e3049;font-size:27rpx}.field input,.value{text-align:right}.picker{display:flex;width:100%;align-items:center;justify-content:flex-end;gap:10rpx}.picker text:first-child{min-width:0;overflow:hidden;text-align:right;text-overflow:ellipsis;white-space:nowrap}.picker text:last-child{color:#8092a7;font-size:36rpx}.column{align-items:flex-start;flex-direction:column;padding:20rpx 24rpx}.column>text:first-child{width:auto}.column textarea{width:100%;height:150rpx;font-size:27rpx}.required::before{content:"*";margin-right:6rpx;color:#e23b3b}.save{margin-top:32rpx;color:#fff;background:#1769d8;border-radius:10rpx}.save::after{border:0}.state{padding:38rpx;color:#8795a8;text-align:center}.item{padding:20rpx 24rpx;border-bottom:1rpx solid #eef1f5}.item-head{display:flex;align-items:center;justify-content:space-between;color:#20334c;font-size:27rpx;font-weight:600}.item-sub{display:block;margin-top:8rpx;color:#75859a;font-size:23rpx}.item-grid{display:grid;grid-template-columns:1fr 1fr;gap:14rpx;margin-top:16rpx}.item-grid input{height:68rpx;padding:0 14rpx;font-size:24rpx;text-align:right;background:#f6f8fb;border-radius:8rpx}.checks{display:flex;gap:26rpx;margin-top:16rpx;color:#526780;font-size:24rpx}.mini{height:52rpx;padding:0 16rpx;margin:0;color:#1769d8;font-size:22rpx;line-height:50rpx;background:#f5f8ff;border:1rpx solid #8ab3ee;border-radius:8rpx}.mini.danger{color:#c65050;border-color:#e3a0a0}.mini::after{border:0}.detail-row{display:flex;justify-content:space-between;gap:24rpx;padding:18rpx 24rpx;color:#64758a;font-size:25rpx;border-bottom:1rpx solid #eef1f5}.detail-row text:last-child{color:#20334c;text-align:right}.toolbar{display:flex;flex-wrap:wrap;justify-content:flex-end;gap:12rpx;padding:18rpx 0}.toolbar button{min-height:58rpx;padding:0 20rpx;margin:0;color:#1769d8;font-size:24rpx;line-height:56rpx;background:#fff;border:1rpx solid #8ab3ee;border-radius:8rpx}.toolbar .danger{color:#c65050;border-color:#e3a0a0}.toolbar button::after{border:0} |
| | | .page{min-height:100vh;padding:24rpx 30rpx 70rpx;box-sizing:border-box;background:#f6f7f9}.section-title{padding:18rpx 6rpx 12rpx;color:#728197;font-size:23rpx}.form-card,.detail-card{overflow:hidden;margin-bottom:20rpx;background:#fff;border-radius:14rpx}.field{display:flex;align-items:center;min-height:96rpx;padding:0 24rpx;gap:18rpx;border-bottom:1rpx solid #eef1f5}.field>text:first-child{width:205rpx;flex:none;color:#33455d;font-size:27rpx}.field input,.field picker,.picker,.value{min-width:0;flex:1;color:#1e3049;font-size:27rpx}.field input,.value{text-align:right}.picker{display:flex;width:100%;align-items:center;justify-content:flex-end;gap:10rpx}.picker text:first-child{min-width:0;overflow:hidden;text-align:right;text-overflow:ellipsis;white-space:nowrap}.picker text:last-child{color:#8092a7;font-size:36rpx}.column{align-items:flex-start;flex-direction:column;padding:20rpx 24rpx}.column>text:first-child{width:auto}.column textarea{width:100%;height:150rpx;font-size:27rpx}.required::before{content:"*";margin-right:6rpx;color:#e23b3b}.save{margin-top:32rpx;color:#fff;background:var(--color-primary, #1769d8);border-radius:10rpx}.save::after{border:0}.state{padding:38rpx;color:#8795a8;text-align:center}.item{padding:20rpx 24rpx;border-bottom:1rpx solid #eef1f5}.item-head{display:flex;align-items:center;justify-content:space-between;color:#20334c;font-size:27rpx;font-weight:600}.item-sub{display:block;margin-top:8rpx;color:#75859a;font-size:23rpx}.item-grid{display:grid;grid-template-columns:1fr 1fr;gap:14rpx;margin-top:16rpx}.item-grid input{height:68rpx;padding:0 14rpx;font-size:24rpx;text-align:right;background:#f6f8fb;border-radius:8rpx}.checks{display:flex;gap:26rpx;margin-top:16rpx;color:#526780;font-size:24rpx}.mini{height:52rpx;padding:0 16rpx;margin:0;color:var(--color-primary, #1769d8);font-size:22rpx;line-height:50rpx;background:var(--color-primary-soft, #f5f8ff);border:1rpx solid var(--color-primary-border, #8ab3ee);border-radius:8rpx}.mini.danger{color:#c65050;border-color:#e3a0a0}.mini::after{border:0}.detail-row{display:flex;justify-content:space-between;gap:24rpx;padding:18rpx 24rpx;color:#64758a;font-size:25rpx;border-bottom:1rpx solid #eef1f5}.detail-row text:last-child{color:#20334c;text-align:right}.toolbar{display:flex;flex-wrap:wrap;justify-content:flex-end;gap:12rpx;padding:18rpx 0}.toolbar button{min-height:58rpx;padding:0 20rpx;margin:0;color:var(--color-primary, #1769d8);font-size:24rpx;line-height:56rpx;background:#fff;border:1rpx solid var(--color-primary-border, #8ab3ee);border-radius:8rpx}.toolbar .danger{color:#c65050;border-color:#e3a0a0}.toolbar button::after{border:0} |
| | | |
| | |
| | | .page{min-height:100vh;padding:20rpx 30rpx 150rpx;box-sizing:border-box;background:#f3f6fb} |
| | | .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} |
| | | .page{min-height:100vh;padding: 20rpx 30rpx 132rpx;box-sizing:border-box;background:#f3f6fb} |
| | | .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:var(--color-primary, #1769d8);font-weight:600;border-bottom:4rpx solid var(--color-primary, #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:var(--color-primary, #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} |
| | | .tag{display:inline-flex;flex:none;align-items:center;height:42rpx;padding:0 15rpx;font-size:22rpx;border-radius:999rpx}.tag-blue{color:var(--color-primary, #1769d8);background:var(--color-primary-soft, #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} |
| | | .grid{display:grid;grid-template-columns:1fr 1fr;gap:11rpx;padding:16rpx 0;margin-top:15rpx;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} |
| | | .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:var(--color-primary, #1769d8);font-size:22rpx;line-height:48rpx;background:var(--color-primary-soft, #f5f8ff);border:1rpx solid var(--color-primary-border, #8ab3ee);border-radius:8rpx}.actions .danger{color:#c65050;background:#fff7f7;border-color:#e3a0a0}.actions button::after,.fab::after{border:0} |
| | | .state,.more{display:block;padding:45rpx 0;color:#8795a8;font-size:26rpx;text-align:center}.error{color:#c65050} |
| | | .fab{position:fixed;right:32rpx;bottom:56rpx;display:flex;width:100rpx;height:100rpx;align-items:center;justify-content:center;padding:0;margin:0;background:#1769d8;border-radius:50%;box-shadow:0 14rpx 28rpx rgba(23,105,216,.32)}.fab view{position:relative;width:38rpx;height:38rpx}.fab view::before,.fab view::after{position:absolute;content:"";background:#fff}.fab view::before{top:17rpx;width:38rpx;height:4rpx}.fab view::after{left:17rpx;width:4rpx;height:38rpx} |
| | | .fab{position:fixed;right:32rpx;bottom:56rpx;display:flex;width:100rpx;height:100rpx;align-items:center;justify-content:center;padding:0;margin:0;background:var(--color-primary, #1769d8);border-radius:50%;box-shadow:0 14rpx 28rpx rgba(23,105,216,.32)}.fab view{position:relative;width:38rpx;height:38rpx}.fab view::before,.fab view::after{position:absolute;content:"";background:#fff}.fab view::before{top:17rpx;width:38rpx;height:4rpx}.fab view::after{left:17rpx;width:4rpx;height:38rpx} |
| | |
| | | |
| | | <style scoped lang="scss"> |
| | | @import "../form.scss"; |
| | | .link { color: #1769d8 !important; text-decoration: underline; } |
| | | .link { color: var(--color-primary, #1769d8) !important; text-decoration: underline; } |
| | | </style> |
| | |
| | | .page{min-height:100vh;padding:24rpx 30rpx 70rpx;box-sizing:border-box;background:#f6f7f9}.form-card{overflow:hidden;background:#fff;border-radius:16rpx}.field{display:flex;align-items:center;min-height:96rpx;padding:0 24rpx;gap:18rpx;border-bottom:1rpx solid #eef1f5}.field>text:first-child{width:210rpx;flex:none;color:#33455d;font-size:27rpx}.field input,.field picker,.picker,.value{min-width:0;flex:1;color:#1e3049;font-size:27rpx}.field input,.value{text-align:right}.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{color:#8092a7;font-size:36rpx}.column{align-items:flex-start;flex-direction:column;padding:20rpx 24rpx}.column>text:first-child{width:auto}.column textarea{width:100%;height:150rpx;font-size:27rpx}.required{color:#e23b3b}.save{margin-top:32rpx;color:#fff;background:#1769d8;border-radius:12rpx}.save::after{border:0}.state{padding:38rpx;color:#8795a8;text-align:center} |
| | | .page{min-height:100vh;padding:24rpx 30rpx 70rpx;box-sizing:border-box;background:#f6f7f9}.form-card{overflow:hidden;background:#fff;border-radius:16rpx}.field{display:flex;align-items:center;min-height:96rpx;padding:0 24rpx;gap:18rpx;border-bottom:1rpx solid #eef1f5}.field>text:first-child{width:210rpx;flex:none;color:#33455d;font-size:27rpx}.field input,.field picker,.picker,.value{min-width:0;flex:1;color:#1e3049;font-size:27rpx}.field input,.value{text-align:right}.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{color:#8092a7;font-size:36rpx}.column{align-items:flex-start;flex-direction:column;padding:20rpx 24rpx}.column>text:first-child{width:auto}.column textarea{width:100%;height:150rpx;font-size:27rpx}.required{color:#e23b3b}.save{margin-top:32rpx;color:#fff;background:var(--color-primary, #1769d8);border-radius:12rpx}.save::after{border:0}.state{padding:38rpx;color:#8795a8;text-align:center} |
| | |
| | | </view> |
| | | </template> |
| | | <style lang="scss" scoped> |
| | | .page{min-height:100vh;padding:24rpx 30rpx 60rpx;box-sizing:border-box;background:#f3f6fb}.query-card,.result-card{padding:24rpx;margin-bottom:18rpx;background:#fff;border-radius:16rpx;box-shadow:0 8rpx 22rpx rgba(43,69,107,.07)}.title{display:block;margin-bottom:18rpx;color:#20334c;font-size:30rpx;font-weight:700}.query-card textarea{width:100%;height:180rpx;padding:18rpx;box-sizing:border-box;font-size:26rpx;background:#f7f9fc;border-radius:10rpx}.params{display:grid;grid-template-columns:1fr 1fr;gap:18rpx;margin:18rpx 0}.params label{display:flex;align-items:center;gap:10rpx;color:#64758b;font-size:24rpx}.params input{min-width:0;height:60rpx;flex:1;text-align:center;background:#f7f9fc;border-radius:8rpx}.query-card button{color:#fff;background:#1769d8;border-radius:10rpx}.query-card button::after{border:0}.result-head{display:flex;justify-content:space-between;color:#1769d8;font-size:26rpx;font-weight:700}.document{display:block;margin-top:12rpx;color:#76869a;font-size:23rpx}.content{display:block;margin-top:14rpx;color:#334a65;font-size:26rpx;line-height:1.6}.meta{display:flex;justify-content:space-between;padding-top:16rpx;margin-top:16rpx;color:#8795a8;font-size:22rpx;border-top:1rpx solid #edf1f6}.empty{padding:60rpx;color:#8795a8;text-align:center} |
| | | .page{min-height:100vh;padding:24rpx 30rpx 60rpx;box-sizing:border-box;background:#f3f6fb}.query-card,.result-card{padding:24rpx;margin-bottom:18rpx;background:#fff;border-radius:16rpx;box-shadow:0 8rpx 22rpx rgba(43,69,107,.07)}.title{display:block;margin-bottom:18rpx;color:#20334c;font-size:30rpx;font-weight:700}.query-card textarea{width:100%;height:180rpx;padding:18rpx;box-sizing:border-box;font-size:26rpx;background:#f7f9fc;border-radius:10rpx}.params{display:grid;grid-template-columns:1fr 1fr;gap:18rpx;margin:18rpx 0}.params label{display:flex;align-items:center;gap:10rpx;color:#64758b;font-size:24rpx}.params input{min-width:0;height:60rpx;flex:1;text-align:center;background:#f7f9fc;border-radius:8rpx}.query-card button{color:#fff;background:var(--color-primary, #1769d8);border-radius:10rpx}.query-card button::after{border:0}.result-head{display:flex;justify-content:space-between;color:var(--color-primary, #1769d8);font-size:26rpx;font-weight:700}.document{display:block;margin-top:12rpx;color:#76869a;font-size:23rpx}.content{display:block;margin-top:14rpx;color:#334a65;font-size:26rpx;line-height:1.6}.meta{display:flex;justify-content:space-between;padding-top:16rpx;margin-top:16rpx;color:#8795a8;font-size:22rpx;border-top:1rpx solid #edf1f6}.empty{padding:60rpx;color:#8795a8;text-align:center} |
| | | </style> |
| | |
| | | .page{min-height:100vh;padding:20rpx 30rpx 150rpx;box-sizing:border-box;background:#f3f6fb}.search{display:flex;align-items:center;height:80rpx;padding:0 20rpx;margin-bottom:18rpx;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}.card{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:700;text-overflow:ellipsis;white-space:nowrap}.tag{flex:none;padding:6rpx 16rpx;font-size:22rpx;border-radius:999rpx}.tag-on{color:#0e9663;background:#e9fbf2;border:1rpx solid #b8eed4}.tag-off{color:#66778c;background:#f6f8fb;border:1rpx solid #dce4ee}.tags{display:flex;gap:10rpx;margin-top:14rpx}.tags text{padding:5rpx 13rpx;font-size:21rpx;border-radius:999rpx}.tag-blue{color:#1769d8;background:#eef6ff}.tag-orange{color:#c78210;background:#fff5e6}.summary{margin-top:14rpx;padding:14rpx;color:#596b82;font-size:24rpx;line-height:1.5;background:#f7faff;border-radius:10rpx}.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.two{grid-template-columns:1fr 1fr}.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}.state,.more{display:block;padding:45rpx 0;color:#8795a8;font-size:26rpx;text-align:center}.error{color:#c65050}.fab{position:fixed;right:32rpx;bottom:56rpx;display:flex;width:100rpx;height:100rpx;align-items:center;justify-content:center;padding:0;margin:0;background:#1769d8;border-radius:50%;box-shadow:0 14rpx 28rpx rgba(23,105,216,.32)}.fab view{position:relative;width:38rpx;height:38rpx}.fab view::before,.fab view::after{position:absolute;content:"";background:#fff;border-radius:3rpx}.fab view::before{top:17rpx;left:0;width:38rpx;height:4rpx}.fab view::after{top:0;left:17rpx;width:4rpx;height:38rpx} |
| | | .page{min-height:100vh;padding: 20rpx 30rpx 132rpx;box-sizing:border-box;background:#f3f6fb}.search{display:flex;align-items:center;height:80rpx;padding:0 20rpx;margin-bottom:18rpx;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:var(--color-primary, #1769d8);font-size:24rpx}.card{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:700;text-overflow:ellipsis;white-space:nowrap}.tag{flex:none;padding:6rpx 16rpx;font-size:22rpx;border-radius:999rpx}.tag-on{color:#0e9663;background:#e9fbf2;border:1rpx solid #b8eed4}.tag-off{color:#66778c;background:#f6f8fb;border:1rpx solid #dce4ee}.tags{display:flex;gap:10rpx;margin-top:14rpx}.tags text{padding:5rpx 13rpx;font-size:21rpx;border-radius:999rpx}.tag-blue{color:var(--color-primary, #1769d8);background:var(--color-primary-soft, #eef6ff)}.tag-orange{color:#c78210;background:#fff5e6}.summary{margin-top:14rpx;padding:14rpx;color:#596b82;font-size:24rpx;line-height:1.5;background:#f7faff;border-radius:10rpx}.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.two{grid-template-columns:1fr 1fr}.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:var(--color-primary, #1769d8);font-size:22rpx;line-height:48rpx;background:var(--color-primary-soft, #f5f8ff);border:1rpx solid var(--color-primary-border, #8ab3ee);border-radius:8rpx}.actions .danger{color:#c65050;background:#fff7f7;border-color:#e3a0a0}.actions button::after,.fab::after{border:0}.state,.more{display:block;padding:45rpx 0;color:#8795a8;font-size:26rpx;text-align:center}.error{color:#c65050}.fab{position:fixed;right:32rpx;bottom:56rpx;display:flex;width:100rpx;height:100rpx;align-items:center;justify-content:center;padding:0;margin:0;background:var(--color-primary, #1769d8);border-radius:50%;box-shadow:0 14rpx 28rpx rgba(23,105,216,.32)}.fab view{position:relative;width:38rpx;height:38rpx}.fab view::before,.fab view::after{position:absolute;content:"";background:#fff;border-radius:3rpx}.fab view::before{top:17rpx;left:0;width:38rpx;height:4rpx}.fab view::after{top:0;left:17rpx;width:4rpx;height:38rpx} |
| | |
| | | min-width: 136rpx; |
| | | margin: 0; |
| | | padding: 0 16rpx; |
| | | color: #1769d8; |
| | | color: var(--color-primary, #1769d8); |
| | | background: #fff; |
| | | border: 1rpx solid #1769d8; |
| | | border: 1rpx solid var(--color-primary, #1769d8); |
| | | border-radius: 8rpx; |
| | | font-size: 24rpx; |
| | | line-height: 56rpx; |
| | |
| | | .save { |
| | | margin-top: 32rpx; |
| | | color: #fff; |
| | | background: #1769d8; |
| | | background: var(--color-primary, #1769d8); |
| | | border-radius: 12rpx; |
| | | font-size: 30rpx; |
| | | } |
| | |
| | | min-height: 0; |
| | | height: 0; |
| | | flex: 1; |
| | | padding-bottom: 150rpx; |
| | | padding-bottom: 132rpx; |
| | | box-sizing: border-box; |
| | | } |
| | | .row-main, |
| | |
| | | } |
| | | .search text { |
| | | font-size: 24rpx; |
| | | color: #1769d8; |
| | | color: var(--color-primary, #1769d8); |
| | | } |
| | | .actions button { |
| | | min-height: 52rpx; |
| | | padding: 0 14rpx; |
| | | margin: 0; |
| | | color: #1769d8; |
| | | color: var(--color-primary, #1769d8); |
| | | font-size: 23rpx; |
| | | font-weight: 600; |
| | | line-height: 50rpx; |
| | | background: #f5f8ff; |
| | | border: 1rpx solid #8ab3ee; |
| | | background: var(--color-primary-soft, #f5f8ff); |
| | | border: 1rpx solid var(--color-primary-border, #8ab3ee); |
| | | border-radius: 8rpx; |
| | | } |
| | | .tools button::after, |
| | |
| | | flex-direction: column; |
| | | align-items: center; |
| | | justify-content: center; |
| | | width: 132rpx; |
| | | height: 132rpx; |
| | | min-height: 132rpx; |
| | | width: 104rpx; height: 104rpx; min-height: 104rpx; |
| | | padding: 0; |
| | | margin: 0; |
| | | color: #fff; |
| | | font-size: 25rpx; |
| | | font-weight: 600; |
| | | line-height: 32rpx; |
| | | background: #1769d8; |
| | | background: var(--color-primary, #1769d8); |
| | | border-radius: 50%; |
| | | box-shadow: 0 12rpx 24rpx rgba(23, 105, 216, 0.3); |
| | | } |
| | |
| | | .save { |
| | | margin-top: 32rpx; |
| | | color: #fff; |
| | | background: #1769d8; |
| | | background: var(--color-primary, #1769d8); |
| | | border-radius: 12rpx; |
| | | font-size: 30rpx; |
| | | } |
| | |
| | | min-height: 0; |
| | | height: 0; |
| | | flex: 1; |
| | | padding-bottom: 150rpx; |
| | | padding-bottom: 132rpx; |
| | | box-sizing: border-box; |
| | | } |
| | | .main, |
| | |
| | | } |
| | | .search text { |
| | | font-size: 24rpx; |
| | | color: #1769d8; |
| | | color: var(--color-primary, #1769d8); |
| | | } |
| | | .list { |
| | | background: transparent; |
| | |
| | | min-height: 56rpx; |
| | | padding: 0 18rpx; |
| | | margin: 0; |
| | | color: #1769d8; |
| | | color: var(--color-primary, #1769d8); |
| | | font-size: 24rpx; |
| | | font-weight: 600; |
| | | line-height: 54rpx; |
| | | background: #f5f8ff; |
| | | border: 1rpx solid #8ab3ee; |
| | | background: var(--color-primary-soft, #f5f8ff); |
| | | border: 1rpx solid var(--color-primary-border, #8ab3ee); |
| | | border-radius: 10rpx; |
| | | } |
| | | .actions button::after, |
| | |
| | | width: 220rpx; |
| | | margin: 20rpx auto; |
| | | color: #fff; |
| | | background: #1769d8; |
| | | background: var(--color-primary, #1769d8); |
| | | border-radius: 12rpx; |
| | | } |
| | | .create-fab { |
| | |
| | | flex-direction: column; |
| | | align-items: center; |
| | | justify-content: center; |
| | | width: 132rpx; |
| | | height: 132rpx; |
| | | min-height: 132rpx; |
| | | width: 104rpx; height: 104rpx; min-height: 104rpx; |
| | | padding: 0; |
| | | margin: 0; |
| | | color: #fff; |
| | | font-size: 25rpx; |
| | | font-weight: 600; |
| | | line-height: 32rpx; |
| | | background: #1769d8; |
| | | background: var(--color-primary, #1769d8); |
| | | border-radius: 50%; |
| | | box-shadow: 0 12rpx 24rpx rgba(23, 105, 216, 0.3); |
| | | } |
| | |
| | | onLoad(async query => { id.value = query.id ? Number(query.id) : undefined; if (!id.value || !state.accessToken) return; try { Object.assign(form, await getMeasureUnit(state.accessToken, id.value)); } catch (error) { uni.showToast({ title: error instanceof Error ? error.message : 'æ°æ®å 载失败', icon: 'none' }); } }); |
| | | </script> |
| | | <template><view class="page"><view class="form-card"><view class="field"><text>åä½ç¼ç <text class="required">*</text></text><input v-model="form.code" placeholder="请è¾å
¥åä½ç¼ç " /></view><view class="field"><text>åä½åç§° <text class="required">*</text></text><input v-model="form.name" placeholder="请è¾å
¥åä½åç§°" /></view><view class="field"><text>ç¶æ</text><radio-group @change="form.status = Number($event.detail.value)"><label><radio :checked="form.status === 0" value="0" />å¯ç¨</label><label><radio :checked="form.status === 1" value="1" />åç¨</label></radio-group></view><view class="field column"><text>夿³¨</text><textarea v-model="form.remark" placeholder="请è¾å
¥å¤æ³¨" ></textarea></view></view><button class="save" :loading="saving" :disabled="saving" @click="save">ä¿å</button></view></template> |
| | | <style lang="scss" scoped>.page{min-height:100vh;padding:24rpx 30rpx 70rpx;background:#f6f7f9}.form-card{background:#fff;border-radius:16rpx;overflow:hidden}.field{display:flex;align-items:center;min-height:96rpx;padding:0 24rpx;border-bottom:1rpx solid #eef1f5;gap:20rpx}.field>text{width:180rpx;color:#33455d;font-size:27rpx}.field input{flex:1;color:#1e3049;font-size:27rpx}.field radio-group{flex:1;display:flex;gap:30rpx;font-size:26rpx}.column{align-items:flex-start;flex-direction:column;padding:20rpx 24rpx}.column>text{width:auto}.column textarea{width:100%;height:130rpx;font-size:27rpx}.save{margin-top:32rpx;color:#fff;background:#1769d8;border-radius:12rpx;font-size:30rpx}.save::after{border:0}</style> |
| | | <style lang="scss" scoped>.page{min-height:100vh;padding:24rpx 30rpx 70rpx;background:#f6f7f9}.form-card{background:#fff;border-radius:16rpx;overflow:hidden}.field{display:flex;align-items:center;min-height:96rpx;padding:0 24rpx;border-bottom:1rpx solid #eef1f5;gap:20rpx}.field>text{width:180rpx;color:#33455d;font-size:27rpx}.field input{flex:1;color:#1e3049;font-size:27rpx}.field radio-group{flex:1;display:flex;gap:30rpx;font-size:26rpx}.column{align-items:flex-start;flex-direction:column;padding:20rpx 24rpx}.column>text{width:auto}.column textarea{width:100%;height:130rpx;font-size:27rpx}.save{margin-top:32rpx;color:#fff;background:var(--color-primary, #1769d8);border-radius:12rpx;font-size:30rpx}.save::after{border:0}</style> |
| | |
| | | min-height: 0; |
| | | height: 0; |
| | | flex: 1; |
| | | padding-bottom: 150rpx; |
| | | padding-bottom: 132rpx; |
| | | box-sizing: border-box; |
| | | } |
| | | .row-head, |
| | |
| | | } |
| | | .search text { |
| | | font-size: 24rpx; |
| | | color: #1769d8; |
| | | color: var(--color-primary, #1769d8); |
| | | } |
| | | .list { |
| | | display: grid; |
| | |
| | | min-height: 50rpx; |
| | | padding: 0 14rpx; |
| | | margin: 0; |
| | | color: #1769d8; |
| | | color: var(--color-primary, #1769d8); |
| | | font-size: 22rpx; |
| | | font-weight: 600; |
| | | line-height: 48rpx; |
| | | background: #f5f8ff; |
| | | border: 1rpx solid #8ab3ee; |
| | | background: var(--color-primary-soft, #f5f8ff); |
| | | border: 1rpx solid var(--color-primary-border, #8ab3ee); |
| | | border-radius: 10rpx; |
| | | } |
| | | .actions button::after, |
| | |
| | | flex-direction: column; |
| | | align-items: center; |
| | | justify-content: center; |
| | | width: 132rpx; |
| | | height: 132rpx; |
| | | min-height: 132rpx; |
| | | width: 104rpx; height: 104rpx; min-height: 104rpx; |
| | | padding: 0; |
| | | margin: 0; |
| | | color: #fff; |
| | | font-size: 25rpx; |
| | | font-weight: 600; |
| | | line-height: 32rpx; |
| | | background: #1769d8; |
| | | background: var(--color-primary, #1769d8); |
| | | border-radius: 50%; |
| | | box-shadow: 0 12rpx 24rpx rgba(23, 105, 216, 0.3); |
| | | } |
| | |
| | | async function save(){ if(saving.value||!canSave.value)return; if(!state.accessToken)return; if(!form.name){toast("请填åé
ç½®åç§°");return;} saving.value=true; try{ if(id.value)await updateBusinessAttach(state.accessToken,form); else await createBusinessAttach(state.accessToken,form); uni.showToast({title:"å·²ä¿å",icon:"success"}); setTimeout(()=>uni.navigateBack(),500);}catch(e){toast(e instanceof Error?e.message:"ä¿å失败");}finally{saving.value=false}} |
| | | </script> |
| | | <template><view class="page"><view class="card"><view class="field"><text>é
ç½®åç§° <text class="required">*</text></text><input v-model="form.name" :disabled="!canSave" placeholder="请è¾å
¥é
ç½®åç§°"/></view><view class="field"><text>é
ç½®ç¼ç </text><input v-model="form.code" :disabled="!canSave" placeholder="请è¾å
¥é
ç½®ç¼ç "/></view><view class="field"><text>æµç¨å®ä¹ Key</text><input v-model="form.processDefinitionKey" :disabled="!canSave" placeholder="请è¾å
¥æµç¨å®ä¹ Key"/></view><view class="field"><text>èç¹ Key</text><input v-model="form.taskDefinitionKey" :disabled="!canSave" placeholder="请è¾å
¥èç¹ Key"/></view><view class="field"><text>æä»¶ç±»å</text><input v-model="form.fileTypes" :disabled="!canSave" placeholder="å¦ pdf,jpg,png"/></view><view class="field"><text>æå¤§å¤§å°</text><input :value="form.maxSize===undefined?'':String(form.maxSize)" :disabled="!canSave" type="number" @input="form.maxSize=Number($event.detail.value||0)"/></view><view class="field"><text>æ¯å¦å¿
å¡«</text><switch :checked="Boolean(form.required)" :disabled="!canSave" @change="form.required=$event.detail.value"/></view><view class="field"><text>ç¶æ</text><switch :checked="form.status!==1" :disabled="!canSave" @change="form.status=$event.detail.value?0:1"/></view><view class="field column"><text>夿³¨</text><textarea v-model="form.remark" :disabled="!canSave" placeholder="请è¾å
¥å¤æ³¨"/></view></view><button v-if="canSave" class="save" :loading="saving" @click="save">ä¿å</button></view></template> |
| | | <style lang="scss" scoped>.page{min-height:100vh;padding:24rpx 30rpx 70rpx;background:#f6f7f9}.card{overflow:hidden;background:#fff;border-radius:16rpx}.field{display:flex;align-items:center;min-height:96rpx;gap:20rpx;padding:0 24rpx;border-bottom:1rpx solid #eef1f5}.field>text:first-child{width:210rpx;flex:none;color:#33455d;font-size:27rpx}.field input{min-width:0;flex:1;color:#1e3049;font-size:27rpx;text-align:right}.required{color:#e23b3b}.column{align-items:flex-start;flex-direction:column;padding:20rpx 24rpx}.column>text:first-child{width:auto}.column textarea{width:100%;height:150rpx;box-sizing:border-box;font-size:27rpx}.save{margin-top:32rpx;color:#fff;font-size:30rpx;background:#1769d8;border-radius:12rpx}.save::after{border:0}</style> |
| | | <style lang="scss" scoped>.page{min-height:100vh;padding:24rpx 30rpx 70rpx;background:#f6f7f9}.card{overflow:hidden;background:#fff;border-radius:16rpx}.field{display:flex;align-items:center;min-height:96rpx;gap:20rpx;padding:0 24rpx;border-bottom:1rpx solid #eef1f5}.field>text:first-child{width:210rpx;flex:none;color:#33455d;font-size:27rpx}.field input{min-width:0;flex:1;color:#1e3049;font-size:27rpx;text-align:right}.required{color:#e23b3b}.column{align-items:flex-start;flex-direction:column;padding:20rpx 24rpx}.column>text:first-child{width:auto}.column textarea{width:100%;height:150rpx;box-sizing:border-box;font-size:27rpx}.save{margin-top:32rpx;color:#fff;font-size:30rpx;background:var(--color-primary, #1769d8);border-radius:12rpx}.save::after{border:0}</style> |
| | |
| | | onShow(()=>load(true)); onPullDownRefresh(async()=>{await load(true);uni.stopPullDownRefresh()}); onReachBottom(()=>load()); |
| | | </script> |
| | | <template><view class="page"><view class="search"><input v-model="keyword" placeholder="æç´¢éä»¶é
ç½®åç§°" confirm-type="search" @confirm="load(true)"/><text @click="load(true)">æç´¢</text></view><view v-if="error" class="state error" @click="load(true)">{{ error }}</view><view v-for="item in list" :key="item.id" class="card"><view class="head"><view><text class="name">{{ item.name }}</text><text>{{ fmt(item.code) }}</text></view><text :class="['tag',statusClass(item.status)]">{{ statusText(item.status) }}</text></view><view class="grid"><text>æµç¨å®ä¹ï¼{{ fmt(item.processDefinitionKey) }}</text><text>èç¹ï¼{{ fmt(item.taskDefinitionKey) }}</text><text>æä»¶ç±»åï¼{{ fmt(item.fileTypes) }}</text><text>æ¯å¦å¿
å¡«ï¼{{ item.required ? 'æ¯' : 'å¦' }}</text></view><view class="actions"><button @click="go(item.id,'detail')">详æ
</button><button v-if="canUpdate" @click="go(item.id)">ç¼è¾</button><button v-if="canDelete" class="danger" @click="remove(item.id)">å é¤</button></view></view><view v-if="!list.length&&!loading" class="state">ææ ä¸å¡éä»¶é
ç½®</view><view v-else class="more">{{ hasMore ? (loading?'å è½½ä¸...':'䏿å è½½æ´å¤') : 'æ²¡ææ´å¤äº' }}</view><button v-if="canCreate" class="fab" @click="go()"><view /></button></view></template> |
| | | <style lang="scss" scoped>.page{min-height:100vh;padding:20rpx 30rpx 150rpx;box-sizing:border-box;background:#f3f6fb}.search{display:flex;align-items:center;height:80rpx;padding:0 20rpx;margin-bottom:18rpx;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}.card{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{min-width:0;display:flex;flex:1;flex-direction:column;gap:8rpx}.name{overflow:hidden;color:#20334c;font-size:30rpx;font-weight:700;text-overflow:ellipsis;white-space:nowrap}.head text:last-child{color:#78879b;font-size:23rpx}.tag{flex:none;padding:6rpx 16rpx;font-size:22rpx;border-radius:999rpx}.tag-on{color:#0e9663;background:#e9fbf2;border:1rpx solid #b8eed4}.tag-off{color:#66778c;background:#f6f8fb;border:1rpx solid #dce4ee}.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}.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,.more{display:block;padding:45rpx 0;color:#8795a8;font-size:26rpx;text-align:center}.error{color:#c65050}.fab{position:fixed;right:32rpx;bottom:56rpx;display:flex;width:100rpx;height:100rpx;align-items:center;justify-content:center;padding:0;margin:0;background:#1769d8;border-radius:50%;box-shadow:0 14rpx 28rpx rgba(23,105,216,.32)}.fab view{position:relative;width:38rpx;height:38rpx}.fab view::before,.fab view::after{position:absolute;content:"";background:#fff;border-radius:3rpx}.fab view::before{top:17rpx;left:0;width:38rpx;height:4rpx}.fab view::after{top:0;left:17rpx;width:4rpx;height:38rpx}</style> |
| | | <style lang="scss" scoped>.page{min-height:100vh;padding: 20rpx 30rpx 132rpx;box-sizing:border-box;background:#f3f6fb}.search{display:flex;align-items:center;height:80rpx;padding:0 20rpx;margin-bottom:18rpx;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:var(--color-primary, #1769d8);font-size:24rpx}.card{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{min-width:0;display:flex;flex:1;flex-direction:column;gap:8rpx}.name{overflow:hidden;color:#20334c;font-size:30rpx;font-weight:700;text-overflow:ellipsis;white-space:nowrap}.head text:last-child{color:#78879b;font-size:23rpx}.tag{flex:none;padding:6rpx 16rpx;font-size:22rpx;border-radius:999rpx}.tag-on{color:#0e9663;background:#e9fbf2;border:1rpx solid #b8eed4}.tag-off{color:#66778c;background:#f6f8fb;border:1rpx solid #dce4ee}.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}.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:var(--color-primary, #1769d8);font-size:22rpx;line-height:48rpx;background:var(--color-primary-soft, #f5f8ff);border:1rpx solid var(--color-primary-border, #8ab3ee);border-radius:8rpx}.actions .danger{color:#c65050;background:#fff7f7;border-color:#e3a0a0}.actions button::after,.fab::after{border:0}.state,.more{display:block;padding:45rpx 0;color:#8795a8;font-size:26rpx;text-align:center}.error{color:#c65050}.fab{position:fixed;right:32rpx;bottom:56rpx;display:flex;width:100rpx;height:100rpx;align-items:center;justify-content:center;padding:0;margin:0;background:var(--color-primary, #1769d8);border-radius:50%;box-shadow:0 14rpx 28rpx rgba(23,105,216,.32)}.fab view{position:relative;width:38rpx;height:38rpx}.fab view::before,.fab view::after{position:absolute;content:"";background:#fff;border-radius:3rpx}.fab view::before{top:17rpx;left:0;width:38rpx;height:4rpx}.fab view::after{top:0;left:17rpx;width:4rpx;height:38rpx}</style> |
| | |
| | | async function save() { if (!canSave.value) return; if (!state.accessToken) return; if (!form.name || !form.code) { toast("请填ååç±»åç§°åç¼ç "); return; } saving.value = true; try { if (id.value) await updateCategory(state.accessToken, form); else await createCategory(state.accessToken, form); uni.showToast({ title:"å·²ä¿å", icon:"success" }); setTimeout(()=>uni.navigateBack(),500); } finally { saving.value=false; } } |
| | | </script> |
| | | <template><view class="page"><view class="card"><view class="field"><text>åç±»åç§° <text class="required">*</text></text><input v-model="form.name" :disabled="!canSave" placeholder="请è¾å
¥åç±»åç§°"/></view><view class="field"><text>åç±»ç¼ç <text class="required">*</text></text><input v-model="form.code" :disabled="!canSave" placeholder="请è¾å
¥åç±»ç¼ç "/></view><view class="field"><text>æ¾ç¤ºæåº</text><input :value="String(form.sort||0)" :disabled="!canSave" type="number" @input="form.sort=Number($event.detail.value||0)"/></view><view class="field"><text>ç¶æ</text><switch :checked="form.status !== 1" :disabled="!canSave" @change="form.status=$event.detail.value?0:1"/></view><view class="field column"><text>æè¿°</text><textarea v-model="form.description" :disabled="!canSave" placeholder="请è¾å
¥æè¿°"/></view></view><button v-if="canSave" class="save" :loading="saving" @click="save">ä¿å</button></view></template> |
| | | <style lang="scss" scoped>.page{min-height:100vh;padding:24rpx 30rpx 70rpx;background:#f6f7f9}.card{overflow:hidden;background:#fff;border-radius:16rpx}.field{display:flex;align-items:center;min-height:96rpx;gap:20rpx;padding:0 24rpx;border-bottom:1rpx solid #eef1f5}.field>text:first-child{width:190rpx;flex:none;color:#33455d;font-size:27rpx}.field input{min-width:0;flex:1;color:#1e3049;font-size:27rpx;text-align:right}.required{color:#e23b3b}.column{align-items:flex-start;flex-direction:column;padding:20rpx 24rpx}.column>text:first-child{width:auto}.column textarea{width:100%;height:150rpx;box-sizing:border-box;font-size:27rpx}.save{margin-top:32rpx;color:#fff;font-size:30rpx;background:#1769d8;border-radius:12rpx}.save::after{border:0}</style> |
| | | <style lang="scss" scoped>.page{min-height:100vh;padding:24rpx 30rpx 70rpx;background:#f6f7f9}.card{overflow:hidden;background:#fff;border-radius:16rpx}.field{display:flex;align-items:center;min-height:96rpx;gap:20rpx;padding:0 24rpx;border-bottom:1rpx solid #eef1f5}.field>text:first-child{width:190rpx;flex:none;color:#33455d;font-size:27rpx}.field input{min-width:0;flex:1;color:#1e3049;font-size:27rpx;text-align:right}.required{color:#e23b3b}.column{align-items:flex-start;flex-direction:column;padding:20rpx 24rpx}.column>text:first-child{width:auto}.column textarea{width:100%;height:150rpx;box-sizing:border-box;font-size:27rpx}.save{margin-top:32rpx;color:#fff;font-size:30rpx;background:var(--color-primary, #1769d8);border-radius:12rpx}.save::after{border:0}</style> |
| | |
| | | onReachBottom(() => load()); |
| | | </script> |
| | | <template><view class="page"><view class="search"><input v-model="keyword" placeholder="æç´¢åç±»åç§°" confirm-type="search" @confirm="load(true)"/><text @click="load(true)">æç´¢</text></view><view v-if="error" class="state error" @click="load(true)">{{ error }}</view><view v-for="item in list" :key="item.id" class="card"><view class="head"><view><text class="name">{{ item.name }}</text><text>{{ fmt(item.code) }}</text></view><text :class="['tag', statusClass(item.status)]">{{ statusText(item.status) }}</text></view><view class="grid"><text>æåºï¼{{ fmt(item.sort) }}</text><text>æè¿°ï¼{{ fmt(item.description) }}</text></view><view class="actions"><button @click="go(item.id,'detail')">详æ
</button><button v-if="canUpdate" @click="go(item.id)">ç¼è¾</button><button v-if="canDelete" class="danger" @click="remove(item.id)">å é¤</button></view></view><view v-if="!list.length && !loading" class="state">ææ æµç¨åç±»</view><view v-else class="more">{{ hasMore ? (loading ? 'å è½½ä¸...' : '䏿å è½½æ´å¤') : 'æ²¡ææ´å¤äº' }}</view><button v-if="canCreate" class="fab" @click="go()"><view /></button></view></template> |
| | | <style lang="scss" scoped>.page{min-height:100vh;padding:20rpx 30rpx 150rpx;box-sizing:border-box;background:#f3f6fb}.search{display:flex;align-items:center;height:80rpx;padding:0 20rpx;margin-bottom:18rpx;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}.card{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{min-width:0;display:flex;flex:1;flex-direction:column;gap:8rpx}.name{overflow:hidden;color:#20334c;font-size:30rpx;font-weight:700;text-overflow:ellipsis;white-space:nowrap}.head text:last-child{color:#78879b;font-size:23rpx}.tag{flex:none;padding:6rpx 16rpx;font-size:22rpx;border-radius:999rpx}.tag-on{color:#0e9663;background:#e9fbf2;border:1rpx solid #b8eed4}.tag-off{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}.state,.more{display:block;padding:45rpx 0;color:#8795a8;font-size:26rpx;text-align:center}.error{color:#c65050}.fab{position:fixed;right:32rpx;bottom:56rpx;display:flex;width:100rpx;height:100rpx;align-items:center;justify-content:center;padding:0;margin:0;background:#1769d8;border-radius:50%;box-shadow:0 14rpx 28rpx rgba(23,105,216,.32)}.fab view{position:relative;width:38rpx;height:38rpx}.fab view::before,.fab view::after{position:absolute;content:"";background:#fff;border-radius:3rpx}.fab view::before{top:17rpx;left:0;width:38rpx;height:4rpx}.fab view::after{top:0;left:17rpx;width:4rpx;height:38rpx}</style> |
| | | <style lang="scss" scoped>.page{min-height:100vh;padding: 20rpx 30rpx 132rpx;box-sizing:border-box;background:#f3f6fb}.search{display:flex;align-items:center;height:80rpx;padding:0 20rpx;margin-bottom:18rpx;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:var(--color-primary, #1769d8);font-size:24rpx}.card{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{min-width:0;display:flex;flex:1;flex-direction:column;gap:8rpx}.name{overflow:hidden;color:#20334c;font-size:30rpx;font-weight:700;text-overflow:ellipsis;white-space:nowrap}.head text:last-child{color:#78879b;font-size:23rpx}.tag{flex:none;padding:6rpx 16rpx;font-size:22rpx;border-radius:999rpx}.tag-on{color:#0e9663;background:#e9fbf2;border:1rpx solid #b8eed4}.tag-off{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:var(--color-primary, #1769d8);font-size:22rpx;line-height:48rpx;background:var(--color-primary-soft, #f5f8ff);border:1rpx solid var(--color-primary-border, #8ab3ee);border-radius:8rpx}.actions .danger{color:#c65050;background:#fff7f7;border-color:#e3a0a0}.actions button::after,.fab::after{border:0}.state,.more{display:block;padding:45rpx 0;color:#8795a8;font-size:26rpx;text-align:center}.error{color:#c65050}.fab{position:fixed;right:32rpx;bottom:56rpx;display:flex;width:100rpx;height:100rpx;align-items:center;justify-content:center;padding:0;margin:0;background:var(--color-primary, #1769d8);border-radius:50%;box-shadow:0 14rpx 28rpx rgba(23,105,216,.32)}.fab view{position:relative;width:38rpx;height:38rpx}.fab view::before,.fab view::after{position:absolute;content:"";background:#fff;border-radius:3rpx}.fab view::before{top:17rpx;left:0;width:38rpx;height:4rpx}.fab view::after{top:0;left:17rpx;width:4rpx;height:38rpx}</style> |
| | |
| | | } |
| | | |
| | | .node-user.picked { |
| | | color: #1769d8; |
| | | color: var(--color-primary, #1769d8); |
| | | background: #eef4fd; |
| | | } |
| | | |
| | |
| | | .sheet{display:flex;flex-direction:column;width:100%;max-height:80vh;background:#fff;border-radius:24rpx 24rpx 0 0} |
| | | .sheet-head{display:flex;align-items:center;justify-content:space-between;height:96rpx;padding:0 28rpx;border-bottom:1rpx solid #edf1f6} |
| | | .sheet-head-title{color:#10233f;font-size:30rpx;font-weight:600} |
| | | .sheet-close{color:#1769d8;font-size:25rpx} |
| | | .sheet-close{color:var(--color-primary, #1769d8);font-size:25rpx} |
| | | .sheet-search{display:flex;align-items:center;height:76rpx;gap:16rpx;margin:18rpx 28rpx 6rpx;padding:0 20rpx;background:#f4f7fb;border-radius:14rpx} |
| | | .sheet-search input{min-width:0;flex:1;font-size:26rpx} |
| | | .sheet-search text{flex:none;color:#1769d8;font-size:24rpx} |
| | | .sheet-search text{flex:none;color:var(--color-primary, #1769d8);font-size:24rpx} |
| | | .sheet-body{height:660rpx;flex:none;padding:8rpx 28rpx 0;box-sizing:border-box} |
| | | .tree-row{display:flex;align-items:center;gap:10rpx;padding:20rpx 0;border-bottom:1rpx solid #f2f5f9} |
| | | .tree-arrow{width:32rpx;flex:none;color:#8494a8;font-size:24rpx;text-align:center} |
| | |
| | | .tree-label{min-width:0;flex:1;overflow:hidden;color:#1e3049;font-size:27rpx;text-overflow:ellipsis;white-space:nowrap} |
| | | .tree-check{display:flex;width:40rpx;height:40rpx;flex:none;align-items:center;justify-content:center;color:#fff;font-size:24rpx;background:#fff;border:2rpx solid #cfd9e6;border-radius:8rpx} |
| | | .tree-check.all, |
| | | .tree-check.half{background:#1769d8;border-color:#1769d8} |
| | | .tree-check.half{background:var(--color-primary, #1769d8);border-color:var(--color-primary, #1769d8)} |
| | | .half-bar{width:20rpx;height:4rpx;background:#fff;border-radius:2rpx} |
| | | .sheet-state{padding:60rpx 0;color:#8795a8;font-size:25rpx;text-align:center} |
| | | .sheet-foot{display:flex;align-items:center;justify-content:space-between;padding:18rpx 28rpx 34rpx;border-top:1rpx solid #edf1f6} |
| | |
| | | .sheet-foot>view{display:flex;gap:16rpx} |
| | | .sheet-foot button{height:72rpx;min-height:72rpx;padding:0 34rpx;margin:0;font-size:26rpx;line-height:70rpx;border-radius:36rpx} |
| | | .sheet-foot button::after{border:0} |
| | | .ghost{color:#1769d8;background:#f2f6fc;border:1rpx solid #cfe0f7} |
| | | .primary{color:#fff;background:#1769d8} |
| | | .ghost{color:var(--color-primary, #1769d8);background:#f2f6fc;border:1rpx solid #cfe0f7} |
| | | .primary{color:#fff;background:var(--color-primary, #1769d8)} |
| | | </style> |
| | |
| | | async function save(){ if(!canSave.value)return; if(!state.accessToken)return; if(!form.name){toast("请填å表ååç§°");return;} form.fields=fieldsText.value.split(/\n|,/).map(x=>x.trim()).filter(Boolean); saving.value=true; try{ if(id.value) await updateForm(state.accessToken,form); else await createForm(state.accessToken,form); uni.showToast({title:"å·²ä¿å",icon:"success"}); setTimeout(()=>uni.navigateBack(),500);}finally{saving.value=false}} |
| | | </script> |
| | | <template><view class="page"><view class="card"><view class="field"><text>表ååç§° <text class="required">*</text></text><input v-model="form.name" :disabled="!canSave" placeholder="请è¾å
¥è¡¨ååç§°"/></view><view class="field"><text>ç¶æ</text><switch :checked="form.status!==1" :disabled="!canSave" @change="form.status=$event.detail.value?0:1"/></view><view class="field column"><text>表åé
ç½®</text><textarea v-model="form.conf" :disabled="!canSave" placeholder="请è¾å
¥è¡¨åé
ç½® JSON"/></view><view class="field column"><text>åæ®µé
ç½®</text><textarea v-model="fieldsText" :disabled="!canSave" placeholder="æ¯è¡ä¸ä¸ªå段 JSON æå段å"/></view><view class="field column"><text>夿³¨</text><textarea v-model="form.remark" :disabled="!canSave" placeholder="请è¾å
¥å¤æ³¨"/></view></view><button v-if="canSave" class="save" :loading="saving" @click="save">ä¿å</button></view></template> |
| | | <style lang="scss" scoped>.page{min-height:100vh;padding:24rpx 30rpx 70rpx;background:#f6f7f9}.card{overflow:hidden;background:#fff;border-radius:16rpx}.field{display:flex;align-items:center;min-height:96rpx;gap:20rpx;padding:0 24rpx;border-bottom:1rpx solid #eef1f5}.field>text:first-child{width:190rpx;flex:none;color:#33455d;font-size:27rpx}.field input{min-width:0;flex:1;color:#1e3049;font-size:27rpx;text-align:right}.required{color:#e23b3b}.column{align-items:flex-start;flex-direction:column;padding:20rpx 24rpx}.column>text:first-child{width:auto}.column textarea{width:100%;height:190rpx;box-sizing:border-box;font-size:26rpx}.save{margin-top:32rpx;color:#fff;font-size:30rpx;background:#1769d8;border-radius:12rpx}.save::after{border:0}</style> |
| | | <style lang="scss" scoped>.page{min-height:100vh;padding:24rpx 30rpx 70rpx;background:#f6f7f9}.card{overflow:hidden;background:#fff;border-radius:16rpx}.field{display:flex;align-items:center;min-height:96rpx;gap:20rpx;padding:0 24rpx;border-bottom:1rpx solid #eef1f5}.field>text:first-child{width:190rpx;flex:none;color:#33455d;font-size:27rpx}.field input{min-width:0;flex:1;color:#1e3049;font-size:27rpx;text-align:right}.required{color:#e23b3b}.column{align-items:flex-start;flex-direction:column;padding:20rpx 24rpx}.column>text:first-child{width:auto}.column textarea{width:100%;height:190rpx;box-sizing:border-box;font-size:26rpx}.save{margin-top:32rpx;color:#fff;font-size:30rpx;background:var(--color-primary, #1769d8);border-radius:12rpx}.save::after{border:0}</style> |
| | |
| | | onShow(()=>load(true)); onPullDownRefresh(async()=>{await load(true);uni.stopPullDownRefresh()}); onReachBottom(()=>load()); |
| | | </script> |
| | | <template><view class="page"><view class="search"><input v-model="keyword" placeholder="æç´¢è¡¨ååç§°" confirm-type="search" @confirm="load(true)"/><text @click="load(true)">æç´¢</text></view><view v-if="error" class="state error" @click="load(true)">{{ error }}</view><view v-for="item in list" :key="item.id" class="card"><view class="head"><view><text class="name">{{ item.name }}</text><text>åæ®µæ°ï¼{{ item.fields?.length || 0 }}</text></view><text :class="['tag',statusClass(item.status)]">{{ statusText(item.status) }}</text></view><view class="grid"><text>夿³¨ï¼{{ fmt(item.remark) }}</text><text>å建æ¶é´ï¼{{ fmt(item.createTime) }}</text></view><view class="actions"><button @click="go(item.id,'detail')">详æ
</button><button v-if="canUpdate" @click="go(item.id)">ç¼è¾</button><button v-if="canDelete" class="danger" @click="remove(item.id)">å é¤</button></view></view><view v-if="!list.length&&!loading" class="state">ææ æµç¨è¡¨å</view><view v-else class="more">{{ hasMore ? (loading?'å è½½ä¸...':'䏿å è½½æ´å¤') : 'æ²¡ææ´å¤äº' }}</view><button v-if="canCreate" class="fab" @click="go()"><view /></button></view></template> |
| | | <style lang="scss" scoped>.page{min-height:100vh;padding:20rpx 30rpx 150rpx;box-sizing:border-box;background:#f3f6fb}.search{display:flex;align-items:center;height:80rpx;padding:0 20rpx;margin-bottom:18rpx;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}.card{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{min-width:0;display:flex;flex:1;flex-direction:column;gap:8rpx}.name{overflow:hidden;color:#20334c;font-size:30rpx;font-weight:700;text-overflow:ellipsis;white-space:nowrap}.head text:last-child{color:#78879b;font-size:23rpx}.tag{flex:none;padding:6rpx 16rpx;font-size:22rpx;border-radius:999rpx}.tag-on{color:#0e9663;background:#e9fbf2;border:1rpx solid #b8eed4}.tag-off{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}.state,.more{display:block;padding:45rpx 0;color:#8795a8;font-size:26rpx;text-align:center}.error{color:#c65050}.fab{position:fixed;right:32rpx;bottom:56rpx;display:flex;width:100rpx;height:100rpx;align-items:center;justify-content:center;padding:0;margin:0;background:#1769d8;border-radius:50%;box-shadow:0 14rpx 28rpx rgba(23,105,216,.32)}.fab view{position:relative;width:38rpx;height:38rpx}.fab view::before,.fab view::after{position:absolute;content:"";background:#fff;border-radius:3rpx}.fab view::before{top:17rpx;left:0;width:38rpx;height:4rpx}.fab view::after{top:0;left:17rpx;width:4rpx;height:38rpx}</style> |
| | | <style lang="scss" scoped>.page{min-height:100vh;padding: 20rpx 30rpx 132rpx;box-sizing:border-box;background:#f3f6fb}.search{display:flex;align-items:center;height:80rpx;padding:0 20rpx;margin-bottom:18rpx;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:var(--color-primary, #1769d8);font-size:24rpx}.card{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{min-width:0;display:flex;flex:1;flex-direction:column;gap:8rpx}.name{overflow:hidden;color:#20334c;font-size:30rpx;font-weight:700;text-overflow:ellipsis;white-space:nowrap}.head text:last-child{color:#78879b;font-size:23rpx}.tag{flex:none;padding:6rpx 16rpx;font-size:22rpx;border-radius:999rpx}.tag-on{color:#0e9663;background:#e9fbf2;border:1rpx solid #b8eed4}.tag-off{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:var(--color-primary, #1769d8);font-size:22rpx;line-height:48rpx;background:var(--color-primary-soft, #f5f8ff);border:1rpx solid var(--color-primary-border, #8ab3ee);border-radius:8rpx}.actions .danger{color:#c65050;background:#fff7f7;border-color:#e3a0a0}.actions button::after,.fab::after{border:0}.state,.more{display:block;padding:45rpx 0;color:#8795a8;font-size:26rpx;text-align:center}.error{color:#c65050}.fab{position:fixed;right:32rpx;bottom:56rpx;display:flex;width:100rpx;height:100rpx;align-items:center;justify-content:center;padding:0;margin:0;background:var(--color-primary, #1769d8);border-radius:50%;box-shadow:0 14rpx 28rpx rgba(23,105,216,.32)}.fab view{position:relative;width:38rpx;height:38rpx}.fab view::before,.fab view::after{position:absolute;content:"";background:#fff;border-radius:3rpx}.fab view::before{top:17rpx;left:0;width:38rpx;height:4rpx}.fab view::after{top:0;left:17rpx;width:4rpx;height:38rpx}</style> |
| | |
| | | async function save(){ if(!canSave.value)return; if(!state.accessToken)return; if(!form.name){toast("请填ååç»åç§°");return;} saving.value=true; try{ if(id.value) await updateUserGroup(state.accessToken,form); else await createUserGroup(state.accessToken,form); uni.showToast({title:"å·²ä¿å",icon:"success"}); setTimeout(()=>uni.navigateBack(),500);}finally{saving.value=false}} |
| | | </script> |
| | | <template><view class="page"><view class="card"><view class="field"><text>åç»åç§° <text class="required">*</text></text><input v-model="form.name" :disabled="!canSave" placeholder="请è¾å
¥åç»åç§°"/></view><view class="field"><text>ç¶æ</text><switch :checked="form.status!==1" :disabled="!canSave" @change="form.status=$event.detail.value?0:1"/></view><view class="field" @click="canSave && (showUsers=true)"><text>æå</text><view class="value">{{ userNames }}<text>âº</text></view></view><view class="field column"><text>æè¿°</text><textarea v-model="form.description" :disabled="!canSave" placeholder="请è¾å
¥æè¿°"/></view><view class="field column"><text>夿³¨</text><textarea v-model="form.remark" :disabled="!canSave" placeholder="请è¾å
¥å¤æ³¨"/></view></view><button v-if="canSave" class="save" :loading="saving" @click="save">ä¿å</button><view v-if="showUsers" class="mask" @click.self="showUsers=false"><view class="sheet"><view class="sheet-head"><text>éæ©æå</text><text @click="showUsers=false">宿</text></view><checkbox-group @change="changeUsers"><label v-for="user in users" :key="user.id" class="user"><text>{{ user.nickname || user.id }}</text><checkbox :value="String(user.id)" :checked="form.userIds?.includes(user.id || 0)"/></label></checkbox-group></view></view></view></template> |
| | | <style lang="scss" scoped>.page{min-height:100vh;padding:24rpx 30rpx 70rpx;background:#f6f7f9}.card{overflow:hidden;background:#fff;border-radius:16rpx}.field{display:flex;align-items:center;min-height:96rpx;gap:20rpx;padding:0 24rpx;border-bottom:1rpx solid #eef1f5}.field>text:first-child{width:190rpx;flex:none;color:#33455d;font-size:27rpx}.field input{min-width:0;flex:1;color:#1e3049;font-size:27rpx;text-align:right}.value{display:flex;min-width:0;flex:1;align-items:center;justify-content:flex-end;gap:12rpx;color:#1e3049;font-size:27rpx;text-align:right}.value text{flex:none;color:#8092a7;font-size:36rpx}.required{color:#e23b3b}.column{align-items:flex-start;flex-direction:column;padding:20rpx 24rpx}.column>text:first-child{width:auto}.column textarea{width:100%;height:150rpx;box-sizing:border-box;font-size:27rpx}.save{margin-top:32rpx;color:#fff;font-size:30rpx;background:#1769d8;border-radius:12rpx}.save::after{border:0}.mask{position:fixed;inset:0;z-index:30;display:flex;align-items:flex-end;background:rgba(18,29,43,.42)}.sheet{width:100%;max-height:78vh;overflow:auto;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:700}.sheet-head text:last-child{color:#1769d8;font-size:25rpx}.user{display:flex;align-items:center;justify-content:space-between;min-height:86rpx;padding:0 30rpx;border-bottom:1rpx solid #edf1f6}.user text{color:#20334c;font-size:26rpx}</style> |
| | | <style lang="scss" scoped>.page{min-height:100vh;padding:24rpx 30rpx 70rpx;background:#f6f7f9}.card{overflow:hidden;background:#fff;border-radius:16rpx}.field{display:flex;align-items:center;min-height:96rpx;gap:20rpx;padding:0 24rpx;border-bottom:1rpx solid #eef1f5}.field>text:first-child{width:190rpx;flex:none;color:#33455d;font-size:27rpx}.field input{min-width:0;flex:1;color:#1e3049;font-size:27rpx;text-align:right}.value{display:flex;min-width:0;flex:1;align-items:center;justify-content:flex-end;gap:12rpx;color:#1e3049;font-size:27rpx;text-align:right}.value text{flex:none;color:#8092a7;font-size:36rpx}.required{color:#e23b3b}.column{align-items:flex-start;flex-direction:column;padding:20rpx 24rpx}.column>text:first-child{width:auto}.column textarea{width:100%;height:150rpx;box-sizing:border-box;font-size:27rpx}.save{margin-top:32rpx;color:#fff;font-size:30rpx;background:var(--color-primary, #1769d8);border-radius:12rpx}.save::after{border:0}.mask{position:fixed;inset:0;z-index:30;display:flex;align-items:flex-end;background:rgba(18,29,43,.42)}.sheet{width:100%;max-height:78vh;overflow:auto;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:700}.sheet-head text:last-child{color:var(--color-primary, #1769d8);font-size:25rpx}.user{display:flex;align-items:center;justify-content:space-between;min-height:86rpx;padding:0 30rpx;border-bottom:1rpx solid #edf1f6}.user text{color:#20334c;font-size:26rpx}</style> |
| | |
| | | onShow(()=>load(true)); onPullDownRefresh(async()=>{await load(true);uni.stopPullDownRefresh()}); onReachBottom(()=>load()); |
| | | </script> |
| | | <template><view class="page"><view class="search"><input v-model="keyword" placeholder="æç´¢åç»åç§°" confirm-type="search" @confirm="load(true)"/><text @click="load(true)">æç´¢</text></view><view v-if="error" class="state error" @click="load(true)">{{ error }}</view><view v-for="item in list" :key="item.id" class="card"><view class="head"><view><text class="name">{{ item.name }}</text><text>æåæ°ï¼{{ item.userIds?.length || 0 }}</text></view><text :class="['tag',statusClass(item.status)]">{{ statusText(item.status) }}</text></view><view class="grid"><text>æè¿°ï¼{{ fmt(item.description) }}</text><text>夿³¨ï¼{{ fmt(item.remark) }}</text><text>å建æ¶é´ï¼{{ fmt(item.createTime) }}</text></view><view class="actions"><button @click="go(item.id,'detail')">详æ
</button><button v-if="canUpdate" @click="go(item.id)">ç¼è¾</button><button v-if="canDelete" class="danger" @click="remove(item.id)">å é¤</button></view></view><view v-if="!list.length&&!loading" class="state">ææ ç¨æ·åç»</view><view v-else class="more">{{ hasMore ? (loading?'å è½½ä¸...':'䏿å è½½æ´å¤') : 'æ²¡ææ´å¤äº' }}</view><button v-if="canCreate" class="fab" @click="go()"><view /></button></view></template> |
| | | <style lang="scss" scoped>.page{min-height:100vh;padding:20rpx 30rpx 150rpx;box-sizing:border-box;background:#f3f6fb}.search{display:flex;align-items:center;height:80rpx;padding:0 20rpx;margin-bottom:18rpx;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}.card{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{min-width:0;display:flex;flex:1;flex-direction:column;gap:8rpx}.name{overflow:hidden;color:#20334c;font-size:30rpx;font-weight:700;text-overflow:ellipsis;white-space:nowrap}.head text:last-child{color:#78879b;font-size:23rpx}.tag{flex:none;padding:6rpx 16rpx;font-size:22rpx;border-radius:999rpx}.tag-on{color:#0e9663;background:#e9fbf2;border:1rpx solid #b8eed4}.tag-off{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}.state,.more{display:block;padding:45rpx 0;color:#8795a8;font-size:26rpx;text-align:center}.error{color:#c65050}.fab{position:fixed;right:32rpx;bottom:56rpx;display:flex;width:100rpx;height:100rpx;align-items:center;justify-content:center;padding:0;margin:0;background:#1769d8;border-radius:50%;box-shadow:0 14rpx 28rpx rgba(23,105,216,.32)}.fab view{position:relative;width:38rpx;height:38rpx}.fab view::before,.fab view::after{position:absolute;content:"";background:#fff;border-radius:3rpx}.fab view::before{top:17rpx;left:0;width:38rpx;height:4rpx}.fab view::after{top:0;left:17rpx;width:4rpx;height:38rpx}</style> |
| | | <style lang="scss" scoped>.page{min-height:100vh;padding: 20rpx 30rpx 132rpx;box-sizing:border-box;background:#f3f6fb}.search{display:flex;align-items:center;height:80rpx;padding:0 20rpx;margin-bottom:18rpx;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:var(--color-primary, #1769d8);font-size:24rpx}.card{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{min-width:0;display:flex;flex:1;flex-direction:column;gap:8rpx}.name{overflow:hidden;color:#20334c;font-size:30rpx;font-weight:700;text-overflow:ellipsis;white-space:nowrap}.head text:last-child{color:#78879b;font-size:23rpx}.tag{flex:none;padding:6rpx 16rpx;font-size:22rpx;border-radius:999rpx}.tag-on{color:#0e9663;background:#e9fbf2;border:1rpx solid #b8eed4}.tag-off{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:var(--color-primary, #1769d8);font-size:22rpx;line-height:48rpx;background:var(--color-primary-soft, #f5f8ff);border:1rpx solid var(--color-primary-border, #8ab3ee);border-radius:8rpx}.actions .danger{color:#c65050;background:#fff7f7;border-color:#e3a0a0}.actions button::after,.fab::after{border:0}.state,.more{display:block;padding:45rpx 0;color:#8795a8;font-size:26rpx;text-align:center}.error{color:#c65050}.fab{position:fixed;right:32rpx;bottom:56rpx;display:flex;width:100rpx;height:100rpx;align-items:center;justify-content:center;padding:0;margin:0;background:var(--color-primary, #1769d8);border-radius:50%;box-shadow:0 14rpx 28rpx rgba(23,105,216,.32)}.fab view{position:relative;width:38rpx;height:38rpx}.fab view::before,.fab view::after{position:absolute;content:"";background:#fff;border-radius:3rpx}.fab view::before{top:17rpx;left:0;width:38rpx;height:4rpx}.fab view::after{top:0;left:17rpx;width:4rpx;height:38rpx}</style> |
| | |
| | | async function save(){ if(!canSave.value)return; if(!state.accessToken)return; if(!form.name||!form.key){toast("è¯·å¡«åæ¨¡ååç§°åæµç¨æ è¯");return;} saving.value=true; try{ if(id.value) await updateModel(state.accessToken,form); else await createModel(state.accessToken,form); uni.showToast({title:"å·²ä¿å",icon:"success"}); setTimeout(()=>uni.navigateBack(),500);}finally{saving.value=false}} |
| | | </script> |
| | | <template><view class="page"><view class="card"><view class="field"><text>æµç¨åç§° <text class="required">*</text></text><input v-model="form.name" :disabled="!canSave" placeholder="请è¾å
¥æµç¨åç§°"/></view><view class="field"><text>æµç¨æ è¯ <text class="required">*</text></text><input v-model="form.key" :disabled="!canSave" placeholder="请è¾å
¥æµç¨æ è¯"/></view><view class="field"><text>æµç¨åç±»</text><picker :disabled="!canSave" :range="categories" range-key="name" :value="categoryIndex" @change="chooseCategory(Number($event.detail.value))"><view class="picker"><text>{{ categories[categoryIndex]?.name || 'è¯·éæ©åç±»' }}</text><text>âº</text></view></picker></view><view class="field"><text>表åç±»å</text><picker :disabled="!canSave" :range="['æµç¨è¡¨å','ä¸å¡è¡¨å']" :value="form.formType===20?1:0" @change="form.formType=Number($event.detail.value)===1?20:10"><view class="picker"><text>{{ form.formType===20?'ä¸å¡è¡¨å':'æµç¨è¡¨å' }}</text><text>âº</text></view></picker></view><view v-if="form.formType!==20" class="field"><text>æµç¨è¡¨å</text><picker :disabled="!canSave" :range="forms" range-key="name" :value="formIndex" @change="chooseForm(Number($event.detail.value))"><view class="picker"><text>{{ form.formName || forms[formIndex]?.name || 'è¯·éæ©è¡¨å' }}</text><text>âº</text></view></picker></view><template v-else><view class="field"><text>å建路å¾</text><input v-model="form.formCustomCreatePath" :disabled="!canSave" placeholder="请è¾å
¥ä¸å¡è¡¨åå建路å¾"/></view><view class="field"><text>æ¥çè·¯å¾</text><input v-model="form.formCustomViewPath" :disabled="!canSave" placeholder="请è¾å
¥ä¸å¡è¡¨åæ¥çè·¯å¾"/></view></template><view class="field"><text>ç¶æ</text><switch :checked="form.status!==1" :disabled="!canSave" @change="form.status=$event.detail.value?0:1"/></view><view class="field column"><text>æè¿°</text><textarea v-model="form.description" :disabled="!canSave" placeholder="请è¾å
¥æè¿°"/></view><view class="field column"><text>夿³¨</text><textarea v-model="form.remark" :disabled="!canSave" placeholder="请è¾å
¥å¤æ³¨"/></view></view><view class="tips">æµç¨å¾è®¾è®¡ãèç¹æéãæå°æ¨¡æ¿ç夿ç»å¸å»ºè®®å¨ Web 端维æ¤ï¼ç§»å¨ç«¯ä¿çåºç¡ä¿¡æ¯åé¨ç½²æ§å¶ã</view><button v-if="canSave" class="save" :loading="saving" @click="save">ä¿å</button></view></template> |
| | | <style lang="scss" scoped>.page{min-height:100vh;padding:24rpx 30rpx 70rpx;background:#f6f7f9}.card{overflow:hidden;background:#fff;border-radius:16rpx}.field{display:flex;align-items:center;min-height:96rpx;gap:20rpx;padding:0 24rpx;border-bottom:1rpx solid #eef1f5}.field>text:first-child{width:190rpx;flex:none;color:#33455d;font-size:27rpx}.field input,.field picker,.picker{min-width:0;flex:1;color:#1e3049;font-size:27rpx}.field input{text-align:right}.picker{display:flex;align-items:center;justify-content:space-between;gap:12rpx;color:#65758a}.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;color:#8092a7;font-size:36rpx}.required{color:#e23b3b}.column{align-items:flex-start;flex-direction:column;padding:20rpx 24rpx}.column>text:first-child{width:auto}.column textarea{width:100%;height:140rpx;box-sizing:border-box;font-size:27rpx}.tips{margin-top:20rpx;padding:20rpx 24rpx;color:#66778c;font-size:24rpx;line-height:1.6;background:#fff;border-radius:16rpx}.save{margin-top:32rpx;color:#fff;font-size:30rpx;background:#1769d8;border-radius:12rpx}.save::after{border:0}</style> |
| | | <style lang="scss" scoped>.page{min-height:100vh;padding:24rpx 30rpx 70rpx;background:#f6f7f9}.card{overflow:hidden;background:#fff;border-radius:16rpx}.field{display:flex;align-items:center;min-height:96rpx;gap:20rpx;padding:0 24rpx;border-bottom:1rpx solid #eef1f5}.field>text:first-child{width:190rpx;flex:none;color:#33455d;font-size:27rpx}.field input,.field picker,.picker{min-width:0;flex:1;color:#1e3049;font-size:27rpx}.field input{text-align:right}.picker{display:flex;align-items:center;justify-content:space-between;gap:12rpx;color:#65758a}.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;color:#8092a7;font-size:36rpx}.required{color:#e23b3b}.column{align-items:flex-start;flex-direction:column;padding:20rpx 24rpx}.column>text:first-child{width:auto}.column textarea{width:100%;height:140rpx;box-sizing:border-box;font-size:27rpx}.tips{margin-top:20rpx;padding:20rpx 24rpx;color:#66778c;font-size:24rpx;line-height:1.6;background:#fff;border-radius:16rpx}.save{margin-top:32rpx;color:#fff;font-size:30rpx;background:var(--color-primary, #1769d8);border-radius:12rpx}.save::after{border:0}</style> |
| | |
| | | onShow(load); onPullDownRefresh(async()=>{await load();uni.stopPullDownRefresh()}); |
| | | </script> |
| | | <template><view class="page"><view class="search"><input v-model="keyword" placeholder="æç´¢æ¨¡ååç§°" confirm-type="search" @confirm="load"/><text @click="load">æç´¢</text></view><view v-if="error" class="state error" @click="load">{{ error }}</view><view v-for="item in list" :key="item.id" class="card"><view class="head"><view><text class="name">{{ item.name }}</text><text>{{ fmt(item.key) }}</text></view><text :class="['tag',statusClass(item.status)]">{{ statusText(item.status) }}</text></view><view class="chips"><text>{{ formTypeText(item.formType) }}</text><text>åç±» {{ fmt(item.category) }}</text><text>çæ¬ {{ fmt(item.processDefinition?.version) }}</text></view><view class="grid"><text>表åï¼{{ fmt(item.formName) }}</text><text>æè¿°ï¼{{ fmt(item.description) }}</text><text>å建æ¶é´ï¼{{ fmt(item.createTime) }}</text></view><view class="actions"><button @click="go(item.id,'detail')">详æ
</button><button v-if="canUpdate" @click="go(item.id)">ç¼è¾</button><button v-if="canUpdate" @click="action('state',item)">{{ item.status===1?'å¯ç¨':'ç¦ç¨' }}</button><button v-if="canDeploy" @click="action('deploy',item)">é¨ç½²</button><button v-if="canUpdate" @click="action('clean',item)">æ¸
ç</button><button v-if="canDelete" class="danger" @click="action('delete',item)">å é¤</button></view></view><view v-if="!list.length&&!loading" class="state">ææ æµç¨æ¨¡å</view><button v-if="canCreate" class="fab" @click="go()"><view /></button></view></template> |
| | | <style lang="scss" scoped>.page{min-height:100vh;padding:20rpx 30rpx 150rpx;box-sizing:border-box;background:#f3f6fb}.search{display:flex;align-items:center;height:80rpx;padding:0 20rpx;margin-bottom:18rpx;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}.card{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{min-width:0;display:flex;flex:1;flex-direction:column;gap:8rpx}.name{overflow:hidden;color:#20334c;font-size:30rpx;font-weight:700;text-overflow:ellipsis;white-space:nowrap}.head text:last-child{color:#78879b;font-size:23rpx}.tag{flex:none;padding:6rpx 16rpx;font-size:22rpx;border-radius:999rpx}.tag-on{color:#0e9663;background:#e9fbf2;border:1rpx solid #b8eed4}.tag-off{color:#66778c;background:#f6f8fb;border:1rpx solid #dce4ee}.chips{display:flex;flex-wrap:wrap;gap:10rpx;margin-top:14rpx}.chips text{padding:5rpx 12rpx;color:#1769d8;font-size:22rpx;background:#eef6ff;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}.state{display:block;padding:45rpx 0;color:#8795a8;font-size:26rpx;text-align:center}.error{color:#c65050}.fab{position:fixed;right:32rpx;bottom:56rpx;display:flex;width:100rpx;height:100rpx;align-items:center;justify-content:center;padding:0;margin:0;background:#1769d8;border-radius:50%;box-shadow:0 14rpx 28rpx rgba(23,105,216,.32)}.fab view{position:relative;width:38rpx;height:38rpx}.fab view::before,.fab view::after{position:absolute;content:"";background:#fff;border-radius:3rpx}.fab view::before{top:17rpx;left:0;width:38rpx;height:4rpx}.fab view::after{top:0;left:17rpx;width:4rpx;height:38rpx}</style> |
| | | <style lang="scss" scoped>.page{min-height:100vh;padding: 20rpx 30rpx 132rpx;box-sizing:border-box;background:#f3f6fb}.search{display:flex;align-items:center;height:80rpx;padding:0 20rpx;margin-bottom:18rpx;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:var(--color-primary, #1769d8);font-size:24rpx}.card{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{min-width:0;display:flex;flex:1;flex-direction:column;gap:8rpx}.name{overflow:hidden;color:#20334c;font-size:30rpx;font-weight:700;text-overflow:ellipsis;white-space:nowrap}.head text:last-child{color:#78879b;font-size:23rpx}.tag{flex:none;padding:6rpx 16rpx;font-size:22rpx;border-radius:999rpx}.tag-on{color:#0e9663;background:#e9fbf2;border:1rpx solid #b8eed4}.tag-off{color:#66778c;background:#f6f8fb;border:1rpx solid #dce4ee}.chips{display:flex;flex-wrap:wrap;gap:10rpx;margin-top:14rpx}.chips text{padding:5rpx 12rpx;color:var(--color-primary, #1769d8);font-size:22rpx;background:var(--color-primary-soft, #eef6ff);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:var(--color-primary, #1769d8);font-size:22rpx;line-height:48rpx;background:var(--color-primary-soft, #f5f8ff);border:1rpx solid var(--color-primary-border, #8ab3ee);border-radius:8rpx}.actions .danger{color:#c65050;background:#fff7f7;border-color:#e3a0a0}.actions button::after,.fab::after{border:0}.state{display:block;padding:45rpx 0;color:#8795a8;font-size:26rpx;text-align:center}.error{color:#c65050}.fab{position:fixed;right:32rpx;bottom:56rpx;display:flex;width:100rpx;height:100rpx;align-items:center;justify-content:center;padding:0;margin:0;background:var(--color-primary, #1769d8);border-radius:50%;box-shadow:0 14rpx 28rpx rgba(23,105,216,.32)}.fab view{position:relative;width:38rpx;height:38rpx}.fab view::before,.fab view::after{position:absolute;content:"";background:#fff;border-radius:3rpx}.fab view::before{top:17rpx;left:0;width:38rpx;height:4rpx}.fab view::after{top:0;left:17rpx;width:4rpx;height:38rpx}</style> |
| | |
| | | <script setup lang="ts">import { computed,ref } from "vue";import { onLoad } from "@dcloudio/uni-app";import { getNotice,type OaNotice } from "../../../../api/bpm";import { useAuth } from "../../../../stores/auth";const {hasPermission,state}=useAuth(),notice=ref<OaNotice>(),loading=ref(false),canQuery=computed(()=>hasPermission("bpm:oa-notice:query"));onLoad(async q=>{const id=Number(q.id);if(!id||!state.accessToken||!canQuery.value)return;loading.value=true;try{notice.value=await getNotice(state.accessToken,id)}catch(e){uni.showToast({title:e instanceof Error?e.message:"详æ
å 载失败",icon:"none"})}finally{loading.value=false}});</script> |
| | | <template><view class="page"><view v-if="notice" class="detail"><view class="title-row"><text class="title">{{notice.title}}</text><text :class="['type',notice.type===2?'announcement':'notice']">{{notice.type===2?'å
¬å':'éç¥'}}</text></view><view class="meta"><text>{{notice.status===0?'è稿':notice.status===1?'å·²åå¸':'å·²æ¤é'}}</text><text>{{notice.sendScope===2?'æå®äººå':'éç¥ææäºº'}}</text><text v-if="notice.isTop===1">置顶</text></view><view class="info"><text>å叿¶é´ï¼{{notice.publishTime||'--'}}</text><text>å建æ¶é´ï¼{{notice.createTime||'--'}}</text><text v-if="notice.sendScope===2">æå®äººåï¼{{notice.userIds?.join('ã')||'--'}}</text></view><view class="content"><rich-text :nodes="notice.content||''"/></view></view><view v-else class="state">{{loading?'å è½½ä¸...':'ææ å
¬å详æ
'}}</view></view></template><style lang="scss" scoped>.page{min-height:100vh;padding:24rpx 30rpx;box-sizing:border-box;background:#f3f6fb}.detail{padding:30rpx 26rpx;background:#fff;border-radius:16rpx}.title-row{display:flex;align-items:flex-start;gap:16rpx}.title{min-width:0;flex:1;color:#20334c;font-size:34rpx;font-weight:700;line-height:1.4}.type{flex:none;padding:6rpx 14rpx;font-size:22rpx;border-radius:999rpx}.notice{color:#1769d8;background:#eef6ff}.announcement{color:#c78210;background:#fff5e6}.meta{display:flex;gap:12rpx;margin-top:18rpx}.meta text{padding:5rpx 12rpx;color:#64758b;font-size:22rpx;background:#f3f6fa;border-radius:999rpx}.info{display:grid;gap:12rpx;padding:22rpx 0;margin-top:22rpx;color:#718198;font-size:24rpx;border-top:1rpx solid #edf1f6;border-bottom:1rpx solid #edf1f6}.content{min-height:260rpx;padding-top:28rpx;color:#33455d;font-size:28rpx;line-height:1.8}.state{padding:80rpx;color:#8795a8;text-align:center}</style> |
| | | <template><view class="page"><view v-if="notice" class="detail"><view class="title-row"><text class="title">{{notice.title}}</text><text :class="['type',notice.type===2?'announcement':'notice']">{{notice.type===2?'å
¬å':'éç¥'}}</text></view><view class="meta"><text>{{notice.status===0?'è稿':notice.status===1?'å·²åå¸':'å·²æ¤é'}}</text><text>{{notice.sendScope===2?'æå®äººå':'éç¥ææäºº'}}</text><text v-if="notice.isTop===1">置顶</text></view><view class="info"><text>å叿¶é´ï¼{{notice.publishTime||'--'}}</text><text>å建æ¶é´ï¼{{notice.createTime||'--'}}</text><text v-if="notice.sendScope===2">æå®äººåï¼{{notice.userIds?.join('ã')||'--'}}</text></view><view class="content"><rich-text :nodes="notice.content||''"/></view></view><view v-else class="state">{{loading?'å è½½ä¸...':'ææ å
¬å详æ
'}}</view></view></template><style lang="scss" scoped>.page{min-height:100vh;padding:24rpx 30rpx;box-sizing:border-box;background:#f3f6fb}.detail{padding:30rpx 26rpx;background:#fff;border-radius:16rpx}.title-row{display:flex;align-items:flex-start;gap:16rpx}.title{min-width:0;flex:1;color:#20334c;font-size:34rpx;font-weight:700;line-height:1.4}.type{flex:none;padding:6rpx 14rpx;font-size:22rpx;border-radius:999rpx}.notice{color:var(--color-primary, #1769d8);background:var(--color-primary-soft, #eef6ff)}.announcement{color:#c78210;background:#fff5e6}.meta{display:flex;gap:12rpx;margin-top:18rpx}.meta text{padding:5rpx 12rpx;color:#64758b;font-size:22rpx;background:#f3f6fa;border-radius:999rpx}.info{display:grid;gap:12rpx;padding:22rpx 0;margin-top:22rpx;color:#718198;font-size:24rpx;border-top:1rpx solid #edf1f6;border-bottom:1rpx solid #edf1f6}.content{min-height:260rpx;padding-top:28rpx;color:#33455d;font-size:28rpx;line-height:1.8}.state{padding:80rpx;color:#8795a8;text-align:center}</style> |
| | |
| | | import { onLoad } from "@dcloudio/uni-app"; |
| | | import { createNotice, getBpmUserListByIds, getBpmUserPage, getNotice, updateNotice, type BpmUser, type OaNotice } from "../../../../api/bpm"; |
| | | import { useAuth } from "../../../../stores/auth"; |
| | | import { useAppTheme } from "../../../../stores/theme"; |
| | | |
| | | const { hasPermission, state } = useAuth(); |
| | | const { primaryColor } = useAppTheme(); |
| | | const id = ref<number>(); |
| | | const mode = ref("edit"); |
| | | const saving = ref(false); |
| | |
| | | <view class="field"><text>ç¶æ</text><picker v-if="!readonly" :range="['è稿','å·²åå¸','å·²æ¤é']" @change="form.status=Number($event.detail.value)"><view class="picker"><text>{{ ['è稿','å·²åå¸','å·²æ¤é'][form.status] }}</text><text>âº</text></view></picker><text v-else class="value">{{ ['è稿','å·²åå¸','å·²æ¤é'][form.status] }}</text></view> |
| | | <view class="field"><text>åéèå´ <text class="required">*</text></text><picker v-if="!readonly" :range="['éç¥ææäºº','æå®äººå']" @change="changeScope(Number($event.detail.value))"><view class="picker"><text>{{ form.sendScope===2?'æå®äººå':'éç¥ææäºº' }}</text><text>âº</text></view></picker><text v-else class="value">{{ form.sendScope===2?'æå®äººå':'éç¥ææäºº' }}</text></view> |
| | | <view v-if="form.sendScope===2" class="field"><text>æå®äººå <text class="required">*</text></text><view class="picker user-value" @click="openUserPicker"><text>{{ selectedUserText }}</text><text v-if="!readonly">âº</text></view></view> |
| | | <view class="field"><text>æ¯å¦ç½®é¡¶</text><switch :checked="form.isTop===1" :disabled="readonly" color="#1769d8" @change="form.isTop=$event.detail.value?1:0"/></view> |
| | | <view class="field"><text>æ¯å¦ç½®é¡¶</text><switch :checked="form.isTop===1" :disabled="readonly" :color="primaryColor" @change="form.isTop=$event.detail.value?1:0"/></view> |
| | | <view class="field column"><text>å
容 <text class="required">*</text></text><textarea v-model="form.content" :disabled="readonly" placeholder="请è¾å
¥éç¥å
¬åå
容"/></view> |
| | | </view> |
| | | <button v-if="canSave" class="save" :loading="saving" @click="save">ä¿å</button> |
| | |
| | | |
| | | <style lang="scss" scoped> |
| | | @import "../../../ai/form.scss"; |
| | | .user-value{min-width:0}.user-value text:first-child{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.mask{position:fixed;z-index:50;inset:0;display:flex;align-items:flex-end;background:rgba(21,35,52,.42)}.user-sheet{width:100%;height:76vh;overflow:hidden;background:#f5f7fa;border-radius:20rpx 20rpx 0 0}.sheet-head{display:grid;height:92rpx;grid-template-columns:120rpx 1fr 150rpx;align-items:center;padding:0 26rpx;color:#65768b;font-size:26rpx;background:#fff;border-bottom:1rpx solid #e9edf2}.sheet-title{color:#20334c;font-size:29rpx;font-weight:600;text-align:center}.confirm{color:#1769d8;text-align:right}.user-search{display:flex;align-items:center;height:76rpx;padding:0 20rpx;margin:18rpx 24rpx;background:#fff;border-radius:12rpx}.user-search input{min-width:0;flex:1;font-size:26rpx}.user-search text{padding-left:20rpx;color:#1769d8;font-size:25rpx}.user-list{height:calc(76vh - 204rpx);background:#fff}.user-row{display:flex;min-height:94rpx;align-items:center;padding:0 28rpx;border-bottom:1rpx solid #edf1f5}.user-main{display:flex;min-width:0;flex:1;flex-direction:column;gap:7rpx}.user-main text:first-child{color:#263a53;font-size:27rpx}.user-main text:last-child{color:#8a98aa;font-size:22rpx}.check{display:flex;width:38rpx;height:38rpx;align-items:center;justify-content:center;color:#fff;font-size:25rpx;border:2rpx solid #ccd5e0;border-radius:50%}.check.checked{background:#1769d8;border-color:#1769d8}.sheet-state{display:block;padding:30rpx;color:#8a98aa;font-size:24rpx;text-align:center} |
| | | .user-value{min-width:0}.user-value text:first-child{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.mask{position:fixed;z-index:50;inset:0;display:flex;align-items:flex-end;background:rgba(21,35,52,.42)}.user-sheet{width:100%;height:76vh;overflow:hidden;background:#f5f7fa;border-radius:20rpx 20rpx 0 0}.sheet-head{display:grid;height:92rpx;grid-template-columns:120rpx 1fr 150rpx;align-items:center;padding:0 26rpx;color:#65768b;font-size:26rpx;background:#fff;border-bottom:1rpx solid #e9edf2}.sheet-title{color:#20334c;font-size:29rpx;font-weight:600;text-align:center}.confirm{color:var(--color-primary, #1769d8);text-align:right}.user-search{display:flex;align-items:center;height:76rpx;padding:0 20rpx;margin:18rpx 24rpx;background:#fff;border-radius:12rpx}.user-search input{min-width:0;flex:1;font-size:26rpx}.user-search text{padding-left:20rpx;color:var(--color-primary, #1769d8);font-size:25rpx}.user-list{height:calc(76vh - 204rpx);background:#fff}.user-row{display:flex;min-height:94rpx;align-items:center;padding:0 28rpx;border-bottom:1rpx solid #edf1f5}.user-main{display:flex;min-width:0;flex:1;flex-direction:column;gap:7rpx}.user-main text:first-child{color:#263a53;font-size:27rpx}.user-main text:last-child{color:#8a98aa;font-size:22rpx}.check{display:flex;width:38rpx;height:38rpx;align-items:center;justify-content:center;color:#fff;font-size:25rpx;border:2rpx solid #ccd5e0;border-radius:50%}.check.checked{background:var(--color-primary, #1769d8);border-color:var(--color-primary, #1769d8)}.sheet-state{display:block;padding:30rpx;color:#8a98aa;font-size:24rpx;text-align:center} |
| | | </style> |
| | |
| | | async function save(){ if(saving.value||!canSave.value)return; if(!state.accessToken)return; if(!form.name){toast("请填å表达å¼åç§°");return;} saving.value=true; try{ if(id.value)await updateProcessExpression(state.accessToken,form); else await createProcessExpression(state.accessToken,form); uni.showToast({title:"å·²ä¿å",icon:"success"}); setTimeout(()=>uni.navigateBack(),500);}catch(e){toast(e instanceof Error?e.message:"ä¿å失败");}finally{saving.value=false}} |
| | | </script> |
| | | <template><view class="page"><view class="card"><view class="field"><text>表达å¼åç§° <text class="required">*</text></text><input v-model="form.name" :disabled="!canSave" placeholder="请è¾å
¥è¡¨è¾¾å¼åç§°"/></view><view class="field"><text>ç¶æ</text><switch :checked="form.status!==1" :disabled="!canSave" @change="form.status=$event.detail.value?0:1"/></view><view class="field column"><text>表达å¼</text><textarea v-model="form.expression" :disabled="!canSave" placeholder="请è¾å
¥è¡¨è¾¾å¼"/></view></view><button v-if="canSave" class="save" :loading="saving" @click="save">ä¿å</button></view></template> |
| | | <style lang="scss" scoped>.page{min-height:100vh;padding:24rpx 30rpx 70rpx;background:#f6f7f9}.card{overflow:hidden;background:#fff;border-radius:16rpx}.field{display:flex;align-items:center;min-height:96rpx;gap:20rpx;padding:0 24rpx;border-bottom:1rpx solid #eef1f5}.field>text:first-child{width:190rpx;flex:none;color:#33455d;font-size:27rpx}.field input{min-width:0;flex:1;color:#1e3049;font-size:27rpx;text-align:right}.required{color:#e23b3b}.column{align-items:flex-start;flex-direction:column;padding:20rpx 24rpx}.column>text:first-child{width:auto}.column textarea{width:100%;height:220rpx;box-sizing:border-box;font-size:27rpx}.save{margin-top:32rpx;color:#fff;font-size:30rpx;background:#1769d8;border-radius:12rpx}.save::after{border:0}</style> |
| | | <style lang="scss" scoped>.page{min-height:100vh;padding:24rpx 30rpx 70rpx;background:#f6f7f9}.card{overflow:hidden;background:#fff;border-radius:16rpx}.field{display:flex;align-items:center;min-height:96rpx;gap:20rpx;padding:0 24rpx;border-bottom:1rpx solid #eef1f5}.field>text:first-child{width:190rpx;flex:none;color:#33455d;font-size:27rpx}.field input{min-width:0;flex:1;color:#1e3049;font-size:27rpx;text-align:right}.required{color:#e23b3b}.column{align-items:flex-start;flex-direction:column;padding:20rpx 24rpx}.column>text:first-child{width:auto}.column textarea{width:100%;height:220rpx;box-sizing:border-box;font-size:27rpx}.save{margin-top:32rpx;color:#fff;font-size:30rpx;background:var(--color-primary, #1769d8);border-radius:12rpx}.save::after{border:0}</style> |
| | |
| | | onShow(()=>load(true)); onPullDownRefresh(async()=>{await load(true);uni.stopPullDownRefresh()}); onReachBottom(()=>load()); |
| | | </script> |
| | | <template><view class="page"><view class="search"><input v-model="keyword" placeholder="æç´¢è¡¨è¾¾å¼åç§°" confirm-type="search" @confirm="load(true)"/><text @click="load(true)">æç´¢</text></view><view v-if="error" class="state error" @click="load(true)">{{ error }}</view><view v-for="item in list" :key="item.id" class="card"><view class="head"><view><text class="name">{{ item.name }}</text><text>{{ fmt(item.expression) }}</text></view><text :class="['tag',statusClass(item.status)]">{{ statusText(item.status) }}</text></view><view class="grid"><text>å建æ¶é´ï¼{{ fmt(item.createTime) }}</text></view><view class="actions"><button @click="go(item.id,'detail')">详æ
</button><button v-if="canUpdate" @click="go(item.id)">ç¼è¾</button><button v-if="canDelete" class="danger" @click="remove(item.id)">å é¤</button></view></view><view v-if="!list.length&&!loading" class="state">ææ æµç¨è¡¨è¾¾å¼</view><view v-else class="more">{{ hasMore ? (loading?'å è½½ä¸...':'䏿å è½½æ´å¤') : 'æ²¡ææ´å¤äº' }}</view><button v-if="canCreate" class="fab" @click="go()"><view /></button></view></template> |
| | | <style lang="scss" scoped>.page{min-height:100vh;padding:20rpx 30rpx 150rpx;box-sizing:border-box;background:#f3f6fb}.search{display:flex;align-items:center;height:80rpx;padding:0 20rpx;margin-bottom:18rpx;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}.card{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{min-width:0;display:flex;flex:1;flex-direction:column;gap:8rpx}.name{overflow:hidden;color:#20334c;font-size:30rpx;font-weight:700;text-overflow:ellipsis;white-space:nowrap}.head text:last-child{color:#78879b;font-size:23rpx}.tag{flex:none;padding:6rpx 16rpx;font-size:22rpx;border-radius:999rpx}.tag-on{color:#0e9663;background:#e9fbf2;border:1rpx solid #b8eed4}.tag-off{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}.state,.more{display:block;padding:45rpx 0;color:#8795a8;font-size:26rpx;text-align:center}.error{color:#c65050}.fab{position:fixed;right:32rpx;bottom:56rpx;display:flex;width:100rpx;height:100rpx;align-items:center;justify-content:center;padding:0;margin:0;background:#1769d8;border-radius:50%;box-shadow:0 14rpx 28rpx rgba(23,105,216,.32)}.fab view{position:relative;width:38rpx;height:38rpx}.fab view::before,.fab view::after{position:absolute;content:"";background:#fff;border-radius:3rpx}.fab view::before{top:17rpx;left:0;width:38rpx;height:4rpx}.fab view::after{top:0;left:17rpx;width:4rpx;height:38rpx}</style> |
| | | <style lang="scss" scoped>.page{min-height:100vh;padding: 20rpx 30rpx 132rpx;box-sizing:border-box;background:#f3f6fb}.search{display:flex;align-items:center;height:80rpx;padding:0 20rpx;margin-bottom:18rpx;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:var(--color-primary, #1769d8);font-size:24rpx}.card{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{min-width:0;display:flex;flex:1;flex-direction:column;gap:8rpx}.name{overflow:hidden;color:#20334c;font-size:30rpx;font-weight:700;text-overflow:ellipsis;white-space:nowrap}.head text:last-child{color:#78879b;font-size:23rpx}.tag{flex:none;padding:6rpx 16rpx;font-size:22rpx;border-radius:999rpx}.tag-on{color:#0e9663;background:#e9fbf2;border:1rpx solid #b8eed4}.tag-off{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:var(--color-primary, #1769d8);font-size:22rpx;line-height:48rpx;background:var(--color-primary-soft, #f5f8ff);border:1rpx solid var(--color-primary-border, #8ab3ee);border-radius:8rpx}.actions .danger{color:#c65050;background:#fff7f7;border-color:#e3a0a0}.actions button::after,.fab::after{border:0}.state,.more{display:block;padding:45rpx 0;color:#8795a8;font-size:26rpx;text-align:center}.error{color:#c65050}.fab{position:fixed;right:32rpx;bottom:56rpx;display:flex;width:100rpx;height:100rpx;align-items:center;justify-content:center;padding:0;margin:0;background:var(--color-primary, #1769d8);border-radius:50%;box-shadow:0 14rpx 28rpx rgba(23,105,216,.32)}.fab view{position:relative;width:38rpx;height:38rpx}.fab view::before,.fab view::after{position:absolute;content:"";background:#fff;border-radius:3rpx}.fab view::before{top:17rpx;left:0;width:38rpx;height:4rpx}.fab view::after{top:0;left:17rpx;width:4rpx;height:38rpx}</style> |
| | |
| | | .footer{position:fixed;z-index:20;right:0;bottom:0;left:0;display:flex;gap:20rpx;padding:16rpx 30rpx calc(20rpx + env(safe-area-inset-bottom));background:#fff;border-top:1rpx solid #e9eef5;box-shadow:0 -6rpx 20rpx rgba(43,69,107,.06)} |
| | | .btn{flex:1;font-size:29rpx;border-radius:14rpx} |
| | | .btn.ghost{color:#3d5069;background:#fff;border:1rpx solid #dbe4ef} |
| | | .btn.primary{color:#fff;background:#1769d8} |
| | | .btn.primary{color:#fff;background:var(--color-primary, #1769d8)} |
| | | .state{flex:1;padding:60rpx 20rpx;color:#8795a8;font-size:25rpx;text-align:center} |
| | | .state.error{color:#c65050} |
| | | </style> |
| | |
| | | .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 12rpx;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} |
| | | .search text{color:var(--color-primary, #1769d8);font-size:24rpx} |
| | | .tabs{flex:none;margin-bottom:14rpx;white-space:nowrap} |
| | | .tab{display:inline-block;padding:10rpx 24rpx;margin-right:14rpx;color:#3d5069;font-size:25rpx;background:#fff;border:1rpx solid #dbe4ef;border-radius:999rpx} |
| | | .tab.active{color:#fff;background:#1769d8;border-color:#1769d8} |
| | | .tab.active{color:#fff;background:var(--color-primary, #1769d8);border-color:var(--color-primary, #1769d8)} |
| | | .content{height:0;flex:1;padding-bottom:40rpx;box-sizing:border-box} |
| | | .group{padding:20rpx 22rpx;margin-bottom:18rpx;background:#fff;border-radius:16rpx;box-shadow:0 10rpx 24rpx rgba(43,69,107,.08)} |
| | | .group-title{display:block;margin-bottom:14rpx;color:#20334c;font-size:27rpx;font-weight:600} |
| | |
| | | .hero-main{display:flex;min-width:0;flex:1;flex-direction:column;gap:10rpx} |
| | | .hero-name{color:#20334c;font-size:32rpx;font-weight:600} |
| | | .hero-meta{color:#8795a8;font-size:23rpx} |
| | | .hero-status{flex:none;padding:8rpx 18rpx;color:#1769d8;font-size:23rpx;background:#eef4fd;border:1rpx solid #cfe0f8;border-radius:999rpx} |
| | | .hero-status{flex:none;padding:8rpx 18rpx;color:var(--color-primary, #1769d8);font-size:23rpx;background:#eef4fd;border:1rpx solid #cfe0f8;border-radius:999rpx} |
| | | .tabs{display:flex;gap:14rpx;margin-bottom:16rpx} |
| | | .tab{flex:1;padding:16rpx 0;color:#3d5069;font-size:26rpx;text-align:center;background:#fff;border-radius:14rpx} |
| | | .tab.active{color:#fff;background:#1769d8} |
| | | .tab.active{color:#fff;background:var(--color-primary, #1769d8)} |
| | | .card{padding:24rpx 22rpx;margin-bottom:18rpx;background:#fff;border-radius:16rpx;box-shadow:0 10rpx 24rpx rgba(43,69,107,.08)} |
| | | .card-title{display:block;margin-bottom:18rpx;color:#20334c;font-size:28rpx;font-weight:600} |
| | | .empty-tip{display:block;padding:20rpx 0;color:#9aa8ba;font-size:24rpx} |
| | |
| | | .record-status{flex:none;font-size:23rpx} |
| | | .record-line{display:block;color:#66778c;font-size:23rpx;line-height:1.7} |
| | | .footer{position:fixed;z-index:20;right:0;bottom:0;left:0;display:flex;flex-wrap:wrap;gap:14rpx;padding:18rpx 30rpx calc(20rpx + env(safe-area-inset-bottom));background:#fff;border-top:1rpx solid #e6ecf4;box-shadow:0 -6rpx 20rpx rgba(43,69,107,.06)} |
| | | .op{flex:1;min-width:150rpx;padding:18rpx 0;color:#1769d8;font-size:26rpx;text-align:center;background:#eef4fd;border-radius:14rpx} |
| | | .op.primary{color:#fff;background:#1769d8} |
| | | .op{flex:1;min-width:150rpx;padding:18rpx 0;color:var(--color-primary, #1769d8);font-size:26rpx;text-align:center;background:#eef4fd;border-radius:14rpx} |
| | | .op.primary{color:#fff;background:var(--color-primary, #1769d8)} |
| | | .op.danger{color:#d9534f;background:#fdeeee} |
| | | .mask{position:fixed;inset:0;z-index:100;display:flex;align-items:flex-end;background:rgba(20,32,48,.45)} |
| | | .modal{width:100%;max-height:82vh;overflow-y:auto;padding:30rpx 30rpx 40rpx;background:#fff;border-radius:24rpx 24rpx 0 0;box-sizing:border-box} |
| | |
| | | .modal-textarea{width:100%;min-height:170rpx;padding:20rpx 24rpx;font-size:27rpx;background:#f7f8fa;border-radius:12rpx;box-sizing:border-box} |
| | | .sign-types{display:flex;gap:14rpx} |
| | | .sign-type{flex:1;padding:16rpx 0;color:#3d5069;font-size:26rpx;text-align:center;background:#f7f8fa;border-radius:12rpx} |
| | | .sign-type.active{color:#fff;background:#1769d8} |
| | | .sign-type.active{color:#fff;background:var(--color-primary, #1769d8)} |
| | | .attach-list{margin-bottom:12rpx} |
| | | .attach-item{display:flex;align-items:center;justify-content:space-between;padding:12rpx 16rpx;margin-bottom:8rpx;background:#f7f8fa;border-radius:10rpx} |
| | | .attach-name{color:#3d5069;font-size:25rpx} |
| | | .attach-remove{color:#d9534f;font-size:24rpx} |
| | | .attach-btn{font-size:26rpx;color:#1769d8;background:#eef4fd;border-radius:12rpx} |
| | | .attach-btn{font-size:26rpx;color:var(--color-primary, #1769d8);background:#eef4fd;border-radius:12rpx} |
| | | .modal-actions{display:flex;gap:20rpx;margin-top:30rpx} |
| | | .modal-btn{flex:1;padding:22rpx 0;font-size:29rpx;text-align:center;border-radius:14rpx} |
| | | .modal-btn.ghost{color:#3d5069;background:#f2f5f9} |
| | | .modal-btn.primary{color:#fff;background:#1769d8} |
| | | .modal-btn.primary{color:#fff;background:var(--color-primary, #1769d8)} |
| | | .modal-btn.disabled{opacity:.6} |
| | | </style> |
| | |
| | | onShow(()=>load(true)); onPullDownRefresh(async()=>{await load(true);uni.stopPullDownRefresh()}); onReachBottom(()=>{if(hasMore.value)load()}); |
| | | </script> |
| | | <template><view class="page"><view class="search"><input v-model="keyword" placeholder="æç´¢æµç¨åç§°" confirm-type="search" @confirm="load(true)"/><text @click="load(true)">æç´¢</text></view><view v-if="error" class="state error" @click="load(true)">{{ error }}</view><view v-for="row in list" :key="row.id" class="card"><view class="head"><view><text class="name">{{ row.name || 'æµç¨å®ä¾' }}</text><text>{{ row.processDefinition?.name || row.processDefinitionKey || 'ææ æµç¨å®ä¹' }}</text></view><text :class="['tag',statusClass(row)]">{{ statusText(row) }}</text></view><view class="summary">{{ summaryInline(row.summary) || 'ææ æè¦' }}</view><view class="grid"><text>å起人ï¼{{ row.startUser?.nickname || '--' }}</text><text>åç±»ï¼{{ row.categoryName || row.category || '--' }}</text><text>å¼å§æ¶é´ï¼{{ dateTimeText(row.startTime || row.createTime) }}</text><text>ç»ææ¶é´ï¼{{ dateTimeText(row.endTime) }}</text></view><view class="actions"><button v-if="canDetail" @click="goDetail(row)">详æ
</button></view></view><view v-if="!list.length&&!loading" class="state">ææ æµç¨å®ä¾</view><view v-else class="more">{{ hasMore ? (loading?'å è½½ä¸...':'䏿å è½½æ´å¤') : 'æ²¡ææ´å¤äº' }}</view></view></template> |
| | | <style lang="scss" scoped>.page{min-height:100vh;padding:20rpx 30rpx 70rpx;box-sizing:border-box;background:#f3f6fb}.search{display:flex;align-items:center;height:80rpx;padding:0 20rpx;margin-bottom:18rpx;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}.card{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{min-width:0;display:flex;flex:1;flex-direction:column;gap:8rpx}.name{overflow:hidden;color:#20334c;font-size:30rpx;font-weight:700;text-overflow:ellipsis;white-space:nowrap}.head text:last-child{color:#78879b;font-size:23rpx}.tag{flex:none;padding:6rpx 16rpx;font-size:22rpx;border-radius:999rpx}.tag-success,.tag-approved,.tag-finished{color:#0e9663;background:#e9fbf2;border:1rpx solid #b8eed4}.tag-draft,.tag-warning{color:#c78210;background:#fff8e8;border:1rpx solid #f2d396}.tag-danger,.tag-cancelled{color:#c65050;background:#fff0f0;border:1rpx solid #efb8b8}.tag-info,.tag-progress{color:#1769d8;background:#eef6ff;border:1rpx solid #cfe2ff}.summary{margin-top:14rpx;padding:14rpx 16rpx;color:#4e617b;font-size:24rpx;line-height:1.5;background:#f7faff;border-radius:12rpx}.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}.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{border:0}.state,.more{display:block;padding:45rpx 0;color:#8795a8;font-size:26rpx;text-align:center}.error{color:#c65050}</style> |
| | | <style lang="scss" scoped>.page{min-height:100vh;padding:20rpx 30rpx 70rpx;box-sizing:border-box;background:#f3f6fb}.search{display:flex;align-items:center;height:80rpx;padding:0 20rpx;margin-bottom:18rpx;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:var(--color-primary, #1769d8);font-size:24rpx}.card{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{min-width:0;display:flex;flex:1;flex-direction:column;gap:8rpx}.name{overflow:hidden;color:#20334c;font-size:30rpx;font-weight:700;text-overflow:ellipsis;white-space:nowrap}.head text:last-child{color:#78879b;font-size:23rpx}.tag{flex:none;padding:6rpx 16rpx;font-size:22rpx;border-radius:999rpx}.tag-success,.tag-approved,.tag-finished{color:#0e9663;background:#e9fbf2;border:1rpx solid #b8eed4}.tag-draft,.tag-warning{color:#c78210;background:#fff8e8;border:1rpx solid #f2d396}.tag-danger,.tag-cancelled{color:#c65050;background:#fff0f0;border:1rpx solid #efb8b8}.tag-info,.tag-progress{color:var(--color-primary, #1769d8);background:var(--color-primary-soft, #eef6ff);border:1rpx solid #cfe2ff}.summary{margin-top:14rpx;padding:14rpx 16rpx;color:#4e617b;font-size:24rpx;line-height:1.5;background:#f7faff;border-radius:12rpx}.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}.actions{display:flex;justify-content:flex-end;padding-top:16rpx}.actions button{min-height:50rpx;padding:0 16rpx;margin:0;color:var(--color-primary, #1769d8);font-size:22rpx;line-height:48rpx;background:var(--color-primary-soft, #f5f8ff);border:1rpx solid var(--color-primary-border, #8ab3ee);border-radius:8rpx}.actions button::after{border:0}.state,.more{display:block;padding:45rpx 0;color:#8795a8;font-size:26rpx;text-align:center}.error{color:#c65050}</style> |
| | |
| | | .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 12rpx;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} |
| | | .search text{color:var(--color-primary, #1769d8);font-size:24rpx} |
| | | .filters{display:flex;align-items:center;gap:12rpx;margin-bottom:16rpx;overflow:hidden} |
| | | .filter{flex:none;max-width:210rpx;overflow:hidden;padding:10rpx 20rpx;color:#3d5069;font-size:24rpx;text-overflow:ellipsis;white-space:nowrap;background:#fff;border:1rpx solid #dbe4ef;border-radius:999rpx} |
| | | .reset{flex:none;margin-left:auto;color:#1769d8;font-size:24rpx} |
| | | .reset{flex:none;margin-left:auto;color:var(--color-primary, #1769d8);font-size:24rpx} |
| | | .content{height:0;flex:1;padding-bottom:60rpx;box-sizing:border-box} |
| | | .row{padding:24rpx 22rpx 18rpx;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} |
| | |
| | | .grid text{overflow:hidden;text-overflow:ellipsis} |
| | | .grid .summary{white-space:normal;word-break:break-all} |
| | | .actions{display:flex;justify-content:flex-end;gap:14rpx;padding-top:14rpx;border-top:1rpx solid #edf1f6} |
| | | .action{padding:8rpx 22rpx;color:#1769d8;font-size:24rpx;background:#eef4fd;border-radius:999rpx} |
| | | .action{padding:8rpx 22rpx;color:var(--color-primary, #1769d8);font-size:24rpx;background:#eef4fd;border-radius:999rpx} |
| | | .action.danger{color:#d9534f;background:#fdeeee} |
| | | .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} |
| | |
| | | async function save(){ if(saving.value||!canSave.value)return; if(!state.accessToken)return; if(!form.name){toast("请填åçå¬å¨åç§°");return;} saving.value=true; try{ if(id.value)await updateProcessListener(state.accessToken,form); else await createProcessListener(state.accessToken,form); uni.showToast({title:"å·²ä¿å",icon:"success"}); setTimeout(()=>uni.navigateBack(),500);}catch(e){toast(e instanceof Error?e.message:"ä¿å失败");}finally{saving.value=false}} |
| | | </script> |
| | | <template><view class="page"><view class="card"><view class="field"><text>çå¬å¨åç§° <text class="required">*</text></text><input v-model="form.name" :disabled="!canSave" placeholder="请è¾å
¥çå¬å¨åç§°"/></view><view class="field"><text>çå¬å¨ç±»å</text><picker :disabled="!canSave" :range="['æ§è¡çå¬å¨','ä»»å¡çå¬å¨']" :value="form.type===2?1:0" @change="form.type=Number($event.detail.value)===1?2:1"><view class="picker"><text>{{ form.type===2?'ä»»å¡çå¬å¨':'æ§è¡çå¬å¨' }}</text><text>âº</text></view></picker></view><view class="field"><text>äºä»¶</text><input v-model="form.event" :disabled="!canSave" placeholder="请è¾å
¥äºä»¶"/></view><view class="field"><text>å¼ç±»å</text><input :value="String(form.valueType||'')" :disabled="!canSave" type="number" @input="form.valueType=Number($event.detail.value||0)"/></view><view class="field"><text>ç¶æ</text><switch :checked="form.status!==1" :disabled="!canSave" @change="form.status=$event.detail.value?0:1"/></view><view class="field column"><text>çå¬å¼</text><textarea v-model="form.value" :disabled="!canSave" placeholder="请è¾å
¥ç±»åãè¡¨è¾¾å¼æèæ¬"/></view></view><button v-if="canSave" class="save" :loading="saving" @click="save">ä¿å</button></view></template> |
| | | <style lang="scss" scoped>.page{min-height:100vh;padding:24rpx 30rpx 70rpx;background:#f6f7f9}.card{overflow:hidden;background:#fff;border-radius:16rpx}.field{display:flex;align-items:center;min-height:96rpx;gap:20rpx;padding:0 24rpx;border-bottom:1rpx solid #eef1f5}.field>text:first-child{width:190rpx;flex:none;color:#33455d;font-size:27rpx}.field input,.field picker,.picker{min-width:0;flex:1;color:#1e3049;font-size:27rpx}.field input{text-align:right}.picker{display:flex;align-items:center;justify-content:space-between;gap:12rpx;color:#65758a}.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;color:#8092a7;font-size:36rpx}.required{color:#e23b3b}.column{align-items:flex-start;flex-direction:column;padding:20rpx 24rpx}.column>text:first-child{width:auto}.column textarea{width:100%;height:180rpx;box-sizing:border-box;font-size:27rpx}.save{margin-top:32rpx;color:#fff;font-size:30rpx;background:#1769d8;border-radius:12rpx}.save::after{border:0}</style> |
| | | <style lang="scss" scoped>.page{min-height:100vh;padding:24rpx 30rpx 70rpx;background:#f6f7f9}.card{overflow:hidden;background:#fff;border-radius:16rpx}.field{display:flex;align-items:center;min-height:96rpx;gap:20rpx;padding:0 24rpx;border-bottom:1rpx solid #eef1f5}.field>text:first-child{width:190rpx;flex:none;color:#33455d;font-size:27rpx}.field input,.field picker,.picker{min-width:0;flex:1;color:#1e3049;font-size:27rpx}.field input{text-align:right}.picker{display:flex;align-items:center;justify-content:space-between;gap:12rpx;color:#65758a}.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;color:#8092a7;font-size:36rpx}.required{color:#e23b3b}.column{align-items:flex-start;flex-direction:column;padding:20rpx 24rpx}.column>text:first-child{width:auto}.column textarea{width:100%;height:180rpx;box-sizing:border-box;font-size:27rpx}.save{margin-top:32rpx;color:#fff;font-size:30rpx;background:var(--color-primary, #1769d8);border-radius:12rpx}.save::after{border:0}</style> |
| | |
| | | onShow(()=>load(true)); onPullDownRefresh(async()=>{await load(true);uni.stopPullDownRefresh()}); onReachBottom(()=>load()); |
| | | </script> |
| | | <template><view class="page"><view class="search"><input v-model="keyword" placeholder="æç´¢çå¬å¨åç§°" confirm-type="search" @confirm="load(true)"/><text @click="load(true)">æç´¢</text></view><view v-if="error" class="state error" @click="load(true)">{{ error }}</view><view v-for="item in list" :key="item.id" class="card"><view class="head"><view><text class="name">{{ item.name }}</text><text>{{ typeText(item.type) }} · {{ fmt(item.event) }}</text></view><text :class="['tag',statusClass(item.status)]">{{ statusText(item.status) }}</text></view><view class="grid"><text>å¼ç±»åï¼{{ fmt(item.valueType) }}</text><text>çå¬å¼ï¼{{ fmt(item.value) }}</text><text>å建æ¶é´ï¼{{ fmt(item.createTime) }}</text></view><view class="actions"><button @click="go(item.id,'detail')">详æ
</button><button v-if="canUpdate" @click="go(item.id)">ç¼è¾</button><button v-if="canDelete" class="danger" @click="remove(item.id)">å é¤</button></view></view><view v-if="!list.length&&!loading" class="state">ææ æµç¨çå¬å¨</view><view v-else class="more">{{ hasMore ? (loading?'å è½½ä¸...':'䏿å è½½æ´å¤') : 'æ²¡ææ´å¤äº' }}</view><button v-if="canCreate" class="fab" @click="go()"><view /></button></view></template> |
| | | <style lang="scss" scoped>.page{min-height:100vh;padding:20rpx 30rpx 150rpx;box-sizing:border-box;background:#f3f6fb}.search{display:flex;align-items:center;height:80rpx;padding:0 20rpx;margin-bottom:18rpx;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}.card{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{min-width:0;display:flex;flex:1;flex-direction:column;gap:8rpx}.name{overflow:hidden;color:#20334c;font-size:30rpx;font-weight:700;text-overflow:ellipsis;white-space:nowrap}.head text:last-child{color:#78879b;font-size:23rpx}.tag{flex:none;padding:6rpx 16rpx;font-size:22rpx;border-radius:999rpx}.tag-on{color:#0e9663;background:#e9fbf2;border:1rpx solid #b8eed4}.tag-off{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}.state,.more{display:block;padding:45rpx 0;color:#8795a8;font-size:26rpx;text-align:center}.error{color:#c65050}.fab{position:fixed;right:32rpx;bottom:56rpx;display:flex;width:100rpx;height:100rpx;align-items:center;justify-content:center;padding:0;margin:0;background:#1769d8;border-radius:50%;box-shadow:0 14rpx 28rpx rgba(23,105,216,.32)}.fab view{position:relative;width:38rpx;height:38rpx}.fab view::before,.fab view::after{position:absolute;content:"";background:#fff;border-radius:3rpx}.fab view::before{top:17rpx;left:0;width:38rpx;height:4rpx}.fab view::after{top:0;left:17rpx;width:4rpx;height:38rpx}</style> |
| | | <style lang="scss" scoped>.page{min-height:100vh;padding: 20rpx 30rpx 132rpx;box-sizing:border-box;background:#f3f6fb}.search{display:flex;align-items:center;height:80rpx;padding:0 20rpx;margin-bottom:18rpx;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:var(--color-primary, #1769d8);font-size:24rpx}.card{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{min-width:0;display:flex;flex:1;flex-direction:column;gap:8rpx}.name{overflow:hidden;color:#20334c;font-size:30rpx;font-weight:700;text-overflow:ellipsis;white-space:nowrap}.head text:last-child{color:#78879b;font-size:23rpx}.tag{flex:none;padding:6rpx 16rpx;font-size:22rpx;border-radius:999rpx}.tag-on{color:#0e9663;background:#e9fbf2;border:1rpx solid #b8eed4}.tag-off{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:var(--color-primary, #1769d8);font-size:22rpx;line-height:48rpx;background:var(--color-primary-soft, #f5f8ff);border:1rpx solid var(--color-primary-border, #8ab3ee);border-radius:8rpx}.actions .danger{color:#c65050;background:#fff7f7;border-color:#e3a0a0}.actions button::after,.fab::after{border:0}.state,.more{display:block;padding:45rpx 0;color:#8795a8;font-size:26rpx;text-align:center}.error{color:#c65050}.fab{position:fixed;right:32rpx;bottom:56rpx;display:flex;width:100rpx;height:100rpx;align-items:center;justify-content:center;padding:0;margin:0;background:var(--color-primary, #1769d8);border-radius:50%;box-shadow:0 14rpx 28rpx rgba(23,105,216,.32)}.fab view{position:relative;width:38rpx;height:38rpx}.fab view::before,.fab view::after{position:absolute;content:"";background:#fff;border-radius:3rpx}.fab view::before{top:17rpx;left:0;width:38rpx;height:4rpx}.fab view::after{top:0;left:17rpx;width:4rpx;height:38rpx}</style> |
| | |
| | | .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} |
| | | .search text{color:var(--color-primary, #1769d8);font-size:24rpx} |
| | | .content{height:0;flex:1;padding-bottom:60rpx;box-sizing:border-box} |
| | | .row{padding:24rpx 22rpx 18rpx;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} |
| | |
| | | .grid text{overflow:hidden;text-overflow:ellipsis} |
| | | .grid .summary{white-space:normal;word-break:break-all} |
| | | .actions{display:flex;justify-content:flex-end;padding-top:14rpx;border-top:1rpx solid #edf1f6} |
| | | .action{padding:8rpx 26rpx;color:#1769d8;font-size:24rpx;background:#eef4fd;border-radius:999rpx} |
| | | .action{padding:8rpx 26rpx;color:var(--color-primary, #1769d8);font-size:24rpx;background:#eef4fd;border-radius:999rpx} |
| | | .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} |
| | |
| | | .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 12rpx;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} |
| | | .search text{color:var(--color-primary, #1769d8);font-size:24rpx} |
| | | .filters{display:flex;align-items:center;gap:12rpx;margin-bottom:16rpx;overflow:hidden} |
| | | .filter{flex:none;max-width:210rpx;overflow:hidden;padding:10rpx 20rpx;color:#3d5069;font-size:24rpx;text-overflow:ellipsis;white-space:nowrap;background:#fff;border:1rpx solid #dbe4ef;border-radius:999rpx} |
| | | .reset{flex:none;margin-left:auto;color:#1769d8;font-size:24rpx} |
| | | .reset{flex:none;margin-left:auto;color:var(--color-primary, #1769d8);font-size:24rpx} |
| | | .content{height:0;flex:1;padding-bottom:60rpx;box-sizing:border-box} |
| | | .row{padding:24rpx 22rpx 18rpx;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} |
| | |
| | | .grid text{overflow:hidden;text-overflow:ellipsis} |
| | | .grid .summary{white-space:normal;word-break:break-all} |
| | | .actions{display:flex;justify-content:flex-end;gap:14rpx;padding-top:14rpx;border-top:1rpx solid #edf1f6} |
| | | .action{padding:8rpx 22rpx;color:#1769d8;font-size:24rpx;background:#eef4fd;border-radius:999rpx} |
| | | .action{padding:8rpx 22rpx;color:var(--color-primary, #1769d8);font-size:24rpx;background:#eef4fd;border-radius:999rpx} |
| | | .action.danger{color:#d9534f;background:#fdeeee} |
| | | .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} |
| | |
| | | import { computed,ref } from "vue";import { onPullDownRefresh,onReachBottom,onShow } from "@dcloudio/uni-app";import { getTaskManagerPage,type BpmTask } from "../../../../api/bpm";import { getSimpleDictDataList,type DictData } from "../../../../api/crm";import { useAuth } from "../../../../stores/auth";import { DICT,dateTimeText,dictLabel,durationText,taskStatusText } from "../../shared";import { statusToneClass } from "../../../../utils/status"; |
| | | const {hasPermission,state}=useAuth(),keyword=ref(""),rows=ref<BpmTask[]>([]),dicts=ref<DictData[]>([]),pageNo=ref(1),total=ref(0),loading=ref(false),error=ref("");const canQuery=computed(()=>hasPermission("bpm:task:query")),hasMore=computed(()=>rows.value.length<total.value);function statusText(v?:number){return dictLabel(dicts.value,DICT.BPM_TASK_STATUS,v,taskStatusText(v))}async function load(reset=false){if(!state.accessToken||loading.value||!canQuery.value)return;if(reset){pageNo.value=1;rows.value=[]}loading.value=true;error.value="";try{if(!dicts.value.length)dicts.value=await getSimpleDictDataList(state.accessToken);const d=await getTaskManagerPage(state.accessToken,{pageNo:pageNo.value,pageSize:15,name:keyword.value.trim()||undefined});total.value=d.total||0;rows.value=reset?(d.list||[]):rows.value.concat(d.list||[]);pageNo.value+=1}catch(e){error.value=e instanceof Error?e.message:"æµç¨ä»»å¡å 载失败"}finally{loading.value=false}}function history(row:BpmTask){const id=row.processInstance?.id||row.processInstanceId;if(id)uni.navigateTo({url:`/pages/bpm/process-instance/detail?id=${encodeURIComponent(id)}`})}onShow(()=>load(true));onPullDownRefresh(async()=>{await load(true);uni.stopPullDownRefresh()});onReachBottom(()=>hasMore.value&&load()); |
| | | </script> |
| | | <template><view class="page"><view class="search"><input v-model="keyword" placeholder="æç´¢ä»»å¡åç§°" confirm-type="search" @confirm="load(true)"/><text @click="load(true)">æç´¢</text></view><view v-if="!canQuery" class="state">ææ æµç¨ä»»å¡æ¥çæé</view><view v-if="error" class="state error" @click="load(true)">{{error}}</view><view v-for="row in rows" :key="row.id" class="card"><view class="head"><view><text class="name">{{row.processInstance?.name||'æµç¨ä»»å¡'}}</text><text>{{row.name||'ææ å½åä»»å¡'}}</text></view><text :class="['tag',statusToneClass(row.status,statusText(row.status))]">{{statusText(row.status)}}</text></view><view class="grid two"><text>å起人ï¼{{row.processInstance?.startUser?.nickname||'--'}}</text><text>审æ¹äººï¼{{row.assigneeUser?.nickname||'--'}}</text><text>å¼å§ï¼{{dateTimeText(row.createTime||row.startTime)}}</text><text>ç»æï¼{{dateTimeText(row.endTime)}}</text><text>èæ¶ï¼{{durationText(row.durationInMillis)}}</text><text>审æ¹å»ºè®®ï¼{{row.reason||'--'}}</text><text>æµç¨ç¼å·ï¼{{row.processInstanceId||'--'}}</text><text>ä»»å¡ç¼å·ï¼{{row.id||'--'}}</text></view><view class="actions"><button @click="history(row)">åå²</button></view></view><view v-if="canQuery&&!rows.length&&!loading" class="state">ææ æµç¨ä»»å¡</view><view v-else-if="rows.length" class="more">{{hasMore?(loading?'å è½½ä¸...':'䏿å è½½æ´å¤'):'æ²¡ææ´å¤äº'}}</view></view></template><style lang="scss" scoped>@import "../../../ai/list.scss";.tag-success,.tag-approved,.tag-finished{color:#0e9663;background:#e9fbf2}.tag-danger,.tag-cancelled{color:#c65050;background:#fff0f0}.tag-info,.tag-progress{color:#1769d8;background:#eef6ff}.tag-warning,.tag-draft{color:#c78210;background:#fff8e8}</style> |
| | | <template><view class="page"><view class="search"><input v-model="keyword" placeholder="æç´¢ä»»å¡åç§°" confirm-type="search" @confirm="load(true)"/><text @click="load(true)">æç´¢</text></view><view v-if="!canQuery" class="state">ææ æµç¨ä»»å¡æ¥çæé</view><view v-if="error" class="state error" @click="load(true)">{{error}}</view><view v-for="row in rows" :key="row.id" class="card"><view class="head"><view><text class="name">{{row.processInstance?.name||'æµç¨ä»»å¡'}}</text><text>{{row.name||'ææ å½åä»»å¡'}}</text></view><text :class="['tag',statusToneClass(row.status,statusText(row.status))]">{{statusText(row.status)}}</text></view><view class="grid two"><text>å起人ï¼{{row.processInstance?.startUser?.nickname||'--'}}</text><text>审æ¹äººï¼{{row.assigneeUser?.nickname||'--'}}</text><text>å¼å§ï¼{{dateTimeText(row.createTime||row.startTime)}}</text><text>ç»æï¼{{dateTimeText(row.endTime)}}</text><text>èæ¶ï¼{{durationText(row.durationInMillis)}}</text><text>审æ¹å»ºè®®ï¼{{row.reason||'--'}}</text><text>æµç¨ç¼å·ï¼{{row.processInstanceId||'--'}}</text><text>ä»»å¡ç¼å·ï¼{{row.id||'--'}}</text></view><view class="actions"><button @click="history(row)">åå²</button></view></view><view v-if="canQuery&&!rows.length&&!loading" class="state">ææ æµç¨ä»»å¡</view><view v-else-if="rows.length" class="more">{{hasMore?(loading?'å è½½ä¸...':'䏿å è½½æ´å¤'):'æ²¡ææ´å¤äº'}}</view></view></template><style lang="scss" scoped>@import "../../../ai/list.scss";.tag-success,.tag-approved,.tag-finished{color:#0e9663;background:#e9fbf2}.tag-danger,.tag-cancelled{color:#c65050;background:#fff0f0}.tag-info,.tag-progress{color:var(--color-primary, #1769d8);background:var(--color-primary-soft, #eef6ff)}.tag-warning,.tag-draft{color:#c78210;background:#fff8e8}</style> |
| | |
| | | .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 12rpx;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} |
| | | .search text{color:var(--color-primary, #1769d8);font-size:24rpx} |
| | | .filters{display:flex;align-items:center;gap:12rpx;margin-bottom:16rpx;overflow:hidden} |
| | | .filter{flex:none;max-width:210rpx;overflow:hidden;padding:10rpx 20rpx;color:#3d5069;font-size:24rpx;text-overflow:ellipsis;white-space:nowrap;background:#fff;border:1rpx solid #dbe4ef;border-radius:999rpx} |
| | | .reset{flex:none;margin-left:auto;color:#1769d8;font-size:24rpx} |
| | | .reset{flex:none;margin-left:auto;color:var(--color-primary, #1769d8);font-size:24rpx} |
| | | .content{height:0;flex:1;padding-bottom:60rpx;box-sizing:border-box} |
| | | .row{padding:24rpx 22rpx 18rpx;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-main{display:flex;min-width:0;flex:1;flex-direction:column;gap:8rpx} |
| | | .head-main .code{color:#78879b;font-size:23rpx} |
| | | .name{overflow:hidden;color:#20334c;font-size:30rpx;font-weight:600;text-overflow:ellipsis;white-space:nowrap} |
| | | .status{flex:none;max-width:200rpx;overflow:hidden;padding:8rpx 16rpx;color:#1769d8;font-size:22rpx;text-overflow:ellipsis;white-space:nowrap;background:#eef4fd;border:1rpx solid #cfe0f8;border-radius:999rpx} |
| | | .status{flex:none;max-width:200rpx;overflow:hidden;padding:8rpx 16rpx;color:var(--color-primary, #1769d8);font-size:22rpx;text-overflow:ellipsis;white-space:nowrap;background:#eef4fd;border:1rpx solid #cfe0f8;border-radius:999rpx} |
| | | .grid{display:grid;gap:10rpx;padding:16rpx 0;margin-top:16rpx;color:#66778c;font-size:23rpx;border-top:1rpx solid #edf1f6} |
| | | .grid text{overflow:hidden;text-overflow:ellipsis} |
| | | .grid .summary{white-space:normal;word-break:break-all} |
| | | .actions{display:flex;justify-content:flex-end;padding-top:14rpx;border-top:1rpx solid #edf1f6} |
| | | .action{padding:8rpx 26rpx;color:#fff;font-size:24rpx;background:#1769d8;border-radius:999rpx} |
| | | .action{padding:8rpx 26rpx;color:#fff;font-size:24rpx;background:var(--color-primary, #1769d8);border-radius:999rpx} |
| | | .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} |
| | |
| | | </template> |
| | | |
| | | <style lang="scss" scoped> |
| | | .page{height:100vh;display:flex;flex-direction:column;padding:0 30rpx;box-sizing:border-box;overflow:hidden;background:#f3f6fb}.menu-tabs{width:calc(100% + 60rpx);height:108rpx;margin:0 -30rpx;white-space:nowrap;background:#fff}.menu-wrap{display:flex;width:max-content;gap:14rpx;padding:22rpx 30rpx 14rpx;white-space:nowrap}.menu{position:relative;display:flex;flex:0 0 auto;align-items:center;justify-content:center;height:64rpx;padding:0 24rpx;color:#52647a;font-size:24rpx;background:#f3f6fb;border:1rpx solid #e6edf6;border-radius:12rpx;white-space:nowrap}.menu text:first-child{display:block;white-space:nowrap}.menu.active{color:#fff;font-weight:600;background:#1769d8;border-color:#1769d8}.menu .badge{position:absolute!important;top:-12rpx;right:-10rpx;display:block!important;width:auto!important;min-width:28rpx!important;height:28rpx!important;min-height:28rpx!important;padding:0 8rpx!important;color:#fff!important;font-size:18rpx!important;line-height:28rpx!important;text-align:center;background:#ef5b5b!important;border:3rpx solid #fff!important;border-radius:18rpx!important;white-space:nowrap}.filter-tabs{height:76rpx;padding-top:14rpx;box-sizing:border-box;white-space:nowrap}.filter-tabs text{display:inline-block;min-width:92rpx;margin-right:14rpx;padding:12rpx 20rpx;color:#718198;font-size:23rpx;text-align:center;background:#fff;border-radius:10rpx;white-space:nowrap}.filter-tabs .active{color:#1769d8;font-weight:600;background:#e7f0ff}.content{height:0;flex:1;padding-bottom:40rpx;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,.actions{display:flex;align-items:center;justify-content:space-between;gap:16rpx}.head>view{display:flex;flex:1;min-width:0;flex-direction:column;gap:8rpx}.name{overflow:hidden;color:#20334c;font-size:30rpx;font-weight:600;text-overflow:ellipsis;white-space:nowrap}.sub{color:#8795a8;font-size:22rpx}.amount{flex:none;max-width:230rpx;overflow:hidden;color:#df5d36;font-size:28rpx;font-weight:600;text-overflow:ellipsis;white-space:nowrap}.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{flex-wrap:wrap;justify-content:flex-end;padding-top:16rpx}.actions button{min-height:48rpx;padding:0 16rpx;margin:0;color:#1769d8;font-size:22rpx;line-height:46rpx;background:#f5f8ff;border:1rpx solid #8ab3ee;border-radius:10rpx;white-space:nowrap}.actions button::after{border:0}.more,.state{display:block;padding:35rpx;color:#8795a8;font-size:26rpx;text-align:center} |
| | | .page{height:100vh;display:flex;flex-direction:column;padding:0 30rpx;box-sizing:border-box;overflow:hidden;background:#f3f6fb}.menu-tabs{width:calc(100% + 60rpx);height:108rpx;margin:0 -30rpx;white-space:nowrap;background:#fff}.menu-wrap{display:flex;width:max-content;gap:14rpx;padding:22rpx 30rpx 14rpx;white-space:nowrap}.menu{position:relative;display:flex;flex:0 0 auto;align-items:center;justify-content:center;height:64rpx;padding:0 24rpx;color:#52647a;font-size:24rpx;background:#f3f6fb;border:1rpx solid #e6edf6;border-radius:12rpx;white-space:nowrap}.menu text:first-child{display:block;white-space:nowrap}.menu.active{color:#fff;font-weight:600;background:var(--color-primary, #1769d8);border-color:var(--color-primary, #1769d8)}.menu .badge{position:absolute!important;top:-12rpx;right:-10rpx;display:block!important;width:auto!important;min-width:28rpx!important;height:28rpx!important;min-height:28rpx!important;padding:0 8rpx!important;color:#fff!important;font-size:18rpx!important;line-height:28rpx!important;text-align:center;background:#ef5b5b!important;border:3rpx solid #fff!important;border-radius:18rpx!important;white-space:nowrap}.filter-tabs{height:76rpx;padding-top:14rpx;box-sizing:border-box;white-space:nowrap}.filter-tabs text{display:inline-block;min-width:92rpx;margin-right:14rpx;padding:12rpx 20rpx;color:#718198;font-size:23rpx;text-align:center;background:#fff;border-radius:10rpx;white-space:nowrap}.filter-tabs .active{color:var(--color-primary, #1769d8);font-weight:600;background:#e7f0ff}.content{height:0;flex:1;padding-bottom:40rpx;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,.actions{display:flex;align-items:center;justify-content:space-between;gap:16rpx}.head>view{display:flex;flex:1;min-width:0;flex-direction:column;gap:8rpx}.name{overflow:hidden;color:#20334c;font-size:30rpx;font-weight:600;text-overflow:ellipsis;white-space:nowrap}.sub{color:#8795a8;font-size:22rpx}.amount{flex:none;max-width:230rpx;overflow:hidden;color:#df5d36;font-size:28rpx;font-weight:600;text-overflow:ellipsis;white-space:nowrap}.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{flex-wrap:wrap;justify-content:flex-end;padding-top:16rpx}.actions button{min-height:48rpx;padding:0 16rpx;margin:0;color:var(--color-primary, #1769d8);font-size:22rpx;line-height:46rpx;background:var(--color-primary-soft, #f5f8ff);border:1rpx solid var(--color-primary-border, #8ab3ee);border-radius:10rpx;white-space:nowrap}.actions button::after{border:0}.more,.state{display:block;padding:35rpx;color:#8795a8;font-size:26rpx;text-align:center} |
| | | </style> |
| | |
| | | } |
| | | .tag { |
| | | padding: 5rpx 12rpx; |
| | | color: #1769d8; |
| | | color: var(--color-primary, #1769d8); |
| | | font-size: 22rpx; |
| | | background: #edf5ff; |
| | | background: var(--color-primary-soft, #edf5ff); |
| | | border-radius: 7rpx; |
| | | } |
| | | .small-tag { |
| | | padding: 4rpx 10rpx; |
| | | color: #1769d8; |
| | | color: var(--color-primary, #1769d8); |
| | | font-size: 21rpx; |
| | | background: #edf5ff; |
| | | background: var(--color-primary-soft, #edf5ff); |
| | | border-radius: 7rpx; |
| | | } |
| | | .toolbar { |
| | |
| | | .outline { |
| | | margin: 0; |
| | | padding: 0 22rpx; |
| | | color: #1769d8; |
| | | color: var(--color-primary, #1769d8); |
| | | font-size: 24rpx; |
| | | line-height: 58rpx; |
| | | background: #f5f8ff; |
| | | border: 1rpx solid #8ab3ee; |
| | | background: var(--color-primary-soft, #f5f8ff); |
| | | border: 1rpx solid var(--color-primary-border, #8ab3ee); |
| | | border-radius: 10rpx; |
| | | } |
| | | .toolbar button::after, |
| | |
| | | } |
| | | .primary { |
| | | color: #fff !important; |
| | | background: #1769d8 !important; |
| | | border-color: #1769d8 !important; |
| | | background: var(--color-primary, #1769d8) !important; |
| | | border-color: var(--color-primary, #1769d8) !important; |
| | | } |
| | | .tabs { |
| | | flex: none; |
| | |
| | | font-size: 26rpx; |
| | | } |
| | | .tabs .active { |
| | | color: #1769d8; |
| | | color: var(--color-primary, #1769d8); |
| | | font-weight: 600; |
| | | border-bottom: 4rpx solid #1769d8; |
| | | border-bottom: 4rpx solid var(--color-primary, #1769d8); |
| | | } |
| | | .content { |
| | | height: 0; |
| | |
| | | font-size: 26rpx; |
| | | } |
| | | .upload-head text:last-child { |
| | | color: #1769d8; |
| | | color: var(--color-primary, #1769d8); |
| | | } |
| | | .image-list { |
| | | display: flex; |
| | |
| | | .contact-card__tag { |
| | | flex: none; |
| | | padding: 4rpx 10rpx; |
| | | color: #1769d8; |
| | | color: var(--color-primary, #1769d8); |
| | | font-size: 21rpx; |
| | | background: #edf5ff; |
| | | background: var(--color-primary-soft, #edf5ff); |
| | | border-radius: 7rpx; |
| | | } |
| | | .contact-card__role, |
| | |
| | | width: auto; |
| | | padding: 0; |
| | | margin: 0; |
| | | color: #1769d8; |
| | | color: var(--color-primary, #1769d8); |
| | | font-size: 23rpx; |
| | | line-height: 1; |
| | | background: transparent; |
| | |
| | | } |
| | | .member-name text:last-child { |
| | | padding: 3rpx 10rpx; |
| | | color: #1769d8; |
| | | color: var(--color-primary, #1769d8); |
| | | font-size: 21rpx; |
| | | background: #edf5ff; |
| | | background: var(--color-primary-soft, #edf5ff); |
| | | border-radius: 7rpx; |
| | | } |
| | | .member-actions { |
| | |
| | | } |
| | | .section { |
| | | padding: 22rpx 24rpx 12rpx; |
| | | color: #1769d8; |
| | | color: var(--color-primary, #1769d8); |
| | | font-size: 25rpx; |
| | | font-weight: 600; |
| | | background: #f8fbff; |
| | |
| | | background: #fff; |
| | | } |
| | | .summary text:last-child { |
| | | color: #1769d8; |
| | | color: var(--color-primary, #1769d8); |
| | | font-weight: 600; |
| | | } |
| | | .product { |
| | |
| | | } |
| | | .product-total { |
| | | padding: 18rpx 16rpx; |
| | | color: #1769d8; |
| | | color: var(--color-primary, #1769d8); |
| | | font-size: 25rpx; |
| | | text-align: right; |
| | | } |
| | | .add { |
| | | margin: 0 24rpx 20rpx; |
| | | color: #1769d8; |
| | | color: var(--color-primary, #1769d8); |
| | | font-size: 26rpx; |
| | | background: #f5f8ff; |
| | | border: 1rpx solid #8ab3ee; |
| | | background: var(--color-primary-soft, #f5f8ff); |
| | | border: 1rpx solid var(--color-primary-border, #8ab3ee); |
| | | border-radius: 10rpx; |
| | | } |
| | | .add::after, |
| | |
| | | .save { |
| | | margin-top: 32rpx; |
| | | color: #fff; |
| | | background: #1769d8; |
| | | background: var(--color-primary, #1769d8); |
| | | border-radius: 12rpx; |
| | | font-size: 30rpx; |
| | | } |
| | |
| | | font-size: 27rpx; |
| | | } |
| | | .scene-tabs .active { |
| | | color: #1769d8; |
| | | color: var(--color-primary, #1769d8); |
| | | font-weight: 600; |
| | | border-bottom: 4rpx solid #1769d8; |
| | | border-bottom: 4rpx solid var(--color-primary, #1769d8); |
| | | } |
| | | .search { |
| | | display: flex; |
| | |
| | | } |
| | | .search text { |
| | | font-size: 24rpx; |
| | | color: #1769d8; |
| | | color: var(--color-primary, #1769d8); |
| | | } |
| | | .content-scroll { |
| | | height: 0; |
| | |
| | | .tag { |
| | | flex: none; |
| | | padding: 4rpx 10rpx; |
| | | color: #1769d8; |
| | | color: var(--color-primary, #1769d8); |
| | | font-size: 21rpx; |
| | | background: #edf5ff; |
| | | background: var(--color-primary-soft, #edf5ff); |
| | | border-radius: 7rpx; |
| | | } |
| | | .meta-grid { |
| | |
| | | min-height: 48rpx; |
| | | padding: 0 16rpx; |
| | | margin: 0; |
| | | color: #1769d8; |
| | | color: var(--color-primary, #1769d8); |
| | | font-size: 22rpx; |
| | | line-height: 46rpx; |
| | | background: #f5f8ff; |
| | | border: 1rpx solid #8ab3ee; |
| | | background: var(--color-primary-soft, #f5f8ff); |
| | | border: 1rpx solid var(--color-primary-border, #8ab3ee); |
| | | border-radius: 10rpx; |
| | | } |
| | | .actions button::after, |
| | |
| | | width: 220rpx; |
| | | margin: 20rpx auto; |
| | | color: #fff; |
| | | background: #1769d8; |
| | | background: var(--color-primary, #1769d8); |
| | | border-radius: 12rpx; |
| | | } |
| | | .create-fab { |
| | |
| | | color: #fff; |
| | | font-size: 58rpx; |
| | | line-height: 120rpx; |
| | | background: #1769d8; |
| | | background: var(--color-primary, #1769d8); |
| | | border-radius: 50%; |
| | | box-shadow: 0 12rpx 24rpx rgba(23, 105, 216, 0.3); |
| | | } |
| | |
| | | </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;padding:0 20rpx;margin:24rpx 0 16rpx;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}.card,.row{margin-bottom:18rpx;overflow:hidden;background:#fff;border-radius:16rpx;box-shadow:0 8rpx 20rpx rgba(43,69,107,.05)}.section{padding:22rpx 24rpx 12rpx;color:#1769d8;font-size:25rpx;font-weight:600;background:#f8fbff}.field{display:flex;align-items:center;min-height:92rpx;gap:20rpx;padding:0 24rpx;border-bottom:1rpx solid #eef1f5}.field>text:first-child{width:180rpx;flex:none;color:#33455d;font-size:26rpx}.field input{flex:1;min-width:0;text-align:right;font-size:26rpx}.column{align-items:flex-start;flex-direction:column;padding:20rpx 24rpx}.column>text{width:auto!important}.checks{display:flex;flex-wrap:wrap;gap:12rpx}.checks text{padding:10rpx 16rpx;color:#66778c;font-size:23rpx;background:#f1f4f8;border-radius:10rpx}.checks .picked{color:#1769d8;background:#eaf3ff}.help{color:#98a5b4!important;font-size:22rpx!important}.stage{border-top:1rpx solid #edf1f6}.form-actions,.actions,.head{display:flex;align-items:center;justify-content:flex-end;gap:16rpx}.form-actions{padding:20rpx 24rpx}button{margin:0;font-size:24rpx;border-radius:10rpx}button::after,.fab::after{border:0}.primary,.fab{color:#fff;background:#1769d8}.head{justify-content:space-between;padding:24rpx 22rpx 12rpx}.head text:first-child{overflow:hidden;color:#20334c;font-size:30rpx;font-weight:600;text-overflow:ellipsis;white-space:nowrap}.head text:last-child{flex:none;color:#718198;font-size:22rpx}.grid{display:grid;grid-template-columns:1fr;gap:10rpx;padding:12rpx 22rpx 18rpx;color:#66778c;font-size:23rpx}.actions{padding:0 22rpx 18rpx}.actions button{color:#1769d8;background:#f5f8ff;border:1rpx solid #8ab3ee}.actions .danger{color:#c65050;background:#fff7f7;border-color:#e3a0a0}.fab{position:fixed;right:30rpx;bottom:calc(32rpx + env(safe-area-inset-bottom));width:132rpx;height:132rpx;padding:0;font-size:58rpx;line-height:120rpx;border-radius:50%}.more,.state{display:block;padding:35rpx;color:#8795a8;font-size:26rpx;text-align:center} |
| | | .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;padding:0 20rpx;margin:24rpx 0 16rpx;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:var(--color-primary, #1769d8);font-size:24rpx}.content{height:0;flex:1;padding-bottom: 132rpx;box-sizing:border-box}.card,.row{margin-bottom:18rpx;overflow:hidden;background:#fff;border-radius:16rpx;box-shadow:0 8rpx 20rpx rgba(43,69,107,.05)}.section{padding:22rpx 24rpx 12rpx;color:var(--color-primary, #1769d8);font-size:25rpx;font-weight:600;background:#f8fbff}.field{display:flex;align-items:center;min-height:92rpx;gap:20rpx;padding:0 24rpx;border-bottom:1rpx solid #eef1f5}.field>text:first-child{width:180rpx;flex:none;color:#33455d;font-size:26rpx}.field input{flex:1;min-width:0;text-align:right;font-size:26rpx}.column{align-items:flex-start;flex-direction:column;padding:20rpx 24rpx}.column>text{width:auto!important}.checks{display:flex;flex-wrap:wrap;gap:12rpx}.checks text{padding:10rpx 16rpx;color:#66778c;font-size:23rpx;background:#f1f4f8;border-radius:10rpx}.checks .picked{color:var(--color-primary, #1769d8);background:#eaf3ff}.help{color:#98a5b4!important;font-size:22rpx!important}.stage{border-top:1rpx solid #edf1f6}.form-actions,.actions,.head{display:flex;align-items:center;justify-content:flex-end;gap:16rpx}.form-actions{padding:20rpx 24rpx}button{margin:0;font-size:24rpx;border-radius:10rpx}button::after,.fab::after{border:0}.primary,.fab{color:#fff;background:var(--color-primary, #1769d8)}.head{justify-content:space-between;padding:24rpx 22rpx 12rpx}.head text:first-child{overflow:hidden;color:#20334c;font-size:30rpx;font-weight:600;text-overflow:ellipsis;white-space:nowrap}.head text:last-child{flex:none;color:#718198;font-size:22rpx}.grid{display:grid;grid-template-columns:1fr;gap:10rpx;padding:12rpx 22rpx 18rpx;color:#66778c;font-size:23rpx}.actions{padding:0 22rpx 18rpx}.actions button{color:var(--color-primary, #1769d8);background:var(--color-primary-soft, #f5f8ff);border:1rpx solid var(--color-primary-border, #8ab3ee)}.actions .danger{color:#c65050;background:#fff7f7;border-color:#e3a0a0}.fab{position:fixed;right:30rpx;bottom:calc(32rpx + env(safe-area-inset-bottom));width:132rpx;height:132rpx;padding:0;font-size:58rpx;line-height:120rpx;border-radius:50%}.more,.state{display:block;padding:35rpx;color:#8795a8;font-size:26rpx;text-align:center} |
| | | </style> |
| | |
| | | .outline { |
| | | margin: 0; |
| | | padding: 0 22rpx; |
| | | color: #1769d8; |
| | | color: var(--color-primary, #1769d8); |
| | | font-size: 24rpx; |
| | | line-height: 58rpx; |
| | | background: #f5f8ff; |
| | | border: 1rpx solid #8ab3ee; |
| | | background: var(--color-primary-soft, #f5f8ff); |
| | | border: 1rpx solid var(--color-primary-border, #8ab3ee); |
| | | border-radius: 10rpx; |
| | | } |
| | | .toolbar button::after, |
| | |
| | | .toolbar .primary, |
| | | .primary { |
| | | color: #fff; |
| | | background: #1769d8; |
| | | border-color: #1769d8; |
| | | background: var(--color-primary, #1769d8); |
| | | border-color: var(--color-primary, #1769d8); |
| | | } |
| | | .tabs { |
| | | flex: none; |
| | |
| | | font-size: 26rpx; |
| | | } |
| | | .tabs .active { |
| | | color: #1769d8; |
| | | color: var(--color-primary, #1769d8); |
| | | font-weight: 600; |
| | | border-bottom: 4rpx solid #1769d8; |
| | | border-bottom: 4rpx solid var(--color-primary, #1769d8); |
| | | } |
| | | .content { |
| | | height: 0; |
| | |
| | | width: auto; |
| | | padding: 0; |
| | | margin: 0; |
| | | color: #1769d8; |
| | | color: var(--color-primary, #1769d8); |
| | | font-size: 23rpx; |
| | | line-height: 1; |
| | | background: transparent; |
| | |
| | | } |
| | | .member-name text:last-child { |
| | | padding: 3rpx 10rpx; |
| | | color: #1769d8; |
| | | color: var(--color-primary, #1769d8); |
| | | font-size: 21rpx; |
| | | background: #edf5ff; |
| | | background: var(--color-primary-soft, #edf5ff); |
| | | border-radius: 7rpx; |
| | | } |
| | | .member-actions { |
| | |
| | | font-size: 26rpx; |
| | | } |
| | | .upload-head text:last-child { |
| | | color: #1769d8; |
| | | color: var(--color-primary, #1769d8); |
| | | } |
| | | .image-list { |
| | | display: flex; |
| | |
| | | } |
| | | .section { |
| | | padding: 22rpx 24rpx 12rpx; |
| | | color: #1769d8; |
| | | color: var(--color-primary, #1769d8); |
| | | font-size: 25rpx; |
| | | font-weight: 600; |
| | | background: #f8fbff; |
| | |
| | | .save { |
| | | margin-top: 32rpx; |
| | | color: #fff; |
| | | background: #1769d8; |
| | | background: var(--color-primary, #1769d8); |
| | | border-radius: 12rpx; |
| | | font-size: 30rpx; |
| | | } |
| | |
| | | font-size: 27rpx; |
| | | } |
| | | .scene-tabs .active { |
| | | color: #1769d8; |
| | | color: var(--color-primary, #1769d8); |
| | | font-weight: 600; |
| | | border-bottom: 4rpx solid #1769d8; |
| | | border-bottom: 4rpx solid var(--color-primary, #1769d8); |
| | | } |
| | | .search, |
| | | .status-picker { |
| | |
| | | } |
| | | .search text { |
| | | font-size: 24rpx; |
| | | color: #1769d8; |
| | | color: var(--color-primary, #1769d8); |
| | | } |
| | | .status-picker { |
| | | height: 64rpx; |
| | |
| | | min-height: 48rpx; |
| | | padding: 0 16rpx; |
| | | margin: 0; |
| | | color: #1769d8; |
| | | color: var(--color-primary, #1769d8); |
| | | font-size: 22rpx; |
| | | line-height: 46rpx; |
| | | background: #f5f8ff; |
| | | border: 1rpx solid #8ab3ee; |
| | | background: var(--color-primary-soft, #f5f8ff); |
| | | border: 1rpx solid var(--color-primary-border, #8ab3ee); |
| | | border-radius: 10rpx; |
| | | } |
| | | .actions button::after, |
| | |
| | | width: 220rpx; |
| | | margin: 20rpx auto; |
| | | color: #fff; |
| | | background: #1769d8; |
| | | background: var(--color-primary, #1769d8); |
| | | border-radius: 12rpx; |
| | | } |
| | | .create-fab { |
| | |
| | | color: #fff; |
| | | font-size: 58rpx; |
| | | line-height: 120rpx; |
| | | background: #1769d8; |
| | | background: var(--color-primary, #1769d8); |
| | | border-radius: 50%; |
| | | box-shadow: 0 12rpx 24rpx rgba(23, 105, 216, 0.3); |
| | | } |
| | |
| | | .tag, |
| | | .small-tag { |
| | | padding: 4rpx 10rpx; |
| | | color: #1769d8; |
| | | color: var(--color-primary, #1769d8); |
| | | font-size: 21rpx; |
| | | background: #edf5ff; |
| | | background: var(--color-primary-soft, #edf5ff); |
| | | border-radius: 7rpx; |
| | | } |
| | | .toolbar { |
| | |
| | | .outline, |
| | | .primary { |
| | | margin: 0; |
| | | color: #1769d8; |
| | | color: var(--color-primary, #1769d8); |
| | | font-size: 24rpx; |
| | | background: #f5f8ff; |
| | | border: 1rpx solid #8ab3ee; |
| | | background: var(--color-primary-soft, #f5f8ff); |
| | | border: 1rpx solid var(--color-primary-border, #8ab3ee); |
| | | border-radius: 10rpx; |
| | | } |
| | | .toolbar button { |
| | |
| | | font-size: 26rpx; |
| | | } |
| | | .tabs .active { |
| | | color: #1769d8; |
| | | color: var(--color-primary, #1769d8); |
| | | font-weight: 600; |
| | | border-bottom: 4rpx solid #1769d8; |
| | | border-bottom: 4rpx solid var(--color-primary, #1769d8); |
| | | } |
| | | .content { |
| | | height: 0; |
| | |
| | | word-break: break-all; |
| | | } |
| | | .link { |
| | | color: #1769d8 !important; |
| | | color: var(--color-primary, #1769d8) !important; |
| | | } |
| | | .remark { |
| | | display: flex; |
| | |
| | | width: 100%; |
| | | margin-top: 24rpx; |
| | | color: #fff; |
| | | background: #1769d8; |
| | | background: var(--color-primary, #1769d8); |
| | | border: 0; |
| | | } |
| | | .record > view, |
| | |
| | | } |
| | | .outline { |
| | | min-height: 68rpx; |
| | | color: #1769d8; |
| | | color: var(--color-primary, #1769d8); |
| | | background: #fff; |
| | | } |
| | | .clickable { |
| | |
| | | justify-content: space-between; |
| | | align-items: center; |
| | | margin-top: 10rpx; |
| | | color: #1769d8; |
| | | color: var(--color-primary, #1769d8); |
| | | font-size: 23rpx; |
| | | } |
| | | .member-form radio-group, |
| | |
| | | } |
| | | .section { |
| | | padding: 22rpx 24rpx 12rpx; |
| | | color: #1769d8; |
| | | color: var(--color-primary, #1769d8); |
| | | font-size: 25rpx; |
| | | font-weight: 600; |
| | | background: #f8fbff; |
| | |
| | | .save { |
| | | margin-top: 32rpx; |
| | | color: #fff; |
| | | background: #1769d8; |
| | | background: var(--color-primary, #1769d8); |
| | | border-radius: 12rpx; |
| | | font-size: 30rpx; |
| | | } |
| | |
| | | font-size: 27rpx; |
| | | } |
| | | .scene-tabs .active { |
| | | color: #1769d8; |
| | | color: var(--color-primary, #1769d8); |
| | | font-weight: 600; |
| | | border-bottom: 4rpx solid #1769d8; |
| | | border-bottom: 4rpx solid var(--color-primary, #1769d8); |
| | | } |
| | | .search { |
| | | display: flex; |
| | |
| | | font-size: 27rpx; |
| | | } |
| | | .search text { |
| | | color: #1769d8; |
| | | color: var(--color-primary, #1769d8); |
| | | font-size: 24rpx; |
| | | } |
| | | .content-scroll { |
| | |
| | | .tag { |
| | | padding: 4rpx 10rpx; |
| | | flex: none; |
| | | color: #1769d8; |
| | | color: var(--color-primary, #1769d8); |
| | | font-size: 21rpx; |
| | | background: #edf5ff; |
| | | background: var(--color-primary-soft, #edf5ff); |
| | | border-radius: 7rpx; |
| | | } |
| | | .meta-grid { |
| | |
| | | min-height: 48rpx; |
| | | padding: 0 16rpx; |
| | | margin: 0; |
| | | color: #1769d8; |
| | | color: var(--color-primary, #1769d8); |
| | | font-size: 22rpx; |
| | | line-height: 46rpx; |
| | | background: #f5f8ff; |
| | | border: 1rpx solid #8ab3ee; |
| | | background: var(--color-primary-soft, #f5f8ff); |
| | | border: 1rpx solid var(--color-primary-border, #8ab3ee); |
| | | border-radius: 10rpx; |
| | | } |
| | | .actions button::after, |
| | |
| | | width: 220rpx; |
| | | margin: 20rpx auto; |
| | | color: #fff; |
| | | background: #1769d8; |
| | | background: var(--color-primary, #1769d8); |
| | | border-radius: 12rpx; |
| | | } |
| | | .create-fab { |
| | |
| | | color: #fff; |
| | | font-size: 58rpx; |
| | | line-height: 120rpx; |
| | | background: #1769d8; |
| | | background: var(--color-primary, #1769d8); |
| | | border-radius: 50%; |
| | | box-shadow: 0 12rpx 24rpx rgba(23, 105, 216, 0.3); |
| | | } |
| | |
| | | </template> |
| | | |
| | | <style lang="scss" scoped> |
| | | .page{min-height:100vh;padding:24rpx 30rpx 90rpx;box-sizing:border-box;background:#f6f7f9}.card{overflow:hidden;background:#fff;border-radius:16rpx}.section{padding:22rpx 24rpx 12rpx;color:#1769d8;font-size:25rpx;font-weight:600;background:#f8fbff}.field{display:flex;align-items:center;min-height:96rpx;gap:18rpx;padding:0 24rpx;border-bottom:1rpx solid #eef1f5}.field>text:first-child{width:220rpx;flex:none;color:#33455d;font-size:27rpx}.field input{flex:1;min-width:0;color:#1e3049;font-size:27rpx;text-align:right}radio-group{display:flex;flex:1;justify-content:flex-end;gap:24rpx;color:#1e3049;font-size:26rpx}.prefix,.unit{width:auto!important;color:#65758a!important;font-size:24rpx!important}.save{margin-top:32rpx;color:#fff;background:#1769d8;border-radius:12rpx;font-size:30rpx}.save::after{border:0}.state{padding:70rpx 30rpx;color:#8795a8;font-size:26rpx;text-align:center} |
| | | .page{min-height:100vh;padding:24rpx 30rpx 90rpx;box-sizing:border-box;background:#f6f7f9}.card{overflow:hidden;background:#fff;border-radius:16rpx}.section{padding:22rpx 24rpx 12rpx;color:var(--color-primary, #1769d8);font-size:25rpx;font-weight:600;background:#f8fbff}.field{display:flex;align-items:center;min-height:96rpx;gap:18rpx;padding:0 24rpx;border-bottom:1rpx solid #eef1f5}.field>text:first-child{width:220rpx;flex:none;color:#33455d;font-size:27rpx}.field input{flex:1;min-width:0;color:#1e3049;font-size:27rpx;text-align:right}radio-group{display:flex;flex:1;justify-content:flex-end;gap:24rpx;color:#1e3049;font-size:26rpx}.prefix,.unit{width:auto!important;color:#65758a!important;font-size:24rpx!important}.save{margin-top:32rpx;color:#fff;background:var(--color-primary, #1769d8);border-radius:12rpx;font-size:30rpx}.save::after{border:0}.state{padding:70rpx 30rpx;color:#8795a8;font-size:26rpx;text-align:center} |
| | | </style> |
| | |
| | | .tag, |
| | | .small { |
| | | padding: 5rpx 12rpx; |
| | | color: #1769d8; |
| | | color: var(--color-primary, #1769d8); |
| | | font-size: 22rpx; |
| | | background: #edf5ff; |
| | | background: var(--color-primary-soft, #edf5ff); |
| | | border-radius: 7rpx; |
| | | } |
| | | .toolbar { |
| | |
| | | flex: none; |
| | | padding: 0 18rpx; |
| | | margin: 0; |
| | | color: #1769d8; |
| | | color: var(--color-primary, #1769d8); |
| | | font-size: 23rpx; |
| | | line-height: 54rpx; |
| | | background: #f5f8ff; |
| | | border: 1rpx solid #8ab3ee; |
| | | background: var(--color-primary-soft, #f5f8ff); |
| | | border: 1rpx solid var(--color-primary-border, #8ab3ee); |
| | | border-radius: 10rpx; |
| | | } |
| | | .toolbar button::after, |
| | |
| | | font-size: 26rpx; |
| | | } |
| | | .tabs .active { |
| | | color: #1769d8; |
| | | color: var(--color-primary, #1769d8); |
| | | font-weight: 600; |
| | | border-bottom: 4rpx solid #1769d8; |
| | | border-bottom: 4rpx solid var(--color-primary, #1769d8); |
| | | } |
| | | .content { |
| | | height: 0; |
| | |
| | | } |
| | | .upload-head text:last-child, |
| | | .file text:last-child { |
| | | color: #1769d8; |
| | | color: var(--color-primary, #1769d8); |
| | | } |
| | | .images { |
| | | display: flex; |
| | |
| | | .primary { |
| | | margin: 0; |
| | | color: #fff; |
| | | background: #1769d8; |
| | | background: var(--color-primary, #1769d8); |
| | | border-radius: 10rpx; |
| | | font-size: 26rpx; |
| | | } |
| | |
| | | font-weight: 600; |
| | | } |
| | | .section-title text { |
| | | color: #1769d8; |
| | | color: var(--color-primary, #1769d8); |
| | | font-size: 24rpx; |
| | | font-weight: 400; |
| | | } |
| | |
| | | } |
| | | .member-name text:last-child { |
| | | padding: 3rpx 10rpx; |
| | | color: #1769d8; |
| | | color: var(--color-primary, #1769d8); |
| | | font-size: 21rpx; |
| | | background: #edf5ff; |
| | | background: var(--color-primary-soft, #edf5ff); |
| | | border-radius: 7rpx; |
| | | } |
| | | .member-actions { |
| | |
| | | } |
| | | .section { |
| | | padding: 22rpx 24rpx 12rpx; |
| | | color: #1769d8; |
| | | color: var(--color-primary, #1769d8); |
| | | font-size: 25rpx; |
| | | font-weight: 600; |
| | | background: #f8fbff; |
| | |
| | | } |
| | | .summary text:last-child, |
| | | .subtotal { |
| | | color: #1769d8; |
| | | color: var(--color-primary, #1769d8); |
| | | font-weight: 600; |
| | | } |
| | | .product { |
| | |
| | | } |
| | | .add { |
| | | margin: 0 24rpx 20rpx; |
| | | color: #1769d8; |
| | | color: var(--color-primary, #1769d8); |
| | | font-size: 26rpx; |
| | | background: #f5f8ff; |
| | | border: 1rpx solid #8ab3ee; |
| | | background: var(--color-primary-soft, #f5f8ff); |
| | | border: 1rpx solid var(--color-primary-border, #8ab3ee); |
| | | border-radius: 10rpx; |
| | | } |
| | | .add::after, |
| | |
| | | .save { |
| | | margin-top: 32rpx; |
| | | color: #fff; |
| | | background: #1769d8; |
| | | background: var(--color-primary, #1769d8); |
| | | border-radius: 12rpx; |
| | | font-size: 30rpx; |
| | | } |
| | |
| | | font-size: 27rpx; |
| | | } |
| | | .scene-tabs .active { |
| | | color: #1769d8; |
| | | color: var(--color-primary, #1769d8); |
| | | font-weight: 600; |
| | | border-bottom: 4rpx solid #1769d8; |
| | | border-bottom: 4rpx solid var(--color-primary, #1769d8); |
| | | } |
| | | .search { |
| | | display: flex; |
| | |
| | | } |
| | | .search text { |
| | | font-size: 24rpx; |
| | | color: #1769d8; |
| | | color: var(--color-primary, #1769d8); |
| | | } |
| | | .content { |
| | | height: 0; |
| | | flex: 1; |
| | | padding-bottom: 150rpx; |
| | | padding-bottom: 132rpx; |
| | | box-sizing: border-box; |
| | | } |
| | | .row { |
| | |
| | | } |
| | | .tag { |
| | | padding: 4rpx 10rpx; |
| | | color: #1769d8; |
| | | color: var(--color-primary, #1769d8); |
| | | font-size: 21rpx; |
| | | background: #edf5ff; |
| | | background: var(--color-primary-soft, #edf5ff); |
| | | border-radius: 7rpx; |
| | | } |
| | | .grid { |
| | |
| | | min-height: 48rpx; |
| | | padding: 0 16rpx; |
| | | margin: 0; |
| | | color: #1769d8; |
| | | color: var(--color-primary, #1769d8); |
| | | font-size: 22rpx; |
| | | line-height: 46rpx; |
| | | background: #f5f8ff; |
| | | border: 1rpx solid #8ab3ee; |
| | | background: var(--color-primary-soft, #f5f8ff); |
| | | border: 1rpx solid var(--color-primary-border, #8ab3ee); |
| | | border-radius: 10rpx; |
| | | } |
| | | .actions button::after, |
| | |
| | | width: 220rpx; |
| | | margin: 20rpx auto; |
| | | color: #fff; |
| | | background: #1769d8; |
| | | background: var(--color-primary, #1769d8); |
| | | border-radius: 12rpx; |
| | | } |
| | | .fab { |
| | |
| | | color: #fff; |
| | | font-size: 58rpx; |
| | | line-height: 120rpx; |
| | | background: #1769d8; |
| | | background: var(--color-primary, #1769d8); |
| | | border-radius: 50%; |
| | | box-shadow: 0 12rpx 24rpx rgba(23, 105, 216, 0.3); |
| | | } |
| | |
| | | .tag, |
| | | .small { |
| | | padding: 5rpx 12rpx; |
| | | color: #1769d8; |
| | | color: var(--color-primary, #1769d8); |
| | | font-size: 22rpx; |
| | | background: #edf5ff; |
| | | background: var(--color-primary-soft, #edf5ff); |
| | | border-radius: 7rpx; |
| | | } |
| | | .tag.done { |
| | |
| | | flex: none; |
| | | padding: 0 18rpx; |
| | | margin: 0; |
| | | color: #1769d8; |
| | | color: var(--color-primary, #1769d8); |
| | | font-size: 23rpx; |
| | | line-height: 54rpx; |
| | | background: #f5f8ff; |
| | | border: 1rpx solid #8ab3ee; |
| | | background: var(--color-primary-soft, #f5f8ff); |
| | | border: 1rpx solid var(--color-primary-border, #8ab3ee); |
| | | border-radius: 10rpx; |
| | | } |
| | | .toolbar button::after, |
| | |
| | | font-size: 26rpx; |
| | | } |
| | | .tabs .active { |
| | | color: #1769d8; |
| | | color: var(--color-primary, #1769d8); |
| | | font-weight: 600; |
| | | border-bottom: 4rpx solid #1769d8; |
| | | border-bottom: 4rpx solid var(--color-primary, #1769d8); |
| | | } |
| | | .content { |
| | | height: 0; |
| | |
| | | .contact-card__tag { |
| | | flex: none; |
| | | padding: 4rpx 10rpx; |
| | | color: #1769d8; |
| | | color: var(--color-primary, #1769d8); |
| | | font-size: 21rpx; |
| | | background: #edf5ff; |
| | | background: var(--color-primary-soft, #edf5ff); |
| | | border-radius: 7rpx; |
| | | } |
| | | .contact-card__role, |
| | |
| | | } |
| | | .upload-head text:last-child, |
| | | .file text:last-child { |
| | | color: #1769d8; |
| | | color: var(--color-primary, #1769d8); |
| | | } |
| | | .images { |
| | | display: flex; |
| | |
| | | .primary { |
| | | margin: 0; |
| | | color: #fff; |
| | | background: #1769d8; |
| | | background: var(--color-primary, #1769d8); |
| | | border-radius: 10rpx; |
| | | font-size: 26rpx; |
| | | } |
| | |
| | | font-weight: 600; |
| | | } |
| | | .section-title text { |
| | | color: #1769d8; |
| | | color: var(--color-primary, #1769d8); |
| | | font-size: 24rpx; |
| | | font-weight: 400; |
| | | } |
| | |
| | | } |
| | | .member-name text:last-child { |
| | | padding: 3rpx 10rpx; |
| | | color: #1769d8; |
| | | color: var(--color-primary, #1769d8); |
| | | font-size: 21rpx; |
| | | background: #edf5ff; |
| | | background: var(--color-primary-soft, #edf5ff); |
| | | border-radius: 7rpx; |
| | | } |
| | | .member-actions { |
| | |
| | | border-radius: 8rpx; |
| | | } |
| | | .checks .selected { |
| | | color: #1769d8; |
| | | background: #edf5ff; |
| | | color: var(--color-primary, #1769d8); |
| | | background: var(--color-primary-soft, #edf5ff); |
| | | } |
| | | .state { |
| | | display: block; |
| | |
| | | font-size: 26rpx; |
| | | text-align: center; |
| | | } |
| | | </style> |
| | | </style> |
| | |
| | | onLoad(async query => { id.value = query.id ? Number(query.id) : undefined; if (!state.accessToken) return; try { const [dictionaryData, userData, areaData] = await Promise.all([getSimpleDictDataList(state.accessToken), getCrmUserList(state.accessToken), getAreaTree(state.accessToken)]); dicts.value = dictionaryData; users.value = userData; areas.value = areaData; if (id.value) { const data = await getCustomer(state.accessToken, id.value); Object.assign(form, data, { contactNextTime: data.contactNextTime?.slice(0, 10) || '' }); } else if (state.user) { form.ownerUserId = state.user.id; form.ownerUserName = state.user.nickname; } } catch (error) { uni.showToast({ title: error instanceof Error ? error.message : 'æ°æ®å 载失败', icon: 'none' }); } }); |
| | | </script> |
| | | <template><view class="page"><view class="form-card"><view class="section">åºæ¬ä¿¡æ¯</view><view class="field"><text>客æ·åç§° <text class="required">*</text></text><input v-model="form.name" placeholder="请è¾å
¥å®¢æ·åç§°" /></view><view class="field"><text>å®¢æ·æ¥æº <text class="required">*</text></text><picker :range="sources" range-key="label" @change="form.source=Number(sources[$event.detail.value].value)"><view class="picker">{{dictLabel(sources,form.source)}}<text>âº</text></view></picker></view><view class="field"><text>è´è´£äºº <text class="required">*</text></text><picker :disabled="Boolean(id)" :range="users" range-key="nickname" @change="form.ownerUserId=users[$event.detail.value].id;form.ownerUserName=userLabel(users[$event.detail.value])"><view class="picker">{{form.ownerUserName||userLabel(users.find(item=>item.id===form.ownerUserId))}}<text>âº</text></view></picker></view><view class="section">èç³»æ¹å¼</view><view v-for="field in [['ææº','mobile','请è¾å
¥ææºå·'],['çµè¯','telephone','请è¾å
¥çµè¯'],['é®ç®±','email','请è¾å
¥é®ç®±'],['微信','wechat','请è¾å
¥å¾®ä¿¡'],['QQ','qq','请è¾å
¥ QQ']]" :key="field[1]" class="field"><text>{{field[0]}}</text><input v-model="form[field[1] as keyof CrmCustomer]" :placeholder="field[2]" /></view><view class="section">客æ·ä¿¡æ¯</view><view class="field"><text>客æ·è¡ä¸</text><picker :range="industries" range-key="label" @change="form.industryId=Number(industries[$event.detail.value].value)"><view class="picker">{{dictLabel(industries,form.industryId)}}<text>âº</text></view></picker></view><view class="field"><text>客æ·çº§å«</text><picker :range="levels" range-key="label" @change="form.level=Number(levels[$event.detail.value].value)"><view class="picker">{{dictLabel(levels,form.level)}}<text>âº</text></view></picker></view><view class="field"><text>æå¨å°åº</text><picker :range="areaOptions" range-key="name" @change="form.areaId=areaOptions[$event.detail.value].id;form.areaName=areaOptions[$event.detail.value].name.replace(/ã/g,'')"><view class="picker">{{form.areaName||'è¯·éæ©å°åº'}}<text>âº</text></view></picker></view><view class="field"><text>详ç»å°å</text><input v-model="form.detailAddress" placeholder="请è¾å
¥è¯¦ç»å°å" /></view><view class="field"><text>䏿¬¡èç³»</text><picker mode="date" :value="form.contactNextTime" @change="form.contactNextTime=$event.detail.value"><view class="picker">{{form.contactNextTime||'è¯·éæ©æ¥æ'}}<text>âº</text></view></picker></view><view class="field column"><text>夿³¨</text><textarea v-model="form.remark" placeholder="请è¾å
¥å¤æ³¨" ></textarea></view></view><button class="save" :loading="saving" :disabled="saving" @click="save">ä¿å</button></view></template> |
| | | <style lang="scss" scoped>.page{min-height:100vh;padding:24rpx 30rpx 70rpx;background:#f6f7f9}.form-card{overflow:hidden;background:#fff;border-radius:16rpx}.section{padding:22rpx 24rpx 12rpx;color:#1769d8;font-size:25rpx;font-weight:600;background:#f8fbff}.field{display:flex;align-items:center;min-height:96rpx;padding:0 24rpx;border-bottom:1rpx solid #eef1f5;gap:20rpx}.field>text{width:180rpx;color:#33455d;font-size:27rpx}.required{color:#e34b4b}.field input,.field picker,.picker{flex:1;color:#1e3049;font-size:27rpx}.picker{display:flex;justify-content:space-between;color:#65758a}.picker text{margin-left:16rpx;color:#8092a7;font-size:36rpx}.column{align-items:flex-start;flex-direction:column;padding:20rpx 24rpx}.column>text{width:auto}.column textarea{width:100%;height:130rpx;font-size:27rpx}.save{margin-top:32rpx;color:#fff;background:#1769d8;border-radius:12rpx;font-size:30rpx}.save::after{border:0}</style> |
| | | <style lang="scss" scoped>.page{min-height:100vh;padding:24rpx 30rpx 70rpx;background:#f6f7f9}.form-card{overflow:hidden;background:#fff;border-radius:16rpx}.section{padding:22rpx 24rpx 12rpx;color:var(--color-primary, #1769d8);font-size:25rpx;font-weight:600;background:#f8fbff}.field{display:flex;align-items:center;min-height:96rpx;padding:0 24rpx;border-bottom:1rpx solid #eef1f5;gap:20rpx}.field>text{width:180rpx;color:#33455d;font-size:27rpx}.required{color:#e34b4b}.field input,.field picker,.picker{flex:1;color:#1e3049;font-size:27rpx}.picker{display:flex;justify-content:space-between;color:#65758a}.picker text{margin-left:16rpx;color:#8092a7;font-size:36rpx}.column{align-items:flex-start;flex-direction:column;padding:20rpx 24rpx}.column>text{width:auto}.column textarea{width:100%;height:130rpx;font-size:27rpx}.save{margin-top:32rpx;color:#fff;background:var(--color-primary, #1769d8);border-radius:12rpx;font-size:30rpx}.save::after{border:0}</style> |
| | |
| | | font-size: 27rpx; |
| | | } |
| | | .scene-tabs .active { |
| | | color: #1769d8; |
| | | color: var(--color-primary, #1769d8); |
| | | font-weight: 600; |
| | | border-bottom: 4rpx solid #1769d8; |
| | | border-bottom: 4rpx solid var(--color-primary, #1769d8); |
| | | } |
| | | .search { |
| | | display: flex; |
| | |
| | | } |
| | | .search text { |
| | | font-size: 24rpx; |
| | | color: #1769d8; |
| | | color: var(--color-primary, #1769d8); |
| | | } |
| | | .content-scroll { |
| | | height: 0; |
| | |
| | | } |
| | | .tag { |
| | | padding: 4rpx 10rpx; |
| | | color: #1769d8; |
| | | color: var(--color-primary, #1769d8); |
| | | font-size: 21rpx; |
| | | background: #edf5ff; |
| | | background: var(--color-primary-soft, #edf5ff); |
| | | border-radius: 7rpx; |
| | | } |
| | | .tag.done { |
| | |
| | | min-height: 48rpx; |
| | | padding: 0 16rpx; |
| | | margin: 0; |
| | | color: #1769d8; |
| | | color: var(--color-primary, #1769d8); |
| | | font-size: 22rpx; |
| | | line-height: 46rpx; |
| | | background: #f5f8ff; |
| | | border: 1rpx solid #8ab3ee; |
| | | background: var(--color-primary-soft, #f5f8ff); |
| | | border: 1rpx solid var(--color-primary-border, #8ab3ee); |
| | | border-radius: 10rpx; |
| | | } |
| | | .actions button::after, |
| | |
| | | width: 220rpx; |
| | | margin: 20rpx auto; |
| | | color: #fff; |
| | | background: #1769d8; |
| | | background: var(--color-primary, #1769d8); |
| | | border-radius: 12rpx; |
| | | } |
| | | .create-fab { |
| | |
| | | color: #fff; |
| | | font-size: 58rpx; |
| | | line-height: 120rpx; |
| | | background: #1769d8; |
| | | background: var(--color-primary, #1769d8); |
| | | border-radius: 50%; |
| | | box-shadow: 0 12rpx 24rpx rgba(23, 105, 216, 0.3); |
| | | } |
| | |
| | | </template> |
| | | |
| | | <style lang="scss" scoped> |
| | | .page{height:100vh;display:flex;flex-direction:column;padding:0 30rpx;box-sizing:border-box;overflow:hidden;background:#f3f6fb}.tabs{display:flex;height:88rpx;align-items:flex-end;gap:22rpx}.tabs text{padding:0 6rpx 18rpx;color:#718198;font-size:27rpx}.tabs .active{color:#1769d8;font-weight:600;border-bottom:4rpx solid #1769d8}.content{height:0;flex:1;padding-bottom:150rpx;box-sizing:border-box}.card,.row{margin-bottom:18rpx;overflow:hidden;background:#fff;border-radius:16rpx;box-shadow:0 8rpx 20rpx rgba(43,69,107,.05)}.section{padding:22rpx 24rpx 12rpx;color:#1769d8;font-size:25rpx;font-weight:600;background:#f8fbff}.field{display:flex;align-items:center;min-height:92rpx;gap:20rpx;padding:0 24rpx;border-bottom:1rpx solid #eef1f5}.field>text:first-child{width:230rpx;flex:none;color:#33455d;font-size:26rpx}.field input{flex:1;min-width:0;text-align:right;font-size:26rpx}.column{align-items:flex-start;flex-direction:column;padding:20rpx 24rpx}.column>text{width:auto!important}.checks{display:flex;flex-wrap:wrap;gap:12rpx}.checks text{padding:10rpx 16rpx;color:#66778c;font-size:23rpx;background:#f1f4f8;border-radius:10rpx}.checks .picked{color:#1769d8;background:#eaf3ff}radio-group{display:flex;flex:1;justify-content:flex-end;gap:24rpx;font-size:25rpx}.form-actions,.actions,.head{display:flex;align-items:center;justify-content:flex-end;gap:16rpx}.form-actions{padding:20rpx 24rpx}button{margin:0;font-size:24rpx;border-radius:10rpx}button::after,.fab::after{border:0}.primary,.fab{color:#fff;background:#1769d8}.head{justify-content:space-between;padding:24rpx 22rpx 12rpx}.head text:first-child{color:#20334c;font-size:30rpx;font-weight:600}.head text:last-child{color:#df5d36;font-size:30rpx;font-weight:600}.grid{display:grid;grid-template-columns:1fr;gap:10rpx;padding:12rpx 22rpx 18rpx;color:#66778c;font-size:23rpx}.actions{padding:0 22rpx 18rpx}.actions button{color:#1769d8;background:#f5f8ff;border:1rpx solid #8ab3ee}.actions .danger{color:#c65050;background:#fff7f7;border-color:#e3a0a0}.fab{position:fixed;right:30rpx;bottom:calc(32rpx + env(safe-area-inset-bottom));width:132rpx;height:132rpx;padding:0;font-size:58rpx;line-height:120rpx;border-radius:50%}.more,.state{display:block;padding:35rpx;color:#8795a8;font-size:26rpx;text-align:center} |
| | | .page{height:100vh;display:flex;flex-direction:column;padding:0 30rpx;box-sizing:border-box;overflow:hidden;background:#f3f6fb}.tabs{display:flex;height:88rpx;align-items:flex-end;gap:22rpx}.tabs text{padding:0 6rpx 18rpx;color:#718198;font-size:27rpx}.tabs .active{color:var(--color-primary, #1769d8);font-weight:600;border-bottom:4rpx solid var(--color-primary, #1769d8)}.content{height:0;flex:1;padding-bottom: 132rpx;box-sizing:border-box}.card,.row{margin-bottom:18rpx;overflow:hidden;background:#fff;border-radius:16rpx;box-shadow:0 8rpx 20rpx rgba(43,69,107,.05)}.section{padding:22rpx 24rpx 12rpx;color:var(--color-primary, #1769d8);font-size:25rpx;font-weight:600;background:#f8fbff}.field{display:flex;align-items:center;min-height:92rpx;gap:20rpx;padding:0 24rpx;border-bottom:1rpx solid #eef1f5}.field>text:first-child{width:230rpx;flex:none;color:#33455d;font-size:26rpx}.field input{flex:1;min-width:0;text-align:right;font-size:26rpx}.column{align-items:flex-start;flex-direction:column;padding:20rpx 24rpx}.column>text{width:auto!important}.checks{display:flex;flex-wrap:wrap;gap:12rpx}.checks text{padding:10rpx 16rpx;color:#66778c;font-size:23rpx;background:#f1f4f8;border-radius:10rpx}.checks .picked{color:var(--color-primary, #1769d8);background:#eaf3ff}radio-group{display:flex;flex:1;justify-content:flex-end;gap:24rpx;font-size:25rpx}.form-actions,.actions,.head{display:flex;align-items:center;justify-content:flex-end;gap:16rpx}.form-actions{padding:20rpx 24rpx}button{margin:0;font-size:24rpx;border-radius:10rpx}button::after,.fab::after{border:0}.primary,.fab{color:#fff;background:var(--color-primary, #1769d8)}.head{justify-content:space-between;padding:24rpx 22rpx 12rpx}.head text:first-child{color:#20334c;font-size:30rpx;font-weight:600}.head text:last-child{color:#df5d36;font-size:30rpx;font-weight:600}.grid{display:grid;grid-template-columns:1fr;gap:10rpx;padding:12rpx 22rpx 18rpx;color:#66778c;font-size:23rpx}.actions{padding:0 22rpx 18rpx}.actions button{color:var(--color-primary, #1769d8);background:var(--color-primary-soft, #f5f8ff);border:1rpx solid var(--color-primary-border, #8ab3ee)}.actions .danger{color:#c65050;background:#fff7f7;border-color:#e3a0a0}.fab{position:fixed;right:30rpx;bottom:calc(32rpx + env(safe-area-inset-bottom));width:132rpx;height:132rpx;padding:0;font-size:58rpx;line-height:120rpx;border-radius:50%}.more,.state{display:block;padding:35rpx;color:#8795a8;font-size:26rpx;text-align:center} |
| | | </style> |
| | |
| | | </template> |
| | | |
| | | <style lang="scss" scoped> |
| | | .page{min-height:100vh;padding:24rpx 30rpx 90rpx;box-sizing:border-box;background:#f6f7f9}.card{overflow:hidden;background:#fff;border-radius:16rpx}.section{padding:22rpx 24rpx 12rpx;color:#1769d8;font-size:25rpx;font-weight:600;background:#f8fbff}.field{display:flex;align-items:center;min-height:96rpx;gap:18rpx;padding:0 24rpx;border-bottom:1rpx solid #eef1f5}.field>text:first-child{width:220rpx;flex:none;color:#33455d;font-size:27rpx}.field input{flex:1;min-width:0;color:#1e3049;font-size:27rpx;text-align:right}radio-group{display:flex;flex:1;justify-content:flex-end;gap:24rpx;color:#1e3049;font-size:26rpx}.unit{width:auto!important;color:#65758a!important;font-size:24rpx!important}.save{margin-top:32rpx;color:#fff;background:#1769d8;border-radius:12rpx;font-size:30rpx}.save::after{border:0}.state{padding:70rpx 30rpx;color:#8795a8;font-size:26rpx;text-align:center} |
| | | .page{min-height:100vh;padding:24rpx 30rpx 90rpx;box-sizing:border-box;background:#f6f7f9}.card{overflow:hidden;background:#fff;border-radius:16rpx}.section{padding:22rpx 24rpx 12rpx;color:var(--color-primary, #1769d8);font-size:25rpx;font-weight:600;background:#f8fbff}.field{display:flex;align-items:center;min-height:96rpx;gap:18rpx;padding:0 24rpx;border-bottom:1rpx solid #eef1f5}.field>text:first-child{width:220rpx;flex:none;color:#33455d;font-size:27rpx}.field input{flex:1;min-width:0;color:#1e3049;font-size:27rpx;text-align:right}radio-group{display:flex;flex:1;justify-content:flex-end;gap:24rpx;color:#1e3049;font-size:26rpx}.unit{width:auto!important;color:#65758a!important;font-size:24rpx!important}.save{margin-top:32rpx;color:#fff;background:var(--color-primary, #1769d8);border-radius:12rpx;font-size:30rpx}.save::after{border:0}.state{padding:70rpx 30rpx;color:#8795a8;font-size:26rpx;text-align:center} |
| | | </style> |
| | |
| | | } |
| | | .header > text { |
| | | padding: 7rpx 13rpx; |
| | | color: #1769d8; |
| | | color: var(--color-primary, #1769d8); |
| | | font-size: 21rpx; |
| | | background: #e9f2ff; |
| | | border-radius: 14rpx; |
| | |
| | | font-size: 27rpx; |
| | | } |
| | | .search text { |
| | | color: #1769d8; |
| | | color: var(--color-primary, #1769d8); |
| | | font-size: 24rpx; |
| | | } |
| | | .contentScroll { |
| | |
| | | min-height: 56rpx; |
| | | padding: 0 20rpx; |
| | | margin: 0; |
| | | color: #1769d8; |
| | | color: var(--color-primary, #1769d8); |
| | | font-size: 23rpx; |
| | | line-height: 54rpx; |
| | | background: #f5f8ff; |
| | | border: 1rpx solid #8ab3ee; |
| | | background: var(--color-primary-soft, #f5f8ff); |
| | | border: 1rpx solid var(--color-primary-border, #8ab3ee); |
| | | border-radius: 10rpx; |
| | | } |
| | | .actions button::after, |
| | |
| | | .actions .primary, |
| | | .dialogActions .confirm { |
| | | color: #fff; |
| | | background: #1769d8; |
| | | border-color: #1769d8; |
| | | background: var(--color-primary, #1769d8); |
| | | border-color: var(--color-primary, #1769d8); |
| | | } |
| | | .more, |
| | | .state { |
| | |
| | | width: 220rpx; |
| | | margin: 20rpx auto; |
| | | color: #fff; |
| | | background: #1769d8; |
| | | background: var(--color-primary, #1769d8); |
| | | border-radius: 12rpx; |
| | | } |
| | | .mask { |
| | |
| | | <script setup lang="ts"> |
| | | import { computed, ref } from 'vue'; import { onLoad, onShow } from '@dcloudio/uni-app'; import { getInvoice, submitInvoice, type CrmInvoice } from '../../../api/crm'; import { useAuth } from '../../../stores/auth'; |
| | | const {hasPermission,state}=useAuth();const id=ref(0),item=ref<CrmInvoice>(),loading=ref(false);const canUpdate=computed(()=>hasPermission('crm:invoice:update'));const money=(x?:number)=>x===undefined?'â':`Â¥${Number(x).toFixed(2)}`;const status=(x?:number)=>({0:'æªæäº¤',10:'审æ¹ä¸',20:'审æ¹éè¿',30:'审æ¹ä¸éè¿',40:'已忶',50:'å·²ä½åº'} as Record<number,string>)[x??0]||'æªç¥ç¶æ';async function load(){if(!state.accessToken||!id.value)return;loading.value=true;try{item.value=await getInvoice(state.accessToken,id.value);}catch(error){uni.showToast({title:error instanceof Error?error.message:'详æ
å 载失败',icon:'none'});}finally{loading.value=false;}}async function submit(){if(!state.accessToken)return;try{await submitInvoice(state.accessToken,id.value);uni.showToast({title:'å·²æäº¤å®¡æ ¸',icon:'success'});load();}catch(error){uni.showToast({title:error instanceof Error?error.message:'æäº¤å¤±è´¥',icon:'none'});}}onLoad(q=>{id.value=Number(q.id);load();});onShow(load); |
| | | </script><template><view class="page"><view v-if="loading" class="state">å è½½ä¸...</view><template v-else-if="item"><view class="summary"><view><text>{{item.no||'å¼ç¥¨ç³è¯·'}}</text><text>{{item.customerName||'â'}} · {{money(item.price)}}</text></view><text>{{status(item.auditStatus)}}</text></view><view class="toolbar"><button v-if="canUpdate" @click="uni.navigateTo({url:`/pages/crm/invoice/form?id=${id}`})">ç¼è¾</button><button v-if="canUpdate&&item.auditStatus===0" @click="submit">æäº¤å®¡æ ¸</button></view><view class="card"><view v-for="row in [['客æ·',item.customerName],['åå',item.contract?.no||item.contract?.name],['è´è´£äºº',item.ownerUserName],['æå±é¨é¨',item.ownerUserDeptName],['å票类å',item.invoiceType],['å票å·ç ',item.invoiceNo],['å票æ¬å¤´',item.invoiceTitle],['å¼ç¥¨éé¢',money(item.price)],['å¼ç¥¨æ¥æ',item.invoiceTime?.slice(0,10)],['å©ä½å¯å款éé¢',money(item.remainingInvoicePrice)],['å建人',item.creatorName],['å建æ¶é´',item.createTime?.replace('T',' ').slice(0,16)]]" :key="row[0]" class="row"><text>{{row[0]}}</text><text>{{row[1]??'â'}}</text></view><view class="remark"><text>夿³¨</text><text>{{item.remark||'â'}}</text></view><view class="remark"><text>å票éä»¶</text><text v-if="item.attachmentList?.length">{{item.attachmentList.map(x=>x.name||'éä»¶').join('ã')}}</text><text v-else>æªä¸ä¼ </text></view></view></template><view v-else class="state">ææ å¼ç¥¨ç³è¯·æ°æ®</view></view></template><style lang="scss" scoped>.page{min-height:100vh;padding:24rpx 30rpx;background:#f6f7f9}.summary{display:flex;align-items:center;justify-content:space-between;padding:26rpx;color:#fff;background:#1769d8;border-radius:16rpx}.summary text{display:block}.summary view text:first-child{font-size:32rpx;font-weight:600}.summary view text:last-child{margin-top:8rpx;font-size:24rpx;color:#dbeaff}.summary>text{padding:5rpx 10rpx;font-size:21rpx;background:rgba(255,255,255,.18);border-radius:8rpx}.toolbar{display:flex;justify-content:flex-end;gap:16rpx;padding:18rpx 0}.toolbar button{margin:0;color:#1769d8;font-size:24rpx;background:#f5f8ff;border:1rpx solid #8ab3ee}.toolbar button::after{border:0}.card{background:#fff;border-radius:16rpx}.row{display:flex;justify-content:space-between;gap:24rpx;min-height:88rpx;align-items:center;padding:0 24rpx;border-bottom:1rpx solid #eef1f5}.row text:first-child,.remark>text:first-child{color:#718198;font-size:26rpx}.row text:last-child{color:#263a54;font-size:26rpx;text-align:right}.remark{padding:20rpx 24rpx;border-bottom:1rpx solid #eef1f5}.remark text{display:block}.remark text:last-child{margin-top:12rpx;color:#263a54;font-size:26rpx;line-height:1.6}.state{padding:80rpx 20rpx;color:#8795a8;font-size:26rpx;text-align:center}</style> |
| | | </script><template><view class="page"><view v-if="loading" class="state">å è½½ä¸...</view><template v-else-if="item"><view class="summary"><view><text>{{item.no||'å¼ç¥¨ç³è¯·'}}</text><text>{{item.customerName||'â'}} · {{money(item.price)}}</text></view><text>{{status(item.auditStatus)}}</text></view><view class="toolbar"><button v-if="canUpdate" @click="uni.navigateTo({url:`/pages/crm/invoice/form?id=${id}`})">ç¼è¾</button><button v-if="canUpdate&&item.auditStatus===0" @click="submit">æäº¤å®¡æ ¸</button></view><view class="card"><view v-for="row in [['客æ·',item.customerName],['åå',item.contract?.no||item.contract?.name],['è´è´£äºº',item.ownerUserName],['æå±é¨é¨',item.ownerUserDeptName],['å票类å',item.invoiceType],['å票å·ç ',item.invoiceNo],['å票æ¬å¤´',item.invoiceTitle],['å¼ç¥¨éé¢',money(item.price)],['å¼ç¥¨æ¥æ',item.invoiceTime?.slice(0,10)],['å©ä½å¯å款éé¢',money(item.remainingInvoicePrice)],['å建人',item.creatorName],['å建æ¶é´',item.createTime?.replace('T',' ').slice(0,16)]]" :key="row[0]" class="row"><text>{{row[0]}}</text><text>{{row[1]??'â'}}</text></view><view class="remark"><text>夿³¨</text><text>{{item.remark||'â'}}</text></view><view class="remark"><text>å票éä»¶</text><text v-if="item.attachmentList?.length">{{item.attachmentList.map(x=>x.name||'éä»¶').join('ã')}}</text><text v-else>æªä¸ä¼ </text></view></view></template><view v-else class="state">ææ å¼ç¥¨ç³è¯·æ°æ®</view></view></template><style lang="scss" scoped>.page{min-height:100vh;padding:24rpx 30rpx;background:#f6f7f9}.summary{display:flex;align-items:center;justify-content:space-between;padding:26rpx;color:#fff;background:var(--color-primary, #1769d8);border-radius:16rpx}.summary text{display:block}.summary view text:first-child{font-size:32rpx;font-weight:600}.summary view text:last-child{margin-top:8rpx;font-size:24rpx;color:#dbeaff}.summary>text{padding:5rpx 10rpx;font-size:21rpx;background:rgba(255,255,255,.18);border-radius:8rpx}.toolbar{display:flex;justify-content:flex-end;gap:16rpx;padding:18rpx 0}.toolbar button{margin:0;color:var(--color-primary, #1769d8);font-size:24rpx;background:var(--color-primary-soft, #f5f8ff);border:1rpx solid var(--color-primary-border, #8ab3ee)}.toolbar button::after{border:0}.card{background:#fff;border-radius:16rpx}.row{display:flex;justify-content:space-between;gap:24rpx;min-height:88rpx;align-items:center;padding:0 24rpx;border-bottom:1rpx solid #eef1f5}.row text:first-child,.remark>text:first-child{color:#718198;font-size:26rpx}.row text:last-child{color:#263a54;font-size:26rpx;text-align:right}.remark{padding:20rpx 24rpx;border-bottom:1rpx solid #eef1f5}.remark text{display:block}.remark text:last-child{margin-top:12rpx;color:#263a54;font-size:26rpx;line-height:1.6}.state{padding:80rpx 20rpx;color:#8795a8;font-size:26rpx;text-align:center}</style> |
| | |
| | | onLoad(async query=>{id.value=query.id?Number(query.id):undefined;if(!state.accessToken)return;try{const [customerData,contractData,userData,dictData]=await Promise.all([getCustomerSimpleList(state.accessToken),getContractPage(state.accessToken,{pageNo:1,pageSize:100}),getCrmUserList(state.accessToken),getSimpleDictDataList(state.accessToken)]);customers.value=customerData;contracts.value=contractData.list;users.value=userData;dicts.value=dictData;if(id.value){const data=await getInvoice(state.accessToken,id.value);Object.assign(form,data,{invoiceTime:data.invoiceTime?.slice(0,10)||'',blobIds:data.attachmentList?.map(x=>x.id)||data.blobIds||[]});attachments.value=data.attachmentList||[];}else{form.ownerUserId=state.user?.id;form.ownerUserName=state.user?.nickname;}}catch(error){uni.showToast({title:error instanceof Error?error.message:'æ°æ®å 载失败',icon:'none'});}}); |
| | | </script> |
| | | <template><view class="page"><view class="card"><view class="section">å¼ç¥¨ä¿¡æ¯</view><view class="field"><text>å®¢æ· <text class="required">*</text></text><picker :range="customers" range-key="name" @change="selectCustomer(Number($event.detail.value))"><view class="picker">{{form.customerName||label(customers,form.customerId)}}<text>âº</text></view></picker></view><view class="field"><text>åå <text class="required">*</text></text><picker :range="contracts" range-key="name" @change="selectContract(Number($event.detail.value))"><view class="picker">{{form.contract?.name||form.contract?.no||label(contracts,form.contractId)}}<text>âº</text></view></picker></view><view class="field"><text>è´è´£äºº <text class="required">*</text></text><picker :disabled="Boolean(id)" :range="users" range-key="nickname" @change="form.ownerUserId=users[Number($event.detail.value)].id;form.ownerUserName=users[Number($event.detail.value)].nickname"><view class="picker">{{form.ownerUserName||label(users,form.ownerUserId,'nickname')}}<text>âº</text></view></picker></view><view class="field"><text>å票类å <text class="required">*</text></text><picker :range="invoiceTypes" range-key="label" @change="form.invoiceType=Number(invoiceTypes[Number($event.detail.value)].value)"><view class="picker">{{invoiceTypes.find(x=>Number(x.value)===form.invoiceType)?.label||'è¯·éæ©å票类å'}}<text>âº</text></view></picker></view><view class="field"><text>å票å·ç </text><input v-model="form.invoiceNo" placeholder="请è¾å
¥å票å·ç "/></view><view class="field"><text>å票æ¬å¤´</text><input v-model="form.invoiceTitle" placeholder="请è¾å
¥å票æ¬å¤´"/></view><view class="field"><text>å¼ç¥¨éé¢ <text class="required">*</text></text><input :value="form.price===undefined?'':String(form.price)" type="digit" placeholder="请è¾å
¥å¼ç¥¨éé¢" @input="form.price=Number($event.detail.value||0)"/></view><view class="field"><text>å¼ç¥¨æ¥æ <text class="required">*</text></text><picker mode="date" :value="form.invoiceTime" @change="form.invoiceTime=$event.detail.value"><view class="picker">{{form.invoiceTime||'è¯·éæ©æ¥æ'}}<text>âº</text></view></picker></view><view class="field column"><text>å票éä»¶</text><button class="upload" :loading="uploading" @click="chooseFile">æ·»å éä»¶</button><text v-for="(file,index) in attachments" :key="file.id" class="file">{{file.name||`éä»¶ ${index+1}`}} <text @click="form.blobIds?.splice(index,1);attachments.splice(index,1)">å é¤</text></text></view><view class="field column"><text>夿³¨</text><textarea v-model="form.remark" placeholder="请è¾å
¥å¤æ³¨"></textarea></view></view><button class="save" :loading="saving" :disabled="saving" @click="save">ä¿å</button></view></template> |
| | | <style lang="scss" scoped>.page{min-height:100vh;padding:24rpx 30rpx 70rpx;background:#f6f7f9}.card{overflow:hidden;background:#fff;border-radius:16rpx}.section{padding:22rpx 24rpx 12rpx;color:#1769d8;font-size:25rpx;font-weight:600;background:#f8fbff}.field{display:flex;align-items:center;min-height:96rpx;padding:0 24rpx;gap:20rpx;border-bottom:1rpx solid #eef1f5}.field>text:first-child{width:190rpx;color:#33455d;font-size:27rpx}.required{color:#e34b4b}.field input,.field picker,.picker{flex:1;color:#1e3049;font-size:27rpx}.picker{display:flex;justify-content:space-between;color:#65758a}.picker text{color:#8092a7;font-size:36rpx}.column{align-items:flex-start;flex-direction:column;padding:20rpx 24rpx}.column>text:first-child{width:auto}.column textarea{width:100%;height:130rpx;font-size:27rpx}.upload{margin:0;color:#1769d8;font-size:24rpx;background:#f5f8ff;border:1rpx solid #8ab3ee}.file{width:100%;color:#65758a!important;font-size:24rpx!important}.file text{float:right;color:#c65050}.save{margin-top:32rpx;color:#fff;background:#1769d8;border-radius:12rpx;font-size:30rpx}.save::after,.upload::after{border:0}</style> |
| | | <style lang="scss" scoped>.page{min-height:100vh;padding:24rpx 30rpx 70rpx;background:#f6f7f9}.card{overflow:hidden;background:#fff;border-radius:16rpx}.section{padding:22rpx 24rpx 12rpx;color:var(--color-primary, #1769d8);font-size:25rpx;font-weight:600;background:#f8fbff}.field{display:flex;align-items:center;min-height:96rpx;padding:0 24rpx;gap:20rpx;border-bottom:1rpx solid #eef1f5}.field>text:first-child{width:190rpx;color:#33455d;font-size:27rpx}.required{color:#e34b4b}.field input,.field picker,.picker{flex:1;color:#1e3049;font-size:27rpx}.picker{display:flex;justify-content:space-between;color:#65758a}.picker text{color:#8092a7;font-size:36rpx}.column{align-items:flex-start;flex-direction:column;padding:20rpx 24rpx}.column>text:first-child{width:auto}.column textarea{width:100%;height:130rpx;font-size:27rpx}.upload{margin:0;color:var(--color-primary, #1769d8);font-size:24rpx;background:var(--color-primary-soft, #f5f8ff);border:1rpx solid var(--color-primary-border, #8ab3ee)}.file{width:100%;color:#65758a!important;font-size:24rpx!important}.file text{float:right;color:#c65050}.save{margin-top:32rpx;color:#fff;background:var(--color-primary, #1769d8);border-radius:12rpx;font-size:30rpx}.save::after,.upload::after{border:0}</style> |
| | |
| | | font-size: 27rpx; |
| | | } |
| | | .tabs .active { |
| | | color: #1769d8; |
| | | color: var(--color-primary, #1769d8); |
| | | font-weight: 600; |
| | | border-bottom: 4rpx solid #1769d8; |
| | | border-bottom: 4rpx solid var(--color-primary, #1769d8); |
| | | } |
| | | .search { |
| | | display: flex; |
| | |
| | | } |
| | | .search text { |
| | | font-size: 24rpx; |
| | | color: #1769d8; |
| | | color: var(--color-primary, #1769d8); |
| | | } |
| | | .content { |
| | | height: 0; |
| | | flex: 1; |
| | | padding-bottom: 150rpx; |
| | | padding-bottom: 132rpx; |
| | | box-sizing: border-box; |
| | | } |
| | | .row { |
| | |
| | | } |
| | | .tag { |
| | | padding: 4rpx 10rpx; |
| | | color: #1769d8; |
| | | color: var(--color-primary, #1769d8); |
| | | font-size: 21rpx; |
| | | background: #edf5ff; |
| | | background: var(--color-primary-soft, #edf5ff); |
| | | border-radius: 7rpx; |
| | | } |
| | | .grid { |
| | |
| | | min-height: 48rpx; |
| | | padding: 0 16rpx; |
| | | margin: 0; |
| | | color: #1769d8; |
| | | color: var(--color-primary, #1769d8); |
| | | font-size: 22rpx; |
| | | line-height: 46rpx; |
| | | background: #f5f8ff; |
| | | border: 1rpx solid #8ab3ee; |
| | | background: var(--color-primary-soft, #f5f8ff); |
| | | border: 1rpx solid var(--color-primary-border, #8ab3ee); |
| | | border-radius: 10rpx; |
| | | } |
| | | .actions .danger { |
| | |
| | | width: 220rpx; |
| | | margin: 20rpx auto; |
| | | color: #fff; |
| | | background: #1769d8; |
| | | background: var(--color-primary, #1769d8); |
| | | border-radius: 12rpx; |
| | | } |
| | | .fab { |
| | |
| | | color: #fff; |
| | | font-size: 58rpx; |
| | | line-height: 120rpx; |
| | | background: #1769d8; |
| | | background: var(--color-primary, #1769d8); |
| | | border-radius: 50%; |
| | | } |
| | | </style> |
| | |
| | | </template> |
| | | |
| | | <style lang="scss" scoped> |
| | | .page{height:100vh;display:flex;flex-direction:column;background:#f3f6fb}.summary{display:flex;justify-content:space-between;align-items:center;padding:28rpx 30rpx 22rpx;background:#fff}.summary view,.stack,.form,.log{display:flex;flex-direction:column}.summary view{gap:8rpx}.title{font-size:33rpx;font-weight:600;color:#20334c}.summary view text:last-child,.member>view>text,.logHead text:last-child,.logMeta,.noChange{color:#78879b;font-size:23rpx}.tag{padding:5rpx 12rpx;color:#1769d8;font-size:22rpx;background:#edf5ff;border-radius:7rpx}.toolbar{display:flex;gap:14rpx;padding:14rpx 30rpx;background:#fff}.toolbar button,.outline{padding:0 18rpx;margin:0;color:#1769d8;font-size:23rpx;line-height:54rpx;background:#f5f8ff;border:1rpx solid #8ab3ee;border-radius:10rpx}.toolbar button::after,.outline::after,.primary::after,.link::after,.changeToggle::after{border:0}.tabs{flex:none;white-space:nowrap;background:#fff}.tabs text{display:inline-block;padding:25rpx 22rpx 17rpx;color:#718198;font-size:26rpx}.tabs .active{color:#1769d8;font-weight:600;border-bottom:4rpx solid #1769d8}.content{height:0;flex:1;padding:20rpx 30rpx 60rpx;box-sizing:border-box}.card{padding:24rpx;margin-bottom:18rpx;background:#fff;border-radius:16rpx;box-shadow:0 8rpx 20rpx rgba(43,69,107,.06)}.infoRow{display:flex;justify-content:space-between;gap:20rpx;padding:19rpx 0;font-size:26rpx;border-bottom:1rpx solid #eef1f5}.infoRow text:first-child,.remark text:first-child{color:#78879b}.infoRow text:last-child{text-align:right;color:#2b3d55}.remark{display:flex;flex-direction:column;gap:16rpx;padding-top:20rpx;font-size:26rpx}.outline{align-self:flex-end;margin-bottom:18rpx}.form{gap:18rpx}.required{color:#33455d;font-size:26rpx}.required::before{content:'*';margin-right:8rpx;color:#e34b4b}.select{display:flex;justify-content:space-between;min-height:74rpx;padding:0 18rpx;color:#65758a;font-size:26rpx;line-height:74rpx;background:#f6f8fb;border-radius:10rpx}.select text{font-size:34rpx}.form radio-group{display:flex;gap:30rpx;font-size:26rpx}.primary{margin:0;color:#fff;background:#1769d8;border-radius:10rpx}.member{display:flex;justify-content:space-between;align-items:flex-end;gap:16rpx}.member>view:first-child{display:flex;flex:1;flex-direction:column;gap:10rpx;min-width:0}.memberHead{display:flex;align-items:center;gap:14rpx}.memberHead text:first-child{font-size:28rpx;font-weight:600;color:#2b3d55}.memberHead text:last-child{padding:3rpx 10rpx;color:#1769d8;font-size:21rpx;background:#edf5ff;border-radius:7rpx}.memberActions{display:flex;align-items:center;gap:14rpx;color:#52708f;font-size:24rpx}.link{padding:0;margin:0;font-size:23rpx;line-height:1;background:transparent}.danger{color:#c65050!important}.log{gap:14rpx}.logHead{display:flex;align-items:center;justify-content:space-between;gap:16rpx}.logType{flex:none;padding:5rpx 13rpx;font-size:23rpx;border-radius:7rpx;color:#1769d8;background:#edf5ff}.logType.type1{color:#1f8a4c;background:#edf8f1}.logType.type2{color:#1769d8;background:#edf5ff}.logType.type3{color:#c65050;background:#fff0f0}.statusChange{display:flex;align-items:center;gap:10rpx;font-size:25rpx;color:#2b3d55}.statusChange text:first-child{color:#c65050}.statusChange text:last-child{color:#1f8a4c}.logContent{font-size:26rpx;color:#2b3d55;line-height:1.6;white-space:pre-wrap;word-break:break-word;overflow-wrap:anywhere}.logMeta{display:flex;flex-direction:column;gap:6rpx}.changeToggle{align-self:flex-start;padding:0 18rpx;margin:0;color:#1769d8;font-size:23rpx;line-height:50rpx;background:#f5f8ff;border-radius:10rpx}.changeList{display:flex;flex-direction:column;border-top:1rpx solid #eef1f5}.changeRow{display:flex;flex-direction:column;gap:8rpx;padding:16rpx 0;border-bottom:1rpx solid #eef1f5}.changeField{font-size:24rpx;color:#65758a}.changeValues{display:flex;align-items:flex-start;gap:10rpx;font-size:25rpx;line-height:1.5;word-break:break-word}.changeValues text{min-width:0}.old{flex:1;color:#c65050;text-decoration:line-through}.new{flex:1;color:#1f8a4c;font-weight:500}.state{padding:35rpx;color:#8795a8;font-size:26rpx;text-align:center} |
| | | .page{height:100vh;display:flex;flex-direction:column;background:#f3f6fb}.summary{display:flex;justify-content:space-between;align-items:center;padding:28rpx 30rpx 22rpx;background:#fff}.summary view,.stack,.form,.log{display:flex;flex-direction:column}.summary view{gap:8rpx}.title{font-size:33rpx;font-weight:600;color:#20334c}.summary view text:last-child,.member>view>text,.logHead text:last-child,.logMeta,.noChange{color:#78879b;font-size:23rpx}.tag{padding:5rpx 12rpx;color:var(--color-primary, #1769d8);font-size:22rpx;background:var(--color-primary-soft, #edf5ff);border-radius:7rpx}.toolbar{display:flex;gap:14rpx;padding:14rpx 30rpx;background:#fff}.toolbar button,.outline{padding:0 18rpx;margin:0;color:var(--color-primary, #1769d8);font-size:23rpx;line-height:54rpx;background:var(--color-primary-soft, #f5f8ff);border:1rpx solid var(--color-primary-border, #8ab3ee);border-radius:10rpx}.toolbar button::after,.outline::after,.primary::after,.link::after,.changeToggle::after{border:0}.tabs{flex:none;white-space:nowrap;background:#fff}.tabs text{display:inline-block;padding:25rpx 22rpx 17rpx;color:#718198;font-size:26rpx}.tabs .active{color:var(--color-primary, #1769d8);font-weight:600;border-bottom:4rpx solid var(--color-primary, #1769d8)}.content{height:0;flex:1;padding:20rpx 30rpx 60rpx;box-sizing:border-box}.card{padding:24rpx;margin-bottom:18rpx;background:#fff;border-radius:16rpx;box-shadow:0 8rpx 20rpx rgba(43,69,107,.06)}.infoRow{display:flex;justify-content:space-between;gap:20rpx;padding:19rpx 0;font-size:26rpx;border-bottom:1rpx solid #eef1f5}.infoRow text:first-child,.remark text:first-child{color:#78879b}.infoRow text:last-child{text-align:right;color:#2b3d55}.remark{display:flex;flex-direction:column;gap:16rpx;padding-top:20rpx;font-size:26rpx}.outline{align-self:flex-end;margin-bottom:18rpx}.form{gap:18rpx}.required{color:#33455d;font-size:26rpx}.required::before{content:'*';margin-right:8rpx;color:#e34b4b}.select{display:flex;justify-content:space-between;min-height:74rpx;padding:0 18rpx;color:#65758a;font-size:26rpx;line-height:74rpx;background:#f6f8fb;border-radius:10rpx}.select text{font-size:34rpx}.form radio-group{display:flex;gap:30rpx;font-size:26rpx}.primary{margin:0;color:#fff;background:var(--color-primary, #1769d8);border-radius:10rpx}.member{display:flex;justify-content:space-between;align-items:flex-end;gap:16rpx}.member>view:first-child{display:flex;flex:1;flex-direction:column;gap:10rpx;min-width:0}.memberHead{display:flex;align-items:center;gap:14rpx}.memberHead text:first-child{font-size:28rpx;font-weight:600;color:#2b3d55}.memberHead text:last-child{padding:3rpx 10rpx;color:var(--color-primary, #1769d8);font-size:21rpx;background:var(--color-primary-soft, #edf5ff);border-radius:7rpx}.memberActions{display:flex;align-items:center;gap:14rpx;color:#52708f;font-size:24rpx}.link{padding:0;margin:0;font-size:23rpx;line-height:1;background:transparent}.danger{color:#c65050!important}.log{gap:14rpx}.logHead{display:flex;align-items:center;justify-content:space-between;gap:16rpx}.logType{flex:none;padding:5rpx 13rpx;font-size:23rpx;border-radius:7rpx;color:var(--color-primary, #1769d8);background:var(--color-primary-soft, #edf5ff)}.logType.type1{color:#1f8a4c;background:#edf8f1}.logType.type2{color:var(--color-primary, #1769d8);background:var(--color-primary-soft, #edf5ff)}.logType.type3{color:#c65050;background:#fff0f0}.statusChange{display:flex;align-items:center;gap:10rpx;font-size:25rpx;color:#2b3d55}.statusChange text:first-child{color:#c65050}.statusChange text:last-child{color:#1f8a4c}.logContent{font-size:26rpx;color:#2b3d55;line-height:1.6;white-space:pre-wrap;word-break:break-word;overflow-wrap:anywhere}.logMeta{display:flex;flex-direction:column;gap:6rpx}.changeToggle{align-self:flex-start;padding:0 18rpx;margin:0;color:var(--color-primary, #1769d8);font-size:23rpx;line-height:50rpx;background:var(--color-primary-soft, #f5f8ff);border-radius:10rpx}.changeList{display:flex;flex-direction:column;border-top:1rpx solid #eef1f5}.changeRow{display:flex;flex-direction:column;gap:8rpx;padding:16rpx 0;border-bottom:1rpx solid #eef1f5}.changeField{font-size:24rpx;color:#65758a}.changeValues{display:flex;align-items:flex-start;gap:10rpx;font-size:25rpx;line-height:1.5;word-break:break-word}.changeValues text{min-width:0}.old{flex:1;color:#c65050;text-decoration:line-through}.new{flex:1;color:#1f8a4c;font-weight:500}.state{padding:35rpx;color:#8795a8;font-size:26rpx;text-align:center} |
| | | </style> |
| | |
| | | onLoad(async query => { id.value = query.id ? Number(query.id) : undefined; const contractId = query.contractId ? Number(query.contractId) : undefined; const customerId = query.customerId ? Number(query.customerId) : undefined; if (!state.accessToken) return; try { const [customerData, contractData, userData, dictData] = await Promise.all([getCustomerSimpleList(state.accessToken), getContractPage(state.accessToken, { pageNo: 1, pageSize: 100 }), getCrmUserList(state.accessToken), getSimpleDictDataList(state.accessToken)]); customers.value = customerData; contracts.value = contractData.list; users.value = userData; dicts.value = dictData; if (id.value) { const data = await getReceivablePlan(state.accessToken, id.value); Object.assign(form, data, { returnTime: data.returnTime?.slice(0, 10) || "" }); } else { form.customerId = customerId; form.customerName = customers.value.find(item => item.id === customerId)?.name; form.ownerUserId = state.user?.id; form.ownerUserName = state.user?.nickname; if (contractId) { const contract = contracts.value.find(item => item.id === contractId) || await getContract(state.accessToken, contractId); if (!contracts.value.some(item => item.id === contract.id)) contracts.value.push(contract); form.contractId = contract.id; form.contractNo = contract.no || contract.name; form.customerId = contract.customerId; form.customerName = contract.customerName; form.price = Number(contract.totalPrice || 0) - Number(contract.totalReceivablePrice || 0); } } } catch (error) { uni.showToast({ title: error instanceof Error ? error.message : "æ°æ®å 载失败", icon: "none" }); } }); |
| | | </script> |
| | | <template><view class="page"><view class="form-card"><view class="section">忬¾è®¡å</view><view class="field"><text>ææ¬¡</text><view class="readonly">{{ id ? `第 ${form.period || 'â'} æ` : 'ä¿åæ¶èªå¨çæ' }}</view></view><view class="field"><text>å®¢æ· <text class="required">*</text></text><picker :disabled="Boolean(id)" :range="customers" range-key="name" @change="selectCustomer(Number($event.detail.value))"><view class="picker">{{ customerLabel() }}<text>âº</text></view></picker></view><view class="field"><text>åå <text class="required">*</text></text><picker :disabled="Boolean(id)" :range="availableContracts" range-key="name" @change="selectContract(Number($event.detail.value))"><view class="picker">{{ contractLabel() }}<text>âº</text></view></picker></view><view class="field"><text>è´è´£äºº <text class="required">*</text></text><picker :disabled="Boolean(id)" :range="users" range-key="nickname" @change="form.ownerUserId=users[Number($event.detail.value)].id;form.ownerUserName=users[Number($event.detail.value)].nickname||users[Number($event.detail.value)].username"><view class="picker">{{ userLabel() }}<text>âº</text></view></picker></view><view class="field"><text>é¢è®¡åæ¬¾æ¥ <text class="required">*</text></text><picker mode="date" :value="form.returnTime" @change="form.returnTime=$event.detail.value"><view class="picker">{{ form.returnTime || 'è¯·éæ©æ¥æ' }}<text>âº</text></view></picker></view><view class="field"><text>忬¾æ¹å¼ <text class="required">*</text></text><picker :range="returnTypes" range-key="label" @change="form.returnType=Number(returnTypes[Number($event.detail.value)].value)"><view class="picker">{{ returnTypeLabel() }}<text>âº</text></view></picker></view><view class="field"><text>计åéé¢ <text class="required">*</text></text><input :value="form.price === undefined ? '' : String(form.price)" type="digit" placeholder="请è¾å
¥è®¡åéé¢" @input="form.price=Number($event.detail.value||0)" /></view><view class="field"><text>æåæé</text><input :value="form.remindDays === undefined ? '' : String(form.remindDays)" type="number" placeholder="请è¾å
¥æé天æ°" @input="form.remindDays=$event.detail.value===''?undefined:Number($event.detail.value)" /><text class="unit">天</text></view><view class="field column"><text>夿³¨</text><textarea v-model="form.remark" placeholder="请è¾å
¥å¤æ³¨" ></textarea></view></view><button v-if="editable" class="save" :loading="saving" :disabled="saving" @click="save">ä¿å</button><view v-else class="no-permission">ææ ä¿åæé</view></view></template> |
| | | <style lang="scss" scoped>.page{min-height:100vh;padding:24rpx 30rpx 70rpx;background:#f6f7f9}.form-card{overflow:hidden;background:#fff;border-radius:16rpx}.section{padding:22rpx 24rpx 12rpx;color:#1769d8;font-size:25rpx;font-weight:600;background:#f8fbff}.field{display:flex;align-items:center;min-height:96rpx;padding:0 24rpx;gap:20rpx;border-bottom:1rpx solid #eef1f5}.field>text{width:190rpx;color:#33455d;font-size:27rpx}.required{color:#e34b4b}.field input,.field picker,.picker,.readonly{flex:1;color:#1e3049;font-size:27rpx}.readonly,.picker{color:#65758a}.picker{display:flex;justify-content:space-between}.picker text{color:#8092a7;font-size:36rpx}.unit{width:auto!important;color:#65758a!important}.column{align-items:flex-start;flex-direction:column;padding:20rpx 24rpx}.column>text{width:auto}.column textarea{width:100%;height:130rpx;font-size:27rpx}.save{margin-top:32rpx;color:#fff;background:#1769d8;border-radius:12rpx;font-size:30rpx}.save::after{border:0}.no-permission{padding:36rpx;color:#8795a8;font-size:26rpx;text-align:center}</style> |
| | | <style lang="scss" scoped>.page{min-height:100vh;padding:24rpx 30rpx 70rpx;background:#f6f7f9}.form-card{overflow:hidden;background:#fff;border-radius:16rpx}.section{padding:22rpx 24rpx 12rpx;color:var(--color-primary, #1769d8);font-size:25rpx;font-weight:600;background:#f8fbff}.field{display:flex;align-items:center;min-height:96rpx;padding:0 24rpx;gap:20rpx;border-bottom:1rpx solid #eef1f5}.field>text{width:190rpx;color:#33455d;font-size:27rpx}.required{color:#e34b4b}.field input,.field picker,.picker,.readonly{flex:1;color:#1e3049;font-size:27rpx}.readonly,.picker{color:#65758a}.picker{display:flex;justify-content:space-between}.picker text{color:#8092a7;font-size:36rpx}.unit{width:auto!important;color:#65758a!important}.column{align-items:flex-start;flex-direction:column;padding:20rpx 24rpx}.column>text{width:auto}.column textarea{width:100%;height:130rpx;font-size:27rpx}.save{margin-top:32rpx;color:#fff;background:var(--color-primary, #1769d8);border-radius:12rpx;font-size:30rpx}.save::after{border:0}.no-permission{padding:36rpx;color:#8795a8;font-size:26rpx;text-align:center}</style> |
| | |
| | | font-size: 27rpx; |
| | | } |
| | | .tabs .active { |
| | | color: #1769d8; |
| | | color: var(--color-primary, #1769d8); |
| | | font-weight: 600; |
| | | border-bottom: 4rpx solid #1769d8; |
| | | border-bottom: 4rpx solid var(--color-primary, #1769d8); |
| | | } |
| | | .search { |
| | | display: flex; |
| | |
| | | font-size: 27rpx; |
| | | } |
| | | .search text { |
| | | color: #1769d8; |
| | | color: var(--color-primary, #1769d8); |
| | | font-size: 24rpx; |
| | | } |
| | | .content { |
| | | height: 0; |
| | | flex: 1; |
| | | padding-bottom: 150rpx; |
| | | padding-bottom: 132rpx; |
| | | box-sizing: border-box; |
| | | } |
| | | .row { |
| | |
| | | min-height: 48rpx; |
| | | padding: 0 16rpx; |
| | | margin: 0; |
| | | color: #1769d8; |
| | | color: var(--color-primary, #1769d8); |
| | | font-size: 22rpx; |
| | | line-height: 46rpx; |
| | | background: #f5f8ff; |
| | | border: 1rpx solid #8ab3ee; |
| | | background: var(--color-primary-soft, #f5f8ff); |
| | | border: 1rpx solid var(--color-primary-border, #8ab3ee); |
| | | border-radius: 10rpx; |
| | | } |
| | | .actions button::after, |
| | |
| | | width: 220rpx; |
| | | margin: 20rpx auto; |
| | | color: #fff; |
| | | background: #1769d8; |
| | | background: var(--color-primary, #1769d8); |
| | | border-radius: 12rpx; |
| | | } |
| | | .fab { |
| | |
| | | color: #fff; |
| | | font-size: 58rpx; |
| | | line-height: 120rpx; |
| | | background: #1769d8; |
| | | background: var(--color-primary, #1769d8); |
| | | border-radius: 50%; |
| | | box-shadow: 0 12rpx 24rpx rgba(23, 105, 216, 0.3); |
| | | } |
| | |
| | | </template> |
| | | |
| | | <style lang="scss" scoped> |
| | | .page{height:100vh;display:flex;flex-direction:column;background:#f3f6fb}.summary{display:flex;justify-content:space-between;align-items:center;padding:28rpx 30rpx 22rpx;background:#fff}.summary view,.stack,.form,.log{display:flex;flex-direction:column}.summary view{gap:8rpx}.title{font-size:33rpx;font-weight:600;color:#20334c}.summary view text:last-child,.member>view>text,.log text:last-child{color:#78879b;font-size:23rpx}.tag{padding:5rpx 12rpx;color:#1769d8;font-size:22rpx;background:#edf5ff;border-radius:7rpx}.toolbar{display:flex;gap:14rpx;padding:14rpx 30rpx;background:#fff}.toolbar button,.outline{padding:0 18rpx;margin:0;color:#1769d8;font-size:23rpx;line-height:54rpx;background:#f5f8ff;border:1rpx solid #8ab3ee;border-radius:10rpx}.toolbar button::after,.outline::after,.primary::after,.link::after{border:0}.tabs{flex:none;white-space:nowrap;background:#fff}.tabs text{display:inline-block;padding:25rpx 22rpx 17rpx;color:#718198;font-size:26rpx}.tabs .active{color:#1769d8;font-weight:600;border-bottom:4rpx solid #1769d8}.content{height:0;flex:1;padding:20rpx 30rpx 60rpx;box-sizing:border-box}.card{padding:24rpx;margin-bottom:18rpx;background:#fff;border-radius:16rpx;box-shadow:0 8rpx 20rpx rgba(43,69,107,.06)}.infoRow{display:flex;justify-content:space-between;gap:20rpx;padding:19rpx 0;font-size:26rpx;border-bottom:1rpx solid #eef1f5}.infoRow text:first-child,.remark text:first-child{color:#78879b}.infoRow text:last-child{text-align:right;color:#2b3d55}.remark{display:flex;flex-direction:column;gap:16rpx;padding-top:20rpx;font-size:26rpx}.outline{align-self:flex-end;margin-bottom:18rpx}.form{gap:18rpx}.required{color:#33455d;font-size:26rpx}.required::before{content:'*';margin-right:8rpx;color:#e34b4b}.select{display:flex;justify-content:space-between;min-height:74rpx;padding:0 18rpx;color:#65758a;font-size:26rpx;line-height:74rpx;background:#f6f8fb;border-radius:10rpx}.select text{font-size:34rpx}.form radio-group{display:flex;gap:30rpx;font-size:26rpx}.primary{margin:0;color:#fff;background:#1769d8;border-radius:10rpx}.member{display:flex;justify-content:space-between;align-items:flex-end;gap:16rpx}.member>view:first-child{display:flex;flex:1;flex-direction:column;gap:10rpx;min-width:0}.memberHead{display:flex;align-items:center;gap:14rpx}.memberHead text:first-child{font-size:28rpx;font-weight:600;color:#2b3d55}.memberHead text:last-child{padding:3rpx 10rpx;color:#1769d8;font-size:21rpx;background:#edf5ff;border-radius:7rpx}.memberActions{display:flex;align-items:center;gap:14rpx;color:#52708f;font-size:24rpx}.link{padding:0;margin:0;font-size:23rpx;line-height:1;background:transparent}.danger{color:#c65050!important}.log{gap:12rpx}.log text:first-child{font-size:26rpx;color:#2b3d55}.state{padding:35rpx;color:#8795a8;font-size:26rpx;text-align:center} |
| | | .page{height:100vh;display:flex;flex-direction:column;background:#f3f6fb}.summary{display:flex;justify-content:space-between;align-items:center;padding:28rpx 30rpx 22rpx;background:#fff}.summary view,.stack,.form,.log{display:flex;flex-direction:column}.summary view{gap:8rpx}.title{font-size:33rpx;font-weight:600;color:#20334c}.summary view text:last-child,.member>view>text,.log text:last-child{color:#78879b;font-size:23rpx}.tag{padding:5rpx 12rpx;color:var(--color-primary, #1769d8);font-size:22rpx;background:var(--color-primary-soft, #edf5ff);border-radius:7rpx}.toolbar{display:flex;gap:14rpx;padding:14rpx 30rpx;background:#fff}.toolbar button,.outline{padding:0 18rpx;margin:0;color:var(--color-primary, #1769d8);font-size:23rpx;line-height:54rpx;background:var(--color-primary-soft, #f5f8ff);border:1rpx solid var(--color-primary-border, #8ab3ee);border-radius:10rpx}.toolbar button::after,.outline::after,.primary::after,.link::after{border:0}.tabs{flex:none;white-space:nowrap;background:#fff}.tabs text{display:inline-block;padding:25rpx 22rpx 17rpx;color:#718198;font-size:26rpx}.tabs .active{color:var(--color-primary, #1769d8);font-weight:600;border-bottom:4rpx solid var(--color-primary, #1769d8)}.content{height:0;flex:1;padding:20rpx 30rpx 60rpx;box-sizing:border-box}.card{padding:24rpx;margin-bottom:18rpx;background:#fff;border-radius:16rpx;box-shadow:0 8rpx 20rpx rgba(43,69,107,.06)}.infoRow{display:flex;justify-content:space-between;gap:20rpx;padding:19rpx 0;font-size:26rpx;border-bottom:1rpx solid #eef1f5}.infoRow text:first-child,.remark text:first-child{color:#78879b}.infoRow text:last-child{text-align:right;color:#2b3d55}.remark{display:flex;flex-direction:column;gap:16rpx;padding-top:20rpx;font-size:26rpx}.outline{align-self:flex-end;margin-bottom:18rpx}.form{gap:18rpx}.required{color:#33455d;font-size:26rpx}.required::before{content:'*';margin-right:8rpx;color:#e34b4b}.select{display:flex;justify-content:space-between;min-height:74rpx;padding:0 18rpx;color:#65758a;font-size:26rpx;line-height:74rpx;background:#f6f8fb;border-radius:10rpx}.select text{font-size:34rpx}.form radio-group{display:flex;gap:30rpx;font-size:26rpx}.primary{margin:0;color:#fff;background:var(--color-primary, #1769d8);border-radius:10rpx}.member{display:flex;justify-content:space-between;align-items:flex-end;gap:16rpx}.member>view:first-child{display:flex;flex:1;flex-direction:column;gap:10rpx;min-width:0}.memberHead{display:flex;align-items:center;gap:14rpx}.memberHead text:first-child{font-size:28rpx;font-weight:600;color:#2b3d55}.memberHead text:last-child{padding:3rpx 10rpx;color:var(--color-primary, #1769d8);font-size:21rpx;background:var(--color-primary-soft, #edf5ff);border-radius:7rpx}.memberActions{display:flex;align-items:center;gap:14rpx;color:#52708f;font-size:24rpx}.link{padding:0;margin:0;font-size:23rpx;line-height:1;background:transparent}.danger{color:#c65050!important}.log{gap:12rpx}.log text:first-child{font-size:26rpx;color:#2b3d55}.state{padding:35rpx;color:#8795a8;font-size:26rpx;text-align:center} |
| | | </style> |
| | |
| | | onLoad(async query => { id.value = query.id ? Number(query.id) : undefined; const contractId = query.contractId ? Number(query.contractId) : undefined; const customerId = query.customerId ? Number(query.customerId) : undefined; const planId = query.planId ? Number(query.planId) : undefined; if (!state.accessToken) return; try { const [customerData, contractData, userData, dictData] = await Promise.all([getCustomerSimpleList(state.accessToken), getContractPage(state.accessToken, { pageNo: 1, pageSize: 100 }), getCrmUserList(state.accessToken), getSimpleDictDataList(state.accessToken)]); customers.value = customerData; contracts.value = contractData.list; users.value = userData; dicts.value = dictData; if (id.value) { const data = await getReceivable(state.accessToken, id.value); Object.assign(form, data, { returnTime: data.returnTime?.slice(0, 10) || "" }); await loadRelated(); } else { form.customerId = customerId; form.customerName = customers.value.find(item => item.id === customerId)?.name; form.ownerUserId = state.user?.id; form.ownerUserName = state.user?.nickname; if (contractId) { const contract = contracts.value.find(item => item.id === contractId) || await getContract(state.accessToken, contractId); if (!contracts.value.some(item => item.id === contract.id)) contracts.value.push(contract); form.contractId = contract.id; form.contractNo = contract.no || contract.name; form.customerId = contract.customerId; form.customerName = contract.customerName; await loadRelated(); } if (planId && form.customerId && form.contractId) { const plan = plans.value.find(item => item.id === planId); if (plan) selectPlan(plans.value.indexOf(plan)); } } } catch (error) { uni.showToast({ title: error instanceof Error ? error.message : "æ°æ®å 载失败", icon: "none" }); } }); |
| | | </script> |
| | | <template><view class="page"><view class="form-card"><view class="section">忬¾ä¿¡æ¯</view><view class="field"><text>å®¢æ· <text class="required">*</text></text><picker :disabled="Boolean(id)" :range="customers" range-key="name" @change="selectCustomer(Number($event.detail.value))"><view class="picker">{{ customerLabel() }}<text>âº</text></view></picker></view><view class="field"><text>åå <text class="required">*</text></text><picker :disabled="Boolean(id)" :range="availableContracts" range-key="name" @change="selectContract(Number($event.detail.value))"><view class="picker">{{ contractLabel() }}<text>âº</text></view></picker></view><view class="field"><text>å
³èå票 <text class="required">*</text></text><picker :disabled="Boolean(id)" :range="invoices" range-key="invoiceNo" @change="form.invoiceId = invoices[Number($event.detail.value)].id"><view class="picker">{{ invoiceLabel() }}<text>âº</text></view></picker></view><view class="field"><text>忬¾è®¡å</text><picker :disabled="Boolean(id)" :range="plans" range-key="period" @change="selectPlan(Number($event.detail.value))"><view class="picker">{{ planLabel() }}<text>âº</text></view></picker></view><view class="field"><text>è´è´£äºº <text class="required">*</text></text><picker :disabled="Boolean(id)" :range="users" range-key="nickname" @change="form.ownerUserId=users[Number($event.detail.value)].id;form.ownerUserName=users[Number($event.detail.value)].nickname||users[Number($event.detail.value)].username"><view class="picker">{{ userLabel() }}<text>âº</text></view></picker></view><view class="field"><text>忬¾æ¥æ <text class="required">*</text></text><picker mode="date" :value="form.returnTime" @change="form.returnTime=$event.detail.value"><view class="picker">{{ form.returnTime || 'è¯·éæ©æ¥æ' }}<text>âº</text></view></picker></view><view class="field"><text>忬¾æ¹å¼ <text class="required">*</text></text><picker :range="returnTypes" range-key="label" @change="form.returnType=Number(returnTypes[Number($event.detail.value)].value)"><view class="picker">{{ returnTypeLabel() }}<text>âº</text></view></picker></view><view class="field"><text>忬¾éé¢ <text class="required">*</text></text><input :value="form.price === undefined ? '' : String(form.price)" type="digit" placeholder="请è¾å
¥å款éé¢" @input="form.price=Number($event.detail.value||0)" /></view><view class="field column"><text>夿³¨</text><textarea v-model="form.remark" placeholder="请è¾å
¥å¤æ³¨" ></textarea></view></view><button v-if="editable" class="save" :loading="saving" :disabled="saving" @click="save">ä¿å</button><view v-else class="no-permission">ææ ä¿åæé</view></view></template> |
| | | <style lang="scss" scoped>.page{min-height:100vh;padding:24rpx 30rpx 70rpx;background:#f6f7f9}.form-card{overflow:hidden;background:#fff;border-radius:16rpx}.section{padding:22rpx 24rpx 12rpx;color:#1769d8;font-size:25rpx;font-weight:600;background:#f8fbff}.field{display:flex;align-items:center;min-height:96rpx;padding:0 24rpx;gap:20rpx;border-bottom:1rpx solid #eef1f5}.field>text{width:190rpx;color:#33455d;font-size:27rpx}.required{color:#e34b4b}.field input,.field picker,.picker{flex:1;color:#1e3049;font-size:27rpx}.picker{display:flex;justify-content:space-between;color:#65758a}.picker text{color:#8092a7;font-size:36rpx}.column{align-items:flex-start;flex-direction:column;padding:20rpx 24rpx}.column>text{width:auto}.column textarea{width:100%;height:130rpx;font-size:27rpx}.save{margin-top:32rpx;color:#fff;background:#1769d8;border-radius:12rpx;font-size:30rpx}.save::after{border:0}.no-permission{padding:36rpx;color:#8795a8;font-size:26rpx;text-align:center}</style> |
| | | <style lang="scss" scoped>.page{min-height:100vh;padding:24rpx 30rpx 70rpx;background:#f6f7f9}.form-card{overflow:hidden;background:#fff;border-radius:16rpx}.section{padding:22rpx 24rpx 12rpx;color:var(--color-primary, #1769d8);font-size:25rpx;font-weight:600;background:#f8fbff}.field{display:flex;align-items:center;min-height:96rpx;padding:0 24rpx;gap:20rpx;border-bottom:1rpx solid #eef1f5}.field>text{width:190rpx;color:#33455d;font-size:27rpx}.required{color:#e34b4b}.field input,.field picker,.picker{flex:1;color:#1e3049;font-size:27rpx}.picker{display:flex;justify-content:space-between;color:#65758a}.picker text{color:#8092a7;font-size:36rpx}.column{align-items:flex-start;flex-direction:column;padding:20rpx 24rpx}.column>text{width:auto}.column textarea{width:100%;height:130rpx;font-size:27rpx}.save{margin-top:32rpx;color:#fff;background:var(--color-primary, #1769d8);border-radius:12rpx;font-size:30rpx}.save::after{border:0}.no-permission{padding:36rpx;color:#8795a8;font-size:26rpx;text-align:center}</style> |
| | |
| | | .page { height: 100vh; display: flex; flex-direction: column; padding: 0 30rpx; box-sizing: border-box; overflow: hidden; background: #f3f6fb; } |
| | | .sceneTabs { height: 88rpx; white-space: nowrap; } |
| | | .sceneTabs text { display: inline-block; padding: 27rpx 20rpx 18rpx; color: #718198; font-size: 27rpx; } |
| | | .sceneTabs .active { color: #1769d8; font-weight: 600; border-bottom: 4rpx solid #1769d8; } |
| | | .sceneTabs .active { color: var(--color-primary, #1769d8); font-weight: 600; border-bottom: 4rpx solid var(--color-primary, #1769d8); } |
| | | .search { display: flex; align-items: center; height: 80rpx; padding: 0 20rpx; margin: 8rpx 0 16rpx; 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; } |
| | | .search input { flex: 1; font-size: 27rpx; } .search text { color: var(--color-primary, #1769d8); font-size: 24rpx; } |
| | | .content { height: 0; flex: 1; padding-bottom: 132rpx; 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, .amount, .actions { display: flex; align-items: center; justify-content: space-between; gap: 16rpx; } |
| | | .name { min-width: 0; overflow: hidden; color: #20334c; font-size: 30rpx; font-weight: 600; text-overflow: ellipsis; white-space: nowrap; } |
| | | .tag { flex: none; padding: 4rpx 10rpx; color: #b86c16; font-size: 21rpx; background: #fff5e8; border-radius: 7rpx; } .tag.audited { color: #16835d; background: #eaf8f2; } |
| | | .amount { padding: 17rpx 0; margin-top: 14rpx; color: #718198; font-size: 23rpx; border-top: 1rpx solid #edf1f6; } .amount text:last-child { color: #df5d36; font-size: 31rpx; font-weight: 600; } |
| | | .grid { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 10rpx 16rpx; padding: 16rpx 0; 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 { justify-content: flex-end; padding-top: 16rpx; } .actions button { min-height: 48rpx; padding: 0 16rpx; margin: 0; color: #1769d8; font-size: 22rpx; line-height: 46rpx; background: #f5f8ff; border: 1rpx solid #8ab3ee; border-radius: 10rpx; } .actions button::after, .fab::after { border: 0; } .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; } .state button { width: 220rpx; margin: 20rpx auto; color: #fff; background: #1769d8; border-radius: 12rpx; } |
| | | .fab { position: fixed; right: 30rpx; bottom: calc(32rpx + env(safe-area-inset-bottom)); z-index: 10; width: 132rpx; height: 132rpx; padding: 0; margin: 0; color: #fff; font-size: 58rpx; line-height: 120rpx; background: #1769d8; border-radius: 50%; box-shadow: 0 12rpx 24rpx rgba(23, 105, 216, .3); } |
| | | .actions { justify-content: flex-end; padding-top: 16rpx; } .actions button { min-height: 48rpx; padding: 0 16rpx; margin: 0; color: var(--color-primary, #1769d8); font-size: 22rpx; line-height: 46rpx; background: var(--color-primary-soft, #f5f8ff); border: 1rpx solid var(--color-primary-border, #8ab3ee); border-radius: 10rpx; } .actions button::after, .fab::after { border: 0; } .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; } .state button { width: 220rpx; margin: 20rpx auto; color: #fff; background: var(--color-primary, #1769d8); border-radius: 12rpx; } |
| | | .fab { position: fixed; right: 30rpx; bottom: calc(32rpx + env(safe-area-inset-bottom)); z-index: 10; width: 132rpx; height: 132rpx; padding: 0; margin: 0; color: #fff; font-size: 58rpx; line-height: 120rpx; background: var(--color-primary, #1769d8); border-radius: 50%; box-shadow: 0 12rpx 24rpx rgba(23, 105, 216, .3); } |
| | | </style> |
| | |
| | | justify-content: space-between; |
| | | padding: 26rpx; |
| | | color: #fff; |
| | | background: #1769d8; |
| | | background: var(--color-primary, #1769d8); |
| | | border-radius: 16rpx; |
| | | } |
| | | .summary text { |
| | |
| | | } |
| | | .toolbar button { |
| | | margin: 0; |
| | | color: #1769d8; |
| | | color: var(--color-primary, #1769d8); |
| | | font-size: 24rpx; |
| | | background: #f5f8ff; |
| | | border: 1rpx solid #8ab3ee; |
| | | background: var(--color-primary-soft, #f5f8ff); |
| | | border: 1rpx solid var(--color-primary-border, #8ab3ee); |
| | | } |
| | | .toolbar button::after { |
| | | border: 0; |
| | |
| | | text-align: right; |
| | | } |
| | | .row .link { |
| | | color: #1769d8; |
| | | color: var(--color-primary, #1769d8); |
| | | } |
| | | .section { |
| | | padding: 22rpx 24rpx; |
| | | color: #1769d8; |
| | | color: var(--color-primary, #1769d8); |
| | | font-size: 27rpx; |
| | | font-weight: 600; |
| | | background: #f8fbff; |
| | |
| | | font-size: 26rpx; |
| | | line-height: 1.6; |
| | | } |
| | | </style> |
| | | </style> |
| | |
| | | <script setup lang="ts"> |
| | | import { computed, reactive, ref } from 'vue'; import { onLoad } from '@dcloudio/uni-app'; import { createSaleQuotation,getBusinessPage,getContactPage,getCrmUserList,getCustomerSimpleList,getMaterialSimpleList,getSaleQuotation,updateSaleQuotation,type Business,type BusinessProduct,type CrmContact,type CrmCustomerSimple,type SaleQuotation,type SaleQuotationItem } from '../../../api/crm'; import type { UserSimple } from '../../../api/purchase'; import { useAuth } from '../../../stores/auth'; import { materialOptionText } from '../../../utils/material'; |
| | | const {state}=useAuth();const id=ref<number>(),saving=ref(false),customers=ref<CrmCustomerSimple[]>([]),businesses=ref<Business[]>([]),contacts=ref<CrmContact[]>([]),users=ref<UserSimple[]>([]),materials=ref<BusinessProduct[]>([]);const form=reactive<SaleQuotation>({name:'',customerId:undefined,ownerUserId:undefined,quotationTime:'',validUntil:'',taxRate:undefined,discountPercent:0,totalProductPrice:0,totalPrice:0,remark:'',items:[]});const label=(items:any[],value?:number,key='name')=>items.find(x=>x.id===value)?.[key]||'è¯·éæ©';const materialOptions=computed(()=>materials.value.map(x=>materialOptionText(x)));const productTotal=computed(()=>form.items?.reduce((sum,x)=>sum+Number(x.totalPrice||0),0)||0);function recalc(){form.totalProductPrice=productTotal.value;form.totalPrice=Number((productTotal.value*(100-Number(form.discountPercent||0))/100).toFixed(2));}function add(){form.items?.push({itemId:undefined,quotationPrice:0,count:1,totalPrice:0});}function productAmount(x:SaleQuotationItem){x.totalPrice=Number((Number(x.quotationPrice||0)*Number(x.count||0)).toFixed(2));recalc();}function productText(x:SaleQuotationItem){return materialOptionText({itemCode:x.itemCode,itemName:x.itemName,itemSpecification:x.itemSpecification,itemUnitName:x.itemUnitName});}function selectProduct(x:SaleQuotationItem,m:BusinessProduct){Object.assign(x,{itemId:m.itemId||m.id,itemName:m.itemName||m.name,itemCode:m.itemCode||m.code,itemSpecification:m.itemSpecification||m.specification,itemUnitName:m.itemUnitName||m.unitMeasureName,itemPrice:Number(m.itemPrice||m.salesPrice||0),quotationPrice:Number(m.itemPrice||m.salesPrice||0)});productAmount(x);}function selectCustomer(index:number){const x=customers.value[index];form.customerId=x.id;form.customerName=x.name;form.businessId=undefined;form.businessName=undefined;form.contactId=undefined;form.contactName=undefined;}async function save(){if(!state.accessToken||saving.value)return;if(!form.name.trim()||!form.customerId||!form.ownerUserId||!form.quotationTime)return uni.showToast({title:'è¯·å¡«åæ¥ä»·ååç§°ã客æ·ãè´è´£äººåæ¥ä»·æ¥æ',icon:'none'});if(!form.items?.length||form.items.some(x=>!x.itemId||!Number(x.count)||Number(x.quotationPrice)<0))return uni.showToast({title:'请å®åæ¥ä»·äº§åãä»·æ ¼åæ°é',icon:'none'});saving.value=true;try{recalc();const data={...form,name:form.name.trim(),quotationTime:`${form.quotationTime} 00:00:00`,validUntil:form.validUntil?`${form.validUntil} 00:00:00`:undefined};if(id.value)await updateSaleQuotation(state.accessToken,{...data,id:id.value});else await createSaleQuotation(state.accessToken,data);uni.showToast({title:'ä¿åæå',icon:'success'});setTimeout(()=>uni.navigateBack(),500);}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;if(!state.accessToken)return;try{const [cs,bs,us,ms]=await Promise.all([getCustomerSimpleList(state.accessToken),getBusinessPage(state.accessToken,{pageNo:1,pageSize:100}),getCrmUserList(state.accessToken),getMaterialSimpleList(state.accessToken)]);customers.value=cs;businesses.value=bs.list;users.value=us;materials.value=ms;const contactsData=await getContactPage(state.accessToken,{pageNo:1,pageSize:100});contacts.value=contactsData.list;if(id.value){const data=await getSaleQuotation(state.accessToken,id.value);Object.assign(form,data,{quotationTime:data.quotationTime?.slice(0,10)||'',validUntil:data.validUntil?.slice(0,10)||'',items:data.items||[]});recalc();}else{form.ownerUserId=state.user?.id;form.ownerUserName=state.user?.nickname;}}catch(e){uni.showToast({title:e instanceof Error?e.message:'æ°æ®å 载失败',icon:'none'});}}); |
| | | </script><template><view class="page"><view class="card"><view class="section">åºæ¬ä¿¡æ¯</view><view class="field"><text>æ¥ä»·ååç§° <text class="required">*</text></text><input v-model="form.name" placeholder="请è¾å
¥æ¥ä»·ååç§°"/></view><view class="field"><text>æ¥ä»·åå·</text><input :value="form.no" disabled placeholder="ä¿åæ¶èªå¨çæ"/></view><view class="field"><text>å®¢æ· <text class="required">*</text></text><picker :range="customers" range-key="name" @change="selectCustomer(Number($event.detail.value))"><view class="picker">{{form.customerName||label(customers,form.customerId)}}<text>âº</text></view></picker></view><view class="field"><text>åæº</text><picker :range="businesses.filter(x=>x.customerId===form.customerId)" range-key="name" @change="form.businessId=businesses.filter(x=>x.customerId===form.customerId)[Number($event.detail.value)].id;form.businessName=businesses.filter(x=>x.customerId===form.customerId)[Number($event.detail.value)].name"><view class="picker">{{form.businessName||'è¯·éæ©åæº'}}<text>âº</text></view></picker></view><view class="field"><text>è系人</text><picker :range="contacts.filter(x=>x.customerId===form.customerId)" range-key="name" @change="form.contactId=contacts.filter(x=>x.customerId===form.customerId)[Number($event.detail.value)].id;form.contactName=contacts.filter(x=>x.customerId===form.customerId)[Number($event.detail.value)].name"><view class="picker">{{form.contactName||'è¯·éæ©è系人'}}<text>âº</text></view></picker></view><view class="field"><text>è´è´£äºº <text class="required">*</text></text><picker :range="users" range-key="nickname" @change="form.ownerUserId=users[Number($event.detail.value)].id;form.ownerUserName=users[Number($event.detail.value)].nickname"><view class="picker">{{form.ownerUserName||label(users,form.ownerUserId,'nickname')}}<text>âº</text></view></picker></view><view class="field"><text>æ¥ä»·æ¥æ <text class="required">*</text></text><picker mode="date" :value="form.quotationTime" @change="form.quotationTime=$event.detail.value"><view class="picker">{{form.quotationTime||'è¯·éæ©æ¥æ'}}<text>âº</text></view></picker></view><view class="field"><text>æææè³</text><picker mode="date" :value="form.validUntil" @change="form.validUntil=$event.detail.value"><view class="picker">{{form.validUntil||'è¯·éæ©æ¥æ'}}<text>âº</text></view></picker></view><view class="field"><text>ç¨ç(%)</text><input :value="form.taxRate===undefined?'':String(form.taxRate)" type="digit" @input="form.taxRate=Number($event.detail.value||0)"/></view><view class="section">äº§åæ¸
å</view><view class="summary">ç©ææ»éé¢ï¼Â¥{{Number(form.totalProductPrice||0).toFixed(2)}}ãæ¥ä»·éé¢ï¼Â¥{{Number(form.totalPrice||0).toFixed(2)}}</view><view class="field"><text>æ´åææ£(%)</text><input :value="String(form.discountPercent||0)" type="digit" @input="form.discountPercent=Number($event.detail.value||0);recalc()"/></view><view v-for="(x,index) in form.items" :key="index" class="product"><view><text>产å {{index+1}}</text><text @click="form.items?.splice(index,1);recalc()">å é¤</text></view><view class="field"><text>ç©æ <text class="required">*</text></text><picker :range="materialOptions" @change="selectProduct(x,materials[Number($event.detail.value)])"><view class="picker">{{productText(x)}}<text>âº</text></view></picker></view><view class="field"><text>æ¥ä»·åä»· <text class="required">*</text></text><input :value="String(x.quotationPrice||0)" type="digit" @input="x.quotationPrice=Number($event.detail.value||0);productAmount(x)"/></view><view class="field"><text>æ°é <text class="required">*</text></text><input :value="String(x.count||0)" type="digit" @input="x.count=Number($event.detail.value||0);productAmount(x)"/></view><text class="subtotal">å°è®¡ï¼Â¥{{Number(x.totalPrice||0).toFixed(2)}} {{x.itemUnitName||''}}</text></view><button class="add" @click="add">æ·»å 产å</button><view class="field column"><text>夿³¨</text><textarea v-model="form.remark" placeholder="请è¾å
¥å¤æ³¨"></textarea></view></view><button class="save" :loading="saving" @click="save">ä¿å</button></view></template><style lang="scss" scoped>.page{min-height:100vh;padding:24rpx 30rpx 70rpx;background:#f6f7f9}.card{overflow:hidden;background:#fff;border-radius:16rpx}.section{padding:22rpx 24rpx 12rpx;color:#1769d8;font-size:25rpx;font-weight:600;background:#f8fbff}.field{display:flex;align-items:center;min-height:96rpx;padding:0 24rpx;gap:20rpx;border-bottom:1rpx solid #eef1f5}.field>text{width:190rpx;color:#33455d;font-size:27rpx}.required{color:#e34b4b}.field input,.field picker,.picker{flex:1;color:#1e3049;font-size:27rpx}.picker{display:flex;justify-content:space-between;color:#65758a}.picker text{color:#8092a7;font-size:36rpx}.summary{padding:20rpx 24rpx;color:#1769d8;font-size:25rpx}.product{margin:0 20rpx 20rpx;background:#f7f9fc;border-radius:12rpx;overflow:hidden}.product>view:first-child{display:flex;justify-content:space-between;padding:18rpx 16rpx;color:#33455d;font-size:26rpx}.product>view:first-child text:last-child{color:#c65050}.product .field{padding:0 16rpx}.subtotal{display:block;padding:18rpx 16rpx;color:#1769d8;font-size:25rpx;text-align:right}.add{margin:0 24rpx 20rpx;color:#1769d8;background:#f5f8ff;border:1rpx solid #8ab3ee}.column{align-items:flex-start;flex-direction:column;padding:20rpx 24rpx}.column>text{width:auto}.column textarea{width:100%;height:130rpx;font-size:27rpx}.save{margin-top:32rpx;color:#fff;background:#1769d8;border-radius:12rpx;font-size:30rpx}.save::after,.add::after{border:0}</style> |
| | | </script><template><view class="page"><view class="card"><view class="section">åºæ¬ä¿¡æ¯</view><view class="field"><text>æ¥ä»·ååç§° <text class="required">*</text></text><input v-model="form.name" placeholder="请è¾å
¥æ¥ä»·ååç§°"/></view><view class="field"><text>æ¥ä»·åå·</text><input :value="form.no" disabled placeholder="ä¿åæ¶èªå¨çæ"/></view><view class="field"><text>å®¢æ· <text class="required">*</text></text><picker :range="customers" range-key="name" @change="selectCustomer(Number($event.detail.value))"><view class="picker">{{form.customerName||label(customers,form.customerId)}}<text>âº</text></view></picker></view><view class="field"><text>åæº</text><picker :range="businesses.filter(x=>x.customerId===form.customerId)" range-key="name" @change="form.businessId=businesses.filter(x=>x.customerId===form.customerId)[Number($event.detail.value)].id;form.businessName=businesses.filter(x=>x.customerId===form.customerId)[Number($event.detail.value)].name"><view class="picker">{{form.businessName||'è¯·éæ©åæº'}}<text>âº</text></view></picker></view><view class="field"><text>è系人</text><picker :range="contacts.filter(x=>x.customerId===form.customerId)" range-key="name" @change="form.contactId=contacts.filter(x=>x.customerId===form.customerId)[Number($event.detail.value)].id;form.contactName=contacts.filter(x=>x.customerId===form.customerId)[Number($event.detail.value)].name"><view class="picker">{{form.contactName||'è¯·éæ©è系人'}}<text>âº</text></view></picker></view><view class="field"><text>è´è´£äºº <text class="required">*</text></text><picker :range="users" range-key="nickname" @change="form.ownerUserId=users[Number($event.detail.value)].id;form.ownerUserName=users[Number($event.detail.value)].nickname"><view class="picker">{{form.ownerUserName||label(users,form.ownerUserId,'nickname')}}<text>âº</text></view></picker></view><view class="field"><text>æ¥ä»·æ¥æ <text class="required">*</text></text><picker mode="date" :value="form.quotationTime" @change="form.quotationTime=$event.detail.value"><view class="picker">{{form.quotationTime||'è¯·éæ©æ¥æ'}}<text>âº</text></view></picker></view><view class="field"><text>æææè³</text><picker mode="date" :value="form.validUntil" @change="form.validUntil=$event.detail.value"><view class="picker">{{form.validUntil||'è¯·éæ©æ¥æ'}}<text>âº</text></view></picker></view><view class="field"><text>ç¨ç(%)</text><input :value="form.taxRate===undefined?'':String(form.taxRate)" type="digit" @input="form.taxRate=Number($event.detail.value||0)"/></view><view class="section">äº§åæ¸
å</view><view class="summary">ç©ææ»éé¢ï¼Â¥{{Number(form.totalProductPrice||0).toFixed(2)}}ãæ¥ä»·éé¢ï¼Â¥{{Number(form.totalPrice||0).toFixed(2)}}</view><view class="field"><text>æ´åææ£(%)</text><input :value="String(form.discountPercent||0)" type="digit" @input="form.discountPercent=Number($event.detail.value||0);recalc()"/></view><view v-for="(x,index) in form.items" :key="index" class="product"><view><text>产å {{index+1}}</text><text @click="form.items?.splice(index,1);recalc()">å é¤</text></view><view class="field"><text>ç©æ <text class="required">*</text></text><picker :range="materialOptions" @change="selectProduct(x,materials[Number($event.detail.value)])"><view class="picker">{{productText(x)}}<text>âº</text></view></picker></view><view class="field"><text>æ¥ä»·åä»· <text class="required">*</text></text><input :value="String(x.quotationPrice||0)" type="digit" @input="x.quotationPrice=Number($event.detail.value||0);productAmount(x)"/></view><view class="field"><text>æ°é <text class="required">*</text></text><input :value="String(x.count||0)" type="digit" @input="x.count=Number($event.detail.value||0);productAmount(x)"/></view><text class="subtotal">å°è®¡ï¼Â¥{{Number(x.totalPrice||0).toFixed(2)}} {{x.itemUnitName||''}}</text></view><button class="add" @click="add">æ·»å 产å</button><view class="field column"><text>夿³¨</text><textarea v-model="form.remark" placeholder="请è¾å
¥å¤æ³¨"></textarea></view></view><button class="save" :loading="saving" @click="save">ä¿å</button></view></template><style lang="scss" scoped>.page{min-height:100vh;padding:24rpx 30rpx 70rpx;background:#f6f7f9}.card{overflow:hidden;background:#fff;border-radius:16rpx}.section{padding:22rpx 24rpx 12rpx;color:var(--color-primary, #1769d8);font-size:25rpx;font-weight:600;background:#f8fbff}.field{display:flex;align-items:center;min-height:96rpx;padding:0 24rpx;gap:20rpx;border-bottom:1rpx solid #eef1f5}.field>text{width:190rpx;color:#33455d;font-size:27rpx}.required{color:#e34b4b}.field input,.field picker,.picker{flex:1;color:#1e3049;font-size:27rpx}.picker{display:flex;justify-content:space-between;color:#65758a}.picker text{color:#8092a7;font-size:36rpx}.summary{padding:20rpx 24rpx;color:var(--color-primary, #1769d8);font-size:25rpx}.product{margin:0 20rpx 20rpx;background:#f7f9fc;border-radius:12rpx;overflow:hidden}.product>view:first-child{display:flex;justify-content:space-between;padding:18rpx 16rpx;color:#33455d;font-size:26rpx}.product>view:first-child text:last-child{color:#c65050}.product .field{padding:0 16rpx}.subtotal{display:block;padding:18rpx 16rpx;color:var(--color-primary, #1769d8);font-size:25rpx;text-align:right}.add{margin:0 24rpx 20rpx;color:var(--color-primary, #1769d8);background:var(--color-primary-soft, #f5f8ff);border:1rpx solid var(--color-primary-border, #8ab3ee)}.column{align-items:flex-start;flex-direction:column;padding:20rpx 24rpx}.column>text{width:auto}.column textarea{width:100%;height:130rpx;font-size:27rpx}.save{margin-top:32rpx;color:#fff;background:var(--color-primary, #1769d8);border-radius:12rpx;font-size:30rpx}.save::after,.add::after{border:0}</style> |
| | |
| | | font-size: 27rpx; |
| | | } |
| | | .tabs .active { |
| | | color: #1769d8; |
| | | color: var(--color-primary, #1769d8); |
| | | font-weight: 600; |
| | | border-bottom: 4rpx solid #1769d8; |
| | | border-bottom: 4rpx solid var(--color-primary, #1769d8); |
| | | } |
| | | .search { |
| | | display: flex; |
| | |
| | | } |
| | | .search text { |
| | | font-size: 24rpx; |
| | | color: #1769d8; |
| | | color: var(--color-primary, #1769d8); |
| | | } |
| | | .status { |
| | | padding-bottom: 14rpx; |
| | |
| | | } |
| | | .status .active { |
| | | color: #fff; |
| | | background: #1769d8; |
| | | background: var(--color-primary, #1769d8); |
| | | } |
| | | .content { |
| | | height: 0; |
| | | flex: 1; |
| | | padding-bottom: 150rpx; |
| | | padding-bottom: 132rpx; |
| | | box-sizing: border-box; |
| | | } |
| | | .row { |
| | |
| | | } |
| | | .tag { |
| | | padding: 4rpx 10rpx; |
| | | color: #1769d8; |
| | | color: var(--color-primary, #1769d8); |
| | | font-size: 21rpx; |
| | | background: #edf5ff; |
| | | background: var(--color-primary-soft, #edf5ff); |
| | | border-radius: 7rpx; |
| | | } |
| | | .grid { |
| | |
| | | grid-column: 1 / -1; |
| | | } |
| | | .grid .link { |
| | | color: #1769d8; |
| | | color: var(--color-primary, #1769d8); |
| | | } |
| | | .actions { |
| | | justify-content: flex-end; |
| | |
| | | min-height: 48rpx; |
| | | padding: 0 16rpx; |
| | | margin: 0; |
| | | color: #1769d8; |
| | | color: var(--color-primary, #1769d8); |
| | | font-size: 22rpx; |
| | | line-height: 46rpx; |
| | | background: #f5f8ff; |
| | | border: 1rpx solid #8ab3ee; |
| | | background: var(--color-primary-soft, #f5f8ff); |
| | | border: 1rpx solid var(--color-primary-border, #8ab3ee); |
| | | border-radius: 10rpx; |
| | | } |
| | | .actions .danger { |
| | |
| | | width: 220rpx; |
| | | margin: 20rpx auto; |
| | | color: #fff; |
| | | background: #1769d8; |
| | | background: var(--color-primary, #1769d8); |
| | | border-radius: 12rpx; |
| | | } |
| | | .fab { |
| | |
| | | color: #fff; |
| | | font-size: 58rpx; |
| | | line-height: 120rpx; |
| | | background: #1769d8; |
| | | background: var(--color-primary, #1769d8); |
| | | border-radius: 50%; |
| | | } |
| | | </style> |
| | |
| | | margin: 18rpx 22rpx; |
| | | color: #fff; |
| | | font-size: 25rpx; |
| | | background: #1769d8; |
| | | background: var(--color-primary, #1769d8); |
| | | border-radius: 12rpx; |
| | | } |
| | | .check-card button::after, |
| | |
| | | border-radius: 999rpx; |
| | | } |
| | | .tabs .active { |
| | | color: #1769d8; |
| | | color: var(--color-primary, #1769d8); |
| | | font-weight: 600; |
| | | background: #eaf2ff; |
| | | } |
| | |
| | | } |
| | | .search text { |
| | | flex: none; |
| | | color: #1769d8; |
| | | color: var(--color-primary, #1769d8); |
| | | font-size: 24rpx; |
| | | } |
| | | .content { |
| | | height: 0; |
| | | flex: 1; |
| | | padding-bottom: 150rpx; |
| | | padding-bottom: 132rpx; |
| | | box-sizing: border-box; |
| | | } |
| | | .field { |
| | |
| | | .filter-actions button { |
| | | flex: 1; |
| | | margin: 0; |
| | | color: #1769d8; |
| | | color: var(--color-primary, #1769d8); |
| | | font-size: 25rpx; |
| | | background: #edf5ff; |
| | | background: var(--color-primary-soft, #edf5ff); |
| | | border-radius: 12rpx; |
| | | } |
| | | .filter-actions button:first-child { |
| | | color: #fff; |
| | | background: #1769d8; |
| | | background: var(--color-primary, #1769d8); |
| | | } |
| | | .row { |
| | | padding: 24rpx 22rpx 20rpx; |
| | |
| | | min-height: 50rpx; |
| | | padding: 0 16rpx; |
| | | margin: 0; |
| | | color: #1769d8; |
| | | color: var(--color-primary, #1769d8); |
| | | font-size: 22rpx; |
| | | line-height: 48rpx; |
| | | background: #f5f8ff; |
| | | border: 1rpx solid #8ab3ee; |
| | | background: var(--color-primary-soft, #f5f8ff); |
| | | border: 1rpx solid var(--color-primary-border, #8ab3ee); |
| | | border-radius: 8rpx; |
| | | } |
| | | .actions .danger { |
| | |
| | | color: #e34b4b; |
| | | } |
| | | .tag-blue { |
| | | color: #1769d8; |
| | | background: #eef6ff; |
| | | border: 1rpx solid #c9e1ff; |
| | | color: var(--color-primary, #1769d8); |
| | | background: var(--color-primary-soft, #eef6ff); |
| | | border: 1rpx solid var(--color-primary-border, #c9e1ff); |
| | | } |
| | | .tag-orange { |
| | | color: #b06a00; |
| | |
| | | display: flex; |
| | | align-items: center; |
| | | justify-content: center; |
| | | width: 132rpx; |
| | | height: 132rpx; |
| | | min-height: 132rpx; |
| | | width: 104rpx; height: 104rpx; min-height: 104rpx; |
| | | padding: 0; |
| | | margin: 0; |
| | | background: #1769d8; |
| | | background: var(--color-primary, #1769d8); |
| | | border-radius: 50%; |
| | | box-shadow: 0 12rpx 24rpx rgba(23, 105, 216, 0.3); |
| | | } |
| | |
| | | border-radius: 999rpx; |
| | | } |
| | | .recipient-list .active { |
| | | color: #1769d8; |
| | | color: var(--color-primary, #1769d8); |
| | | background: #eaf2ff; |
| | | border-color: #b9d7ff; |
| | | } |
| | |
| | | } |
| | | .modal-actions button:last-child { |
| | | color: #fff; |
| | | background: #1769d8; |
| | | background: var(--color-primary, #1769d8); |
| | | } |
| | | </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}.filter-compact{display:flex;align-items:center;gap:18rpx;flex:none;margin:20rpx 0 16rpx;padding:18rpx 20rpx;background:#fff;border-radius:16rpx;box-shadow:0 8rpx 20rpx rgba(43,69,107,.06)}.filter-compact>view{display:flex;min-width:0;flex:1;flex-direction:column;gap:8rpx}.filter-compact text:first-child{overflow:hidden;color:#20334c;font-size:27rpx;font-weight:600;text-overflow:ellipsis;white-space:nowrap}.filter-compact text:last-child{overflow:hidden;color:#78879b;font-size:23rpx;text-overflow:ellipsis;white-space:nowrap}.filter-compact button{flex:none;width:132rpx;height:58rpx;margin:0;color:#1769d8;font-size:24rpx;line-height:58rpx;background:#edf5ff;border-radius:999rpx}.filter-compact button::after,.sheet-actions button::after{border:0}.filters{overflow:hidden;background:#fff;border-radius:16rpx}.field{display:flex;align-items:center;min-height:82rpx;padding:0 22rpx;gap:18rpx;border-bottom:1rpx solid #eef1f5}.field>text:first-child{width:150rpx;flex:none;color:#33455d;font-size:25rpx}.field input,.field picker,.picker{min-width:0;flex:1;color:#1e3049;font-size:25rpx}.field input{text-align:right}.picker{display:flex;width:100%;align-items:center;justify-content:space-between;gap:12rpx;color:#65758a}.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}.clear{flex:none!important;width:auto!important;color:#1769d8!important;font-size:22rpx!important}.filter-mask{position:fixed;inset:0;z-index:30;display:flex;align-items:flex-end;background:rgba(21,34,50,.42)}.filter-sheet{width:100%;max-height:82vh;display:flex;flex-direction:column;overflow:hidden;background:#f3f6fb;border-radius:24rpx 24rpx 0 0}.sheet-head{display:flex;align-items:center;justify-content:space-between;padding:28rpx 30rpx;color:#20334c;font-size:31rpx;font-weight:700;background:#fff}.sheet-head text:last-child{color:#7f8fa4;font-size:42rpx;font-weight:400}.sheet-body{max-height:58vh;padding:20rpx 30rpx;box-sizing:border-box}.sheet-actions{display:flex;gap:16rpx;padding:18rpx 30rpx calc(18rpx + env(safe-area-inset-bottom));background:#fff}.sheet-actions button{flex:1;margin:0;color:#1769d8;font-size:28rpx;background:#edf5ff;border-radius:12rpx}.sheet-actions button:last-child{color:#fff;background:#1769d8}.content{height:0;flex:1;padding-bottom:40rpx;box-sizing:border-box}.summary-card{display:grid;grid-template-columns:1fr 1fr;gap:16rpx;margin-bottom:18rpx}.summary-card>view{display:grid;gap:10rpx;padding:24rpx;background:#fff;border-radius:16rpx;box-shadow:0 10rpx 24rpx rgba(43,69,107,.08)}.summary-card text:first-child{color:#66778c;font-size:23rpx}.summary-card text:last-child{color:#20334c;font-size:32rpx;font-weight:700}.section-title{margin:24rpx 4rpx 14rpx;color:#20334c;font-size:30rpx;font-weight:700}.card,.chart-card,.detail-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,.pill{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;padding-top:16rpx;margin-top:16rpx;color:#66778c;font-size:23rpx;border-top:1rpx solid #edf1f6}.grid text{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.tabs{width:calc(100% + 60rpx);margin:0 -30rpx 16rpx;white-space:nowrap}.tab-list{display:flex;gap:12rpx;padding:0 30rpx}.tab-list text{flex:none;padding:10rpx 22rpx;color:#53677f;font-size:24rpx;background:#fff;border-radius:999rpx}.tab-list .active{color:#1769d8;font-weight:600;background:#eaf2ff}.bar-row{display:grid;grid-template-columns:150rpx 1fr 170rpx;align-items:center;gap:14rpx;margin-bottom:18rpx;color:#66778c;font-size:22rpx}.bar-row>text{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.bar-row>text:last-child{text-align:right}.bar-row>view{height:18rpx;overflow:hidden;background:#eef3f8;border-radius:999rpx}.bar-row>view>view{height:100%;background:#1769d8;border-radius:999rpx}.bar-row.area>view>view{background:#27a3b8}.detail-row{display:grid;gap:8rpx;color:#66778c;font-size:23rpx}.detail-row>view{display:flex;align-items:center;justify-content:space-between;gap:12rpx;color:#20334c;font-size:27rpx;font-weight:600}.state{display:block;padding:35rpx;color:#8795a8;font-size:26rpx;text-align:center}.compact{padding:18rpx}.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} |
| | | .page{height:100vh;display:flex;flex-direction:column;padding:0 30rpx;box-sizing:border-box;overflow:hidden;background:#f3f6fb}.filter-compact{display:flex;align-items:center;gap:18rpx;flex:none;margin:20rpx 0 16rpx;padding:18rpx 20rpx;background:#fff;border-radius:16rpx;box-shadow:0 8rpx 20rpx rgba(43,69,107,.06)}.filter-compact>view{display:flex;min-width:0;flex:1;flex-direction:column;gap:8rpx}.filter-compact text:first-child{overflow:hidden;color:#20334c;font-size:27rpx;font-weight:600;text-overflow:ellipsis;white-space:nowrap}.filter-compact text:last-child{overflow:hidden;color:#78879b;font-size:23rpx;text-overflow:ellipsis;white-space:nowrap}.filter-compact button{flex:none;width:132rpx;height:58rpx;margin:0;color:var(--color-primary, #1769d8);font-size:24rpx;line-height:58rpx;background:var(--color-primary-soft, #edf5ff);border-radius:999rpx}.filter-compact button::after,.sheet-actions button::after{border:0}.filters{overflow:hidden;background:#fff;border-radius:16rpx}.field{display:flex;align-items:center;min-height:82rpx;padding:0 22rpx;gap:18rpx;border-bottom:1rpx solid #eef1f5}.field>text:first-child{width:150rpx;flex:none;color:#33455d;font-size:25rpx}.field input,.field picker,.picker{min-width:0;flex:1;color:#1e3049;font-size:25rpx}.field input{text-align:right}.picker{display:flex;width:100%;align-items:center;justify-content:space-between;gap:12rpx;color:#65758a}.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}.clear{flex:none!important;width:auto!important;color:var(--color-primary, #1769d8)!important;font-size:22rpx!important}.filter-mask{position:fixed;inset:0;z-index:30;display:flex;align-items:flex-end;background:rgba(21,34,50,.42)}.filter-sheet{width:100%;max-height:82vh;display:flex;flex-direction:column;overflow:hidden;background:#f3f6fb;border-radius:24rpx 24rpx 0 0}.sheet-head{display:flex;align-items:center;justify-content:space-between;padding:28rpx 30rpx;color:#20334c;font-size:31rpx;font-weight:700;background:#fff}.sheet-head text:last-child{color:#7f8fa4;font-size:42rpx;font-weight:400}.sheet-body{max-height:58vh;padding:20rpx 30rpx;box-sizing:border-box}.sheet-actions{display:flex;gap:16rpx;padding:18rpx 30rpx calc(18rpx + env(safe-area-inset-bottom));background:#fff}.sheet-actions button{flex:1;margin:0;color:var(--color-primary, #1769d8);font-size:28rpx;background:var(--color-primary-soft, #edf5ff);border-radius:12rpx}.sheet-actions button:last-child{color:#fff;background:var(--color-primary, #1769d8)}.content{height:0;flex:1;padding-bottom:40rpx;box-sizing:border-box}.summary-card{display:grid;grid-template-columns:1fr 1fr;gap:16rpx;margin-bottom:18rpx}.summary-card>view{display:grid;gap:10rpx;padding:24rpx;background:#fff;border-radius:16rpx;box-shadow:0 10rpx 24rpx rgba(43,69,107,.08)}.summary-card text:first-child{color:#66778c;font-size:23rpx}.summary-card text:last-child{color:#20334c;font-size:32rpx;font-weight:700}.section-title{margin:24rpx 4rpx 14rpx;color:#20334c;font-size:30rpx;font-weight:700}.card,.chart-card,.detail-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,.pill{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;padding-top:16rpx;margin-top:16rpx;color:#66778c;font-size:23rpx;border-top:1rpx solid #edf1f6}.grid text{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.tabs{width:calc(100% + 60rpx);margin:0 -30rpx 16rpx;white-space:nowrap}.tab-list{display:flex;gap:12rpx;padding:0 30rpx}.tab-list text{flex:none;padding:10rpx 22rpx;color:#53677f;font-size:24rpx;background:#fff;border-radius:999rpx}.tab-list .active{color:var(--color-primary, #1769d8);font-weight:600;background:#eaf2ff}.bar-row{display:grid;grid-template-columns:150rpx 1fr 170rpx;align-items:center;gap:14rpx;margin-bottom:18rpx;color:#66778c;font-size:22rpx}.bar-row>text{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.bar-row>text:last-child{text-align:right}.bar-row>view{height:18rpx;overflow:hidden;background:#eef3f8;border-radius:999rpx}.bar-row>view>view{height:100%;background:var(--color-primary, #1769d8);border-radius:999rpx}.bar-row.area>view>view{background:#27a3b8}.detail-row{display:grid;gap:8rpx;color:#66778c;font-size:23rpx}.detail-row>view{display:flex;align-items:center;justify-content:space-between;gap:12rpx;color:#20334c;font-size:27rpx;font-weight:600}.state{display:block;padding:35rpx;color:#8795a8;font-size:26rpx;text-align:center}.compact{padding:18rpx}.error{color:#c3654d}.tag-blue{color:var(--color-primary, #1769d8);background:var(--color-primary-soft, #eef6ff);border:1rpx solid var(--color-primary-border, #c9e1ff)}.tag-orange{color:#b06a00;background:#fff6df;border:1rpx solid #f0d390}.tag-green{color:#0e9663;background:#e9fbf2;border:1rpx solid #b8eed4} |
| | | </style> |
| | |
| | | </template> |
| | | |
| | | <style lang="scss" scoped> |
| | | .page{min-height:100vh;padding:24rpx 30rpx 70rpx;box-sizing:border-box;background:#f6f7f9}.form-card{overflow:hidden;background:#fff;border-radius:16rpx}.section{padding:22rpx 24rpx 12rpx;color:#1769d8;font-size:25rpx;font-weight:600;background:#f8fbff}.field{display:flex;align-items:center;min-height:96rpx;padding:0 24rpx;gap:20rpx;border-bottom:1rpx solid #eef1f5}.field>text:first-child{width:220rpx;flex:none;color:#33455d;font-size:27rpx}.required{color:#e34b4b}.field input,.field picker,.picker,.value{min-width:0;flex:1;color:#1e3049;font-size:27rpx}.field input,.value{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:36rpx;text-align:right}.strong{color:#1769d8;font-weight:700}.column{align-items:flex-start;flex-direction:column;padding:20rpx 24rpx}.column>text:first-child{width:auto}.column textarea{width:100%;height:150rpx;box-sizing:border-box;font-size:27rpx}.save{margin-top:32rpx;color:#fff;font-size:30rpx;background:#1769d8;border-radius:12rpx}.save::after{border:0}.state{padding:38rpx;color:#8795a8;font-size:26rpx;text-align:center} |
| | | .page{min-height:100vh;padding:24rpx 30rpx 70rpx;box-sizing:border-box;background:#f6f7f9}.form-card{overflow:hidden;background:#fff;border-radius:16rpx}.section{padding:22rpx 24rpx 12rpx;color:var(--color-primary, #1769d8);font-size:25rpx;font-weight:600;background:#f8fbff}.field{display:flex;align-items:center;min-height:96rpx;padding:0 24rpx;gap:20rpx;border-bottom:1rpx solid #eef1f5}.field>text:first-child{width:220rpx;flex:none;color:#33455d;font-size:27rpx}.required{color:#e34b4b}.field input,.field picker,.picker,.value{min-width:0;flex:1;color:#1e3049;font-size:27rpx}.field input,.value{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:36rpx;text-align:right}.strong{color:var(--color-primary, #1769d8);font-weight:700}.column{align-items:flex-start;flex-direction:column;padding:20rpx 24rpx}.column>text:first-child{width:auto}.column textarea{width:100%;height:150rpx;box-sizing:border-box;font-size:27rpx}.save{margin-top:32rpx;color:#fff;font-size:30rpx;background:var(--color-primary, #1769d8);border-radius:12rpx}.save::after{border:0}.state{padding:38rpx;color:#8795a8;font-size:26rpx;text-align:center} |
| | | </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{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} |
| | | .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:var(--color-primary, #1769d8);font-size:24rpx}.content{height:0;flex:1;padding-bottom: 132rpx;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:var(--color-primary, #1769d8);font-size:22rpx;line-height:48rpx;background:var(--color-primary-soft, #f5f8ff);border:1rpx solid var(--color-primary-border, #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:var(--color-primary, #1769d8);background:var(--color-primary-soft, #eef6ff);border:1rpx solid var(--color-primary-border, #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: 104rpx; height: 104rpx; min-height: 104rpx;padding:0;margin:0;background:var(--color-primary, #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 { APP_COMPANY } from "../../config/company"; |
| | | import { useAuth } from "../../stores/auth"; |
| | | import { useNotify } from "../../stores/notify"; |
| | | import { useAppTheme } from "../../stores/theme"; |
| | | |
| | | const { state, isLoggedIn, restoreUser } = useAuth(); |
| | | const { state: notifyState, refreshUnreadCount } = useNotify(); |
| | | const { themeStyle } = useAppTheme(); |
| | | |
| | | const summary = ref<HomeSummary | null>(null); |
| | | const trend = ref<ProductionTrend[]>([]); |
| | |
| | | </script> |
| | | |
| | | <template> |
| | | <view class="page"> |
| | | <view class="page" :style="themeStyle"> |
| | | <view class="home-hero"> |
| | | <view class="topbar"> |
| | | <view class="welcome-copy"> |
| | |
| | | padding: calc(var(--status-bar-height) + 22rpx) 28rpx 156rpx; |
| | | background: radial-gradient( |
| | | circle at 86% 2%, |
| | | rgba(67, 165, 255, 0.28), |
| | | rgba(67, 165, 255, 0) 34% |
| | | var(--color-primary-border, #bfdbff), |
| | | transparent 34% |
| | | ), |
| | | linear-gradient(180deg, #dbeeff 0%, #edf6ff 34%, #f3f7fb 62%, #eef3f9 100%); |
| | | linear-gradient(180deg, var(--color-primary-soft, #eef5ff) 0%, #f7f8fc 42%, #f3f7fb 68%, #eef3f9 100%); |
| | | } |
| | | .page, |
| | | .page view, |
| | |
| | | .brand-name { |
| | | display: inline-block; |
| | | margin-bottom: 10rpx; |
| | | color: #1769d8; |
| | | color: var(--color-primary, #1769d8); |
| | | font-size: 23rpx; |
| | | font-weight: 700; |
| | | } |
| | |
| | | } |
| | | .main-kpi text:nth-child(2) { |
| | | margin-top: 3rpx; |
| | | color: #1769d8; |
| | | color: var(--color-primary, #1769d8); |
| | | font-size: 53rpx; |
| | | font-weight: 700; |
| | | line-height: 1.12; |
| | |
| | | .bar-fill { |
| | | width: 58%; |
| | | min-height: 8rpx; |
| | | background: linear-gradient(180deg, #76aeff, #1d73e7); |
| | | background: linear-gradient(180deg, var(--color-primary-light, #4b8ee8), var(--color-primary, #1769d8)); |
| | | border-radius: 8rpx 8rpx 3rpx 3rpx; |
| | | } |
| | | .bar-item text:last-child { |
| | |
| | | } |
| | | .status-row > view > view { |
| | | height: 100%; |
| | | background: linear-gradient(90deg, #72adff, #1d73e7); |
| | | background: linear-gradient(90deg, var(--color-primary-light, #4b8ee8), var(--color-primary, #1769d8)); |
| | | border-radius: 12rpx; |
| | | } |
| | | .status-row > text:last-child { |
| | |
| | | background: currentColor; |
| | | } |
| | | .blue { |
| | | color: #246fd5; |
| | | background: #e4efff; |
| | | color: var(--color-primary, #1769d8); |
| | | background: var(--color-primary-soft, #eef5ff); |
| | | } |
| | | .violet { |
| | | color: #695bd8; |
| | |
| | | color: #fff; |
| | | font-size: 27rpx; |
| | | line-height: 84rpx; |
| | | background: #1769d8; |
| | | background: var(--color-primary, #1769d8); |
| | | border-radius: 42rpx; |
| | | } |
| | | </style> |
| | |
| | | </template> |
| | | |
| | | <style lang="scss" scoped> |
| | | .attachment-field{width:100%;padding:20rpx 0;border-bottom:1rpx solid #edf0f4}.attachment-head{display:flex;align-items:center;justify-content:space-between;color:#30445f;font-size:27rpx}.attachment-head button{width:150rpx;height:56rpx;margin:0;color:#1769d8;font-size:23rpx;line-height:54rpx;background:#f3f7fd;border:1rpx solid #b9d1f2;border-radius:8rpx}.attachment-head button::after{border:0}.attachment-list{margin-top:12rpx}.attachment-item{display:flex;align-items:center;justify-content:space-between;gap:20rpx;padding:12rpx 0;color:#526780;font-size:24rpx}.attachment-item>text:first-child{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.remove{flex:none;color:#cf4d4d}.empty{display:block;margin-top:14rpx;color:#9aa7b8;font-size:24rpx} |
| | | .attachment-field{width:100%;padding:20rpx 0;border-bottom:1rpx solid #edf0f4}.attachment-head{display:flex;align-items:center;justify-content:space-between;color:#30445f;font-size:27rpx}.attachment-head button{width:150rpx;height:56rpx;margin:0;color:var(--color-primary, #1769d8);font-size:23rpx;line-height:54rpx;background:#f3f7fd;border:1rpx solid #b9d1f2;border-radius:8rpx}.attachment-head button::after{border:0}.attachment-list{margin-top:12rpx}.attachment-item{display:flex;align-items:center;justify-content:space-between;gap:20rpx;padding:12rpx 0;color:#526780;font-size:24rpx}.attachment-item>text:first-child{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.remove{flex:none;color:#cf4d4d}.empty{display:block;margin-top:14rpx;color:#9aa7b8;font-size:24rpx} |
| | | </style> |
| | |
| | | <script setup lang="ts"> |
| | | import{computed,ref}from"vue";import{onPullDownRefresh,onShow}from"@dcloudio/uni-app";import{getAttendanceExceptionPage,submitAttendanceException,getAttendanceExceptionProcesses,type AttendanceException,type ApproveProcess}from"../../../api/hrm";import{useAuth}from"../../../stores/auth";import PickerSheet from"../../mes/process-design/components/PickerSheet.vue";import{confirm,toast}from"../shared"; |
| | | const{hasPermission,state}=useAuth();const rows=ref<AttendanceException[]>([]),processes=ref<ApproveProcess[]>([]),processVisible=ref(false),active=ref<AttendanceException>(),loading=ref(false);const canQuery=computed(()=>hasPermission("hrm:attendance-exception:query")); |
| | | async function load(){if(!state.accessToken||!canQuery.value)return;loading.value=true;try{const[d,p]=await Promise.all([getAttendanceExceptionPage(state.accessToken,{pageNo:1,pageSize:100}),getAttendanceExceptionProcesses(state.accessToken)]);rows.value=d.list||[];processes.value=p;}catch(e){toast(e instanceof Error?e.message:"å 载失败");}finally{loading.value=false;uni.stopPullDownRefresh();}} |
| | | function submit(row:AttendanceException){active.value=row;if(processes.value.length===1)doSubmit(processes.value[0].key);else processVisible.value=true;}async function doSubmit(key:string|number){if(!state.accessToken||!active.value?.id||!await confirm("确认æäº¤èå¤å¼å¸¸å®¡æ¹ï¼"))return;try{await submitAttendanceException(state.accessToken,active.value.id,String(key));toast("æäº¤æå");processVisible.value=false;await load();}catch(e){toast(e instanceof Error?e.message:"æäº¤å¤±è´¥");}} |
| | | onShow(load);onPullDownRefresh(load); |
| | | </script><template><view class="page"><template v-if="canQuery"><view v-for="row in rows" :key="row.id" class="card" @click="uni.navigateTo({url:`/pages/hrm/attendance-exception/form?id=${row.id}&detail=1`})"><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',row.status===20?'tag-green':row.status===10?'tag-blue':'tag-gray']">{{row.status===0?'è稿':row.status===10?'审æ¹ä¸':row.status===20?'å·²éè¿':'å·²ç»æ'}}</text></view><view class="grid"><text>å¼å¸¸ç±»åï¼{{row.exceptionTypeName||row.exceptionType||'--'}}</text><text>åå ï¼{{row.reason||'--'}}</text><text>夿³¨ï¼{{row.remark||'--'}}</text></view><view class="actions" @click.stop><button @click="uni.navigateTo({url:`/pages/hrm/attendance-exception/form?id=${row.id}&detail=1`})">æ¥ç</button><button v-if="row.status===0&&hasPermission('hrm:attendance-exception:submit')" @click="submit(row)">æäº¤</button></view></view><view v-if="!rows.length" class="state">{{loading?'å è½½ä¸...':'ææ èå¤å¼å¸¸ç³è¯·'}}</view><button v-if="hasPermission('hrm:attendance-exception:create')" class="fab" @click="uni.navigateTo({url:'/pages/hrm/attendance-exception/form'})"><view/></button></template><view v-else class="state">ææ èå¤å¼å¸¸æ¥çæé</view><PickerSheet v-model:show="processVisible" title="éæ©å®¡æ¹æµç¨" :items="processes.map(x=>({key:x.key,label:x.name}))" :selected-keys="[]" @confirm="k=>doSubmit(k[0])"/></view></template><style scoped lang="scss">@import "../list.scss";</style> |
| | | import { computed, ref } from "vue"; |
| | | import { onPullDownRefresh, onReachBottom, onShow } from "@dcloudio/uni-app"; |
| | | import { getAttendanceExceptionPage, submitAttendanceException, getAttendanceExceptionProcesses, type AttendanceException, type ApproveProcess } from "../../../api/hrm"; |
| | | import { useAuth } from "../../../stores/auth"; |
| | | import PickerSheet from "../../mes/process-design/components/PickerSheet.vue"; |
| | | import { confirm, toast } from "../shared"; |
| | | const { hasPermission, state } = useAuth(); |
| | | const rows = ref<AttendanceException[]>([]), processes = ref<ApproveProcess[]>([]), processVisible = ref(false), active = ref<AttendanceException>(), loading = ref(false), pageNo = ref(1), total = ref(0); |
| | | const pageSize = 15; |
| | | const canQuery = computed(() => hasPermission("hrm:attendance-exception:query")); |
| | | const hasMore = computed(() => rows.value.length < total.value); |
| | | async function load(reset = true) { |
| | | if (!state.accessToken || !canQuery.value || loading.value) return; |
| | | if (reset) { pageNo.value = 1; total.value = 0; } |
| | | loading.value = true; |
| | | try { |
| | | const data = await getAttendanceExceptionPage(state.accessToken, { pageNo: pageNo.value, pageSize }); |
| | | rows.value = reset ? (data.list || []) : [...rows.value, ...(data.list || [])]; |
| | | total.value = Number(data.total || 0); |
| | | if (rows.value.length < total.value) pageNo.value += 1; |
| | | if (reset) processes.value = await getAttendanceExceptionProcesses(state.accessToken); |
| | | } catch (error) { toast(error instanceof Error ? error.message : "å 载失败"); } |
| | | finally { loading.value = false; uni.stopPullDownRefresh(); } |
| | | } |
| | | function submit(row: AttendanceException) { |
| | | active.value = row; |
| | | if (processes.value.length === 1) doSubmit(processes.value[0].key); |
| | | else processVisible.value = true; |
| | | } |
| | | async function doSubmit(key: string | number) { |
| | | if (!state.accessToken || !active.value?.id || !await confirm("确认æäº¤èå¤å¼å¸¸å®¡æ¹ï¼")) return; |
| | | try { await submitAttendanceException(state.accessToken, active.value.id, String(key)); toast("æäº¤æå"); processVisible.value = false; await load(true); } |
| | | catch (error) { toast(error instanceof Error ? error.message : "æäº¤å¤±è´¥"); } |
| | | } |
| | | onShow(() => load(true)); |
| | | onPullDownRefresh(() => load(true)); |
| | | onReachBottom(() => { if (hasMore.value) load(false); }); |
| | | </script><template><view class="page"><template v-if="canQuery"><view v-for="row in rows" :key="row.id" class="card" @click="uni.navigateTo({url:`/pages/hrm/attendance-exception/form?id=${row.id}&detail=1`})"><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',row.status===20?'tag-green':row.status===10?'tag-blue':'tag-gray']">{{row.status===0?'è稿':row.status===10?'审æ¹ä¸':row.status===20?'å·²éè¿':'å·²ç»æ'}}</text></view><view class="grid"><text>å¼å¸¸ç±»åï¼{{row.exceptionTypeName||row.exceptionType||'--'}}</text><text>åå ï¼{{row.reason||'--'}}</text><text>夿³¨ï¼{{row.remark||'--'}}</text></view><view class="actions" @click.stop><button @click="uni.navigateTo({url:`/pages/hrm/attendance-exception/form?id=${row.id}&detail=1`})">æ¥ç</button><button v-if="row.status===0&&hasPermission('hrm:attendance-exception:submit')" @click="submit(row)">æäº¤</button></view></view><view v-if="!rows.length" class="state">{{loading?'å è½½ä¸...':'ææ èå¤å¼å¸¸ç³è¯·'}}</view><view v-else class="state more">{{loading ? "å è½½ä¸..." : hasMore ? "䏿å è½½æ´å¤" : "æ²¡ææ´å¤äº"}}</view><button v-if="hasPermission('hrm:attendance-exception:create')" class="fab" @click="uni.navigateTo({url:'/pages/hrm/attendance-exception/form'})"><view/></button></template><view v-else class="state">ææ èå¤å¼å¸¸æ¥çæé</view><PickerSheet v-model:show="processVisible" title="éæ©å®¡æ¹æµç¨" :items="processes.map(x=>({key:x.key,label:x.name}))" :selected-keys="[]" @confirm="k=>doSubmit(k[0])"/></view></template><style scoped lang="scss">@import "../list.scss";</style> |
| | |
| | | <script setup lang="ts"> |
| | | import HrmCrudPage, { type CrudConfig } from "../components/HrmCrudPage.vue"; |
| | | 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 }; |
| | | 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:"æ¯å¦æ³å®"}], page:true, load:(t,k,p,s)=>getHolidayPage(t,{pageNo:p,pageSize:s,name:k||undefined}), create:createHoliday, update:updateHoliday, remove:deleteHoliday }; |
| | | </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(""), 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 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> |
| | | import { computed, ref } from "vue"; |
| | | import { onPullDownRefresh, onReachBottom, 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(""), loading = ref(false), pageNo = ref(1), total = ref(0); |
| | | const pageSize = 15; |
| | | const canQuery = computed(() => hasPermission("hrm:attendance-record:query")); |
| | | const hasMore = computed(() => rows.value.length < total.value); |
| | | async function load(reset = true) { |
| | | if (!state.accessToken || !canQuery.value || loading.value) return; |
| | | if (reset) { pageNo.value = 1; total.value = 0; } |
| | | loading.value = true; |
| | | try { |
| | | const data = await getAttendanceRecordPage(state.accessToken, { pageNo: pageNo.value, pageSize, userName: keyword.value || undefined }); |
| | | rows.value = reset ? (data.list || []) : [...rows.value, ...(data.list || [])]; |
| | | total.value = Number(data.total || 0); |
| | | if (rows.value.length < total.value) pageNo.value += 1; |
| | | } catch (error) { toast(error instanceof Error ? error.message : "å 载失败"); } |
| | | finally { loading.value = false; uni.stopPullDownRefresh(); } |
| | | } |
| | | onShow(() => load(true)); |
| | | onPullDownRefresh(() => load(true)); |
| | | onReachBottom(() => { if (hasMore.value) load(false); }); |
| | | </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><view v-else class="state more">{{loading ? "å è½½ä¸..." : hasMore ? "䏿å è½½æ´å¤" : "æ²¡ææ´å¤äº"}}</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, 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 }; |
| | | 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:"èå´(ç±³)"}], page:true, load:(t,k,p,s)=>getAttendanceRulePage(t,{pageNo:p,pageSize:s,name:k||undefined}), create:createAttendanceRule, update:updateAttendanceRule, remove:deleteAttendanceRule }; |
| | | </script><template><HrmCrudPage :config="config" /></template> |
| | |
| | | <script setup lang="ts"> |
| | | import { computed, ref } from "vue"; import { onPullDownRefresh, onShow } from "@dcloudio/uni-app"; |
| | | import { generateAttendanceSummary,getAttendanceSummaryPage,type AttendanceSummary } from "../../../api/hrm"; import { useAuth } from "../../../stores/auth"; import { confirm,toast } from "../shared"; |
| | | const {hasPermission,state}=useAuth(); const rows=ref<AttendanceSummary[]>([]),period=ref(new Date().toISOString().slice(0,7)),loading=ref(false); const canQuery=computed(()=>hasPermission("hrm:attendance-summary:query")); |
| | | async function load(){if(!state.accessToken||!canQuery.value)return;loading.value=true;try{const d=await getAttendanceSummaryPage(state.accessToken,{pageNo:1,pageSize:100,yearMonth:period.value});rows.value=d.list||[];}catch(e){toast(e instanceof Error?e.message:"å 载失败");}finally{loading.value=false;uni.stopPullDownRefresh();}} |
| | | async function generate(){if(!state.accessToken||!await confirm(`ç¡®è®¤éæ°çæ ${period.value} è夿±æ»ï¼`))return;try{await generateAttendanceSummary(state.accessToken,{yearMonth:period.value});toast("çææå");await load();}catch(e){toast(e instanceof Error?e.message:"çæå¤±è´¥");}} |
| | | onShow(load);onPullDownRefresh(load); |
| | | </script><template><view class="page"><template v-if="canQuery"><view class="search"><input v-model="period" placeholder="ç»è®¡æä»½ YYYY-MM" @confirm="load"/><text @click="load">æ¥è¯¢</text></view><view v-if="hasPermission('hrm:attendance-summary:generate')" class="top-actions"><button @click="generate">çææåº¦æ±æ»</button></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.yearMonth}}</text></view><text class="tag tag-green">{{row.actualDays??0}} / {{row.workDays??0}} 天</text></view><view class="grid"><text>è¿å°ï¼{{row.lateCount??0}} 次</text><text>æ©éï¼{{row.earlyCount??0}} 次</text><text>缺å¤ï¼{{row.absentCount??0}} 次</text><text>å çï¼{{row.overtimeHours??0}} å°æ¶</text><text>请åï¼{{row.leaveHours??0}} å°æ¶</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";.top-actions{display:flex;justify-content:flex-end;margin-bottom:18rpx}.top-actions button{margin:0;color:#1769d8;font-size:24rpx;background:#fff}</style> |
| | | import { computed, ref } from "vue"; |
| | | import { onPullDownRefresh, onReachBottom, onShow } from "@dcloudio/uni-app"; |
| | | import { generateAttendanceSummary, getAttendanceSummaryPage, type AttendanceSummary } from "../../../api/hrm"; |
| | | import { useAuth } from "../../../stores/auth"; |
| | | import { confirm, toast } from "../shared"; |
| | | const { hasPermission, state } = useAuth(); |
| | | const rows = ref<AttendanceSummary[]>([]), period = ref(new Date().toISOString().slice(0, 7)), loading = ref(false), pageNo = ref(1), total = ref(0); |
| | | const pageSize = 15; |
| | | const canQuery = computed(() => hasPermission("hrm:attendance-summary:query")); |
| | | const hasMore = computed(() => rows.value.length < total.value); |
| | | async function load(reset = true) { |
| | | if (!state.accessToken || !canQuery.value || loading.value) return; |
| | | if (reset) { pageNo.value = 1; total.value = 0; } |
| | | loading.value = true; |
| | | try { |
| | | const data = await getAttendanceSummaryPage(state.accessToken, { pageNo: pageNo.value, pageSize, yearMonth: period.value }); |
| | | rows.value = reset ? (data.list || []) : [...rows.value, ...(data.list || [])]; |
| | | total.value = Number(data.total || 0); |
| | | if (rows.value.length < total.value) pageNo.value += 1; |
| | | } catch (error) { toast(error instanceof Error ? error.message : "å 载失败"); } |
| | | finally { loading.value = false; uni.stopPullDownRefresh(); } |
| | | } |
| | | async function generate() { |
| | | if (!state.accessToken || !await confirm("ç¡®è®¤éæ°çæ " + period.value + " è夿±æ»ï¼")) return; |
| | | try { await generateAttendanceSummary(state.accessToken, { yearMonth: period.value }); toast("çææå"); await load(true); } |
| | | catch (error) { toast(error instanceof Error ? error.message : "çæå¤±è´¥"); } |
| | | } |
| | | onShow(() => load(true)); |
| | | onPullDownRefresh(() => load(true)); |
| | | onReachBottom(() => { if (hasMore.value) load(false); }); |
| | | </script><template><view class="page"><template v-if="canQuery"><view class="search"><input v-model="period" placeholder="ç»è®¡æä»½ YYYY-MM" @confirm="load"/><text @click="load">æ¥è¯¢</text></view><view v-if="hasPermission('hrm:attendance-summary:generate')" class="top-actions"><button @click="generate">çææåº¦æ±æ»</button></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.yearMonth}}</text></view><text class="tag tag-green">{{row.actualDays??0}} / {{row.workDays??0}} 天</text></view><view class="grid"><text>è¿å°ï¼{{row.lateCount??0}} 次</text><text>æ©éï¼{{row.earlyCount??0}} 次</text><text>缺å¤ï¼{{row.absentCount??0}} 次</text><text>å çï¼{{row.overtimeHours??0}} å°æ¶</text><text>请åï¼{{row.leaveHours??0}} å°æ¶</text></view></view><view v-if="!rows.length" class="state">{{loading?'å è½½ä¸...':'ææ è夿±æ»'}}</view><view v-else class="state more">{{loading ? "å è½½ä¸..." : hasMore ? "䏿å è½½æ´å¤" : "æ²¡ææ´å¤äº"}}</view></template><view v-else class="state">ææ è夿±æ»æ¥çæé</view></view></template><style scoped lang="scss">@import "../list.scss";.top-actions{display:flex;justify-content:flex-end;margin-bottom:18rpx}.top-actions button{margin:0;color:var(--color-primary, #1769d8);font-size:24rpx;background:#fff}</style> |
| | |
| | | <script setup lang="ts"> |
| | | import { computed, ref } from "vue"; |
| | | import { onPullDownRefresh, onShow } from "@dcloudio/uni-app"; |
| | | import { onPullDownRefresh, onReachBottom, onShow } from "@dcloudio/uni-app"; |
| | | import { useAuth } from "../../../stores/auth"; |
| | | import { confirm, toast } from "../shared"; |
| | | |
| | |
| | | export interface CrudConfig { |
| | | title: string; permission: string; fields: CrudField[]; cardFields: Array<{ key: string; label: string }>; |
| | | defaultValue?: Record<string, unknown>; page?: boolean; |
| | | load: (token: string, keyword: string) => Promise<unknown>; |
| | | load: (token: string, keyword: string, pageNo: number, pageSize: number) => Promise<unknown>; |
| | | 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>; |
| | | |
| | | } |
| | | const props = defineProps<{ config: CrudConfig }>(); |
| | | const { hasPermission, state } = useAuth(); |
| | | const rows = ref<Record<string, unknown>[]>([]); |
| | | const keyword = ref(""); const loading = ref(false); const editing = ref(false); const submitting = ref(false); |
| | | const keyword = ref(""); |
| | | const loading = ref(false); |
| | | const editing = ref(false); |
| | | const submitting = ref(false); |
| | | const pageNo = ref(1); |
| | | const total = ref(0); |
| | | const pageSize = 15; |
| | | const form = ref<Record<string, unknown>>({}); |
| | | const canQuery = computed(() => hasPermission(`${props.config.permission}:query`)); |
| | | const canCreate = computed(() => hasPermission(`${props.config.permission}:create`)); |
| | | const canUpdate = computed(() => hasPermission(`${props.config.permission}:update`)); |
| | | const canDelete = computed(() => hasPermission(`${props.config.permission}:delete`)); |
| | | const hasMore = computed(() => props.config.page === true && rows.value.length < total.value); |
| | | |
| | | function text(value: unknown) { if (value === true) return "æ¯"; if (value === false) return "å¦"; return value === undefined || value === null || value === "" ? "--" : String(value); } |
| | | async function load() { |
| | | async function load(reset = true) { |
| | | if (!state.accessToken || !canQuery.value || loading.value) return; |
| | | if (reset) { pageNo.value = 1; total.value = 0; } |
| | | loading.value = true; |
| | | try { |
| | | const result = await props.config.load(state.accessToken, keyword.value.trim()); |
| | | rows.value = Array.isArray(result) ? result : ((result as { list?: Record<string, unknown>[] })?.list || []); |
| | | const result = await props.config.load(state.accessToken, keyword.value.trim(), pageNo.value, pageSize); |
| | | const list = Array.isArray(result) ? result : ((result as { list?: Record<string, unknown>[] })?.list || []); |
| | | rows.value = reset ? list : [...rows.value, ...list]; |
| | | total.value = Array.isArray(result) ? list.length : Number((result as { total?: number })?.total ?? rows.value.length); |
| | | if (props.config.page === true && rows.value.length < total.value) pageNo.value += 1; |
| | | } catch (error) { toast(error instanceof Error ? error.message : "å 载失败"); } |
| | | finally { loading.value = false; uni.stopPullDownRefresh(); } |
| | | } |
| | |
| | | submitting.value = true; |
| | | try { |
| | | if (form.value.id) await props.config.update(state.accessToken, form.value); else await props.config.create(state.accessToken, form.value); |
| | | toast("ä¿åæå"); editing.value = false; await load(); |
| | | toast("ä¿åæå"); editing.value = false; await load(true); |
| | | } catch (error) { toast(error instanceof Error ? error.message : "ä¿å失败"); } |
| | | finally { submitting.value = false; } |
| | | } |
| | | async function remove(row: Record<string, unknown>) { |
| | | if (!state.accessToken || !row.id || !await confirm(`确认å é¤è¯¥${props.config.title}è®°å½ï¼`)) return; |
| | | try { await props.config.remove(state.accessToken, Number(row.id)); toast("å 餿å"); await load(); } |
| | | try { await props.config.remove(state.accessToken, Number(row.id)); toast("å 餿å"); await load(true); } |
| | | catch (error) { toast(error instanceof Error ? error.message : "å é¤å¤±è´¥"); } |
| | | } |
| | | onShow(load); onPullDownRefresh(load); |
| | | onShow(() => load(true)); |
| | | onPullDownRefresh(() => load(true)); |
| | | onReachBottom(() => { if (hasMore.value) load(false); }); |
| | | </script> |
| | | |
| | | <template> |
| | | <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 class="search"><input v-model="keyword" :placeholder="`æç´¢${config.title}`" confirm-type="search" @confirm="load(true)" /><text @click="load(true)">æç´¢</text></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> |
| | | <view class="actions"><button v-if="canUpdate" @click="open(row)">ç¼è¾</button><button v-if="canDelete" class="danger" @click="remove(row)">å é¤</button></view> |
| | | </view> |
| | | <view v-if="!rows.length" class="state">{{ loading ? "å è½½ä¸..." : `ææ ${config.title}æ°æ®` }}</view> |
| | | <view v-else-if="config.page" class="state more">{{ loading ? "å è½½ä¸..." : hasMore ? "䏿å è½½æ´å¤" : "æ²¡ææ´å¤äº" }}</view> |
| | | <button v-if="canCreate" class="fab" @click="open()"><view /></button> |
| | | </template> |
| | | <view v-else class="state">ææ {{ config.title }}æ¥çæé</view> |
| | |
| | | <script setup lang="ts"> |
| | | import{computed,ref}from"vue";import{onPullDownRefresh,onShow}from"@dcloudio/uni-app";import{createEmployeeSocialSecurity,deleteEmployeeSocialSecurity,getEmployeeSimpleList,getEmployeeSocialSecurityHistory,getEmployeeSocialSecurityPage,getSocialSecuritySchemeList,updateEmployeeSocialSecurity,type EmployeeSimple,type EmployeeSocialSecurity,type SocialSecurityScheme}from"../../../api/hrm";import{useAuth}from"../../../stores/auth";import PickerSheet from"../../mes/process-design/components/PickerSheet.vue";import{confirm,money,toast}from"../shared"; |
| | | const{hasPermission,state}=useAuth();const rows=ref<EmployeeSocialSecurity[]>([]),employees=ref<EmployeeSimple[]>([]),schemes=ref<SocialSecurityScheme[]>([]),form=ref<EmployeeSocialSecurity>({status:0}),editing=ref(false),employeeVisible=ref(false),schemeVisible=ref(false),history=ref<EmployeeSocialSecurity[]>([]),historyVisible=ref(false);const canQuery=computed(()=>hasPermission("hrm:employee-social-security:query")); |
| | | async function load(){if(!state.accessToken||!canQuery.value)return;try{const[d,e,s]=await Promise.all([getEmployeeSocialSecurityPage(state.accessToken,{pageNo:1,pageSize:100}),getEmployeeSimpleList(state.accessToken),getSocialSecuritySchemeList(state.accessToken)]);rows.value=d.list||[];employees.value=e;schemes.value=s;}catch(e){toast(e instanceof Error?e.message:"å 载失败");}finally{uni.stopPullDownRefresh();}} |
| | | function open(row?:EmployeeSocialSecurity){form.value=row?{...row}:{status:0};editing.value=true;}async function save(){if(!state.accessToken||!form.value.userId||!form.value.socialSecuritySchemeId||!form.value.effectiveDate)return toast("è¯·å®æ´å¡«ååå·¥ãæ¹æ¡åçææ¥æ");try{form.value.id?await updateEmployeeSocialSecurity(state.accessToken,form.value):await createEmployeeSocialSecurity(state.accessToken,form.value);toast("ä¿åæå");editing.value=false;await load();}catch(e){toast(e instanceof Error?e.message:"ä¿å失败");}} |
| | | async function remove(row:EmployeeSocialSecurity){if(!state.accessToken||!row.id||!await confirm("确认å é¤è¯¥åå·¥ç¤¾ä¿æ¡£æ¡ï¼"))return;try{await deleteEmployeeSocialSecurity(state.accessToken,row.id);toast("å 餿å");await load();}catch(e){toast(e instanceof Error?e.message:"å é¤å¤±è´¥");}} |
| | | async function showHistory(row:EmployeeSocialSecurity){if(!state.accessToken||!row.userId)return;history.value=await getEmployeeSocialSecurityHistory(state.accessToken,row.userId);historyVisible.value=true;}onShow(load);onPullDownRefresh(load); |
| | | </script><template><view class="page"><template v-if="canQuery"><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||'--'}}</text></view><text :class="['tag',row.status===0?'tag-green':'tag-gray']">{{row.status===0?'çæ':'åç¨'}}</text></view><view class="grid"><text>æ¹æ¡ï¼{{row.schemeName||'--'}}</text><text>社ä¿åºæ°ï¼{{money(row.socialSecurityBase)}}</text><text>å
¬ç§¯éåºæ°ï¼{{money(row.housingFundBase)}}</text><text>çææ¥æï¼{{row.effectiveDate||'--'}}</text></view><view class="actions"><button @click="showHistory(row)">åå²</button><button v-if="hasPermission('hrm:employee-social-security:update')" @click="open(row)">ç¼è¾</button><button v-if="hasPermission('hrm:employee-social-security:delete')" class="danger" @click="remove(row)">å é¤</button></view></view><button v-if="hasPermission('hrm:employee-social-security:create')" class="fab" @click="open()"><view/></button></template><view v-else class="state">ææ åå·¥ç¤¾ä¿æ¡£æ¡æ¥çæé</view><view v-if="editing" class="panel"><view class="form-card"><view class="field"><text>åå·¥</text><view class="picker" @click="employeeVisible=true"><text>{{employees.find(x=>x.id===form.userId)?.name||form.userName||'è¯·éæ©'}}</text><text>âº</text></view></view><view class="field"><text>ç¤¾ä¿æ¹æ¡</text><view class="picker" @click="schemeVisible=true"><text>{{schemes.find(x=>x.id===form.socialSecuritySchemeId)?.name||form.schemeName||'è¯·éæ©'}}</text><text>âº</text></view></view><view class="field"><text>社ä¿åºæ°</text><input v-model.number="form.socialSecurityBase" type="digit"/></view><view class="field"><text>å
¬ç§¯éåºæ°</text><input v-model.number="form.housingFundBase" type="digit"/></view><view class="field"><text>çææ¥æ</text><input v-model="form.effectiveDate" placeholder="YYYY-MM-DD"/></view><view class="toolbar"><button @click="editing=false">åæ¶</button><button @click="save">ä¿å</button></view></view></view><view v-if="historyVisible" class="panel"><view class="form-card"><view class="section-title">ç¤¾ä¿æ¡£æ¡åå²</view><view v-for="item in history" :key="item.id" class="detail-row"><text>{{item.effectiveDate}}</text><text>{{item.schemeName}} / {{money(item.socialSecurityBase)}}</text></view><view class="toolbar"><button @click="historyVisible=false">å
³é</button></view></view></view><PickerSheet v-model:show="employeeVisible" title="éæ©åå·¥" :items="employees.map(x=>({key:x.id,label:x.name,sub:x.employeeNo}))" :selected-keys="form.userId?[form.userId]:[]" @confirm="k=>form.userId=Number(k[0])"/><PickerSheet v-model:show="schemeVisible" title="éæ©æ¹æ¡" :items="schemes.map(x=>({key:x.id||0,label:x.name||'--'}))" :selected-keys="form.socialSecuritySchemeId?[form.socialSecuritySchemeId]:[]" @confirm="k=>form.socialSecuritySchemeId=Number(k[0])"/></view></template><style scoped lang="scss">@import "../list.scss";@import "../form.scss";.panel{position:fixed;z-index:20;inset:0;padding:15vh 30rpx;background:rgba(20,30,45,.48)}.panel .form-card{max-height:70vh;overflow:auto}.field input{text-align:right}</style> |
| | | import { computed, ref } from "vue"; |
| | | import { onPullDownRefresh, onReachBottom, onShow } from "@dcloudio/uni-app"; |
| | | import { createEmployeeSocialSecurity, deleteEmployeeSocialSecurity, getEmployeeSimpleList, getEmployeeSocialSecurityHistory, getEmployeeSocialSecurityPage, getSocialSecuritySchemeList, updateEmployeeSocialSecurity, type EmployeeSimple, type EmployeeSocialSecurity, type SocialSecurityScheme } from "../../../api/hrm"; |
| | | import { useAuth } from "../../../stores/auth"; |
| | | import PickerSheet from "../../mes/process-design/components/PickerSheet.vue"; |
| | | import { confirm, money, toast } from "../shared"; |
| | | const { hasPermission, state } = useAuth(); |
| | | const rows = ref<EmployeeSocialSecurity[]>([]), employees = ref<EmployeeSimple[]>([]), schemes = ref<SocialSecurityScheme[]>([]); |
| | | const form = ref<EmployeeSocialSecurity>({ status: 0 }), editing = ref(false), employeeVisible = ref(false), schemeVisible = ref(false); |
| | | const history = ref<EmployeeSocialSecurity[]>([]), historyVisible = ref(false), loading = ref(false), pageNo = ref(1), total = ref(0); |
| | | const pageSize = 15; |
| | | const canQuery = computed(() => hasPermission("hrm:employee-social-security:query")); |
| | | const hasMore = computed(() => rows.value.length < total.value); |
| | | async function load(reset = true) { |
| | | if (!state.accessToken || !canQuery.value || loading.value) return; |
| | | if (reset) { pageNo.value = 1; total.value = 0; } |
| | | loading.value = true; |
| | | try { |
| | | const data = await getEmployeeSocialSecurityPage(state.accessToken, { pageNo: pageNo.value, pageSize }); |
| | | rows.value = reset ? (data.list || []) : [...rows.value, ...(data.list || [])]; |
| | | total.value = Number(data.total || 0); |
| | | if (rows.value.length < total.value) pageNo.value += 1; |
| | | if (reset) { |
| | | [employees.value, schemes.value] = await Promise.all([getEmployeeSimpleList(state.accessToken), getSocialSecuritySchemeList(state.accessToken)]); |
| | | } |
| | | } catch (error) { toast(error instanceof Error ? error.message : "å 载失败"); } |
| | | finally { loading.value = false; uni.stopPullDownRefresh(); } |
| | | } |
| | | function open(row?: EmployeeSocialSecurity) { form.value = row ? { ...row } : { status: 0 }; editing.value = true; } |
| | | async function save() { |
| | | if (!state.accessToken || !form.value.userId || !form.value.socialSecuritySchemeId || !form.value.effectiveDate) return toast("è¯·å®æ´å¡«ååå·¥ãæ¹æ¡åçææ¥æ"); |
| | | try { |
| | | form.value.id ? await updateEmployeeSocialSecurity(state.accessToken, form.value) : await createEmployeeSocialSecurity(state.accessToken, form.value); |
| | | toast("ä¿åæå"); editing.value = false; await load(true); |
| | | } catch (error) { toast(error instanceof Error ? error.message : "ä¿å失败"); } |
| | | } |
| | | async function remove(row: EmployeeSocialSecurity) { |
| | | if (!state.accessToken || !row.id || !await confirm("确认å é¤è¯¥åå·¥ç¤¾ä¿æ¡£æ¡ï¼")) return; |
| | | try { await deleteEmployeeSocialSecurity(state.accessToken, row.id); toast("å 餿å"); await load(true); } |
| | | catch (error) { toast(error instanceof Error ? error.message : "å é¤å¤±è´¥"); } |
| | | } |
| | | async function showHistory(row: EmployeeSocialSecurity) { |
| | | if (!state.accessToken || !row.userId) return; |
| | | history.value = await getEmployeeSocialSecurityHistory(state.accessToken, row.userId); |
| | | historyVisible.value = true; |
| | | } |
| | | onShow(() => load(true)); |
| | | onPullDownRefresh(() => load(true)); |
| | | onReachBottom(() => { if (hasMore.value) load(false); }); |
| | | </script><template><view class="page"><template v-if="canQuery"><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||'--'}}</text></view><text :class="['tag',row.status===0?'tag-green':'tag-gray']">{{row.status===0?'çæ':'åç¨'}}</text></view><view class="grid"><text>æ¹æ¡ï¼{{row.schemeName||'--'}}</text><text>社ä¿åºæ°ï¼{{money(row.socialSecurityBase)}}</text><text>å
¬ç§¯éåºæ°ï¼{{money(row.housingFundBase)}}</text><text>çææ¥æï¼{{row.effectiveDate||'--'}}</text></view><view class="actions"><button @click="showHistory(row)">åå²</button><button v-if="hasPermission('hrm:employee-social-security:update')" @click="open(row)">ç¼è¾</button><button v-if="hasPermission('hrm:employee-social-security:delete')" class="danger" @click="remove(row)">å é¤</button></view></view><view v-if="!rows.length" class="state">{{loading?"å è½½ä¸...":"ææ åå·¥ç¤¾ä¿æ¡£æ¡"}}</view><view v-else class="state more">{{loading?"å è½½ä¸...":hasMore?"䏿å è½½æ´å¤":"æ²¡ææ´å¤äº"}}</view><button v-if="hasPermission('hrm:employee-social-security:create')" class="fab" @click="open()"><view/></button></template><view v-else class="state">ææ åå·¥ç¤¾ä¿æ¡£æ¡æ¥çæé</view><view v-if="editing" class="panel"><view class="form-card"><view class="field"><text>åå·¥</text><view class="picker" @click="employeeVisible=true"><text>{{employees.find(x=>x.id===form.userId)?.name||form.userName||'è¯·éæ©'}}</text><text>âº</text></view></view><view class="field"><text>ç¤¾ä¿æ¹æ¡</text><view class="picker" @click="schemeVisible=true"><text>{{schemes.find(x=>x.id===form.socialSecuritySchemeId)?.name||form.schemeName||'è¯·éæ©'}}</text><text>âº</text></view></view><view class="field"><text>社ä¿åºæ°</text><input v-model.number="form.socialSecurityBase" type="digit"/></view><view class="field"><text>å
¬ç§¯éåºæ°</text><input v-model.number="form.housingFundBase" type="digit"/></view><view class="field"><text>çææ¥æ</text><input v-model="form.effectiveDate" placeholder="YYYY-MM-DD"/></view><view class="toolbar"><button @click="editing=false">åæ¶</button><button @click="save">ä¿å</button></view></view></view><view v-if="historyVisible" class="panel"><view class="form-card"><view class="section-title">ç¤¾ä¿æ¡£æ¡åå²</view><view v-for="item in history" :key="item.id" class="detail-row"><text>{{item.effectiveDate}}</text><text>{{item.schemeName}} / {{money(item.socialSecurityBase)}}</text></view><view class="toolbar"><button @click="historyVisible=false">å
³é</button></view></view></view><PickerSheet v-model:show="employeeVisible" title="éæ©åå·¥" :items="employees.map(x=>({key:x.id,label:x.name,sub:x.employeeNo}))" :selected-keys="form.userId?[form.userId]:[]" @confirm="k=>form.userId=Number(k[0])"/><PickerSheet v-model:show="schemeVisible" title="éæ©æ¹æ¡" :items="schemes.map(x=>({key:x.id||0,label:x.name||'--'}))" :selected-keys="form.socialSecuritySchemeId?[form.socialSecuritySchemeId]:[]" @confirm="k=>form.socialSecuritySchemeId=Number(k[0])"/></view></template><style scoped lang="scss">@import "../list.scss";@import "../form.scss";.panel{position:fixed;z-index:20;inset:0;padding:15vh 30rpx;background:rgba(20,30,45,.48)}.panel .form-card{max-height:70vh;overflow:auto}.field input{text-align:right}</style> |
| | |
| | | import { createEmployee, getEmployee, getHrmDeptList, getHrmDicts, getHrmPostList, getHrmRoleList, getSalaryStructureList, updateEmployee, type Employee, type SimpleOption } from "../../../api/hrm"; |
| | | import type { DeptSimple, DictData } from "../../../api/crm"; |
| | | import { useAuth } from "../../../stores/auth"; |
| | | import { useAppTheme } from "../../../stores/theme"; |
| | | import { HRM_DICT, label, options } from "../shared"; |
| | | |
| | | const { hasPermission, state } = useAuth(); |
| | | const { primaryColor } = useAppTheme(); |
| | | const id = ref<number>(); |
| | | const mode = ref("edit"); |
| | | const saving = ref(false); |
| | |
| | | <view class="field"><text>ææºå· <text class="required">*</text></text><input v-model="form.phone" :disabled="readonly" type="number" maxlength="11" placeholder="åæ¶ä½ä¸ºç»å½è´¦å·" /></view> |
| | | <view class="field"><text>å½å±é¨é¨ <text class="required">*</text></text><picker v-if="!readonly" :range="depts" range-key="name" @change="form.deptId=depts[$event.detail.value].id"><view class="picker"><text>{{ deptText }}</text><text>âº</text></view></picker><text v-else class="value">{{ deptText }}</text></view> |
| | | <view class="field"><text>å²ä½ <text class="required">*</text></text><picker v-if="!readonly" :range="posts" range-key="name" @change="form.postId=posts[$event.detail.value].id"><view class="picker"><text>{{ postText }}</text><text>âº</text></view></picker><text v-else class="value">{{ postText }}</text></view> |
| | | <view class="field column"><text>ç¨æ·è§è² <text class="required">*</text></text><checkbox-group v-if="!readonly" class="checks" @change="changeRoles"><label v-for="role in roles" :key="role.id"><checkbox :value="String(role.id)" :checked="form.roleIds?.includes(role.id)" color="#1769d8" />{{ role.name }}</label></checkbox-group><text v-else class="role-value">{{ roleText }}</text></view> |
| | | <view class="field column"><text>ç¨æ·è§è² <text class="required">*</text></text><checkbox-group v-if="!readonly" class="checks" @change="changeRoles"><label v-for="role in roles" :key="role.id"><checkbox :value="String(role.id)" :checked="form.roleIds?.includes(role.id)" :color="primaryColor" />{{ role.name }}</label></checkbox-group><text v-else class="role-value">{{ roleText }}</text></view> |
| | | <view class="field"><text>å
¥èæ¥æ <text class="required">*</text></text><picker v-if="!readonly" mode="date" :value="form.hireDate" @change="form.hireDate=$event.detail.value"><view class="picker"><text>{{ form.hireDate || "è¯·éæ©å
¥èæ¥æ" }}</text><text>âº</text></view></picker><text v-else class="value">{{ form.hireDate || "--" }}</text></view> |
| | | <view class="field"><text>è½¬æ£æ¥æ</text><picker v-if="!readonly" mode="date" :value="form.regularDate" @change="form.regularDate=$event.detail.value"><view class="picker"><text>{{ form.regularDate || "è¯·éæ©è½¬æ£æ¥æ" }}</text><text>âº</text></view></picker><text v-else class="value">{{ form.regularDate || "--" }}</text></view> |
| | | <view class="field"><text>åå·¥ç¶æ <text class="required">*</text></text><picker v-if="!readonly" :range="statusOptions" range-key="label" @change="form.employeeStatus=Number(statusOptions[$event.detail.value].value)"><view class="picker"><text>{{ label(dicts, HRM_DICT.employeeStatus, form.employeeStatus, "è¯·éæ©ç¶æ") }}</text><text>âº</text></view></picker><text v-else class="value">{{ label(dicts, HRM_DICT.employeeStatus, form.employeeStatus) }}</text></view> |
| | |
| | | .page{min-height:100vh;padding:24rpx 30rpx 70rpx;box-sizing:border-box;background:#f6f7f9}.section-title{padding:18rpx 6rpx 12rpx;color:#728197;font-size:23rpx}.form-card{overflow:hidden;background:#fff;border-radius:14rpx}.field{display:flex;align-items:center;min-height:96rpx;padding:0 24rpx;gap:18rpx;border-bottom:1rpx solid #eef1f5}.field>text:first-child{width:205rpx;flex:none;color:#33455d;font-size:27rpx}.field input,.field picker,.picker,.value{min-width:0;flex:1;color:#1e3049;font-size:27rpx}.field input,.value{text-align:right}.picker{display:flex;width:100%;align-items:center;justify-content:flex-end;gap:10rpx}.picker text:first-child{min-width:0;overflow:hidden;text-align:right;text-overflow:ellipsis;white-space:nowrap}.picker text:last-child{color:#8092a7;font-size:36rpx}.datetime{display:flex;min-width:0;flex:1;justify-content:flex-end;gap:16rpx}.datetime picker{flex:none}.datetime text{color:#1e3049;font-size:25rpx}.column{align-items:flex-start;flex-direction:column;padding:20rpx 24rpx}.column>text:first-child{width:auto}.column textarea{width:100%;height:150rpx;font-size:27rpx}.required{color:#e23b3b}.save{margin-top:32rpx;color:#fff;background:#1769d8;border-radius:10rpx}.save::after{border:0}.state{padding:38rpx;color:#8795a8;text-align:center} |
| | | .page{min-height:100vh;padding:24rpx 30rpx 70rpx;box-sizing:border-box;background:#f6f7f9}.section-title{padding:18rpx 6rpx 12rpx;color:#728197;font-size:23rpx}.form-card{overflow:hidden;background:#fff;border-radius:14rpx}.field{display:flex;align-items:center;min-height:96rpx;padding:0 24rpx;gap:18rpx;border-bottom:1rpx solid #eef1f5}.field>text:first-child{width:205rpx;flex:none;color:#33455d;font-size:27rpx}.field input,.field picker,.picker,.value{min-width:0;flex:1;color:#1e3049;font-size:27rpx}.field input,.value{text-align:right}.picker{display:flex;width:100%;align-items:center;justify-content:flex-end;gap:10rpx}.picker text:first-child{min-width:0;overflow:hidden;text-align:right;text-overflow:ellipsis;white-space:nowrap}.picker text:last-child{color:#8092a7;font-size:36rpx}.datetime{display:flex;min-width:0;flex:1;justify-content:flex-end;gap:16rpx}.datetime picker{flex:none}.datetime text{color:#1e3049;font-size:25rpx}.column{align-items:flex-start;flex-direction:column;padding:20rpx 24rpx}.column>text:first-child{width:auto}.column textarea{width:100%;height:150rpx;font-size:27rpx}.required{color:#e23b3b}.save{margin-top:32rpx;color:#fff;background:var(--color-primary, #1769d8);border-radius:10rpx}.save::after{border:0}.state{padding:38rpx;color:#8795a8;text-align:center} |
| | |
| | | .page{min-height:100vh;padding:20rpx 30rpx 150rpx;box-sizing:border-box;background:#f3f6fb}.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>view{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{flex:none;padding:6rpx 15rpx;font-size:22rpx;border-radius:999rpx}.tag-on{color:#0e9663;background:#e9fbf2}.tag-off{color:#66778c;background:#f0f3f7}.tag-blue{color:#1769d8;background:#eef6ff}.tag-danger{color:#c65050;background:#fff0f0}.grid{display:grid;grid-template-columns:1fr 1fr;gap:11rpx;padding:16rpx 0;margin-top:15rpx;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}.state,.more{display:block;padding:45rpx 0;color:#8795a8;font-size:26rpx;text-align:center}.error{color:#c65050}.fab{position:fixed;right:32rpx;bottom:56rpx;display:flex;width:100rpx;height:100rpx;align-items:center;justify-content:center;padding:0;margin:0;background:#1769d8;border-radius:50%;box-shadow:0 14rpx 28rpx rgba(23,105,216,.32)}.fab view{position:relative;width:38rpx;height:38rpx}.fab view::before,.fab view::after{position:absolute;content:"";background:#fff}.fab view::before{top:17rpx;width:38rpx;height:4rpx}.fab view::after{left:17rpx;width:4rpx;height:38rpx} |
| | | .page{min-height:100vh;padding: 20rpx 30rpx 132rpx;box-sizing:border-box;background:#f3f6fb}.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:var(--color-primary, #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>view{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{flex:none;padding:6rpx 15rpx;font-size:22rpx;border-radius:999rpx}.tag-on{color:#0e9663;background:#e9fbf2}.tag-off{color:#66778c;background:#f0f3f7}.tag-blue{color:var(--color-primary, #1769d8);background:var(--color-primary-soft, #eef6ff)}.tag-danger{color:#c65050;background:#fff0f0}.grid{display:grid;grid-template-columns:1fr 1fr;gap:11rpx;padding:16rpx 0;margin-top:15rpx;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:var(--color-primary, #1769d8);font-size:22rpx;line-height:48rpx;background:var(--color-primary-soft, #f5f8ff);border:1rpx solid var(--color-primary-border, #8ab3ee);border-radius:8rpx}.actions .danger{color:#c65050;background:#fff7f7;border-color:#e3a0a0}.actions button::after,.fab::after{border:0}.state,.more{display:block;padding:45rpx 0;color:#8795a8;font-size:26rpx;text-align:center}.error{color:#c65050}.fab{position:fixed;right:32rpx;bottom:56rpx;display:flex;width:100rpx;height:100rpx;align-items:center;justify-content:center;padding:0;margin:0;background:var(--color-primary, #1769d8);border-radius:50%;box-shadow:0 14rpx 28rpx rgba(23,105,216,.32)}.fab view{position:relative;width:38rpx;height:38rpx}.fab view::before,.fab view::after{position:absolute;content:"";background:#fff}.fab view::before{top:17rpx;width:38rpx;height:4rpx}.fab view::after{left:17rpx;width:4rpx;height:38rpx} |
| | |
| | | import { onLoad } from "@dcloudio/uni-app"; |
| | | import { createOvertime, getCurrentOvertimeApplicant, getOvertime, updateOvertime, type Overtime } from "../../../api/hrm"; |
| | | import { useAuth } from "../../../stores/auth"; |
| | | import { useAppTheme } from "../../../stores/theme"; |
| | | |
| | | const { hasPermission, state } = useAuth(); |
| | | const { primaryColor } = useAppTheme(); |
| | | const id = ref<number>(); const mode = ref("edit"); const saving = ref(false); |
| | | const form = reactive<Overtime>({ overtimeDate: "", startTime: "18:00:00", endTime: "20:00:00", duration: 2, overtimeType: 1, crossDay: false, mealDeduction: false, mealDeductionHours: 1, reason: "", workContent: "" }); |
| | | const readonly = computed(() => mode.value === "detail"); |
| | |
| | | <view class="field"><text>å¼å§æ¶é´ <text class="required">*</text></text><picker v-if="!readonly" mode="time" :value="form.startTime?.slice(0,5)" @change="form.startTime=$event.detail.value+':00'"><view class="picker"><text>{{ form.startTime?.slice(0,5) || "è¯·éæ©" }}</text><text>âº</text></view></picker><text v-else class="value">{{ form.startTime?.slice(0,5) || "--" }}</text></view> |
| | | <view class="field"><text>ç»ææ¶é´ <text class="required">*</text></text><picker v-if="!readonly" mode="time" :value="form.endTime?.slice(0,5)" @change="form.endTime=$event.detail.value+':00'"><view class="picker"><text>{{ form.endTime?.slice(0,5) || "è¯·éæ©" }}</text><text>âº</text></view></picker><text v-else class="value">{{ form.endTime?.slice(0,5) || "--" }}</text></view> |
| | | <view class="field"><text>跨天</text><text class="value">{{ form.crossDay ? "æ¯" : "å¦" }}</text></view> |
| | | <view class="field"><text>æ£é¤ç¨é¤æ¶é´</text><switch v-if="!readonly" :checked="form.mealDeduction" color="#1769d8" @change="form.mealDeduction=$event.detail.value" /><text v-else class="value">{{ form.mealDeduction ? "æ¯" : "å¦" }}</text></view> |
| | | <view class="field"><text>æ£é¤ç¨é¤æ¶é´</text><switch v-if="!readonly" :checked="form.mealDeduction" :color="primaryColor" @change="form.mealDeduction=$event.detail.value" /><text v-else class="value">{{ form.mealDeduction ? "æ¯" : "å¦" }}</text></view> |
| | | <view v-if="form.mealDeduction" class="field"><text>æ£é¤æ¶é¿</text><input v-model.number="form.mealDeductionHours" :disabled="readonly" type="digit" placeholder="åä½ï¼å°æ¶" /></view> |
| | | <view class="field"><text>å çæ¶é¿</text><text class="value">{{ form.duration ?? 0 }} å°æ¶</text></view> |
| | | <view class="field column"><text>å çåå <text class="required">*</text></text><textarea v-model="form.reason" :disabled="readonly" maxlength="500" placeholder="请è¾å
¥å çåå " /></view> |
| | |
| | | <script setup lang="ts"> |
| | | import { computed,ref } from "vue"; import { onPullDownRefresh,onShow } from "@dcloudio/uni-app"; |
| | | import { calculateSalary,confirmSalary,deleteSalaryCalculation,getSalaryCalculationPage,revokeSalary,type SalaryCalculation } from "../../../api/hrm"; import { useAuth } from "../../../stores/auth"; import { confirm,money,toast } from "../shared"; |
| | | const {hasPermission,state}=useAuth(); const rows=ref<SalaryCalculation[]>([]),period=ref(new Date().toISOString().slice(0,7)),loading=ref(false);const canQuery=computed(()=>hasPermission("hrm:salary-calculation:query")); |
| | | async function load(){if(!state.accessToken||!canQuery.value)return;loading.value=true;try{const d=await getSalaryCalculationPage(state.accessToken,{pageNo:1,pageSize:100,period:period.value});rows.value=d.list||[];}catch(e){toast(e instanceof Error?e.message:"å 载失败");}finally{loading.value=false;uni.stopPullDownRefresh();}} |
| | | async function calc(){if(!state.accessToken||!await confirm(`ç¡®è®¤æ ¸ç® ${period.value} èªé
¬ï¼`))return;try{await calculateSalary(state.accessToken,{period:period.value});toast("æ ¸ç®å®æ");await load();}catch(e){toast(e instanceof Error?e.message:"æ ¸ç®å¤±è´¥");}} |
| | | async function action(row:SalaryCalculation,type:"confirm"|"revoke"|"delete"){if(!state.accessToken||!row.id||!await confirm(`确认${type==='confirm'?'确认':type==='revoke'?'æ¤é确认':'å é¤'}该èªé
¬è®°å½ï¼`))return;try{if(type==='confirm')await confirmSalary(state.accessToken,[row.id]);else if(type==='revoke')await revokeSalary(state.accessToken,[row.id]);else await deleteSalaryCalculation(state.accessToken,row.id);toast("æä½æå");await load();}catch(e){toast(e instanceof Error?e.message:"æä½å¤±è´¥");}} |
| | | onShow(load);onPullDownRefresh(load); |
| | | </script><template><view class="page"><template v-if="canQuery"><view class="search"><input v-model="period" placeholder="èªé
¬å¨æ YYYY-MM" @confirm="load"/><text @click="load">æ¥è¯¢</text></view><view v-if="hasPermission('hrm:salary-calculation:calculate')" class="top-actions"><button @click="calc">æ§è¡èªé
¬æ ¸ç®</button></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.no||'--'}} · {{row.deptName||'--'}}</text></view><text :class="['tag',row.status===1?'tag-green':'tag-blue']">{{row.statusName|| (row.status===1?'已确认':'å¾
确认')}}</text></view><view class="grid"><text>åºæ¬å·¥èµï¼{{money(row.baseSalary)}}</text><text>绩æå·¥èµï¼{{money(row.performanceSalary)}}</text><text>å çå·¥èµï¼{{money(row.overtimePay)}}</text><text>ç¤¾ä¿æ£æ¬¾ï¼{{money(row.socialSecurityDeduction)}}</text><text>å
¬ç§¯éæ£æ¬¾ï¼{{money(row.housingFundDeduction)}}</text><text>个ç¨ï¼{{money(row.taxDeduction)}}</text><text>å®åå·¥èµï¼{{money(row.actualSalary)}}</text><text>åºå¤ï¼{{row.workDays??0}} 天</text></view><view class="actions"><button v-if="row.status===0&&hasPermission('hrm:salary-calculation:confirm')" @click="action(row,'confirm')">确认</button><button v-if="row.status===1&&hasPermission('hrm:salary-calculation:confirm')" @click="action(row,'revoke')">æ¤é确认</button><button v-if="row.status===0&&hasPermission('hrm:salary-calculation:delete')" class="danger" @click="action(row,'delete')">å é¤</button></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";.top-actions{display:flex;justify-content:flex-end;margin-bottom:18rpx}.top-actions button{margin:0;color:#1769d8;font-size:24rpx;background:#fff}</style> |
| | | import { computed, ref } from "vue"; |
| | | import { onPullDownRefresh, onReachBottom, onShow } from "@dcloudio/uni-app"; |
| | | import { calculateSalary, confirmSalary, deleteSalaryCalculation, getSalaryCalculationPage, revokeSalary, type SalaryCalculation } from "../../../api/hrm"; |
| | | import { useAuth } from "../../../stores/auth"; |
| | | import { confirm, money, toast } from "../shared"; |
| | | const { hasPermission, state } = useAuth(); |
| | | const rows = ref<SalaryCalculation[]>([]), period = ref(new Date().toISOString().slice(0, 7)), loading = ref(false), pageNo = ref(1), total = ref(0); |
| | | const pageSize = 15; |
| | | const canQuery = computed(() => hasPermission("hrm:salary-calculation:query")); |
| | | const hasMore = computed(() => rows.value.length < total.value); |
| | | async function load(reset = true) { |
| | | if (!state.accessToken || !canQuery.value || loading.value) return; |
| | | if (reset) { pageNo.value = 1; total.value = 0; } |
| | | loading.value = true; |
| | | try { |
| | | const data = await getSalaryCalculationPage(state.accessToken, { pageNo: pageNo.value, pageSize, period: period.value }); |
| | | rows.value = reset ? (data.list || []) : [...rows.value, ...(data.list || [])]; |
| | | total.value = Number(data.total || 0); |
| | | if (rows.value.length < total.value) pageNo.value += 1; |
| | | } catch (error) { toast(error instanceof Error ? error.message : "å 载失败"); } |
| | | finally { loading.value = false; uni.stopPullDownRefresh(); } |
| | | } |
| | | async function calc() { |
| | | if (!state.accessToken || !await confirm("ç¡®è®¤æ ¸ç® " + period.value + " èªé
¬ï¼")) return; |
| | | try { await calculateSalary(state.accessToken, { period: period.value }); toast("æ ¸ç®å®æ"); await load(true); } |
| | | catch (error) { toast(error instanceof Error ? error.message : "æ ¸ç®å¤±è´¥"); } |
| | | } |
| | | async function action(row: SalaryCalculation, type: "confirm" | "revoke" | "delete") { |
| | | const label = type === "confirm" ? "确认" : type === "revoke" ? "æ¤é确认" : "å é¤"; |
| | | if (!state.accessToken || !row.id || !await confirm("确认" + label + "该èªé
¬è®°å½ï¼")) return; |
| | | try { |
| | | if (type === "confirm") await confirmSalary(state.accessToken, [row.id]); |
| | | else if (type === "revoke") await revokeSalary(state.accessToken, [row.id]); |
| | | else await deleteSalaryCalculation(state.accessToken, row.id); |
| | | toast("æä½æå"); await load(true); |
| | | } catch (error) { toast(error instanceof Error ? error.message : "æä½å¤±è´¥"); } |
| | | } |
| | | onShow(() => load(true)); |
| | | onPullDownRefresh(() => load(true)); |
| | | onReachBottom(() => { if (hasMore.value) load(false); }); |
| | | </script><template><view class="page"><template v-if="canQuery"><view class="search"><input v-model="period" placeholder="èªé
¬å¨æ YYYY-MM" @confirm="load"/><text @click="load">æ¥è¯¢</text></view><view v-if="hasPermission('hrm:salary-calculation:calculate')" class="top-actions"><button @click="calc">æ§è¡èªé
¬æ ¸ç®</button></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.no||'--'}} · {{row.deptName||'--'}}</text></view><text :class="['tag',row.status===1?'tag-green':'tag-blue']">{{row.statusName|| (row.status===1?'已确认':'å¾
确认')}}</text></view><view class="grid"><text>åºæ¬å·¥èµï¼{{money(row.baseSalary)}}</text><text>绩æå·¥èµï¼{{money(row.performanceSalary)}}</text><text>å çå·¥èµï¼{{money(row.overtimePay)}}</text><text>ç¤¾ä¿æ£æ¬¾ï¼{{money(row.socialSecurityDeduction)}}</text><text>å
¬ç§¯éæ£æ¬¾ï¼{{money(row.housingFundDeduction)}}</text><text>个ç¨ï¼{{money(row.taxDeduction)}}</text><text>å®åå·¥èµï¼{{money(row.actualSalary)}}</text><text>åºå¤ï¼{{row.workDays??0}} 天</text></view><view class="actions"><button v-if="row.status===0&&hasPermission('hrm:salary-calculation:confirm')" @click="action(row,'confirm')">确认</button><button v-if="row.status===1&&hasPermission('hrm:salary-calculation:confirm')" @click="action(row,'revoke')">æ¤é确认</button><button v-if="row.status===0&&hasPermission('hrm:salary-calculation:delete')" class="danger" @click="action(row,'delete')">å é¤</button></view></view><view v-if="!rows.length" class="state">{{loading?'å è½½ä¸...':'ææ èªé
¬æ ¸ç®è®°å½'}}</view><view v-else class="state more">{{loading ? "å è½½ä¸..." : hasMore ? "䏿å è½½æ´å¤" : "æ²¡ææ´å¤äº"}}</view></template><view v-else class="state">ææ èªé
¬æ ¸ç®æ¥çæé</view></view></template><style scoped lang="scss">@import "../list.scss";.top-actions{display:flex;justify-content:flex-end;margin-bottom:18rpx}.top-actions button{margin:0;color:var(--color-primary, #1769d8);font-size:24rpx;background:#fff}</style> |
| | |
| | | <script setup lang="ts"> |
| | | import { computed, ref } from "vue"; import { onPullDownRefresh, onShow } from "@dcloudio/uni-app"; |
| | | import { computed, ref } from "vue"; |
| | | import { onPullDownRefresh, onReachBottom, onShow } from "@dcloudio/uni-app"; |
| | | import { generateSalaryPayment, getSalaryPaymentPage, paySalary, type SalaryPayment } from "../../../api/hrm"; |
| | | import { useAuth } from "../../../stores/auth"; import { confirm, dateTime, money, toast } from "../shared"; |
| | | const { hasPermission, state } = useAuth(); const rows = ref<SalaryPayment[]>([]); const period = ref(new Date().toISOString().slice(0, 7)); const loading = ref(false); const canQuery = computed(() => hasPermission("hrm:salary-payment:query")); |
| | | async function load() { if (!state.accessToken || !canQuery.value) return; loading.value = true; try { const data = await getSalaryPaymentPage(state.accessToken, { pageNo: 1, pageSize: 100, period: period.value }); rows.value = data.list || []; } catch (error) { toast(error instanceof Error ? error.message : "å 载失败"); } finally { loading.value = false; uni.stopPullDownRefresh(); } } |
| | | async function generate() { if (!state.accessToken || !await confirm(`ç¡®è®¤çæ ${period.value} èªèµåæ¾å°è´¦ï¼`)) return; try { await generateSalaryPayment(state.accessToken, period.value); toast("çææå"); await load(); } catch (error) { toast(error instanceof Error ? error.message : "çæå¤±è´¥"); } } |
| | | async function pay(row: SalaryPayment) { if (!state.accessToken || !row.id || !await confirm("ç¡®è®¤åæ¾è¯¥å¨æçèªèµï¼")) return; try { await paySalary(state.accessToken, row.id); toast("åæ¾æå"); await load(); } catch (error) { toast(error instanceof Error ? error.message : "åæ¾å¤±è´¥"); } } |
| | | onShow(load); onPullDownRefresh(load); |
| | | import { useAuth } from "../../../stores/auth"; |
| | | import { confirm, dateTime, money, toast } from "../shared"; |
| | | const { hasPermission, state } = useAuth(); |
| | | const rows = ref<SalaryPayment[]>([]), period = ref(new Date().toISOString().slice(0, 7)), loading = ref(false), pageNo = ref(1), total = ref(0); |
| | | const pageSize = 15; |
| | | const canQuery = computed(() => hasPermission("hrm:salary-payment:query")); |
| | | const hasMore = computed(() => rows.value.length < total.value); |
| | | async function load(reset = true) { |
| | | if (!state.accessToken || !canQuery.value || loading.value) return; |
| | | if (reset) { pageNo.value = 1; total.value = 0; } |
| | | loading.value = true; |
| | | try { |
| | | const data = await getSalaryPaymentPage(state.accessToken, { pageNo: pageNo.value, pageSize, period: period.value }); |
| | | rows.value = reset ? (data.list || []) : [...rows.value, ...(data.list || [])]; |
| | | total.value = Number(data.total || 0); |
| | | if (rows.value.length < total.value) pageNo.value += 1; |
| | | } catch (error) { toast(error instanceof Error ? error.message : "å 载失败"); } |
| | | finally { loading.value = false; uni.stopPullDownRefresh(); } |
| | | } |
| | | async function generate() { |
| | | if (!state.accessToken || !await confirm("ç¡®è®¤çæ " + period.value + " èªèµåæ¾å°è´¦ï¼")) return; |
| | | try { await generateSalaryPayment(state.accessToken, period.value); toast("çææå"); await load(true); } |
| | | catch (error) { toast(error instanceof Error ? error.message : "çæå¤±è´¥"); } |
| | | } |
| | | async function pay(row: SalaryPayment) { |
| | | if (!state.accessToken || !row.id || !await confirm("ç¡®è®¤åæ¾è¯¥å¨æçèªèµï¼")) return; |
| | | try { await paySalary(state.accessToken, row.id); toast("åæ¾æå"); await load(true); } |
| | | catch (error) { toast(error instanceof Error ? error.message : "åæ¾å¤±è´¥"); } |
| | | } |
| | | onShow(() => load(true)); |
| | | onPullDownRefresh(() => load(true)); |
| | | onReachBottom(() => { if (hasMore.value) load(false); }); |
| | | </script> |
| | | <template><view class="page"><template v-if="canQuery"><view class="search"><input v-model="period" placeholder="忾卿 YYYY-MM" @confirm="load" /><text @click="load">æ¥è¯¢</text></view><view v-if="hasPermission('hrm:salary-payment:generate')" class="top-actions"><button @click="generate">çæåæ¾å°è´¦</button></view><view v-for="row in rows" :key="row.id" class="card" @click="uni.navigateTo({ url: `/pages/hrm/salary-payment/detail?id=${row.id}` })"><view class="head"><view class="head-main"><text class="name">{{ row.no || "ææ åå·" }}</text><text class="sub">{{ row.period || "--" }}</text></view><text :class="['tag', row.status === 1 ? 'tag-green' : 'tag-orange']">{{ row.status === 1 ? "已忾" : "å¾
åæ¾" }}</text></view><view class="grid"><text>æ»äººæ°ï¼{{ row.totalCount ?? 0 }}</text><text>æ»éé¢ï¼{{ money(row.totalAmount) }}</text><text>åæ¾æ¶é´ï¼{{ dateTime(row.paymentTime) }}</text><text>夿³¨ï¼{{ row.remark || "--" }}</text></view><view class="actions" @click.stop><button @click="uni.navigateTo({ url: `/pages/hrm/salary-payment/detail?id=${row.id}` })">æ¥çæç»</button><button v-if="row.status === 0 && hasPermission('hrm:salary-payment:pay')" @click="pay(row)">åæ¾</button></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";.top-actions{display:flex;justify-content:flex-end;margin-bottom:18rpx}.top-actions button{margin:0;color:#1769d8;font-size:24rpx;background:#fff}</style> |
| | | <template><view class="page"><template v-if="canQuery"><view class="search"><input v-model="period" placeholder="忾卿 YYYY-MM" @confirm="load" /><text @click="load">æ¥è¯¢</text></view><view v-if="hasPermission('hrm:salary-payment:generate')" class="top-actions"><button @click="generate">çæåæ¾å°è´¦</button></view><view v-for="row in rows" :key="row.id" class="card" @click="uni.navigateTo({ url: `/pages/hrm/salary-payment/detail?id=${row.id}` })"><view class="head"><view class="head-main"><text class="name">{{ row.no || "ææ åå·" }}</text><text class="sub">{{ row.period || "--" }}</text></view><text :class="['tag', row.status === 1 ? 'tag-green' : 'tag-orange']">{{ row.status === 1 ? "已忾" : "å¾
åæ¾" }}</text></view><view class="grid"><text>æ»äººæ°ï¼{{ row.totalCount ?? 0 }}</text><text>æ»éé¢ï¼{{ money(row.totalAmount) }}</text><text>åæ¾æ¶é´ï¼{{ dateTime(row.paymentTime) }}</text><text>夿³¨ï¼{{ row.remark || "--" }}</text></view><view class="actions" @click.stop><button @click="uni.navigateTo({ url: `/pages/hrm/salary-payment/detail?id=${row.id}` })">æ¥çæç»</button><button v-if="row.status === 0 && hasPermission('hrm:salary-payment:pay')" @click="pay(row)">åæ¾</button></view></view><view v-if="!rows.length" class="state">{{ loading ? "å è½½ä¸..." : "ææ åæ¾å°è´¦" }}</view><view v-else class="state more">{{loading ? "å è½½ä¸..." : hasMore ? "䏿å è½½æ´å¤" : "æ²¡ææ´å¤äº"}}</view></template><view v-else class="state">ææ èªèµåæ¾æ¥çæé</view></view></template> |
| | | <style scoped lang="scss">@import "../list.scss";.top-actions{display:flex;justify-content:flex-end;margin-bottom:18rpx}.top-actions button{margin:0;color:var(--color-primary, #1769d8);font-size:24rpx;background:#fff}</style> |
| | |
| | | <script setup lang="ts"> |
| | | import HrmCrudPage, { type CrudConfig } from "../components/HrmCrudPage.vue"; |
| | | 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 }; |
| | | 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:"跨天"}], page:true, load:(t,k,p,s)=>getShiftPage(t,{pageNo:p,pageSize:s,name:k||undefined}), create:createShift, update:updateShift, remove:deleteShift }; |
| | | |
| | | </script><template><HrmCrudPage :config="config" /></template> |
| | |
| | | .page { |
| | | min-height: 100vh; |
| | | padding: 112rpx 48rpx 48rpx; |
| | | background: linear-gradient(180deg, #edf5ff 0, #f5f7fb 46%, #f5f7fb 100%); |
| | | background: linear-gradient(180deg, var(--color-primary-soft, #edf5ff) 0, #f5f7fb 46%, #f5f7fb 100%); |
| | | } |
| | | .brand { |
| | | text-align: center; |
| | |
| | | </template> |
| | | |
| | | <style lang="scss" scoped> |
| | | .page{min-height:100vh;padding:20rpx 20rpx 60rpx;box-sizing:border-box;background:#f3f6fb}.toolbar{display:flex;align-items:center;gap:12rpx;padding:16rpx 0}.toolbar text{flex:1;color:#20334c;font-size:30rpx;font-weight:600;text-align:center}.toolbar button{height:58rpx;min-width:92rpx;padding:0 16rpx;margin:0;color:#1769d8;font-size:24rpx;line-height:56rpx;background:#fff;border:0;border-radius:10rpx}.tabs{display:flex;gap:12rpx;padding:0 0 14rpx}.tabs text{padding:10rpx 22rpx;color:#53677f;font-size:25rpx;background:#fff;border-radius:999rpx}.tabs .active{color:#1769d8;font-weight:600;background:#eaf2ff}.selector{height:76rpx;margin-bottom:14rpx;padding:0 20rpx;background:#fff;border-radius:14rpx}.selector picker{height:100%}.picker{display:flex;height:100%;align-items:center;justify-content:space-between;color:#1e3049;font-size:26rpx}.picker text:first-child{min-width:0;flex:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.picker text:last-child{flex:none;color:#8092a7;font-size:36rpx}.week,.calendar{display:grid;grid-template-columns:repeat(7,1fr);gap:8rpx}.week text{height:52rpx;color:#66778c;font-size:24rpx;line-height:52rpx;text-align:center}.day{min-height:132rpx;padding:8rpx;box-sizing:border-box;background:#fff;border:1rpx solid #e8eef6;border-radius:12rpx}.day.muted{opacity:.38}.day.weekend .day-head>text:first-child{color:#c65050}.day-head{display:flex;align-items:center;justify-content:space-between}.day-head>text:first-child{color:#20334c;font-size:25rpx;font-weight:600}.badge{display:inline-flex;align-items:center;justify-content:center;width:32rpx;height:32rpx;font-size:19rpx;border-radius:50%}.badge.work{color:#1769d8;background:#edf5ff}.badge.holiday{color:#17865a;background:#eafaf2}.shift-list{display:flex;flex-direction:column;gap:4rpx;margin-top:8rpx}.shift{display:block;overflow:hidden;padding:3rpx 5rpx;color:#fff;font-size:18rpx;line-height:1.2;text-overflow:ellipsis;white-space:nowrap;border-radius:5rpx}.shift-day{background:#95d475}.shift-mid{background:#f0a020}.shift-night{background:#909399}.shift-info{background:#1769d8}.legend{display:flex;flex-wrap:wrap;gap:12rpx 22rpx;margin:24rpx 0 4rpx;padding:18rpx 20rpx;color:#66778c;font-size:23rpx;background:#fff;border-radius:14rpx}.legend-title{color:#33455d;font-weight:600}.legend-item{display:flex;align-items:center;gap:8rpx}.legend-dot{width:20rpx;height:20rpx;border-radius:4rpx}.day-dot{background:#95d475}.mid-dot{background:#f0a020}.night-dot{background:#909399}.weekend-dot{background:#f56c6c;opacity:.6}.legend-rest{display:inline-flex;align-items:center;justify-content:center;width:36rpx;height:30rpx;color:#17865a;font-size:20rpx;background:#eafaf2;border-radius:6rpx}.state{padding:38rpx;color:#8795a8;font-size:26rpx;text-align:center}.error{color:#c3654d} |
| | | .page{min-height:100vh;padding:20rpx 20rpx 60rpx;box-sizing:border-box;background:#f3f6fb}.toolbar{display:flex;align-items:center;gap:12rpx;padding:16rpx 0}.toolbar text{flex:1;color:#20334c;font-size:30rpx;font-weight:600;text-align:center}.toolbar button{height:58rpx;min-width:92rpx;padding:0 16rpx;margin:0;color:var(--color-primary, #1769d8);font-size:24rpx;line-height:56rpx;background:#fff;border:0;border-radius:10rpx}.tabs{display:flex;gap:12rpx;padding:0 0 14rpx}.tabs text{padding:10rpx 22rpx;color:#53677f;font-size:25rpx;background:#fff;border-radius:999rpx}.tabs .active{color:var(--color-primary, #1769d8);font-weight:600;background:#eaf2ff}.selector{height:76rpx;margin-bottom:14rpx;padding:0 20rpx;background:#fff;border-radius:14rpx}.selector picker{height:100%}.picker{display:flex;height:100%;align-items:center;justify-content:space-between;color:#1e3049;font-size:26rpx}.picker text:first-child{min-width:0;flex:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.picker text:last-child{flex:none;color:#8092a7;font-size:36rpx}.week,.calendar{display:grid;grid-template-columns:repeat(7,1fr);gap:8rpx}.week text{height:52rpx;color:#66778c;font-size:24rpx;line-height:52rpx;text-align:center}.day{min-height:132rpx;padding:8rpx;box-sizing:border-box;background:#fff;border:1rpx solid #e8eef6;border-radius:12rpx}.day.muted{opacity:.38}.day.weekend .day-head>text:first-child{color:#c65050}.day-head{display:flex;align-items:center;justify-content:space-between}.day-head>text:first-child{color:#20334c;font-size:25rpx;font-weight:600}.badge{display:inline-flex;align-items:center;justify-content:center;width:32rpx;height:32rpx;font-size:19rpx;border-radius:50%}.badge.work{color:var(--color-primary, #1769d8);background:var(--color-primary-soft, #edf5ff)}.badge.holiday{color:#17865a;background:#eafaf2}.shift-list{display:flex;flex-direction:column;gap:4rpx;margin-top:8rpx}.shift{display:block;overflow:hidden;padding:3rpx 5rpx;color:#fff;font-size:18rpx;line-height:1.2;text-overflow:ellipsis;white-space:nowrap;border-radius:5rpx}.shift-day{background:#95d475}.shift-mid{background:#f0a020}.shift-night{background:#909399}.shift-info{background:var(--color-primary, #1769d8)}.legend{display:flex;flex-wrap:wrap;gap:12rpx 22rpx;margin:24rpx 0 4rpx;padding:18rpx 20rpx;color:#66778c;font-size:23rpx;background:#fff;border-radius:14rpx}.legend-title{color:#33455d;font-weight:600}.legend-item{display:flex;align-items:center;gap:8rpx}.legend-dot{width:20rpx;height:20rpx;border-radius:4rpx}.day-dot{background:#95d475}.mid-dot{background:#f0a020}.night-dot{background:#909399}.weekend-dot{background:#f56c6c;opacity:.6}.legend-rest{display:inline-flex;align-items:center;justify-content:center;width:36rpx;height:30rpx;color:#17865a;font-size:20rpx;background:#eafaf2;border-radius:6rpx}.state{padding:38rpx;color:#8795a8;font-size:26rpx;text-align:center}.error{color:#c3654d} |
| | | </style> |
| | |
| | | </template> |
| | | |
| | | <style lang="scss" scoped> |
| | | .page{min-height:100vh;padding:20rpx 20rpx 60rpx;box-sizing:border-box;background:#f3f6fb}.toolbar{display:flex;align-items:center;gap:12rpx;padding:16rpx 0}.toolbar text{flex:1;color:#20334c;font-size:30rpx;font-weight:600;text-align:center}.toolbar button{height:58rpx;min-width:92rpx;padding:0 16rpx;margin:0;color:#1769d8;font-size:24rpx;line-height:56rpx;background:#fff;border-radius:10rpx}.week,.calendar{display:grid;grid-template-columns:repeat(7,1fr);gap:8rpx}.week text{height:52rpx;color:#66778c;font-size:24rpx;line-height:52rpx;text-align:center}.day{min-height:110rpx;padding:10rpx 8rpx;box-sizing:border-box;background:#fff;border:1rpx solid #e8eef6;border-radius:12rpx}.day.muted{opacity:.38}.day.weekend .day-head>text:first-child{color:#c65050}.day-head{display:flex;align-items:center;justify-content:space-between}.day-head>text:first-child{color:#20334c;font-size:27rpx;font-weight:600}.badge{display:inline-flex;align-items:center;justify-content:center;width:34rpx;height:34rpx;font-size:20rpx;border-radius:50%}.badge.work{color:#1769d8;background:#edf5ff}.badge.holiday{color:#17865a;background:#eafaf2}.day-type{display:block;margin-top:14rpx;color:#8795a8;font-size:20rpx;text-align:center}.state{padding:38rpx;color:#8795a8;font-size:26rpx;text-align:center}.error{color:#c3654d}.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:96rpx;padding:0 24rpx;gap:20rpx;border-bottom:1rpx solid #eef1f5}.field>text:first-child{width:180rpx;flex:none;color:#33455d;font-size:27rpx}.picker,.value{min-width:0;flex:1;color:#1e3049;font-size:27rpx;text-align:right}.picker{display:flex;width:100%;align-items:center;justify-content:space-between;gap:12rpx;color:#65758a}.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}.required{color:#e23b3b}.column{align-items:flex-start;flex-direction:column;padding:20rpx 24rpx}.column>text:first-child{width:auto}.column textarea{width:100%;height:140rpx;font-size:27rpx}.modal-actions{display:flex;gap:18rpx;padding:24rpx}.modal-actions button,.toolbar button{border:0}.modal-actions button{flex:1;margin:0;color:#1769d8;background:#edf5ff;border-radius:12rpx}.modal-actions .primary{color:#fff;background:#1769d8} |
| | | .page{min-height:100vh;padding:20rpx 20rpx 60rpx;box-sizing:border-box;background:#f3f6fb}.toolbar{display:flex;align-items:center;gap:12rpx;padding:16rpx 0}.toolbar text{flex:1;color:#20334c;font-size:30rpx;font-weight:600;text-align:center}.toolbar button{height:58rpx;min-width:92rpx;padding:0 16rpx;margin:0;color:var(--color-primary, #1769d8);font-size:24rpx;line-height:56rpx;background:#fff;border-radius:10rpx}.week,.calendar{display:grid;grid-template-columns:repeat(7,1fr);gap:8rpx}.week text{height:52rpx;color:#66778c;font-size:24rpx;line-height:52rpx;text-align:center}.day{min-height:110rpx;padding:10rpx 8rpx;box-sizing:border-box;background:#fff;border:1rpx solid #e8eef6;border-radius:12rpx}.day.muted{opacity:.38}.day.weekend .day-head>text:first-child{color:#c65050}.day-head{display:flex;align-items:center;justify-content:space-between}.day-head>text:first-child{color:#20334c;font-size:27rpx;font-weight:600}.badge{display:inline-flex;align-items:center;justify-content:center;width:34rpx;height:34rpx;font-size:20rpx;border-radius:50%}.badge.work{color:var(--color-primary, #1769d8);background:var(--color-primary-soft, #edf5ff)}.badge.holiday{color:#17865a;background:#eafaf2}.day-type{display:block;margin-top:14rpx;color:#8795a8;font-size:20rpx;text-align:center}.state{padding:38rpx;color:#8795a8;font-size:26rpx;text-align:center}.error{color:#c3654d}.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:96rpx;padding:0 24rpx;gap:20rpx;border-bottom:1rpx solid #eef1f5}.field>text:first-child{width:180rpx;flex:none;color:#33455d;font-size:27rpx}.picker,.value{min-width:0;flex:1;color:#1e3049;font-size:27rpx;text-align:right}.picker{display:flex;width:100%;align-items:center;justify-content:space-between;gap:12rpx;color:#65758a}.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}.required{color:#e23b3b}.column{align-items:flex-start;flex-direction:column;padding:20rpx 24rpx}.column>text:first-child{width:auto}.column textarea{width:100%;height:140rpx;font-size:27rpx}.modal-actions{display:flex;gap:18rpx;padding:24rpx}.modal-actions button,.toolbar button{border:0}.modal-actions button{flex:1;margin:0;color:var(--color-primary, #1769d8);background:var(--color-primary-soft, #edf5ff);border-radius:12rpx}.modal-actions .primary{color:#fff;background:var(--color-primary, #1769d8)} |
| | | </style> |
| | |
| | | </template> |
| | | |
| | | <style lang="scss" scoped> |
| | | .page{min-height:100vh;padding:24rpx 30rpx 70rpx;box-sizing:border-box;background:#f6f7f9}.form-card{overflow:hidden;background:#fff;border-radius:16rpx}.tabs{display:flex;gap:12rpx;padding:18rpx 22rpx;border-bottom:1rpx solid #eef1f5}.tabs text{padding:10rpx 20rpx;color:#53677f;font-size:25rpx;background:#f3f6fb;border-radius:999rpx}.tabs .active{color:#1769d8;font-weight:600;background:#eaf2ff}.field{display:flex;align-items:center;min-height:96rpx;padding:0 24rpx;gap:20rpx;border-bottom:1rpx solid #eef1f5}.field>text:first-child{width:200rpx;flex:none;color:#33455d;font-size:27rpx}.field input,.field picker,.picker,.value{min-width:0;flex:1;color:#1e3049;font-size:27rpx}.field input,.value{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:36rpx;text-align:right}.required{color:#e23b3b}.code-field button,.section-head button,.sub-row button{flex:none;min-width:100rpx;padding:0 14rpx;margin:0;color:#1769d8;font-size:24rpx;line-height:56rpx;background:#fff;border:1rpx solid #1769d8;border-radius:8rpx}.code-field button::after,.save::after,.modal-actions button::after,.section-head button::after,.sub-row button::after{border:0}.column{align-items:flex-start;flex-direction:column;padding:20rpx 24rpx}.column>text:first-child{width:auto}.column textarea{width:100%;height:140rpx;font-size:27rpx}.save{margin-top:32rpx;color:#fff;font-size:30rpx;background:#1769d8;border-radius:12rpx}.state{padding:38rpx;color:#8795a8;font-size:26rpx;text-align:center}.compact{padding:28rpx}.section-head{display:flex;align-items:center;justify-content:space-between;padding:22rpx 24rpx;border-bottom:1rpx solid #eef1f5}.section-head>text{color:#1e3049;font-size:30rpx;font-weight:600}.sub-list{padding:18rpx}.sub-row{display:flex;align-items:flex-start;justify-content:space-between;gap:16rpx;padding:18rpx;margin-bottom:14rpx;background:#f8fbff;border:1rpx solid #e4edf8;border-radius:12rpx}.sub-row.selected{border-color:#1769d8;background:#eef5ff}.sub-row>view{display:flex;min-width:0;flex:1;flex-direction:column;gap:7rpx;color:#66778c;font-size:23rpx}.sub-title{color:#20334c;font-size:27rpx;font-weight:600}.sub-actions{display:flex;gap:10rpx;flex:none}.sub-row .danger{color:#c65050;border-color:#e3a0a0}.member-box{margin:0 18rpx 18rpx;padding:18rpx;background:#f8fbff;border:1rpx solid #e4edf8;border-radius:12rpx}.member-title{color:#20334c;font-size:27rpx;font-weight:600}.member-list{display:flex;flex-direction:column;gap:8rpx;padding-top:14rpx;color:#66778c;font-size:24rpx}.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}.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} |
| | | .confirm{margin-top:24rpx;color:#fff;font-size:30rpx;background:#18a058;border-radius:12rpx}.confirm::after{border:0}.section-head button.disabled{color:#8a99ad;background:#f4f6f9;border-color:#d9e0ea}.limit-tip{margin:16rpx 18rpx 0;padding:14rpx 18rpx;color:#8a5a00;font-size:23rpx;line-height:1.5;background:#fff7e6;border:1rpx solid #f2d7a0;border-radius:10rpx}.select-list{padding:18rpx}.select-row{display:flex;align-items:flex-start;justify-content:space-between;gap:16rpx;padding:18rpx;margin-bottom:14rpx;background:#f8fbff;border:1rpx solid #e4edf8;border-radius:12rpx}.select-row.checked{border-color:#1769d8;background:#eef5ff}.select-row.disabled{opacity:.58}.select-row>view{display:flex;min-width:0;flex:1;flex-direction:column;gap:7rpx;color:#66778c;font-size:23rpx}.check{flex:none;color:#1769d8;font-size:24rpx} |
| | | .page{min-height:100vh;padding:24rpx 30rpx 70rpx;box-sizing:border-box;background:#f6f7f9}.form-card{overflow:hidden;background:#fff;border-radius:16rpx}.tabs{display:flex;gap:12rpx;padding:18rpx 22rpx;border-bottom:1rpx solid #eef1f5}.tabs text{padding:10rpx 20rpx;color:#53677f;font-size:25rpx;background:#f3f6fb;border-radius:999rpx}.tabs .active{color:var(--color-primary, #1769d8);font-weight:600;background:#eaf2ff}.field{display:flex;align-items:center;min-height:96rpx;padding:0 24rpx;gap:20rpx;border-bottom:1rpx solid #eef1f5}.field>text:first-child{width:200rpx;flex:none;color:#33455d;font-size:27rpx}.field input,.field picker,.picker,.value{min-width:0;flex:1;color:#1e3049;font-size:27rpx}.field input,.value{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:36rpx;text-align:right}.required{color:#e23b3b}.code-field button,.section-head button,.sub-row button{flex:none;min-width:100rpx;padding:0 14rpx;margin:0;color:var(--color-primary, #1769d8);font-size:24rpx;line-height:56rpx;background:#fff;border:1rpx solid var(--color-primary, #1769d8);border-radius:8rpx}.code-field button::after,.save::after,.modal-actions button::after,.section-head button::after,.sub-row button::after{border:0}.column{align-items:flex-start;flex-direction:column;padding:20rpx 24rpx}.column>text:first-child{width:auto}.column textarea{width:100%;height:140rpx;font-size:27rpx}.save{margin-top:32rpx;color:#fff;font-size:30rpx;background:var(--color-primary, #1769d8);border-radius:12rpx}.state{padding:38rpx;color:#8795a8;font-size:26rpx;text-align:center}.compact{padding:28rpx}.section-head{display:flex;align-items:center;justify-content:space-between;padding:22rpx 24rpx;border-bottom:1rpx solid #eef1f5}.section-head>text{color:#1e3049;font-size:30rpx;font-weight:600}.sub-list{padding:18rpx}.sub-row{display:flex;align-items:flex-start;justify-content:space-between;gap:16rpx;padding:18rpx;margin-bottom:14rpx;background:#f8fbff;border:1rpx solid #e4edf8;border-radius:12rpx}.sub-row.selected{border-color:var(--color-primary, #1769d8);background:var(--color-primary-soft, #eef5ff)}.sub-row>view{display:flex;min-width:0;flex:1;flex-direction:column;gap:7rpx;color:#66778c;font-size:23rpx}.sub-title{color:#20334c;font-size:27rpx;font-weight:600}.sub-actions{display:flex;gap:10rpx;flex:none}.sub-row .danger{color:#c65050;border-color:#e3a0a0}.member-box{margin:0 18rpx 18rpx;padding:18rpx;background:#f8fbff;border:1rpx solid #e4edf8;border-radius:12rpx}.member-title{color:#20334c;font-size:27rpx;font-weight:600}.member-list{display:flex;flex-direction:column;gap:8rpx;padding-top:14rpx;color:#66778c;font-size:24rpx}.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}.modal-actions{display:flex;gap:18rpx;padding:24rpx}.modal-actions button{flex:1;margin:0;color:var(--color-primary, #1769d8);background:var(--color-primary-soft, #edf5ff);border-radius:12rpx}.modal-actions .primary{color:#fff;background:var(--color-primary, #1769d8)} |
| | | .confirm{margin-top:24rpx;color:#fff;font-size:30rpx;background:#18a058;border-radius:12rpx}.confirm::after{border:0}.section-head button.disabled{color:#8a99ad;background:#f4f6f9;border-color:#d9e0ea}.limit-tip{margin:16rpx 18rpx 0;padding:14rpx 18rpx;color:#8a5a00;font-size:23rpx;line-height:1.5;background:#fff7e6;border:1rpx solid #f2d7a0;border-radius:10rpx}.select-list{padding:18rpx}.select-row{display:flex;align-items:flex-start;justify-content:space-between;gap:16rpx;padding:18rpx;margin-bottom:14rpx;background:#f8fbff;border:1rpx solid #e4edf8;border-radius:12rpx}.select-row.checked{border-color:var(--color-primary, #1769d8);background:var(--color-primary-soft, #eef5ff)}.select-row.disabled{opacity:.58}.select-row>view{display:flex;min-width:0;flex:1;flex-direction:column;gap:7rpx;color:#66778c;font-size:23rpx}.check{flex:none;color:var(--color-primary, #1769d8);font-size: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: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} |
| | | .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:var(--color-primary, #1769d8);font-size:24rpx}.content{height:0;flex:1;padding-bottom: 132rpx;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:var(--color-primary, #1769d8);font-size:22rpx;background:var(--color-primary-soft, #edf5ff);border:1rpx solid var(--color-primary-border, #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:var(--color-primary, #1769d8);font-size:22rpx;line-height:48rpx;background:var(--color-primary-soft, #f5f8ff);border:1rpx solid var(--color-primary-border, #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: 104rpx; height: 104rpx; min-height: 104rpx;padding:0;margin:0;background:var(--color-primary, #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{min-height:100vh;padding:24rpx 30rpx 70rpx;box-sizing:border-box;background:#f6f7f9}.form-card{overflow:hidden;background:#fff;border-radius:16rpx}.tabs{display:flex;gap:12rpx;padding:18rpx 22rpx;border-bottom:1rpx solid #eef1f5}.tabs text{padding:10rpx 20rpx;color:#53677f;font-size:25rpx;background:#f3f6fb;border-radius:999rpx}.tabs .active{color:#1769d8;font-weight:600;background:#eaf2ff}.field{display:flex;align-items:center;min-height:96rpx;padding:0 24rpx;gap:20rpx;border-bottom:1rpx solid #eef1f5}.field>text:first-child{width:200rpx;flex:none;color:#33455d;font-size:27rpx}.field input,.field picker,.picker,.value{min-width:0;flex:1;color:#1e3049;font-size:27rpx}.field input,.value{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:36rpx;text-align:right}.required{color:#e23b3b}.code-field button,.section-head button,.sub-row button{flex:none;min-width:100rpx;padding:0 14rpx;margin:0;color:#1769d8;font-size:24rpx;line-height:56rpx;background:#fff;border:1rpx solid #1769d8;border-radius:8rpx}.code-field button::after,.save::after,.modal-actions button::after,.section-head button::after,.sub-row button::after{border:0}.column{align-items:flex-start;flex-direction:column;padding:20rpx 24rpx}.column>text:first-child{width:auto}.column textarea{width:100%;height:140rpx;font-size:27rpx}.save{margin-top:32rpx;color:#fff;font-size:30rpx;background:#1769d8;border-radius:12rpx}.state{padding:38rpx;color:#8795a8;font-size:26rpx;text-align:center}.compact{padding:28rpx}.section-head{display:flex;align-items:center;justify-content:space-between;padding:22rpx 24rpx;border-bottom:1rpx solid #eef1f5}.section-head>text{color:#1e3049;font-size:30rpx;font-weight:600}.sub-list{padding:18rpx}.sub-row{display:flex;align-items:flex-start;justify-content:space-between;gap:16rpx;padding:18rpx;margin-bottom:14rpx;background:#f8fbff;border:1rpx solid #e4edf8;border-radius:12rpx}.sub-row>view{display:flex;min-width:0;flex:1;flex-direction:column;gap:7rpx;color:#66778c;font-size:23rpx}.sub-title{color:#20334c;font-size:27rpx;font-weight:600}.sub-row .danger{color:#c65050;border-color:#e3a0a0}.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}.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} |
| | | .page{min-height:100vh;padding:24rpx 30rpx 70rpx;box-sizing:border-box;background:#f6f7f9}.form-card{overflow:hidden;background:#fff;border-radius:16rpx}.tabs{display:flex;gap:12rpx;padding:18rpx 22rpx;border-bottom:1rpx solid #eef1f5}.tabs text{padding:10rpx 20rpx;color:#53677f;font-size:25rpx;background:#f3f6fb;border-radius:999rpx}.tabs .active{color:var(--color-primary, #1769d8);font-weight:600;background:#eaf2ff}.field{display:flex;align-items:center;min-height:96rpx;padding:0 24rpx;gap:20rpx;border-bottom:1rpx solid #eef1f5}.field>text:first-child{width:200rpx;flex:none;color:#33455d;font-size:27rpx}.field input,.field picker,.picker,.value{min-width:0;flex:1;color:#1e3049;font-size:27rpx}.field input,.value{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:36rpx;text-align:right}.required{color:#e23b3b}.code-field button,.section-head button,.sub-row button{flex:none;min-width:100rpx;padding:0 14rpx;margin:0;color:var(--color-primary, #1769d8);font-size:24rpx;line-height:56rpx;background:#fff;border:1rpx solid var(--color-primary, #1769d8);border-radius:8rpx}.code-field button::after,.save::after,.modal-actions button::after,.section-head button::after,.sub-row button::after{border:0}.column{align-items:flex-start;flex-direction:column;padding:20rpx 24rpx}.column>text:first-child{width:auto}.column textarea{width:100%;height:140rpx;font-size:27rpx}.save{margin-top:32rpx;color:#fff;font-size:30rpx;background:var(--color-primary, #1769d8);border-radius:12rpx}.state{padding:38rpx;color:#8795a8;font-size:26rpx;text-align:center}.compact{padding:28rpx}.section-head{display:flex;align-items:center;justify-content:space-between;padding:22rpx 24rpx;border-bottom:1rpx solid #eef1f5}.section-head>text{color:#1e3049;font-size:30rpx;font-weight:600}.sub-list{padding:18rpx}.sub-row{display:flex;align-items:flex-start;justify-content:space-between;gap:16rpx;padding:18rpx;margin-bottom:14rpx;background:#f8fbff;border:1rpx solid #e4edf8;border-radius:12rpx}.sub-row>view{display:flex;min-width:0;flex:1;flex-direction:column;gap:7rpx;color:#66778c;font-size:23rpx}.sub-title{color:#20334c;font-size:27rpx;font-weight:600}.sub-row .danger{color:#c65050;border-color:#e3a0a0}.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}.modal-actions{display:flex;gap:18rpx;padding:24rpx}.modal-actions button{flex:1;margin:0;color:var(--color-primary, #1769d8);background:var(--color-primary-soft, #edf5ff);border-radius:12rpx}.modal-actions .primary{color:#fff;background:var(--color-primary, #1769d8)} |
| | | </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{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} |
| | | .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:var(--color-primary, #1769d8);font-size:24rpx}.content{height:0;flex:1;padding-bottom: 132rpx;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:var(--color-primary, #1769d8);background:var(--color-primary-soft, #edf5ff);border:1rpx solid var(--color-primary-border, #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:var(--color-primary, #1769d8);font-size:22rpx;line-height:48rpx;background:var(--color-primary-soft, #f5f8ff);border:1rpx solid var(--color-primary-border, #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: 104rpx; height: 104rpx; min-height: 104rpx;padding:0;margin:0;background:var(--color-primary, #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{min-height:100vh;padding:24rpx 30rpx 70rpx;background:#f6f7f9}.form-card,.section-card{overflow:hidden;background:#fff;border-radius:16rpx}.section-card{margin-top:24rpx}.field{display:flex;align-items:center;min-height:96rpx;padding:0 24rpx;gap:20rpx;border-bottom:1rpx solid #eef1f5}.field>text:first-child{width:190rpx;flex:none;color:#33455d;font-size:27rpx}.field input,.field picker,.picker,.value{min-width:0;flex:1;color:#1e3049;font-size:27rpx}.picker{display:flex;align-items:center;justify-content:space-between;color:#65758a}.picker text:first-child,.value{overflow:hidden;text-align:right;text-overflow:ellipsis;white-space:nowrap}.picker text:last-child{margin-left:16rpx;color:#8092a7;font-size:36rpx}.code-field button,.section-head button,.line button{flex:none;min-width:128rpx;padding:0 16rpx;margin:0;color:#1769d8;font-size:24rpx;line-height:54rpx;background:#fff;border:1rpx solid #1769d8;border-radius:8rpx}.code-field button::after,.section-head button::after,.line button::after,.save::after{border:0}.column{align-items:flex-start;flex-direction:column;padding:20rpx 24rpx}.column>text:first-child{width:auto}.column textarea{width:100%;height:130rpx;font-size:27rpx}.save{margin-top:32rpx;color:#fff;font-size:30rpx;background:#1769d8;border-radius:12rpx}.section-head{display:flex;align-items:center;justify-content:space-between;height:86rpx;padding:0 24rpx;border-bottom:1rpx solid #edf1f6}.section-head>text{color:#20334c;font-size:29rpx;font-weight:600}.line{display:flex;flex-direction:column;gap:8rpx;padding:20rpx 24rpx;border-bottom:1rpx solid #edf1f6}.line view{display:flex;justify-content:space-between;gap:16rpx}.line view text:first-child{font-size:27rpx;font-weight:600;color:#20334c}.line view text:last-child,.line>text{color:#78879b;font-size:23rpx}.line button{align-self:flex-end;color:#c65050;border-color:#e3a0a0}.state{padding:38rpx;color:#8795a8;font-size:26rpx;text-align:center}.compact{padding:24rpx} |
| | | .page{min-height:100vh;padding:24rpx 30rpx 70rpx;background:#f6f7f9}.form-card,.section-card{overflow:hidden;background:#fff;border-radius:16rpx}.section-card{margin-top:24rpx}.field{display:flex;align-items:center;min-height:96rpx;padding:0 24rpx;gap:20rpx;border-bottom:1rpx solid #eef1f5}.field>text:first-child{width:190rpx;flex:none;color:#33455d;font-size:27rpx}.field input,.field picker,.picker,.value{min-width:0;flex:1;color:#1e3049;font-size:27rpx}.picker{display:flex;align-items:center;justify-content:space-between;color:#65758a}.picker text:first-child,.value{overflow:hidden;text-align:right;text-overflow:ellipsis;white-space:nowrap}.picker text:last-child{margin-left:16rpx;color:#8092a7;font-size:36rpx}.code-field button,.section-head button,.line button{flex:none;min-width:128rpx;padding:0 16rpx;margin:0;color:var(--color-primary, #1769d8);font-size:24rpx;line-height:54rpx;background:#fff;border:1rpx solid var(--color-primary, #1769d8);border-radius:8rpx}.code-field button::after,.section-head button::after,.line button::after,.save::after{border:0}.column{align-items:flex-start;flex-direction:column;padding:20rpx 24rpx}.column>text:first-child{width:auto}.column textarea{width:100%;height:130rpx;font-size:27rpx}.save{margin-top:32rpx;color:#fff;font-size:30rpx;background:var(--color-primary, #1769d8);border-radius:12rpx}.section-head{display:flex;align-items:center;justify-content:space-between;height:86rpx;padding:0 24rpx;border-bottom:1rpx solid #edf1f6}.section-head>text{color:#20334c;font-size:29rpx;font-weight:600}.line{display:flex;flex-direction:column;gap:8rpx;padding:20rpx 24rpx;border-bottom:1rpx solid #edf1f6}.line view{display:flex;justify-content:space-between;gap:16rpx}.line view text:first-child{font-size:27rpx;font-weight:600;color:#20334c}.line view text:last-child,.line>text{color:#78879b;font-size:23rpx}.line button{align-self:flex-end;color:#c65050;border-color:#e3a0a0}.state{padding:38rpx;color:#8795a8;font-size:26rpx;text-align:center}.compact{padding: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;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} |
| | | .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:var(--color-primary, #1769d8);font-size:24rpx}.content{height:0;flex:1;padding-bottom: 132rpx;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:var(--color-primary, #1769d8);background:var(--color-primary-soft, #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:var(--color-primary, #1769d8);font-size:22rpx;line-height:48rpx;background:var(--color-primary-soft, #f5f8ff);border:1rpx solid var(--color-primary-border, #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: 104rpx; height: 104rpx; min-height: 104rpx;padding:0;margin:0;background:var(--color-primary, #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"><view class="form-card"><MachineryScanPicker :model-value="form.machineryId" :machineries="machineries" :current="{id:form.machineryId,code:form.machineryCode,name:form.machineryName,brand:form.machineryBrand,specification:form.machinerySpecification}" :disabled="readonly" @select="selectMachinery" /><view class="field"><text>ç¹æ£è®¡å</text><picker v-if="!readonly" :range="plans" range-key="name" @change="form.planId=plans[$event.detail.value].id"><view class="picker">{{planName()}}<text>âº</text></view></picker><text v-else class="value">{{form.planName||'--'}}</text></view><view class="field"><text>ç¹æ£äºº</text><picker v-if="!readonly" :range="users" range-key="nickname" @change="form.userId=users[$event.detail.value].id"><view class="picker">{{selectedUserName()}}<text>âº</text></view></picker><text v-else class="value">{{form.nickname||'--'}}</text></view><view class="field"><text>ç¹æ£æ¶é´ <text class="required">*</text></text><picker v-if="!readonly" mode="date" :value="form.checkTime?.slice(0,10)" @change="form.checkTime=$event.detail.value+' 00:00:00'"><view class="picker">{{dateText(form.checkTime).replace('--','è¯·éæ©ç¹æ£æ¶é´')}}<text>âº</text></view></picker><text v-else class="value">{{dateText(form.checkTime)}}</text></view><view v-if="id" class="field"><text>ç¶æ</text><text class="value">{{dictLabel(dicts,'mes_dv_check_record_status',form.status)}}</text></view><view class="field column"><text>夿³¨</text><textarea v-model="form.remark" :disabled="readonly" placeholder="请è¾å
¥å¤æ³¨" ></textarea></view></view><button v-if="canSave" class="save" :loading="saving" :disabled="saving" @click="save">ä¿å</button><view v-if="id" class="section-card"><view class="section-head"><text>æç»å表</text><button v-if="!readonly" @click="openLine()">æ·»å æç»</button></view><view v-for="item in lines" :key="item.id" class="line"><view><text>{{item.subjectName||'项ç®'}}</text><text>{{dictLabel(dicts,'mes_dv_check_result',item.checkStatus)}}</text></view><text>项ç®å
容ï¼{{item.subjectContent||'--'}}</text><text>æ£æ¥æ åï¼{{item.subjectStandard||'--'}}</text><text>å¼å¸¸æè¿°ï¼{{item.checkResult||'--'}}</text><view v-if="!readonly" class="line-actions"><button @click="openLine(item)">ç¼è¾</button><button @click="removeLine(item)">å é¤</button></view></view><view v-if="!lines.length" class="state compact">ææ æç»</view></view><button v-if="readonly&&form.status===10&&hasPermission('mes:dv-check-record:update')" class="save" @click="mode='edit'">ç¼è¾</button><view v-if="lineOpen" class="mask" @click="lineOpen=false"><view class="selector" @click.stop><view class="selector-head"><text>{{lineEditing?'ä¿®æ¹æç»':'æ·»å æç»'}}</text><text @click="lineOpen=false">å
³é</text></view><view class="field"><text>é¡¹ç® <text class="required">*</text></text><picker :range="subjects" range-key="name" @change="line.subjectId=subjects[$event.detail.value].id"><view class="picker">{{subjectName(line.subjectId)}}<text>âº</text></view></picker></view><view class="field"><text>ç»æ <text class="required">*</text></text><picker :range="checkResults" range-key="label" @change="line.checkStatus=Number(checkResults[$event.detail.value].value)"><view class="picker">{{dictLabel(dicts,'mes_dv_check_result',line.checkStatus,'è¯·éæ©ç»æ')}}<text>âº</text></view></picker></view><view class="field column"><text>å¼å¸¸æè¿°</text><textarea v-model="line.checkResult" placeholder="请è¾å
¥å¼å¸¸æè¿°" ></textarea></view><view class="field column"><text>夿³¨</text><textarea v-model="line.remark" placeholder="请è¾å
¥å¤æ³¨" ></textarea></view><button class="save in-mask" @click="saveLine">ä¿åæç»</button></view></view></view></template> |
| | | <style lang="scss" scoped> |
| | | .page{min-height:100vh;padding:24rpx 30rpx 70rpx;background:#f6f7f9}.form-card,.section-card{overflow:hidden;background:#fff;border-radius:16rpx}.section-card{margin-top:24rpx}.field{display:flex;align-items:center;min-height:96rpx;padding:0 24rpx;gap:20rpx;border-bottom:1rpx solid #eef1f5}.field>text:first-child{width:190rpx;flex:none;color:#33455d;font-size:27rpx}.field input,.field picker,.picker,.value{min-width:0;flex:1;color:#1e3049;font-size:27rpx}.picker{display:flex;align-items:center;justify-content:space-between;color:#65758a}.picker text:first-child,.value{overflow:hidden;text-align:right;text-overflow:ellipsis;white-space:nowrap}.picker text:last-child{margin-left:16rpx;color:#8092a7;font-size:36rpx}.column{align-items:flex-start;flex-direction:column;padding:20rpx 24rpx}.column>text:first-child{width:auto}.column textarea{width:100%;height:120rpx;font-size:27rpx}.save{margin-top:32rpx;color:#fff;font-size:30rpx;background:#1769d8;border-radius:12rpx}.save::after,.section-head button::after,.line button::after{border:0}.section-head{display:flex;align-items:center;justify-content:space-between;height:86rpx;padding:0 24rpx;border-bottom:1rpx solid #edf1f6}.section-head>text{font-size:29rpx;font-weight:600;color:#20334c}.section-head button,.line button{min-height:50rpx;padding:0 16rpx;margin:0;color:#1769d8;font-size:23rpx;line-height:48rpx;background:#f5f8ff;border:1rpx solid #8ab3ee;border-radius:8rpx}.line{display:flex;flex-direction:column;gap:8rpx;padding:20rpx 24rpx;border-bottom:1rpx solid #edf1f6}.line view{display:flex;justify-content:space-between;gap:16rpx}.line text{font-size:23rpx;color:#78879b}.line view text:first-child{font-size:27rpx;font-weight:600;color:#20334c}.line-actions{justify-content:flex-end!important}.state{padding:38rpx;color:#8795a8;font-size:26rpx;text-align:center}.compact{padding:24rpx}.mask{position:fixed;z-index:99;top:0;right:0;bottom:0;left:0;display:flex;align-items:flex-end;background:rgba(18,29,43,.42)}.selector{width:100%;max-height:78vh;overflow:auto;background:#fff;border-radius:24rpx 24rpx 0 0}.selector-head{display:flex;align-items:center;justify-content:space-between;height:92rpx;padding:0 30rpx;border-bottom:1rpx solid #edf1f6}.selector-head text:first-child{font-size:30rpx;font-weight:600;color:#20334c}.selector-head text:last-child{color:#1769d8;font-size:25rpx}.in-mask{margin:24rpx 30rpx 40rpx} |
| | | .page{min-height:100vh;padding:24rpx 30rpx 70rpx;background:#f6f7f9}.form-card,.section-card{overflow:hidden;background:#fff;border-radius:16rpx}.section-card{margin-top:24rpx}.field{display:flex;align-items:center;min-height:96rpx;padding:0 24rpx;gap:20rpx;border-bottom:1rpx solid #eef1f5}.field>text:first-child{width:190rpx;flex:none;color:#33455d;font-size:27rpx}.field input,.field picker,.picker,.value{min-width:0;flex:1;color:#1e3049;font-size:27rpx}.picker{display:flex;align-items:center;justify-content:space-between;color:#65758a}.picker text:first-child,.value{overflow:hidden;text-align:right;text-overflow:ellipsis;white-space:nowrap}.picker text:last-child{margin-left:16rpx;color:#8092a7;font-size:36rpx}.column{align-items:flex-start;flex-direction:column;padding:20rpx 24rpx}.column>text:first-child{width:auto}.column textarea{width:100%;height:120rpx;font-size:27rpx}.save{margin-top:32rpx;color:#fff;font-size:30rpx;background:var(--color-primary, #1769d8);border-radius:12rpx}.save::after,.section-head button::after,.line button::after{border:0}.section-head{display:flex;align-items:center;justify-content:space-between;height:86rpx;padding:0 24rpx;border-bottom:1rpx solid #edf1f6}.section-head>text{font-size:29rpx;font-weight:600;color:#20334c}.section-head button,.line button{min-height:50rpx;padding:0 16rpx;margin:0;color:var(--color-primary, #1769d8);font-size:23rpx;line-height:48rpx;background:var(--color-primary-soft, #f5f8ff);border:1rpx solid var(--color-primary-border, #8ab3ee);border-radius:8rpx}.line{display:flex;flex-direction:column;gap:8rpx;padding:20rpx 24rpx;border-bottom:1rpx solid #edf1f6}.line view{display:flex;justify-content:space-between;gap:16rpx}.line text{font-size:23rpx;color:#78879b}.line view text:first-child{font-size:27rpx;font-weight:600;color:#20334c}.line-actions{justify-content:flex-end!important}.state{padding:38rpx;color:#8795a8;font-size:26rpx;text-align:center}.compact{padding:24rpx}.mask{position:fixed;z-index:99;top:0;right:0;bottom:0;left:0;display:flex;align-items:flex-end;background:rgba(18,29,43,.42)}.selector{width:100%;max-height:78vh;overflow:auto;background:#fff;border-radius:24rpx 24rpx 0 0}.selector-head{display:flex;align-items:center;justify-content:space-between;height:92rpx;padding:0 30rpx;border-bottom:1rpx solid #edf1f6}.selector-head text:first-child{font-size:30rpx;font-weight:600;color:#20334c}.selector-head text:last-child{color:var(--color-primary, #1769d8);font-size:25rpx}.in-mask{margin:24rpx 30rpx 40rpx} |
| | | </style> |
| | |
| | | font-size: 27rpx; |
| | | } |
| | | .search text { |
| | | color: #1769d8; |
| | | color: var(--color-primary, #1769d8); |
| | | font-size: 24rpx; |
| | | } |
| | | .content { |
| | | height: 0; |
| | | flex: 1; |
| | | padding-bottom: 150rpx; |
| | | padding-bottom: 132rpx; |
| | | box-sizing: border-box; |
| | | } |
| | | .row { |
| | |
| | | min-height: 36rpx !important; |
| | | height: auto !important; |
| | | padding: 4rpx 14rpx !important; |
| | | color: #1769d8; |
| | | background: #eef5ff; |
| | | color: var(--color-primary, #1769d8); |
| | | background: var(--color-primary-soft, #eef5ff); |
| | | border-radius: 999rpx !important; |
| | | line-height: 1.2 !important; |
| | | white-space: nowrap; |
| | |
| | | min-height: 50rpx; |
| | | padding: 0 16rpx; |
| | | margin: 0; |
| | | color: #1769d8; |
| | | color: var(--color-primary, #1769d8); |
| | | font-size: 22rpx; |
| | | line-height: 48rpx; |
| | | background: #f5f8ff; |
| | | border: 1rpx solid #8ab3ee; |
| | | background: var(--color-primary-soft, #f5f8ff); |
| | | border: 1rpx solid var(--color-primary-border, #8ab3ee); |
| | | border-radius: 8rpx; |
| | | } |
| | | .actions .danger { |
| | |
| | | display: flex; |
| | | align-items: center; |
| | | justify-content: center; |
| | | width: 132rpx; |
| | | height: 132rpx; |
| | | min-height: 132rpx; |
| | | width: 104rpx; height: 104rpx; min-height: 104rpx; |
| | | padding: 0; |
| | | margin: 0; |
| | | background: #1769d8; |
| | | background: var(--color-primary, #1769d8); |
| | | border-radius: 50%; |
| | | box-shadow: 0 12rpx 24rpx rgba(23, 105, 216, 0.3); |
| | | } |
| | |
| | | </template> |
| | | |
| | | <style lang="scss" scoped> |
| | | .field{display:flex;align-items:center;min-height:96rpx;padding:0 24rpx;gap:16rpx;border-bottom:1rpx solid #eef1f5}.field>text:first-child{width:190rpx;flex:none;color:#33455d;font-size:27rpx}.required{color:#df4c4c}.device-picker,.picker,.value{min-width:0;flex:1;color:#1e3049;font-size:27rpx}.picker{display:flex;align-items:center;justify-content:space-between;color:#65758a}.picker text:first-child,.value{overflow:hidden;text-align:right;text-overflow:ellipsis;white-space:nowrap}.picker text:last-child{margin-left:12rpx;color:#8092a7;font-size:36rpx}.scan-button{width:88rpx;min-height:52rpx;padding:0;margin:0;color:#1769d8;font-size:23rpx;line-height:50rpx;background:#eef5ff;border:1rpx solid #8ab3ee;border-radius:8rpx}.scan-button::after{border:0}.device-info{display:grid;grid-template-columns:1fr 1fr;gap:10rpx 18rpx;padding:16rpx 24rpx 20rpx;margin:0;color:#718198;font-size:22rpx;background:#f8faff;border-bottom:1rpx solid #eef1f5}.device-info text{overflow:hidden;text-overflow:ellipsis;white-space:nowrap} |
| | | .field{display:flex;align-items:center;min-height:96rpx;padding:0 24rpx;gap:16rpx;border-bottom:1rpx solid #eef1f5}.field>text:first-child{width:190rpx;flex:none;color:#33455d;font-size:27rpx}.required{color:#df4c4c}.device-picker,.picker,.value{min-width:0;flex:1;color:#1e3049;font-size:27rpx}.picker{display:flex;align-items:center;justify-content:space-between;color:#65758a}.picker text:first-child,.value{overflow:hidden;text-align:right;text-overflow:ellipsis;white-space:nowrap}.picker text:last-child{margin-left:12rpx;color:#8092a7;font-size:36rpx}.scan-button{width:88rpx;min-height:52rpx;padding:0;margin:0;color:var(--color-primary, #1769d8);font-size:23rpx;line-height:50rpx;background:var(--color-primary-soft, #eef5ff);border:1rpx solid var(--color-primary-border, #8ab3ee);border-radius:8rpx}.scan-button::after{border:0}.device-info{display:grid;grid-template-columns:1fr 1fr;gap:10rpx 18rpx;padding:16rpx 24rpx 20rpx;margin:0;color:#718198;font-size:22rpx;background:#f8faff;border-bottom:1rpx solid #eef1f5}.device-info text{overflow:hidden;text-overflow:ellipsis;white-space:nowrap} |
| | | </style> |
| | |
| | | </template> |
| | | |
| | | <style lang="scss" scoped> |
| | | .page{min-height:100vh;padding:24rpx 30rpx 70rpx;background:#f6f7f9}.form-card,.record-card{overflow:hidden;background:#fff;border-radius:16rpx}.record-card{margin-top:24rpx;padding-bottom:12rpx}.field{display:flex;align-items:center;min-height:96rpx;padding:0 24rpx;gap:20rpx;border-bottom:1rpx solid #eef1f5}.field>text:first-child{width:190rpx;flex:none;color:#33455d;font-size:27rpx}.field input,.field picker,.picker,.value{min-width:0;flex:1;color:#1e3049;font-size:27rpx}.field input:disabled,.field textarea:disabled{color:#596a7e}.picker{display:flex;align-items:center;justify-content:space-between;color:#65758a}.picker text:first-child,.value{overflow:hidden;text-align:right;text-overflow:ellipsis;white-space:nowrap}.picker text:last-child{margin-left:16rpx;color:#8092a7;font-size:36rpx}.code-field input{min-width:0}.code-field button{flex:none;min-width:136rpx;padding:0 16rpx;margin:0;color:#1769d8;font-size:24rpx;line-height:56rpx;background:#fff;border:1rpx solid #1769d8;border-radius:8rpx}.code-field button::after,.save::after{border:0}.column{align-items:flex-start;flex-direction:column;padding:20rpx 24rpx}.column>text:first-child{width:auto}.column textarea{width:100%;height:140rpx;font-size:27rpx}.save{margin-top:32rpx;color:#fff;font-size:30rpx;background:#1769d8;border-radius:12rpx}.state{padding:38rpx;color:#8795a8;font-size:26rpx;text-align:center}.compact{padding:28rpx}.tabs{display:flex;height:84rpx;align-items:flex-end;gap:22rpx;padding:0 24rpx;border-bottom:1rpx solid #edf1f6}.tabs text{padding:0 6rpx 18rpx;color:#718198;font-size:26rpx}.tabs .active{color:#1769d8;font-weight:600;border-bottom:4rpx solid #1769d8}.record{display:flex;flex-direction:column;gap:8rpx;padding:20rpx 24rpx;border-bottom:1rpx solid #edf1f6}.record:last-child{border-bottom:0}.record view{display:flex;align-items:center;justify-content:space-between;gap:16rpx}.record view text:first-child{min-width:0;overflow:hidden;color:#20334c;font-size:27rpx;font-weight:600;text-overflow:ellipsis;white-space:nowrap}.record view text:last-child{flex:none;padding:4rpx 10rpx;color:#1769d8;font-size:21rpx;background:#edf5ff;border-radius:7rpx}.record>text{overflow:hidden;color:#78879b;font-size:23rpx;text-overflow:ellipsis;white-space:nowrap}.mask{position:fixed;z-index:99;top:0;right:0;bottom:0;left:0;display:flex;align-items:flex-end;background:rgba(18,29,43,.42)}.selector{width:100%;max-height:72vh;overflow:hidden;background:#fff;border-radius:24rpx 24rpx 0 0}.selector-head{display:flex;align-items:center;justify-content:space-between;height:92rpx;padding:0 30rpx;border-bottom:1rpx solid #edf1f6}.selector-head text:first-child{color:#20334c;font-size:30rpx;font-weight:600}.selector-head text:last-child{color:#1769d8;font-size:25rpx}.selector-body{height:58vh}.tree-row{position:relative;display:flex;align-items:center;gap:8rpx;min-height:84rpx;padding:14rpx 28rpx 14rpx 24rpx;box-sizing:border-box;color:#52647a;font-size:27rpx;border-bottom:1rpx solid #edf1f6}.tree-row text{min-width:0;flex:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.tree-row.active{color:#1769d8;font-weight:600;background:#eef5ff}.tree-row.active::before{position:absolute;top:18rpx;bottom:18rpx;left:0;width:6rpx;background:#1769d8;border-radius:0 6rpx 6rpx 0;content:""}.tree-arrow{width:34rpx;height:38rpx;flex:none;opacity:0}.tree-arrow.show{position:relative;opacity:1}.tree-arrow.show::after{position:absolute;top:12rpx;left:8rpx;width:14rpx;height:14rpx;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)} |
| | | .page{min-height:100vh;padding:24rpx 30rpx 70rpx;background:#f6f7f9}.form-card,.record-card{overflow:hidden;background:#fff;border-radius:16rpx}.record-card{margin-top:24rpx;padding-bottom:12rpx}.field{display:flex;align-items:center;min-height:96rpx;padding:0 24rpx;gap:20rpx;border-bottom:1rpx solid #eef1f5}.field>text:first-child{width:190rpx;flex:none;color:#33455d;font-size:27rpx}.field input,.field picker,.picker,.value{min-width:0;flex:1;color:#1e3049;font-size:27rpx}.field input:disabled,.field textarea:disabled{color:#596a7e}.picker{display:flex;align-items:center;justify-content:space-between;color:#65758a}.picker text:first-child,.value{overflow:hidden;text-align:right;text-overflow:ellipsis;white-space:nowrap}.picker text:last-child{margin-left:16rpx;color:#8092a7;font-size:36rpx}.code-field input{min-width:0}.code-field button{flex:none;min-width:136rpx;padding:0 16rpx;margin:0;color:var(--color-primary, #1769d8);font-size:24rpx;line-height:56rpx;background:#fff;border:1rpx solid var(--color-primary, #1769d8);border-radius:8rpx}.code-field button::after,.save::after{border:0}.column{align-items:flex-start;flex-direction:column;padding:20rpx 24rpx}.column>text:first-child{width:auto}.column textarea{width:100%;height:140rpx;font-size:27rpx}.save{margin-top:32rpx;color:#fff;font-size:30rpx;background:var(--color-primary, #1769d8);border-radius:12rpx}.state{padding:38rpx;color:#8795a8;font-size:26rpx;text-align:center}.compact{padding:28rpx}.tabs{display:flex;height:84rpx;align-items:flex-end;gap:22rpx;padding:0 24rpx;border-bottom:1rpx solid #edf1f6}.tabs text{padding:0 6rpx 18rpx;color:#718198;font-size:26rpx}.tabs .active{color:var(--color-primary, #1769d8);font-weight:600;border-bottom:4rpx solid var(--color-primary, #1769d8)}.record{display:flex;flex-direction:column;gap:8rpx;padding:20rpx 24rpx;border-bottom:1rpx solid #edf1f6}.record:last-child{border-bottom:0}.record view{display:flex;align-items:center;justify-content:space-between;gap:16rpx}.record view text:first-child{min-width:0;overflow:hidden;color:#20334c;font-size:27rpx;font-weight:600;text-overflow:ellipsis;white-space:nowrap}.record view text:last-child{flex:none;padding:4rpx 10rpx;color:var(--color-primary, #1769d8);font-size:21rpx;background:var(--color-primary-soft, #edf5ff);border-radius:7rpx}.record>text{overflow:hidden;color:#78879b;font-size:23rpx;text-overflow:ellipsis;white-space:nowrap}.mask{position:fixed;z-index:99;top:0;right:0;bottom:0;left:0;display:flex;align-items:flex-end;background:rgba(18,29,43,.42)}.selector{width:100%;max-height:72vh;overflow:hidden;background:#fff;border-radius:24rpx 24rpx 0 0}.selector-head{display:flex;align-items:center;justify-content:space-between;height:92rpx;padding:0 30rpx;border-bottom:1rpx solid #edf1f6}.selector-head text:first-child{color:#20334c;font-size:30rpx;font-weight:600}.selector-head text:last-child{color:var(--color-primary, #1769d8);font-size:25rpx}.selector-body{height:58vh}.tree-row{position:relative;display:flex;align-items:center;gap:8rpx;min-height:84rpx;padding:14rpx 28rpx 14rpx 24rpx;box-sizing:border-box;color:#52647a;font-size:27rpx;border-bottom:1rpx solid #edf1f6}.tree-row text{min-width:0;flex:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.tree-row.active{color:var(--color-primary, #1769d8);font-weight:600;background:var(--color-primary-soft, #eef5ff)}.tree-row.active::before{position:absolute;top:18rpx;bottom:18rpx;left:0;width:6rpx;background:var(--color-primary, #1769d8);border-radius:0 6rpx 6rpx 0;content:""}.tree-arrow{width:34rpx;height:38rpx;flex:none;opacity:0}.tree-arrow.show{position:relative;opacity:1}.tree-arrow.show::after{position:absolute;top:12rpx;left:8rpx;width:14rpx;height:14rpx;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)} |
| | | </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{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} |
| | | .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:var(--color-primary, #1769d8);font-size:24rpx}.main-layout{height:0;min-height:0;flex:1;display:flex;gap:16rpx;padding-bottom: 132rpx;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:var(--color-primary, #1769d8);font-weight:600;background:var(--color-primary-soft, #eef5ff)}.type-item.active::before{position:absolute;top:18rpx;bottom:18rpx;left:0;width:6rpx;background:var(--color-primary, #1769d8);border-radius:0 6rpx 6rpx 0;content:""}.type-item.active .tree-arrow.show::after{border-color:var(--color-primary, #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:var(--color-primary, #1769d8);font-size:22rpx;line-height:48rpx;background:var(--color-primary-soft, #f5f8ff);border:1rpx solid var(--color-primary-border, #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: 104rpx; height: 104rpx; min-height: 104rpx;padding:0;margin:0;color:#fff;background:var(--color-primary, #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{min-height:100vh;padding:24rpx 30rpx 70rpx;background:#f6f7f9}.form-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 #eef1f5}.field>text{width:190rpx;flex:none;color:#33455d;font-size:27rpx}.field input,.field picker,.picker{min-width:0;flex:1;color:#1e3049;font-size:27rpx}.picker{display:flex;align-items:center;justify-content:space-between;color:#65758a}.picker text:first-child{min-width:0;flex:1;overflow:hidden;text-align:right;text-overflow:ellipsis;white-space:nowrap}.picker text:last-child{margin-left:16rpx;color:#8092a7;font-size:36rpx}.code-field input{min-width:0}.code-field button{flex:none;min-width:136rpx;padding:0 16rpx;margin:0;color:#1769d8;font-size:24rpx;line-height:56rpx;background:#fff;border:1rpx solid #1769d8;border-radius:8rpx}.code-field button::after,.save::after{border:0}.field radio-group{display:flex;flex:1;gap:30rpx;font-size:26rpx}.column{align-items:flex-start;flex-direction:column;padding:20rpx 24rpx}.column>text{width:auto}.column textarea{width:100%;height:130rpx;font-size:27rpx}.save{margin-top:32rpx;color:#fff;font-size:30rpx;background:#1769d8;border-radius:12rpx}.state{padding:38rpx;color:#8795a8;font-size:26rpx;text-align:center}.mask{position:fixed;z-index:99;top:0;right:0;bottom:0;left:0;display:flex;align-items:flex-end;background:rgba(18,29,43,.42)}.selector{width:100%;max-height:72vh;overflow:hidden;background:#fff;border-radius:24rpx 24rpx 0 0}.selector-head{display:flex;align-items:center;justify-content:space-between;height:92rpx;padding:0 30rpx;border-bottom:1rpx solid #edf1f6}.selector-head text:first-child{color:#20334c;font-size:30rpx;font-weight:600}.selector-head text:last-child{color:#1769d8;font-size:25rpx}.selector-body{height:58vh}.tree-row{position:relative;display:flex;align-items:center;gap:8rpx;min-height:84rpx;padding:14rpx 28rpx 14rpx 24rpx;box-sizing:border-box;color:#52647a;font-size:27rpx;border-bottom:1rpx solid #edf1f6}.tree-row text{min-width:0;flex:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.tree-row.active{color:#1769d8;font-weight:600;background:#eef5ff}.tree-row.active::before{position:absolute;top:18rpx;bottom:18rpx;left:0;width:6rpx;background:#1769d8;border-radius:0 6rpx 6rpx 0;content:""}.tree-arrow{width:34rpx;height:38rpx;flex:none;opacity:0}.tree-arrow.show{position:relative;opacity:1}.tree-arrow.show::after{position:absolute;top:12rpx;left:8rpx;width:14rpx;height:14rpx;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)} |
| | | .page{min-height:100vh;padding:24rpx 30rpx 70rpx;background:#f6f7f9}.form-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 #eef1f5}.field>text{width:190rpx;flex:none;color:#33455d;font-size:27rpx}.field input,.field picker,.picker{min-width:0;flex:1;color:#1e3049;font-size:27rpx}.picker{display:flex;align-items:center;justify-content:space-between;color:#65758a}.picker text:first-child{min-width:0;flex:1;overflow:hidden;text-align:right;text-overflow:ellipsis;white-space:nowrap}.picker text:last-child{margin-left:16rpx;color:#8092a7;font-size:36rpx}.code-field input{min-width:0}.code-field button{flex:none;min-width:136rpx;padding:0 16rpx;margin:0;color:var(--color-primary, #1769d8);font-size:24rpx;line-height:56rpx;background:#fff;border:1rpx solid var(--color-primary, #1769d8);border-radius:8rpx}.code-field button::after,.save::after{border:0}.field radio-group{display:flex;flex:1;gap:30rpx;font-size:26rpx}.column{align-items:flex-start;flex-direction:column;padding:20rpx 24rpx}.column>text{width:auto}.column textarea{width:100%;height:130rpx;font-size:27rpx}.save{margin-top:32rpx;color:#fff;font-size:30rpx;background:var(--color-primary, #1769d8);border-radius:12rpx}.state{padding:38rpx;color:#8795a8;font-size:26rpx;text-align:center}.mask{position:fixed;z-index:99;top:0;right:0;bottom:0;left:0;display:flex;align-items:flex-end;background:rgba(18,29,43,.42)}.selector{width:100%;max-height:72vh;overflow:hidden;background:#fff;border-radius:24rpx 24rpx 0 0}.selector-head{display:flex;align-items:center;justify-content:space-between;height:92rpx;padding:0 30rpx;border-bottom:1rpx solid #edf1f6}.selector-head text:first-child{color:#20334c;font-size:30rpx;font-weight:600}.selector-head text:last-child{color:var(--color-primary, #1769d8);font-size:25rpx}.selector-body{height:58vh}.tree-row{position:relative;display:flex;align-items:center;gap:8rpx;min-height:84rpx;padding:14rpx 28rpx 14rpx 24rpx;box-sizing:border-box;color:#52647a;font-size:27rpx;border-bottom:1rpx solid #edf1f6}.tree-row text{min-width:0;flex:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.tree-row.active{color:var(--color-primary, #1769d8);font-weight:600;background:var(--color-primary-soft, #eef5ff)}.tree-row.active::before{position:absolute;top:18rpx;bottom:18rpx;left:0;width:6rpx;background:var(--color-primary, #1769d8);border-radius:0 6rpx 6rpx 0;content:""}.tree-arrow{width:34rpx;height:38rpx;flex:none;opacity:0}.tree-arrow.show{position:relative;opacity:1}.tree-arrow.show::after{position:absolute;top:12rpx;left:8rpx;width:14rpx;height:14rpx;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)} |
| | | </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{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} |
| | | .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:var(--color-primary, #1769d8);font-size:24rpx}.content{height:0;flex:1;padding-bottom: 132rpx;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:var(--color-primary, #1769d8);font-size:22rpx;line-height:48rpx;background:var(--color-primary-soft, #f5f8ff);border:1rpx solid var(--color-primary-border, #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: 104rpx; height: 104rpx; min-height: 104rpx;padding:0;margin:0;color:#fff;background:var(--color-primary, #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"><view class="form-card"><MachineryScanPicker :model-value="form.machineryId" :machineries="machineries" :current="{id:form.machineryId,code:form.machineryCode,name:form.machineryName,brand:form.machineryBrand,specification:form.machinerySpecification}" :disabled="readonly" @select="selectMachinery" /><view class="field"><text>ä¿å
»è®¡å</text><picker v-if="!readonly" :range="plans" range-key="name" @change="form.planId=plans[$event.detail.value].id"><view class="picker">{{planName()}}<text>âº</text></view></picker><text v-else class="value">{{form.planName||'--'}}</text></view><view class="field"><text>ä¿å
»äºº</text><picker v-if="!readonly" :range="users" range-key="nickname" @change="form.userId=users[$event.detail.value].id"><view class="picker">{{selectedUserName()}}<text>âº</text></view></picker><text v-else class="value">{{form.nickname||'--'}}</text></view><view class="field"><text>ä¿å
»æ¶é´ <text class="required">*</text></text><picker v-if="!readonly" mode="date" :value="form.maintenTime?.slice(0,10)" @change="form.maintenTime=$event.detail.value+' 00:00:00'"><view class="picker">{{dateText(form.maintenTime).replace('--','è¯·éæ©ä¿å
»æ¶é´')}}<text>âº</text></view></picker><text v-else class="value">{{dateText(form.maintenTime)}}</text></view><view v-if="id" class="field"><text>ç¶æ</text><text class="value">{{dictLabel(dicts,'mes_mainten_record_status',form.status)}}</text></view><view class="field column"><text>夿³¨</text><textarea v-model="form.remark" :disabled="readonly" placeholder="请è¾å
¥å¤æ³¨" ></textarea></view></view><button v-if="canSave" class="save" :loading="saving" :disabled="saving" @click="save">ä¿å</button><view v-if="id" class="section-card"><view class="section-head"><text>æç»å表</text><button v-if="!readonly" @click="openLine()">æ·»å æç»</button></view><view v-for="item in lines" :key="item.id" class="line"><view><text>{{item.subjectName||'项ç®'}}</text><text>{{dictLabel(dicts,'mes_mainten_status',item.status)}}</text></view><text>项ç®å
容ï¼{{item.subjectContent||'--'}}</text><text>é¡¹ç®æ åï¼{{item.subjectStandard||'--'}}</text><text>å¼å¸¸æè¿°ï¼{{item.result||'--'}}</text><view v-if="!readonly" class="line-actions"><button @click="openLine(item)">ç¼è¾</button><button @click="removeLine(item)">å é¤</button></view></view><view v-if="!lines.length" class="state compact">ææ æç»</view></view><button v-if="readonly&&form.status===10&&hasPermission('mes:dv-mainten-record:update')" class="save" @click="mode='edit'">ç¼è¾</button><view v-if="lineOpen" class="mask" @click="lineOpen=false"><view class="selector" @click.stop><view class="selector-head"><text>{{lineEditing?'ä¿®æ¹æç»':'æ·»å æç»'}}</text><text @click="lineOpen=false">å
³é</text></view><view class="field"><text>é¡¹ç® <text class="required">*</text></text><picker :range="subjects" range-key="name" @change="line.subjectId=subjects[$event.detail.value].id"><view class="picker">{{subjectName(line.subjectId)}}<text>âº</text></view></picker></view><view class="field"><text>ç»æ <text class="required">*</text></text><picker :range="results" range-key="label" @change="line.status=Number(results[$event.detail.value].value)"><view class="picker">{{dictLabel(dicts,'mes_mainten_status',line.status,'è¯·éæ©ç»æ')}}<text>âº</text></view></picker></view><view class="field column"><text>å¼å¸¸æè¿°</text><textarea v-model="line.result" placeholder="请è¾å
¥å¼å¸¸æè¿°" ></textarea></view><view class="field column"><text>夿³¨</text><textarea v-model="line.remark" placeholder="请è¾å
¥å¤æ³¨" ></textarea></view><button class="save in-mask" @click="saveLine">ä¿åæç»</button></view></view></view></template> |
| | | <style lang="scss" scoped> |
| | | .page{min-height:100vh;padding:24rpx 30rpx 70rpx;background:#f6f7f9}.form-card,.section-card{overflow:hidden;background:#fff;border-radius:16rpx}.section-card{margin-top:24rpx}.field{display:flex;align-items:center;min-height:96rpx;padding:0 24rpx;gap:20rpx;border-bottom:1rpx solid #eef1f5}.field>text:first-child{width:190rpx;flex:none;color:#33455d;font-size:27rpx}.field input,.field picker,.picker,.value{min-width:0;flex:1;color:#1e3049;font-size:27rpx}.picker{display:flex;align-items:center;justify-content:space-between;color:#65758a}.picker text:first-child,.value{overflow:hidden;text-align:right;text-overflow:ellipsis;white-space:nowrap}.picker text:last-child{margin-left:16rpx;color:#8092a7;font-size:36rpx}.column{align-items:flex-start;flex-direction:column;padding:20rpx 24rpx}.column>text:first-child{width:auto}.column textarea{width:100%;height:120rpx;font-size:27rpx}.save{margin-top:32rpx;color:#fff;font-size:30rpx;background:#1769d8;border-radius:12rpx}.save::after,.section-head button::after,.line button::after{border:0}.section-head{display:flex;align-items:center;justify-content:space-between;height:86rpx;padding:0 24rpx;border-bottom:1rpx solid #edf1f6}.section-head>text{font-size:29rpx;font-weight:600;color:#20334c}.section-head button,.line button{min-height:50rpx;padding:0 16rpx;margin:0;color:#1769d8;font-size:23rpx;line-height:48rpx;background:#f5f8ff;border:1rpx solid #8ab3ee;border-radius:8rpx}.line{display:flex;flex-direction:column;gap:8rpx;padding:20rpx 24rpx;border-bottom:1rpx solid #edf1f6}.line view{display:flex;justify-content:space-between;gap:16rpx}.line text{font-size:23rpx;color:#78879b}.line view text:first-child{font-size:27rpx;font-weight:600;color:#20334c}.line-actions{justify-content:flex-end!important}.state{padding:38rpx;color:#8795a8;font-size:26rpx;text-align:center}.compact{padding:24rpx}.mask{position:fixed;z-index:99;top:0;right:0;bottom:0;left:0;display:flex;align-items:flex-end;background:rgba(18,29,43,.42)}.selector{width:100%;max-height:78vh;overflow:auto;background:#fff;border-radius:24rpx 24rpx 0 0}.selector-head{display:flex;align-items:center;justify-content:space-between;height:92rpx;padding:0 30rpx;border-bottom:1rpx solid #edf1f6}.selector-head text:first-child{font-size:30rpx;font-weight:600;color:#20334c}.selector-head text:last-child{color:#1769d8;font-size:25rpx}.in-mask{margin:24rpx 30rpx 40rpx} |
| | | .page{min-height:100vh;padding:24rpx 30rpx 70rpx;background:#f6f7f9}.form-card,.section-card{overflow:hidden;background:#fff;border-radius:16rpx}.section-card{margin-top:24rpx}.field{display:flex;align-items:center;min-height:96rpx;padding:0 24rpx;gap:20rpx;border-bottom:1rpx solid #eef1f5}.field>text:first-child{width:190rpx;flex:none;color:#33455d;font-size:27rpx}.field input,.field picker,.picker,.value{min-width:0;flex:1;color:#1e3049;font-size:27rpx}.picker{display:flex;align-items:center;justify-content:space-between;color:#65758a}.picker text:first-child,.value{overflow:hidden;text-align:right;text-overflow:ellipsis;white-space:nowrap}.picker text:last-child{margin-left:16rpx;color:#8092a7;font-size:36rpx}.column{align-items:flex-start;flex-direction:column;padding:20rpx 24rpx}.column>text:first-child{width:auto}.column textarea{width:100%;height:120rpx;font-size:27rpx}.save{margin-top:32rpx;color:#fff;font-size:30rpx;background:var(--color-primary, #1769d8);border-radius:12rpx}.save::after,.section-head button::after,.line button::after{border:0}.section-head{display:flex;align-items:center;justify-content:space-between;height:86rpx;padding:0 24rpx;border-bottom:1rpx solid #edf1f6}.section-head>text{font-size:29rpx;font-weight:600;color:#20334c}.section-head button,.line button{min-height:50rpx;padding:0 16rpx;margin:0;color:var(--color-primary, #1769d8);font-size:23rpx;line-height:48rpx;background:var(--color-primary-soft, #f5f8ff);border:1rpx solid var(--color-primary-border, #8ab3ee);border-radius:8rpx}.line{display:flex;flex-direction:column;gap:8rpx;padding:20rpx 24rpx;border-bottom:1rpx solid #edf1f6}.line view{display:flex;justify-content:space-between;gap:16rpx}.line text{font-size:23rpx;color:#78879b}.line view text:first-child{font-size:27rpx;font-weight:600;color:#20334c}.line-actions{justify-content:flex-end!important}.state{padding:38rpx;color:#8795a8;font-size:26rpx;text-align:center}.compact{padding:24rpx}.mask{position:fixed;z-index:99;top:0;right:0;bottom:0;left:0;display:flex;align-items:flex-end;background:rgba(18,29,43,.42)}.selector{width:100%;max-height:78vh;overflow:auto;background:#fff;border-radius:24rpx 24rpx 0 0}.selector-head{display:flex;align-items:center;justify-content:space-between;height:92rpx;padding:0 30rpx;border-bottom:1rpx solid #edf1f6}.selector-head text:first-child{font-size:30rpx;font-weight:600;color:#20334c}.selector-head text:last-child{color:var(--color-primary, #1769d8);font-size:25rpx}.in-mask{margin:24rpx 30rpx 40rpx} |
| | | </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{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} |
| | | .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:var(--color-primary, #1769d8);font-size:24rpx}.content{height:0;flex:1;padding-bottom: 132rpx;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:var(--color-primary, #1769d8);background:var(--color-primary-soft, #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:var(--color-primary, #1769d8);font-size:22rpx;line-height:48rpx;background:var(--color-primary-soft, #f5f8ff);border:1rpx solid var(--color-primary-border, #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: 104rpx; height: 104rpx; min-height: 104rpx;padding:0;margin:0;background:var(--color-primary, #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"><view class="form-card"><view class="field"><text>å¨å
·ç¼ç <text class="required">*</text></text><input v-model="form.code" :disabled="!!id||readonly" placeholder="请è¾å
¥å¨å
·ç¼ç " /></view><view class="field"><text>å¨å
·åç§° <text class="required">*</text></text><input v-model="form.name" :disabled="readonly" placeholder="请è¾å
¥å¨å
·åç§°" /></view><view class="field"><text>å¨å
·ç±»å« <text class="required">*</text></text><picker v-if="!readonly" :range="categories" range-key="label" @change="form.category=Number(categories[$event.detail.value].value)"><view class="picker">{{dictLabel(dicts,'mes_dv_metering_category',form.category,'è¯·éæ©å¨å
·ç±»å«')}}<text>âº</text></view></picker><text v-else class="value">{{dictLabel(dicts,'mes_dv_metering_category',form.category)}}</text></view><view class="field"><text>è§æ ¼åå·</text><input v-model="form.specification" :disabled="readonly" placeholder="请è¾å
¥è§æ ¼åå·" /></view><view class="field"><text>åç/ç产åå®¶</text><input v-model="form.brand" :disabled="readonly" placeholder="请è¾å
¥åç/ç产åå®¶" /></view><view class="field"><text>精度</text><input v-model="form.precision" :disabled="readonly" placeholder="请è¾å
¥ç²¾åº¦" /></view><view class="field"><text>éç¨</text><input v-model="form.range" :disabled="readonly" placeholder="请è¾å
¥éç¨" /></view><view class="field"><text>使ç¨é¨é¨</text><picker v-if="!readonly" :range="deptOptions" range-key="name" @change="form.deptId=deptOptions[$event.detail.value].id"><view class="picker">{{deptName()}}<text>âº</text></view></picker><text v-else class="value">{{form.deptName||'--'}}</text></view><view class="field"><text>责任人</text><picker v-if="!readonly" :range="users" range-key="nickname" @change="form.chargeUserId=users[$event.detail.value].id"><view class="picker">{{chargeName()}}<text>âº</text></view></picker><text v-else class="value">{{form.chargeUserNickname||'--'}}</text></view><view class="field"><text>æ ¡å卿 <text class="required">*</text></text><input v-model="form.checkCycleCount" :disabled="readonly" type="number" placeholder="请è¾å
¥æ ¡å卿(æ)" /></view><view class="field"><text>æå
¥ä½¿ç¨æ¥æ</text><picker v-if="!readonly" mode="date" :value="form.useDate" @change="form.useDate=$event.detail.value"><view class="picker">{{dayText(form.useDate).replace('--','è¯·éæ©æå
¥ä½¿ç¨æ¥æ')}}<text>âº</text></view></picker><text v-else class="value">{{dayText(form.useDate)}}</text></view><view v-if="readonly" class="field"><text>䏿¬¡æ£æµæ¥æ</text><text class="value">{{dayText(form.lastCheckDate)}}</text></view><view v-if="readonly" class="field"><text>䏿¬¡æ£æµæ¥æ</text><text class="value">{{dayText(form.nextCheckDate)}}</text></view><view class="field"><text>å¨å
·ç¶æ</text><picker v-if="!readonly" :range="statuses" range-key="label" @change="form.status=Number(statuses[$event.detail.value].value)"><view class="picker">{{dictLabel(dicts,'mes_dv_metering_status',form.status,'è¯·éæ©å¨å
·ç¶æ')}}<text>âº</text></view></picker><text v-else class="value">{{dictLabel(dicts,'mes_dv_metering_status',form.status)}}</text></view><view v-if="readonly" class="field"><text>å°æç¶æ</text><text class="value">{{dictLabel(dicts,'mes_dv_metering_expire_status',form.expireStatus)}}</text></view><view class="field column"><text>夿³¨</text><textarea v-model="form.remark" :disabled="readonly" placeholder="请è¾å
¥å¤æ³¨" ></textarea></view></view><button v-if="canSave" class="save" :loading="saving" :disabled="saving" @click="save">ä¿å</button><button v-else-if="readonly&&hasPermission('mes:dv-metering:update')" class="save" @click="mode='edit'">ç¼è¾</button><view v-else class="state">ææ ä¿åæé</view></view></template> |
| | | <style lang="scss" scoped> |
| | | .page{min-height:100vh;padding:24rpx 30rpx 70rpx;background:#f6f7f9}.form-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 #eef1f5}.field>text:first-child{width:210rpx;flex:none;color:#33455d;font-size:27rpx}.field input,.field picker,.picker,.value{min-width:0;flex:1;color:#1e3049;font-size:27rpx}.picker{display:flex;align-items:center;justify-content:space-between;color:#65758a}.picker text:first-child,.value{overflow:hidden;text-align:right;text-overflow:ellipsis;white-space:nowrap}.picker text:last-child{margin-left:16rpx;color:#8092a7;font-size:36rpx}.column{align-items:flex-start;flex-direction:column;padding:20rpx 24rpx}.column>text:first-child{width:auto}.column textarea{width:100%;height:130rpx;font-size:27rpx}.save{margin-top:32rpx;color:#fff;font-size:30rpx;background:#1769d8;border-radius:12rpx}.save::after{border:0}.state{padding:38rpx;color:#8795a8;font-size:26rpx;text-align:center} |
| | | .page{min-height:100vh;padding:24rpx 30rpx 70rpx;background:#f6f7f9}.form-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 #eef1f5}.field>text:first-child{width:210rpx;flex:none;color:#33455d;font-size:27rpx}.field input,.field picker,.picker,.value{min-width:0;flex:1;color:#1e3049;font-size:27rpx}.picker{display:flex;align-items:center;justify-content:space-between;color:#65758a}.picker text:first-child,.value{overflow:hidden;text-align:right;text-overflow:ellipsis;white-space:nowrap}.picker text:last-child{margin-left:16rpx;color:#8092a7;font-size:36rpx}.column{align-items:flex-start;flex-direction:column;padding:20rpx 24rpx}.column>text:first-child{width:auto}.column textarea{width:100%;height:130rpx;font-size:27rpx}.save{margin-top:32rpx;color:#fff;font-size:30rpx;background:var(--color-primary, #1769d8);border-radius:12rpx}.save::after{border:0}.state{padding:38rpx;color:#8795a8;font-size:26rpx;text-align:center} |
| | | </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{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} |
| | | .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:var(--color-primary, #1769d8);font-size:24rpx}.content{height:0;flex:1;padding-bottom: 132rpx;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:var(--color-primary, #1769d8);background:var(--color-primary-soft, #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:var(--color-primary, #1769d8);font-size:22rpx;line-height:48rpx;background:var(--color-primary-soft, #f5f8ff);border:1rpx solid var(--color-primary-border, #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: 104rpx; height: 104rpx; min-height: 104rpx;padding:0;margin:0;background:var(--color-primary, #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"><view class="form-card"><view class="field"><text>计éå¨å
· <text class="required">*</text></text><picker v-if="!readonly" :range="meterings" range-key="name" @change="form.meteringId=meterings[$event.detail.value].id"><view class="picker">{{meteringName()}}<text>âº</text></view></picker><text v-else class="value">{{form.meteringName||'--'}}</text></view><view class="field"><text>æ£æµç¼å· <text class="required">*</text></text><input v-model="form.checkCode" :disabled="readonly" placeholder="请è¾å
¥æ£æµç¼å·" /></view><view class="field"><text>æ£æµæ¥æ <text class="required">*</text></text><picker v-if="!readonly" mode="date" :value="form.checkDate" @change="form.checkDate=$event.detail.value"><view class="picker">{{dayText(form.checkDate).replace('--','è¯·éæ©æ£æµæ¥æ')}}<text>âº</text></view></picker><text v-else class="value">{{dayText(form.checkDate)}}</text></view><view class="field"><text>æ£æµæºæ</text><input v-model="form.checkOrg" :disabled="readonly" placeholder="请è¾å
¥æ£æµæºæ" /></view><view class="field"><text>æ£æµç»è®º <text class="required">*</text></text><picker v-if="!readonly" :range="results" range-key="label" @change="form.checkResult=Number(results[$event.detail.value].value)"><view class="picker">{{dictLabel(dicts,'mes_dv_metering_check_result',form.checkResult,'è¯·éæ©æ£æµç»è®º')}}<text>âº</text></view></picker><text v-else class="value">{{dictLabel(dicts,'mes_dv_metering_check_result',form.checkResult)}}</text></view><view class="field"><text>è¯ä¹¦ç¼å·</text><input v-model="form.certNo" :disabled="readonly" placeholder="请è¾å
¥è¯ä¹¦ç¼å·" /></view><view class="field"><text>æ£æµäºº</text><picker v-if="!readonly" :range="users" range-key="nickname" @change="form.checkUserId=users[$event.detail.value].id"><view class="picker">{{checkUserName()}}<text>âº</text></view></picker><text v-else class="value">{{form.checkUserNickname||'--'}}</text></view><view class="field"><text>䏿¬¡æ£æµæ¥æ</text><picker v-if="!readonly" mode="date" :value="form.nextCheckDate" @change="form.nextCheckDate=$event.detail.value"><view class="picker">{{dayText(form.nextCheckDate).replace('--','è¯·éæ©ä¸æ¬¡æ£æµæ¥æ')}}<text>âº</text></view></picker><text v-else class="value">{{dayText(form.nextCheckDate)}}</text></view><view class="field column"><text>夿³¨</text><textarea v-model="form.remark" :disabled="readonly" placeholder="请è¾å
¥å¤æ³¨" ></textarea></view></view><button v-if="canSave" class="save" :loading="saving" :disabled="saving" @click="save">ä¿å</button><button v-else-if="readonly&&hasPermission('mes:dv-metering-check:update')" class="save" @click="mode='edit'">ç¼è¾</button><view v-else class="state">ææ ä¿åæé</view></view></template> |
| | | <style lang="scss" scoped> |
| | | .page{min-height:100vh;padding:24rpx 30rpx 70rpx;background:#f6f7f9}.form-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 #eef1f5}.field>text:first-child{width:210rpx;flex:none;color:#33455d;font-size:27rpx}.field input,.field picker,.picker,.value{min-width:0;flex:1;color:#1e3049;font-size:27rpx}.picker{display:flex;align-items:center;justify-content:space-between;color:#65758a}.picker text:first-child,.value{overflow:hidden;text-align:right;text-overflow:ellipsis;white-space:nowrap}.picker text:last-child{margin-left:16rpx;color:#8092a7;font-size:36rpx}.column{align-items:flex-start;flex-direction:column;padding:20rpx 24rpx}.column>text:first-child{width:auto}.column textarea{width:100%;height:130rpx;font-size:27rpx}.save{margin-top:32rpx;color:#fff;font-size:30rpx;background:#1769d8;border-radius:12rpx}.save::after{border:0}.state{padding:38rpx;color:#8795a8;font-size:26rpx;text-align:center} |
| | | .page{min-height:100vh;padding:24rpx 30rpx 70rpx;background:#f6f7f9}.form-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 #eef1f5}.field>text:first-child{width:210rpx;flex:none;color:#33455d;font-size:27rpx}.field input,.field picker,.picker,.value{min-width:0;flex:1;color:#1e3049;font-size:27rpx}.picker{display:flex;align-items:center;justify-content:space-between;color:#65758a}.picker text:first-child,.value{overflow:hidden;text-align:right;text-overflow:ellipsis;white-space:nowrap}.picker text:last-child{margin-left:16rpx;color:#8092a7;font-size:36rpx}.column{align-items:flex-start;flex-direction:column;padding:20rpx 24rpx}.column>text:first-child{width:auto}.column textarea{width:100%;height:130rpx;font-size:27rpx}.save{margin-top:32rpx;color:#fff;font-size:30rpx;background:var(--color-primary, #1769d8);border-radius:12rpx}.save::after{border:0}.state{padding:38rpx;color:#8795a8;font-size:26rpx;text-align:center} |
| | | </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{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} |
| | | .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:var(--color-primary, #1769d8);font-size:24rpx}.content{height:0;flex:1;padding-bottom: 132rpx;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:var(--color-primary, #1769d8);background:var(--color-primary-soft, #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:var(--color-primary, #1769d8);font-size:22rpx;line-height:48rpx;background:var(--color-primary-soft, #f5f8ff);border:1rpx solid var(--color-primary-border, #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: 104rpx; height: 104rpx; min-height: 104rpx;padding:0;margin:0;background:var(--color-primary, #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"><view class="form-card"><view class="field code-field"><text>ç»´ä¿®åç¼ç <text class="required">*</text></text><input v-model="form.code" :disabled="!!id||readonly||confirmMode" placeholder="请è¾å
¥ç»´ä¿®åç¼ç " /><button v-if="!id&&!readonly&&!confirmMode" :loading="generating" :disabled="generating" @click="generateCode">{{generating?'çæä¸':'èªå¨çæ'}}</button></view><view class="field"><text>ç»´ä¿®ååç§° <text class="required">*</text></text><input v-model="form.name" :disabled="readonly||confirmMode" placeholder="请è¾å
¥ç»´ä¿®ååç§°" /></view><MachineryScanPicker :model-value="form.machineryId" :machineries="machineries" :current="{id:form.machineryId,code:form.machineryCode,name:form.machineryName,brand:form.machineryBrand,specification:form.machinerySpecification}" :disabled="readonly||confirmMode" @select="selectMachinery" /><view class="field"><text>æ¥ä¿®æ¥æ <text class="required">*</text></text><picker v-if="!readonly&&!confirmMode" mode="date" :value="form.requireDate?.slice(0,10)" @change="form.requireDate=$event.detail.value+' 00:00:00'"><view class="picker">{{dateText(form.requireDate).replace('--','è¯·éæ©æ¥ä¿®æ¥æ')}}<text>âº</text></view></picker><text v-else class="value">{{dateText(form.requireDate)}}</text></view><view v-if="form.status&&form.status>=20" class="field"><text>ç»´ä¿®å®ææ¥æ</text><picker v-if="confirmMode" mode="date" :value="form.finishDate?.slice(0,10)" @change="form.finishDate=$event.detail.value+' 00:00:00'"><view class="picker">{{dateText(form.finishDate).replace('--','è¯·éæ©å®ææ¥æ')}}<text>âº</text></view></picker><text v-else class="value">{{dateText(form.finishDate)}}</text></view><view v-if="id" class="field"><text>维修人</text><text class="value">{{form.acceptedUserNickname||'--'}}</text></view><view v-if="form.status&&form.status>=40" class="field"><text>éªæ¶äºº</text><text class="value">{{form.confirmUserNickname||'--'}}</text></view><view v-if="form.status&&form.status>=40" class="field"><text>éªæ¶æ¥æ</text><text class="value">{{dateText(form.confirmDate)}}</text></view><view v-if="form.status&&form.status>=40" class="field"><text>ç»´ä¿®ç»æ</text><text class="value">{{dictLabel(dicts,'mes_dv_repair_result',form.result)}}</text></view><view v-if="id" class="field"><text>ç¶æ</text><text class="value">{{dictLabel(dicts,'mes_dv_repair_status',form.status)}}</text></view><view class="field column"><text>夿³¨</text><textarea v-model="form.remark" :disabled="readonly||confirmMode" placeholder="请è¾å
¥å¤æ³¨" ></textarea></view></view><button v-if="canSave&&(confirmMode||(!readonly&&mode!=='finish'))" class="save" :loading="saving" :disabled="saving" @click="save">{{confirmMode?'ç¡®è®¤å®æ':'ä¿å'}}</button><view v-if="id" class="section-card"><view class="section-head"><text>ç»´ä¿®é¡¹ç®æç»</text><button v-if="!readonly&&!confirmMode" @click="openLine()">æ·»å 维修项ç®</button></view><view v-for="item in lines" :key="item.id" class="line"><view><text>{{item.subjectName||'项ç®'}}</text><text>{{item.subjectContent||'--'}}</text></view><text>é¡¹ç®æ åï¼{{item.subjectStandard||'--'}}</text><text>æ
éæè¿°ï¼{{item.malfunction||'--'}}</text><text>æ
éå¾çï¼{{item.malfunctionUrl||'--'}}</text><text>ç»´ä¿®æè¿°ï¼{{item.description||'--'}}</text><view v-if="!readonly&&!confirmMode" class="line-actions"><button @click="openLine(item)">ç¼è¾</button><button @click="removeLine(item)">å é¤</button></view></view><view v-if="!lines.length" class="state compact">ææ ç»´ä¿®é¡¹ç®</view></view><view v-if="lineOpen" class="mask" @click="lineOpen=false"><view class="selector" @click.stop><view class="selector-head"><text>{{lineEditing?'ä¿®æ¹ç»´ä¿®é¡¹ç®':'æ·»å 维修项ç®'}}</text><text @click="lineOpen=false">å
³é</text></view><view class="field"><text>é¡¹ç® <text class="required">*</text></text><picker :range="subjects" range-key="name" @change="line.subjectId=subjects[$event.detail.value].id"><view class="picker">{{subjectName(line.subjectId)}}<text>âº</text></view></picker></view><view class="field column"><text>æ
éæè¿° <text class="required">*</text></text><textarea v-model="line.malfunction" placeholder="请è¾å
¥æ
éæè¿°" ></textarea></view><view class="field"><text>æ
éå¾ç</text><input v-model="line.malfunctionUrl" placeholder="请è¾å
¥æ
éå¾ç URL" /></view><view class="field column"><text>ç»´ä¿®æè¿°</text><textarea v-model="line.description" placeholder="请è¾å
¥ç»´ä¿®æè¿°" ></textarea></view><view class="field column"><text>夿³¨</text><textarea v-model="line.remark" placeholder="请è¾å
¥å¤æ³¨" ></textarea></view><button class="save in-mask" @click="saveLine">ä¿åæç»</button></view></view></view></template> |
| | | <style lang="scss" scoped> |
| | | .page{min-height:100vh;padding:24rpx 30rpx 70rpx;background:#f6f7f9}.form-card,.section-card{overflow:hidden;background:#fff;border-radius:16rpx}.section-card{margin-top:24rpx}.field{display:flex;align-items:center;min-height:96rpx;padding:0 24rpx;gap:20rpx;border-bottom:1rpx solid #eef1f5}.field>text:first-child{width:190rpx;flex:none;color:#33455d;font-size:27rpx}.field input,.field picker,.picker,.value{min-width:0;flex:1;color:#1e3049;font-size:27rpx}.picker{display:flex;align-items:center;justify-content:space-between;color:#65758a}.picker text:first-child,.value{overflow:hidden;text-align:right;text-overflow:ellipsis;white-space:nowrap}.picker text:last-child{margin-left:16rpx;color:#8092a7;font-size:36rpx}.code-field button,.section-head button,.line button{min-height:50rpx;padding:0 16rpx;margin:0;color:#1769d8;font-size:23rpx;line-height:48rpx;background:#f5f8ff;border:1rpx solid #8ab3ee;border-radius:8rpx}.code-field button::after,.section-head button::after,.line button::after,.save::after{border:0}.column{align-items:flex-start;flex-direction:column;padding:20rpx 24rpx}.column>text:first-child{width:auto}.column textarea{width:100%;height:120rpx;font-size:27rpx}.save{margin-top:32rpx;color:#fff;font-size:30rpx;background:#1769d8;border-radius:12rpx}.section-head{display:flex;align-items:center;justify-content:space-between;height:86rpx;padding:0 24rpx;border-bottom:1rpx solid #edf1f6}.section-head>text{font-size:29rpx;font-weight:600;color:#20334c}.line{display:flex;flex-direction:column;gap:8rpx;padding:20rpx 24rpx;border-bottom:1rpx solid #edf1f6}.line view{display:flex;justify-content:space-between;gap:16rpx}.line text{font-size:23rpx;color:#78879b}.line view text:first-child{font-size:27rpx;font-weight:600;color:#20334c}.line-actions{justify-content:flex-end!important}.state{padding:38rpx;color:#8795a8;font-size:26rpx;text-align:center}.compact{padding:24rpx}.mask{position:fixed;z-index:99;top:0;right:0;bottom:0;left:0;display:flex;align-items:flex-end;background:rgba(18,29,43,.42)}.selector{width:100%;max-height:78vh;overflow:auto;background:#fff;border-radius:24rpx 24rpx 0 0}.selector-head{display:flex;align-items:center;justify-content:space-between;height:92rpx;padding:0 30rpx;border-bottom:1rpx solid #edf1f6}.selector-head text:first-child{font-size:30rpx;font-weight:600;color:#20334c}.selector-head text:last-child{color:#1769d8;font-size:25rpx}.in-mask{margin:24rpx 30rpx 40rpx} |
| | | .page{min-height:100vh;padding:24rpx 30rpx 70rpx;background:#f6f7f9}.form-card,.section-card{overflow:hidden;background:#fff;border-radius:16rpx}.section-card{margin-top:24rpx}.field{display:flex;align-items:center;min-height:96rpx;padding:0 24rpx;gap:20rpx;border-bottom:1rpx solid #eef1f5}.field>text:first-child{width:190rpx;flex:none;color:#33455d;font-size:27rpx}.field input,.field picker,.picker,.value{min-width:0;flex:1;color:#1e3049;font-size:27rpx}.picker{display:flex;align-items:center;justify-content:space-between;color:#65758a}.picker text:first-child,.value{overflow:hidden;text-align:right;text-overflow:ellipsis;white-space:nowrap}.picker text:last-child{margin-left:16rpx;color:#8092a7;font-size:36rpx}.code-field button,.section-head button,.line button{min-height:50rpx;padding:0 16rpx;margin:0;color:var(--color-primary, #1769d8);font-size:23rpx;line-height:48rpx;background:var(--color-primary-soft, #f5f8ff);border:1rpx solid var(--color-primary-border, #8ab3ee);border-radius:8rpx}.code-field button::after,.section-head button::after,.line button::after,.save::after{border:0}.column{align-items:flex-start;flex-direction:column;padding:20rpx 24rpx}.column>text:first-child{width:auto}.column textarea{width:100%;height:120rpx;font-size:27rpx}.save{margin-top:32rpx;color:#fff;font-size:30rpx;background:var(--color-primary, #1769d8);border-radius:12rpx}.section-head{display:flex;align-items:center;justify-content:space-between;height:86rpx;padding:0 24rpx;border-bottom:1rpx solid #edf1f6}.section-head>text{font-size:29rpx;font-weight:600;color:#20334c}.line{display:flex;flex-direction:column;gap:8rpx;padding:20rpx 24rpx;border-bottom:1rpx solid #edf1f6}.line view{display:flex;justify-content:space-between;gap:16rpx}.line text{font-size:23rpx;color:#78879b}.line view text:first-child{font-size:27rpx;font-weight:600;color:#20334c}.line-actions{justify-content:flex-end!important}.state{padding:38rpx;color:#8795a8;font-size:26rpx;text-align:center}.compact{padding:24rpx}.mask{position:fixed;z-index:99;top:0;right:0;bottom:0;left:0;display:flex;align-items:flex-end;background:rgba(18,29,43,.42)}.selector{width:100%;max-height:78vh;overflow:auto;background:#fff;border-radius:24rpx 24rpx 0 0}.selector-head{display:flex;align-items:center;justify-content:space-between;height:92rpx;padding:0 30rpx;border-bottom:1rpx solid #edf1f6}.selector-head text:first-child{font-size:30rpx;font-weight:600;color:#20334c}.selector-head text:last-child{color:var(--color-primary, #1769d8);font-size:25rpx}.in-mask{margin:24rpx 30rpx 40rpx} |
| | | </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{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} |
| | | .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:var(--color-primary, #1769d8);font-size:24rpx}.content{height:0;flex:1;padding-bottom: 132rpx;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:var(--color-primary, #1769d8);background:var(--color-primary-soft, #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:var(--color-primary, #1769d8);font-size:22rpx;line-height:48rpx;background:var(--color-primary-soft, #f5f8ff);border:1rpx solid var(--color-primary-border, #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: 104rpx; height: 104rpx; min-height: 104rpx;padding:0;margin:0;background:var(--color-primary, #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 { 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 sparePartId = ref<number>(), repairCode = ref(""), type = ref<number>(), rows = ref<SpareMovement[]>([]), loading = ref(false), pageNo = ref(1), total = ref(0); |
| | | const pageSize = 15; |
| | | 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 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() { |
| | | const hasMore = computed(() => rows.value.length < total.value); |
| | | async function load(reset = true) { |
| | | if (!state.accessToken || !canQuery.value || loading.value) return; |
| | | if (reset) { pageNo.value = 1; total.value = 0; } |
| | | 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(); } |
| | | const data = await getSpareMovementPage(state.accessToken, { pageNo: pageNo.value, pageSize, sparePartId: sparePartId.value, repairCode: repairCode.value.trim() || undefined, type: type.value }); |
| | | rows.value = reset ? (data.list || []) : [...rows.value, ...(data.list || [])]; |
| | | total.value = Number(data.total || 0); |
| | | if (rows.value.length < total.value) pageNo.value += 1; |
| | | } 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; } |
| | | function loadMore() { if (hasMore.value) load(false); } |
| | | function changeType(value: string | number) { type.value = Number(value) || undefined; load(true); } |
| | | 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"}); |
| | | 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"}); } |
| | | 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(true); |
| | | } 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); |
| | | onLoad(query => { sparePartId.value = query.sparePartId ? Number(query.sparePartId) : undefined; }); |
| | | onShow(() => load(true)); |
| | | onPullDownRefresh(() => load(true)); |
| | | </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-if="canQuery" class="search"><input v-model="repairCode" placeholder="æç´¢ç»´ä¿®åå·" confirm-type="search" @confirm="load(true)" /><picker :range="['å
¨é¨','åå§åºå','å
¥åº','ç»´ä¿®é¢ç¨','éå']" @change="changeType($event.detail.value)"><view class="type-picker">{{type?labels[type]:'å
¨é¨ç±»å'}}<text>â¾</text></view></picker></view> |
| | | <scroll-view v-if="canQuery" class="content" scroll-y @scrolltolower="loadMore"> |
| | | <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> |
| | | <view v-if="!rows.length" class="state">{{loading?'å è½½ä¸...':'ææ é¢ç¨è®°å½'}}</view><view v-else class="state more">{{loading?'å è½½ä¸...':hasMore?'䏿å è½½æ´å¤':'æ²¡ææ´å¤äº'}}</view> |
| | | </scroll-view> |
| | | <view v-else class="state">ææ é¢ç¨è®°å½æ¥çæé</view> |
| | | </template> |
| | |
| | | </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} |
| | | .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:var(--color-primary, #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} |
| | | .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:var(--color-primary, #1769d8);background:var(--color-primary-soft, #eef6ff);border:1rpx solid var(--color-primary-border, #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:var(--color-primary, #1769d8);font-size:22rpx;line-height:48rpx;background:var(--color-primary-soft, #f5f8ff);border:1rpx solid var(--color-primary-border, #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:var(--color-primary, #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:var(--color-primary, #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><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:var(--color-primary, #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><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:var(--color-primary, #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> |
| | | import { computed, ref } from "vue"; |
| | | import { onPullDownRefresh, onShow } from "@dcloudio/uni-app"; |
| | | import { deleteSpare, getSparePage, type SparePart } from "../../../../api/mes-operations"; |
| | | import { useAuth } from "../../../../stores/auth"; |
| | | const { hasPermission, isLoggedIn, state } = useAuth(); |
| | | const keyword = ref(""), shortage = ref(false), rows = ref<SparePart[]>([]), loading = ref(false), pageNo = ref(1), total = ref(0); |
| | | const pageSize = 15; |
| | | const p = (action: string) => hasPermission("mes:dv-spare:" + action); |
| | | const canQuery = computed(() => p("query")), canCreate = computed(() => p("create")); |
| | | const hasMore = computed(() => rows.value.length < total.value); |
| | | async function load(reset = true) { |
| | | if (!state.accessToken || !canQuery.value || loading.value) return; |
| | | if (reset) { pageNo.value = 1; total.value = 0; } |
| | | loading.value = true; |
| | | try { |
| | | const data = await getSparePage(state.accessToken, { pageNo: pageNo.value, pageSize, name: keyword.value || undefined, shortageOnly: shortage.value || undefined }); |
| | | rows.value = reset ? (data.list || []) : [...rows.value, ...(data.list || [])]; |
| | | total.value = Number(data.total || 0); |
| | | if (rows.value.length < total.value) pageNo.value += 1; |
| | | } catch (error) { uni.showToast({ title: error instanceof Error ? error.message : "å 载失败", icon: "none" }); } |
| | | finally { loading.value = false; uni.stopPullDownRefresh(); } |
| | | } |
| | | function loadMore() { if (hasMore.value) load(false); } |
| | | function toggleShortage() { shortage.value = !shortage.value; load(true); } |
| | | function go(id?: number, mode = "edit") { uni.navigateTo({ url: "/pages/mes/dv/spare/form" + (id ? "?id=" + id + "&mode=" + mode : "") }); } |
| | | function action(type: string, item: SparePart) { uni.navigateTo({ url: "/pages/mes/dv/spare/action?type=" + type + "&sparePartId=" + item.id }); } |
| | | async function remove(item: SparePart) { |
| | | if (!state.accessToken || !item.id) return; |
| | | const ok = await new Promise<boolean>(resolve => uni.showModal({ title: "确认å é¤", content: "ç¡®å®å é¤è¯¥å¤ä»¶åï¼", success: result => resolve(result.confirm) })); |
| | | if (ok) { await deleteSpare(state.accessToken, item.id); load(true); } |
| | | } |
| | | onShow(() => load(true)); |
| | | onPullDownRefresh(() => load(true)); |
| | | </script><template><view class="page"><template v-if="isLoggedIn"><view v-if="canQuery" class="search"><input v-model="keyword" placeholder="æç´¢å¤ä»¶åç§°" @confirm="load(true)"/><text @click="toggleShortage">{{shortage?'å
¨é¨åºå':'ä»
çåºåä¸è¶³'}}</text></view><scroll-view v-if="canQuery" class="list" scroll-y @scrolltolower="loadMore"><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><view v-else class="state more">{{loading?'å è½½ä¸...':hasMore?'䏿å è½½æ´å¤':'æ²¡ææ´å¤äº'}}</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)} |
| | | .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:var(--color-primary, #1769d8);font-size:24rpx} |
| | | .list{height:0;flex:1;padding-bottom: 132rpx;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> |
| | | .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:var(--color-primary, #1769d8);font-size:22rpx;line-height:48rpx;background:var(--color-primary-soft, #f5f8ff);border:1rpx solid var(--color-primary-border, #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: 104rpx; height: 104rpx; min-height: 104rpx;padding:0;margin:0;background:var(--color-primary, #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{min-height:100vh;padding:24rpx 30rpx 70rpx;background:#f6f7f9}.form-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 #eef1f5}.field>text:first-child{width:190rpx;flex:none;color:#33455d;font-size:27rpx}.field input,.field picker,.picker,.value{min-width:0;flex:1;color:#1e3049;font-size:27rpx}.picker{display:flex;align-items:center;justify-content:space-between;color:#65758a}.picker text:first-child,.value{overflow:hidden;text-align:right;text-overflow:ellipsis;white-space:nowrap}.picker text:last-child{margin-left:16rpx;color:#8092a7;font-size:36rpx}.code-field button{flex:none;min-width:136rpx;padding:0 16rpx;margin:0;color:#1769d8;font-size:24rpx;line-height:56rpx;background:#fff;border:1rpx solid #1769d8;border-radius:8rpx}.code-field button::after,.save::after{border:0}.column{align-items:flex-start;flex-direction:column;padding:20rpx 24rpx}.column>text:first-child{width:auto}.column textarea{width:100%;height:130rpx;font-size:27rpx}.save{margin-top:32rpx;color:#fff;font-size:30rpx;background:#1769d8;border-radius:12rpx}.state{padding:38rpx;color:#8795a8;font-size:26rpx;text-align:center} |
| | | .page{min-height:100vh;padding:24rpx 30rpx 70rpx;background:#f6f7f9}.form-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 #eef1f5}.field>text:first-child{width:190rpx;flex:none;color:#33455d;font-size:27rpx}.field input,.field picker,.picker,.value{min-width:0;flex:1;color:#1e3049;font-size:27rpx}.picker{display:flex;align-items:center;justify-content:space-between;color:#65758a}.picker text:first-child,.value{overflow:hidden;text-align:right;text-overflow:ellipsis;white-space:nowrap}.picker text:last-child{margin-left:16rpx;color:#8092a7;font-size:36rpx}.code-field button{flex:none;min-width:136rpx;padding:0 16rpx;margin:0;color:var(--color-primary, #1769d8);font-size:24rpx;line-height:56rpx;background:#fff;border:1rpx solid var(--color-primary, #1769d8);border-radius:8rpx}.code-field button::after,.save::after{border:0}.column{align-items:flex-start;flex-direction:column;padding:20rpx 24rpx}.column>text:first-child{width:auto}.column textarea{width:100%;height:130rpx;font-size:27rpx}.save{margin-top:32rpx;color:#fff;font-size:30rpx;background:var(--color-primary, #1769d8);border-radius:12rpx}.state{padding:38rpx;color:#8795a8;font-size:26rpx;text-align:center} |
| | | </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{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} |
| | | .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:var(--color-primary, #1769d8);font-size:24rpx}.content{height:0;flex:1;padding-bottom: 132rpx;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:var(--color-primary, #1769d8);background:var(--color-primary-soft, #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:var(--color-primary, #1769d8);font-size:22rpx;font-weight:600;text-overflow:ellipsis;white-space:nowrap;background:var(--color-primary-soft, #eef5ff);border:1rpx solid var(--color-primary-border, #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:var(--color-primary, #1769d8);font-size:22rpx;line-height:48rpx;background:var(--color-primary-soft, #f5f8ff);border:1rpx solid var(--color-primary-border, #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: 104rpx; height: 104rpx; min-height: 104rpx;padding:0;margin:0;background:var(--color-primary, #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{min-height:100vh;padding:24rpx 30rpx 70rpx;box-sizing:border-box;background:#f6f7f9}.form-card,.tab-card{overflow:hidden;background:#fff;border-radius:16rpx}.tab-card{margin-top:20rpx}.field{display:flex;align-items:center;min-height:96rpx;padding:0 24rpx;gap:20rpx;border-bottom:1rpx solid #eef1f5}.field>text:first-child{width:190rpx;flex:none;color:#33455d;font-size:27rpx}.field input,.field picker,.picker,.value{min-width:0;flex:1;color:#1e3049;font-size:27rpx}.field input,.value{text-align:right}.picker{display:flex;align-items:center;justify-content:space-between;color:#65758a}.picker text:first-child,.value{overflow:hidden;text-align:right;text-overflow:ellipsis;white-space:nowrap}.picker text:last-child{margin-left:16rpx;color:#8092a7;font-size:36rpx}.required{color:#e23b3b}.switch{justify-content:space-between}.switch>text:first-child{width:auto}.code-field button,.section-head button,.selector-search button,.upload-head button{flex:none;min-width:100rpx;padding:0 14rpx;margin:0;color:#1769d8;font-size:24rpx;line-height:56rpx;background:#fff;border:1rpx solid #1769d8;border-radius:8rpx}.code-field button::after,.save::after,.section-head button::after,.line-actions button::after,.modal-actions button::after,.selector-search button::after,.upload-head button::after{border:0}.column{align-items:flex-start;flex-direction:column;padding:20rpx 24rpx}.column>text:first-child{width:auto}.column textarea{width:100%;height:140rpx;font-size:27rpx}.save{margin-top:32rpx;color:#fff;font-size:30rpx;background:#1769d8;border-radius:12rpx}.state{padding:38rpx;color:#8795a8;font-size:26rpx;text-align:center}.compact{padding:38rpx 0}.tabs{display:flex;height:84rpx;padding:0 20rpx;gap:14rpx;align-items:center;background:#f8fbff;overflow-x:auto}.tabs text{height:54rpx;padding:0 22rpx;flex:none;color:#5d7088;font-size:25rpx;line-height:54rpx;background:#eef3f9;border-radius:999rpx}.tabs text.active{color:#fff;font-weight:700;background:#1769d8}.section-head{display:flex;align-items:center;justify-content:space-between;padding:18rpx 24rpx;color:#10233f;font-size:28rpx;font-weight:700}.line{margin:0 20rpx 18rpx;padding:18rpx;border:1rpx solid #edf1f6;border-radius:12rpx}.line>view:first-child{display:flex;justify-content:space-between;gap:12rpx;margin-bottom:12rpx;color:#78879b;font-size:23rpx}.line-title{color:#10233f;font-size:28rpx;font-weight:700}.line>text{display:block;margin-top:8rpx;color:#66778c;font-size:23rpx}.media-img{display:block;width:160rpx;height:120rpx;margin:10rpx 0;border-radius:10rpx;background:#f4f6f9}.line-actions{display:flex;justify-content:flex-end;gap:12rpx;margin-top:14rpx}.line-actions button{min-height:50rpx;padding:0 18rpx;margin:0;color:#1769d8;font-size:23rpx;line-height:48rpx;background:#f5f8ff;border:1rpx solid #8ab3ee;border-radius:8rpx}.line-actions .danger{color:#c65050;background:#fff7f7;border-color:#e3a0a0}.checks{display:grid;grid-template-columns:repeat(2,1fr);gap:18rpx;padding:20rpx 24rpx 30rpx}.checks label{font-size:26rpx;color:#33455d}.mask{position:fixed;inset:0;z-index:900;display:flex;align-items:center;justify-content:center;padding:0 28rpx;background:rgba(16,35,63,.45)}.modal{width:100%;max-height:88vh;overflow-y:auto;background:#fff;border-radius:20rpx}.modal-title{padding:26rpx 28rpx;color:#10233f;font-size:30rpx;font-weight:700}.selector-search{display:flex;gap:12rpx;padding:0 24rpx 18rpx}.selector-search input{height:64rpx;flex:1;padding:0 18rpx;font-size:25rpx;background:#f5f7fb;border-radius:10rpx}.selector-layout{display:flex;height:430rpx;border-top:1rpx solid #eef1f5;border-bottom:1rpx solid #eef1f5}.selector-tree{width:190rpx;background:#f8fbff}.cat{min-height:64rpx;padding:0 14rpx;color:#5e7088;font-size:23rpx;line-height:64rpx;border-bottom:1rpx solid #edf1f6}.cat.active{color:#1769d8;font-weight:700;background:#eaf3ff}.selector-list{flex:1;padding:14rpx}.material{padding:16rpx;border-bottom:1rpx solid #eef1f5}.material.selected{background:#edf5ff;border-radius:10rpx}.material text{display:block}.material text:first-child{color:#10233f;font-size:26rpx;font-weight:700}.material text:last-child{margin-top:8rpx;color:#66778c;font-size:22rpx}.upload-head{display:flex;align-items:center;justify-content:space-between;width:100%;color:#33455d;font-size:27rpx}.upload-image{position:relative;width:160rpx;height:120rpx;margin-top:14rpx}.upload-image image{width:160rpx;height:120rpx;border-radius:10rpx;background:#f4f6f9}.upload-image text{position:absolute;right:0;top:0;padding:4rpx 12rpx;color:#fff;font-size:22rpx;background:rgba(0,0,0,.52);border-radius:0 10rpx 0 10rpx}.upload-empty{margin-top:14rpx;color:#8a99ac;font-size:24rpx}.modal-actions{display:flex;justify-content:flex-end;gap:16rpx;padding:20rpx 24rpx 28rpx}.modal-actions button{height:72rpx;min-height:72rpx;padding:0 34rpx;margin:0;font-size:26rpx;line-height:70rpx;border-radius:36rpx}.ghost{color:#1769d8;background:#f2f6fc;border:1rpx solid #cfe0f7}.primary{color:#fff;background:#1769d8} |
| | | .page{min-height:100vh;padding:24rpx 30rpx 70rpx;box-sizing:border-box;background:#f6f7f9}.form-card,.tab-card{overflow:hidden;background:#fff;border-radius:16rpx}.tab-card{margin-top:20rpx}.field{display:flex;align-items:center;min-height:96rpx;padding:0 24rpx;gap:20rpx;border-bottom:1rpx solid #eef1f5}.field>text:first-child{width:190rpx;flex:none;color:#33455d;font-size:27rpx}.field input,.field picker,.picker,.value{min-width:0;flex:1;color:#1e3049;font-size:27rpx}.field input,.value{text-align:right}.picker{display:flex;align-items:center;justify-content:space-between;color:#65758a}.picker text:first-child,.value{overflow:hidden;text-align:right;text-overflow:ellipsis;white-space:nowrap}.picker text:last-child{margin-left:16rpx;color:#8092a7;font-size:36rpx}.required{color:#e23b3b}.switch{justify-content:space-between}.switch>text:first-child{width:auto}.code-field button,.section-head button,.selector-search button,.upload-head button{flex:none;min-width:100rpx;padding:0 14rpx;margin:0;color:var(--color-primary, #1769d8);font-size:24rpx;line-height:56rpx;background:#fff;border:1rpx solid var(--color-primary, #1769d8);border-radius:8rpx}.code-field button::after,.save::after,.section-head button::after,.line-actions button::after,.modal-actions button::after,.selector-search button::after,.upload-head button::after{border:0}.column{align-items:flex-start;flex-direction:column;padding:20rpx 24rpx}.column>text:first-child{width:auto}.column textarea{width:100%;height:140rpx;font-size:27rpx}.save{margin-top:32rpx;color:#fff;font-size:30rpx;background:var(--color-primary, #1769d8);border-radius:12rpx}.state{padding:38rpx;color:#8795a8;font-size:26rpx;text-align:center}.compact{padding:38rpx 0}.tabs{display:flex;height:84rpx;padding:0 20rpx;gap:14rpx;align-items:center;background:#f8fbff;overflow-x:auto}.tabs text{height:54rpx;padding:0 22rpx;flex:none;color:#5d7088;font-size:25rpx;line-height:54rpx;background:#eef3f9;border-radius:999rpx}.tabs text.active{color:#fff;font-weight:700;background:var(--color-primary, #1769d8)}.section-head{display:flex;align-items:center;justify-content:space-between;padding:18rpx 24rpx;color:#10233f;font-size:28rpx;font-weight:700}.line{margin:0 20rpx 18rpx;padding:18rpx;border:1rpx solid #edf1f6;border-radius:12rpx}.line>view:first-child{display:flex;justify-content:space-between;gap:12rpx;margin-bottom:12rpx;color:#78879b;font-size:23rpx}.line-title{color:#10233f;font-size:28rpx;font-weight:700}.line>text{display:block;margin-top:8rpx;color:#66778c;font-size:23rpx}.media-img{display:block;width:160rpx;height:120rpx;margin:10rpx 0;border-radius:10rpx;background:#f4f6f9}.line-actions{display:flex;justify-content:flex-end;gap:12rpx;margin-top:14rpx}.line-actions button{min-height:50rpx;padding:0 18rpx;margin:0;color:var(--color-primary, #1769d8);font-size:23rpx;line-height:48rpx;background:var(--color-primary-soft, #f5f8ff);border:1rpx solid var(--color-primary-border, #8ab3ee);border-radius:8rpx}.line-actions .danger{color:#c65050;background:#fff7f7;border-color:#e3a0a0}.checks{display:grid;grid-template-columns:repeat(2,1fr);gap:18rpx;padding:20rpx 24rpx 30rpx}.checks label{font-size:26rpx;color:#33455d}.mask{position:fixed;inset:0;z-index:900;display:flex;align-items:center;justify-content:center;padding:0 28rpx;background:rgba(16,35,63,.45)}.modal{width:100%;max-height:88vh;overflow-y:auto;background:#fff;border-radius:20rpx}.modal-title{padding:26rpx 28rpx;color:#10233f;font-size:30rpx;font-weight:700}.selector-search{display:flex;gap:12rpx;padding:0 24rpx 18rpx}.selector-search input{height:64rpx;flex:1;padding:0 18rpx;font-size:25rpx;background:#f5f7fb;border-radius:10rpx}.selector-layout{display:flex;height:430rpx;border-top:1rpx solid #eef1f5;border-bottom:1rpx solid #eef1f5}.selector-tree{width:190rpx;background:#f8fbff}.cat{min-height:64rpx;padding:0 14rpx;color:#5e7088;font-size:23rpx;line-height:64rpx;border-bottom:1rpx solid #edf1f6}.cat.active{color:var(--color-primary, #1769d8);font-weight:700;background:#eaf3ff}.selector-list{flex:1;padding:14rpx}.material{padding:16rpx;border-bottom:1rpx solid #eef1f5}.material.selected{background:var(--color-primary-soft, #edf5ff);border-radius:10rpx}.material text{display:block}.material text:first-child{color:#10233f;font-size:26rpx;font-weight:700}.material text:last-child{margin-top:8rpx;color:#66778c;font-size:22rpx}.upload-head{display:flex;align-items:center;justify-content:space-between;width:100%;color:#33455d;font-size:27rpx}.upload-image{position:relative;width:160rpx;height:120rpx;margin-top:14rpx}.upload-image image{width:160rpx;height:120rpx;border-radius:10rpx;background:#f4f6f9}.upload-image text{position:absolute;right:0;top:0;padding:4rpx 12rpx;color:#fff;font-size:22rpx;background:rgba(0,0,0,.52);border-radius:0 10rpx 0 10rpx}.upload-empty{margin-top:14rpx;color:#8a99ac;font-size:24rpx}.modal-actions{display:flex;justify-content:flex-end;gap:16rpx;padding:20rpx 24rpx 28rpx}.modal-actions button{height:72rpx;min-height:72rpx;padding:0 34rpx;margin:0;font-size:26rpx;line-height:70rpx;border-radius:36rpx}.ghost{color:var(--color-primary, #1769d8);background:#f2f6fc;border:1rpx solid #cfe0f7}.primary{color:#fff;background:var(--color-primary, #1769d8)} |
| | | </style> |
| | |
| | | </template> |
| | | |
| | | <style lang="scss" scoped> |
| | | .page{height:100vh;display:flex;flex-direction:column;padding:0 20rpx;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}.body{display:flex;min-height:0;flex:1;gap:16rpx}.category-tree{width:180rpx;height:100%;flex:none;padding-bottom:150rpx;box-sizing:border-box}.cat{min-height:66rpx;padding-right:12rpx;color:#5e7088;font-size:23rpx;line-height:66rpx;background:#fff;border-bottom:1rpx solid #edf1f6}.cat.active{color:#1769d8;font-weight:700;background:#eaf3ff}.content{height:100%;min-width: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-enabled{color:#17865a;background:#eafaf2;border:1rpx solid #b8efd5}.tag-disabled{color:#66778c;background:#f6f8fb;border:1rpx solid #dce4ee}.tag-line{display:flex;gap:12rpx;margin-top:14rpx}.tag-line text{display:inline-flex;height:36rpx;align-items:center;padding:0 14rpx;color:#1769d8;font-size:21rpx;font-weight:600;background:#edf5ff;border:1rpx solid #cfe1fb;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 button::after{border:0}.actions .danger{color:#c65050;background:#fff7f7;border-color:#e3a0a0}.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} |
| | | .page{height:100vh;display:flex;flex-direction:column;padding:0 20rpx;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:var(--color-primary, #1769d8);font-size:24rpx}.body{display:flex;min-height:0;flex:1;gap:16rpx}.category-tree{width:180rpx;height:100%;flex:none;padding-bottom:150rpx;box-sizing:border-box}.cat{min-height:66rpx;padding-right:12rpx;color:#5e7088;font-size:23rpx;line-height:66rpx;background:#fff;border-bottom:1rpx solid #edf1f6}.cat.active{color:var(--color-primary, #1769d8);font-weight:700;background:#eaf3ff}.content{height:100%;min-width: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-enabled{color:#17865a;background:#eafaf2;border:1rpx solid #b8efd5}.tag-disabled{color:#66778c;background:#f6f8fb;border:1rpx solid #dce4ee}.tag-line{display:flex;gap:12rpx;margin-top:14rpx}.tag-line text{display:inline-flex;height:36rpx;align-items:center;padding:0 14rpx;color:var(--color-primary, #1769d8);font-size:21rpx;font-weight:600;background:var(--color-primary-soft, #edf5ff);border:1rpx solid #cfe1fb;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:var(--color-primary, #1769d8);font-size:22rpx;line-height:48rpx;background:var(--color-primary-soft, #f5f8ff);border:1rpx solid var(--color-primary-border, #8ab3ee);border-radius:8rpx}.actions button::after{border:0}.actions .danger{color:#c65050;background:#fff7f7;border-color:#e3a0a0}.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} |
| | | </style> |
| | |
| | | </template> |
| | | |
| | | <style lang="scss" scoped> |
| | | .page{min-height:100vh;padding:24rpx 30rpx 70rpx;box-sizing:border-box;background:#f6f7f9}.form-card,.tab-card{overflow:hidden;background:#fff;border-radius:16rpx}.tab-card{margin-top:20rpx}.field{display:flex;align-items:center;min-height:96rpx;padding:0 24rpx;gap:20rpx;border-bottom:1rpx solid #eef1f5}.field>text:first-child{width:190rpx;flex:none;color:#33455d;font-size:27rpx}.field input,.field picker,.picker,.value{min-width:0;flex:1;color:#1e3049;font-size:27rpx}.field input,.value{text-align:right}.picker{display:flex;align-items:center;justify-content:space-between;color:#65758a}.picker text:first-child,.value{overflow:hidden;text-align:right;text-overflow:ellipsis;white-space:nowrap}.picker text:last-child{margin-left:16rpx;color:#8092a7;font-size:36rpx}.required{color:#e23b3b}.code-field button,.section-head button{flex:none;min-width:100rpx;padding:0 14rpx;margin:0;color:#1769d8;font-size:24rpx;line-height:56rpx;background:#fff;border:1rpx solid #1769d8;border-radius:8rpx}.code-field button::after,.save::after,.section-head button::after,.line-actions button::after,.modal-actions button::after{border:0}.column{align-items:flex-start;flex-direction:column;padding:20rpx 24rpx}.column>text:first-child{width:auto}.column textarea{width:100%;height:140rpx;font-size:27rpx}.save{margin-top:32rpx;color:#fff;font-size:30rpx;background:#1769d8;border-radius:12rpx}.state{padding:38rpx;color:#8795a8;font-size:26rpx;text-align:center}.compact{padding:38rpx 0}.tabs{display:flex;height:84rpx;padding:0 20rpx;gap:14rpx;align-items:center;background:#f8fbff}.tabs text{height:54rpx;padding:0 22rpx;color:#5d7088;font-size:25rpx;line-height:54rpx;background:#eef3f9;border-radius:999rpx}.tabs text.active{color:#fff;font-weight:700;background:#1769d8}.section-head{display:flex;align-items:center;justify-content:space-between;padding:18rpx 24rpx;color:#10233f;font-size:28rpx;font-weight:700}.line{margin:0 20rpx 18rpx;padding:18rpx;border:1rpx solid #edf1f6;border-radius:12rpx}.line>view:first-child{display:flex;justify-content:space-between;gap:12rpx;margin-bottom:12rpx;color:#78879b;font-size:23rpx}.line-title{color:#10233f;font-size:28rpx;font-weight:700}.line>text{display:block;margin-top:8rpx;color:#66778c;font-size:23rpx}.line-actions{display:flex;justify-content:flex-end;gap:12rpx;margin-top:14rpx}.line-actions button{min-height:50rpx;padding:0 18rpx;margin:0;color:#1769d8;font-size:23rpx;line-height:48rpx;background:#f5f8ff;border:1rpx solid #8ab3ee;border-radius:8rpx}.line-actions .danger{color:#c65050;background:#fff7f7;border-color:#e3a0a0}.mask{position:fixed;inset:0;z-index:900;display:flex;align-items:center;justify-content:center;padding:0 34rpx;background:rgba(16,35,63,.45)}.modal{width:100%;max-height:84vh;overflow-y:auto;background:#fff;border-radius:20rpx}.modal-title{padding:26rpx 28rpx;color:#10233f;font-size:30rpx;font-weight:700}.modal-actions{display:flex;justify-content:flex-end;gap:16rpx;padding:20rpx 24rpx 28rpx}.modal-actions button{height:72rpx;min-height:72rpx;padding:0 34rpx;margin:0;font-size:26rpx;line-height:70rpx;border-radius:36rpx}.ghost{color:#1769d8;background:#f2f6fc;border:1rpx solid #cfe0f7}.primary{color:#fff;background:#1769d8} |
| | | .page{min-height:100vh;padding:24rpx 30rpx 70rpx;box-sizing:border-box;background:#f6f7f9}.form-card,.tab-card{overflow:hidden;background:#fff;border-radius:16rpx}.tab-card{margin-top:20rpx}.field{display:flex;align-items:center;min-height:96rpx;padding:0 24rpx;gap:20rpx;border-bottom:1rpx solid #eef1f5}.field>text:first-child{width:190rpx;flex:none;color:#33455d;font-size:27rpx}.field input,.field picker,.picker,.value{min-width:0;flex:1;color:#1e3049;font-size:27rpx}.field input,.value{text-align:right}.picker{display:flex;align-items:center;justify-content:space-between;color:#65758a}.picker text:first-child,.value{overflow:hidden;text-align:right;text-overflow:ellipsis;white-space:nowrap}.picker text:last-child{margin-left:16rpx;color:#8092a7;font-size:36rpx}.required{color:#e23b3b}.code-field button,.section-head button{flex:none;min-width:100rpx;padding:0 14rpx;margin:0;color:var(--color-primary, #1769d8);font-size:24rpx;line-height:56rpx;background:#fff;border:1rpx solid var(--color-primary, #1769d8);border-radius:8rpx}.code-field button::after,.save::after,.section-head button::after,.line-actions button::after,.modal-actions button::after{border:0}.column{align-items:flex-start;flex-direction:column;padding:20rpx 24rpx}.column>text:first-child{width:auto}.column textarea{width:100%;height:140rpx;font-size:27rpx}.save{margin-top:32rpx;color:#fff;font-size:30rpx;background:var(--color-primary, #1769d8);border-radius:12rpx}.state{padding:38rpx;color:#8795a8;font-size:26rpx;text-align:center}.compact{padding:38rpx 0}.tabs{display:flex;height:84rpx;padding:0 20rpx;gap:14rpx;align-items:center;background:#f8fbff}.tabs text{height:54rpx;padding:0 22rpx;color:#5d7088;font-size:25rpx;line-height:54rpx;background:#eef3f9;border-radius:999rpx}.tabs text.active{color:#fff;font-weight:700;background:var(--color-primary, #1769d8)}.section-head{display:flex;align-items:center;justify-content:space-between;padding:18rpx 24rpx;color:#10233f;font-size:28rpx;font-weight:700}.line{margin:0 20rpx 18rpx;padding:18rpx;border:1rpx solid #edf1f6;border-radius:12rpx}.line>view:first-child{display:flex;justify-content:space-between;gap:12rpx;margin-bottom:12rpx;color:#78879b;font-size:23rpx}.line-title{color:#10233f;font-size:28rpx;font-weight:700}.line>text{display:block;margin-top:8rpx;color:#66778c;font-size:23rpx}.line-actions{display:flex;justify-content:flex-end;gap:12rpx;margin-top:14rpx}.line-actions button{min-height:50rpx;padding:0 18rpx;margin:0;color:var(--color-primary, #1769d8);font-size:23rpx;line-height:48rpx;background:var(--color-primary-soft, #f5f8ff);border:1rpx solid var(--color-primary-border, #8ab3ee);border-radius:8rpx}.line-actions .danger{color:#c65050;background:#fff7f7;border-color:#e3a0a0}.mask{position:fixed;inset:0;z-index:900;display:flex;align-items:center;justify-content:center;padding:0 34rpx;background:rgba(16,35,63,.45)}.modal{width:100%;max-height:84vh;overflow-y:auto;background:#fff;border-radius:20rpx}.modal-title{padding:26rpx 28rpx;color:#10233f;font-size:30rpx;font-weight:700}.modal-actions{display:flex;justify-content:flex-end;gap:16rpx;padding:20rpx 24rpx 28rpx}.modal-actions button{height:72rpx;min-height:72rpx;padding:0 34rpx;margin:0;font-size:26rpx;line-height:70rpx;border-radius:36rpx}.ghost{color:var(--color-primary, #1769d8);background:#f2f6fc;border:1rpx solid #cfe0f7}.primary{color:#fff;background:var(--color-primary, #1769d8)} |
| | | </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-enabled{color:#17865a;background:#eafaf2;border:1rpx solid #b8efd5}.tag-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 button::after,.fab::after{border:0}.actions .danger{color:#c65050;background:#fff7f7;border-color:#e3a0a0}.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}.fab{position:fixed;right:32rpx;bottom:56rpx;display:flex;width:100rpx;height:100rpx;align-items:center;justify-content:center;padding:0;margin:0;background:#1769d8;border-radius:50%;box-shadow:0 14rpx 28rpx rgba(23,105,216,.32)}.fab view{position:relative;width:38rpx;height:38rpx}.fab view::before,.fab view::after{position:absolute;content:"";background:#fff;border-radius:3rpx}.fab view::before{top:17rpx;left:0;width:38rpx;height:4rpx}.fab view::after{top:0;left:17rpx;width:4rpx;height:38rpx} |
| | | .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:var(--color-primary, #1769d8);font-size:24rpx}.content{height:0;flex:1;padding-bottom: 132rpx;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-enabled{color:#17865a;background:#eafaf2;border:1rpx solid #b8efd5}.tag-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:var(--color-primary, #1769d8);font-size:22rpx;line-height:48rpx;background:var(--color-primary-soft, #f5f8ff);border:1rpx solid var(--color-primary-border, #8ab3ee);border-radius:8rpx}.actions button::after,.fab::after{border:0}.actions .danger{color:#c65050;background:#fff7f7;border-color:#e3a0a0}.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}.fab{position:fixed;right:32rpx;bottom:56rpx;display:flex;width:100rpx;height:100rpx;align-items:center;justify-content:center;padding:0;margin:0;background:var(--color-primary, #1769d8);border-radius:50%;box-shadow:0 14rpx 28rpx rgba(23,105,216,.32)}.fab view{position:relative;width:38rpx;height:38rpx}.fab view::before,.fab view::after{position:absolute;content:"";background:#fff;border-radius:3rpx}.fab view::before{top:17rpx;left:0;width:38rpx;height:4rpx}.fab view::after{top:0;left:17rpx;width:4rpx;height:38rpx} |
| | | </style> |
| | |
| | | </template> |
| | | |
| | | <style lang="scss" scoped> |
| | | .page{min-height:100vh;padding:24rpx 30rpx 70rpx;box-sizing:border-box;background:#f6f7f9}.form-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 #eef1f5}.field>text:first-child{width:190rpx;flex:none;color:#33455d;font-size:27rpx}.field input,.field picker,.picker,.value{min-width:0;flex:1;color:#1e3049;font-size:27rpx}.field input,.value{text-align:right}.picker{display:flex;align-items:center;justify-content:space-between;color:#65758a}.picker text:first-child,.value{overflow:hidden;text-align:right;text-overflow:ellipsis;white-space:nowrap}.picker text:last-child{margin-left:16rpx;color:#8092a7;font-size:36rpx}.required{color:#e23b3b}.code-field button{flex:none;min-width:100rpx;padding:0 14rpx;margin:0;color:#1769d8;font-size:24rpx;line-height:56rpx;background:#fff;border:1rpx solid #1769d8;border-radius:8rpx}.code-field button::after,.save::after{border:0}.column{align-items:flex-start;flex-direction:column;padding:20rpx 24rpx}.column>text:first-child{width:auto}.column textarea{width:100%;height:140rpx;font-size:27rpx}.save{margin-top:32rpx;color:#fff;font-size:30rpx;background:#1769d8;border-radius:12rpx}.state{padding:38rpx;color:#8795a8;font-size:26rpx;text-align:center} |
| | | .page{min-height:100vh;padding:24rpx 30rpx 70rpx;box-sizing:border-box;background:#f6f7f9}.form-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 #eef1f5}.field>text:first-child{width:190rpx;flex:none;color:#33455d;font-size:27rpx}.field input,.field picker,.picker,.value{min-width:0;flex:1;color:#1e3049;font-size:27rpx}.field input,.value{text-align:right}.picker{display:flex;align-items:center;justify-content:space-between;color:#65758a}.picker text:first-child,.value{overflow:hidden;text-align:right;text-overflow:ellipsis;white-space:nowrap}.picker text:last-child{margin-left:16rpx;color:#8092a7;font-size:36rpx}.required{color:#e23b3b}.code-field button{flex:none;min-width:100rpx;padding:0 14rpx;margin:0;color:var(--color-primary, #1769d8);font-size:24rpx;line-height:56rpx;background:#fff;border:1rpx solid var(--color-primary, #1769d8);border-radius:8rpx}.code-field button::after,.save::after{border:0}.column{align-items:flex-start;flex-direction:column;padding:20rpx 24rpx}.column>text:first-child{width:auto}.column textarea{width:100%;height:140rpx;font-size:27rpx}.save{margin-top:32rpx;color:#fff;font-size:30rpx;background:var(--color-primary, #1769d8);border-radius:12rpx}.state{padding:38rpx;color:#8795a8;font-size:26rpx;text-align:center} |
| | | </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-enabled{color:#17865a;background:#eafaf2;border:1rpx solid #b8efd5}.tag-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 button::after,.fab::after{border:0}.actions .danger{color:#c65050;background:#fff7f7;border-color:#e3a0a0}.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}.fab{position:fixed;right:32rpx;bottom:56rpx;display:flex;width:100rpx;height:100rpx;align-items:center;justify-content:center;padding:0;margin:0;background:#1769d8;border-radius:50%;box-shadow:0 14rpx 28rpx rgba(23,105,216,.32)}.fab view{position:relative;width:38rpx;height:38rpx}.fab view::before,.fab view::after{position:absolute;content:"";background:#fff;border-radius:3rpx}.fab view::before{top:17rpx;left:0;width:38rpx;height:4rpx}.fab view::after{top:0;left:17rpx;width:4rpx;height:38rpx} |
| | | .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:var(--color-primary, #1769d8);font-size:24rpx}.content{height:0;flex:1;padding-bottom: 132rpx;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-enabled{color:#17865a;background:#eafaf2;border:1rpx solid #b8efd5}.tag-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:var(--color-primary, #1769d8);font-size:22rpx;line-height:48rpx;background:var(--color-primary-soft, #f5f8ff);border:1rpx solid var(--color-primary-border, #8ab3ee);border-radius:8rpx}.actions button::after,.fab::after{border:0}.actions .danger{color:#c65050;background:#fff7f7;border-color:#e3a0a0}.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}.fab{position:fixed;right:32rpx;bottom:56rpx;display:flex;width:100rpx;height:100rpx;align-items:center;justify-content:center;padding:0;margin:0;background:var(--color-primary, #1769d8);border-radius:50%;box-shadow:0 14rpx 28rpx rgba(23,105,216,.32)}.fab view{position:relative;width:38rpx;height:38rpx}.fab view::before,.fab view::after{position:absolute;content:"";background:#fff;border-radius:3rpx}.fab view::before{top:17rpx;left:0;width:38rpx;height:4rpx}.fab view::after{top:0;left:17rpx;width:4rpx;height:38rpx} |
| | | </style> |
| | |
| | | .tabs-scroll{width:100%;white-space:nowrap;margin-bottom:16rpx} |
| | | .tabs{display:inline-flex;gap:12rpx} |
| | | .tab{padding:14rpx 26rpx;color:#617287;font-size:25rpx;background:#fff;border-radius:14rpx} |
| | | .tab.on{color:#fff;background:#1769d8} |
| | | .tab.on{color:#fff;background:var(--color-primary, #1769d8)} |
| | | .card{padding:24rpx 22rpx;margin-bottom:18rpx;background:#fff;border-radius:16rpx;box-shadow:0 10rpx 24rpx rgba(43,69,107,.08)} |
| | | .card-title{padding-bottom:14rpx;color:#20334c;font-size:28rpx;font-weight:600;border-bottom:1rpx solid #edf1f6} |
| | | .grid{display:grid;gap:10rpx;padding-top:16rpx;color:#66778c;font-size:23rpx} |
| | |
| | | .sub-item:last-child{border-bottom:0} |
| | | .sub-head{display:flex;align-items:center;justify-content:space-between;gap:14rpx} |
| | | .sub-name{min-width:0;flex:1;overflow:hidden;color:#20334c;font-size:26rpx;font-weight:600;text-overflow:ellipsis;white-space:nowrap} |
| | | .sub-tag{flex:none;padding:5rpx 14rpx;color:#1769d8;font-size:22rpx;background:#f2f6fc;border:1rpx solid #d5e4f7;border-radius:8rpx} |
| | | .sub-tag{flex:none;padding:5rpx 14rpx;color:var(--color-primary, #1769d8);font-size:22rpx;background:#f2f6fc;border:1rpx solid #d5e4f7;border-radius:8rpx} |
| | | .sub-grid{display:grid;gap:8rpx;padding-top:12rpx;color:#66778c;font-size:23rpx} |
| | | .sub-grid text{overflow:hidden;text-overflow:ellipsis;white-space:nowrap} |
| | | .sub-actions{display:flex;justify-content:flex-end;padding-top:12rpx} |
| | | .sub-actions button{min-height:50rpx;padding:0 18rpx;margin:0;color:#1769d8;font-size:22rpx;line-height:48rpx;background:#f5f8ff;border:1rpx solid #8ab3ee;border-radius:8rpx} |
| | | .sub-actions button{min-height:50rpx;padding:0 18rpx;margin:0;color:var(--color-primary, #1769d8);font-size:22rpx;line-height:48rpx;background:var(--color-primary-soft, #f5f8ff);border:1rpx solid var(--color-primary-border, #8ab3ee);border-radius:8rpx} |
| | | .sub-actions button::after{border:0} |
| | | .sub-empty{padding:30rpx 0;color:#9aa8ba;font-size:24rpx;text-align:center} |
| | | .state{padding:60rpx 20rpx;color:#8795a8;font-size:25rpx;text-align:center} |
| | |
| | | .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} |
| | | .search text{color:var(--color-primary, #1769d8);font-size:24rpx} |
| | | .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} |
| | |
| | | |
| | | <style lang="scss" scoped> |
| | | .page{display:flex;height:100vh;flex-direction:column;overflow:hidden;background:#f3f6fb} |
| | | .content{height:0;flex:1;padding:20rpx 30rpx 150rpx;box-sizing:border-box} |
| | | .content{height:0;flex:1;padding: 20rpx 30rpx 132rpx;box-sizing:border-box} |
| | | .item{padding:22rpx;margin-bottom:16rpx;background:#fff;border-radius:16rpx;box-shadow:0 10rpx 24rpx rgba(43,69,107,.08)} |
| | | .item-head{display:flex;align-items:center;justify-content:space-between;gap:14rpx} |
| | | .head-main{display:flex;min-width:0;flex:1;flex-direction:column;gap:8rpx} |
| | | .head-main .item-code{color:#78879b;font-size:23rpx} |
| | | .item-name{overflow:hidden;color:#20334c;font-size:28rpx;font-weight:600;text-overflow:ellipsis;white-space:nowrap} |
| | | .item-tag{flex:none;padding:5rpx 14rpx;color:#1769d8;font-size:23rpx;font-weight:600;background:#f2f6fc;border:1rpx solid #d5e4f7;border-radius:8rpx} |
| | | .item-tag{flex:none;padding:5rpx 14rpx;color:var(--color-primary, #1769d8);font-size:23rpx;font-weight:600;background:#f2f6fc;border:1rpx solid #d5e4f7;border-radius:8rpx} |
| | | .item-grid{display:grid;gap:8rpx;padding:14rpx 0;margin-top:14rpx;color:#66778c;font-size:23rpx;border-top:1rpx solid #edf1f6} |
| | | .item-grid text{overflow:hidden;text-overflow:ellipsis;white-space:nowrap} |
| | | .actions{display:flex;flex-wrap:wrap;justify-content:flex-end;gap:12rpx;padding-top:12rpx;border-top:1rpx solid #edf1f6} |
| | | .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{min-height:50rpx;padding:0 16rpx;margin:0;color:var(--color-primary, #1769d8);font-size:22rpx;line-height:48rpx;background:var(--color-primary-soft, #f5f8ff);border:1rpx solid var(--color-primary-border, #8ab3ee);border-radius:8rpx} |
| | | .actions button::after{border:0} |
| | | .actions .danger{color:#c65050;background:#fff7f7;border-color:#e3a0a0} |
| | | .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} |
| | | .fab{position:fixed;right:32rpx;bottom:56rpx;display:flex;width:100rpx;height:100rpx;align-items:center;justify-content:center;padding:0;margin:0;background:#1769d8;border-radius:50%;box-shadow:0 14rpx 28rpx rgba(23,105,216,.32)} |
| | | .fab{position:fixed;right:32rpx;bottom:56rpx;display:flex;width:100rpx;height:100rpx;align-items:center;justify-content:center;padding:0;margin:0;background:var(--color-primary, #1769d8);border-radius:50%;box-shadow:0 14rpx 28rpx rgba(23,105,216,.32)} |
| | | .fab::after{border:0} |
| | | .fab view{position:relative;width:38rpx;height:38rpx} |
| | | .fab view::before,.fab view::after{position:absolute;content:"";background:#fff;border-radius:3rpx} |
| | |
| | | .modal{display:flex;width:100%;max-height:84vh;flex-direction:column;background:#fff;border-radius:24rpx 24rpx 0 0} |
| | | .modal-head{display:flex;align-items:center;justify-content:space-between;height:96rpx;padding:0 28rpx;border-bottom:1rpx solid #edf1f6} |
| | | .modal-head text:first-child{color:#10233f;font-size:30rpx;font-weight:600} |
| | | .modal-close{color:#1769d8;font-size:25rpx} |
| | | .modal-close{color:var(--color-primary, #1769d8);font-size:25rpx} |
| | | .modal-body{flex:1;padding:0 28rpx;box-sizing:border-box} |
| | | .modal-foot{display:flex;gap:16rpx;padding:18rpx 28rpx 34rpx;border-top:1rpx solid #edf1f6} |
| | | .modal-foot button{flex:1;height:80rpx;margin:0;font-size:28rpx;line-height:80rpx;border-radius:40rpx} |
| | | .modal-foot button::after{border:0} |
| | | .modal-foot .primary{color:#fff;background:#1769d8} |
| | | .modal-foot .ghost{color:#1769d8;background:#f2f6fc;border:1rpx solid #cfe0f7} |
| | | .modal-foot .primary{color:#fff;background:var(--color-primary, #1769d8)} |
| | | .modal-foot .ghost{color:var(--color-primary, #1769d8);background:#f2f6fc;border:1rpx solid #cfe0f7} |
| | | .field{display:flex;align-items:center;min-height:96rpx;gap:20rpx;border-bottom:1rpx solid #f2f5f9} |
| | | .field.column{align-items:flex-start;flex-direction:column;padding:20rpx 0;gap:12rpx} |
| | | .label{width:180rpx;flex:none;color:#44586f;font-size:26rpx} |
| | |
| | | .card{padding:24rpx 22rpx;margin:20rpx 30rpx 0;background:#fff;border-radius:16rpx;box-shadow:0 10rpx 24rpx rgba(43,69,107,.08)} |
| | | .title-row{display:flex;align-items:flex-start;justify-content:space-between;gap:16rpx} |
| | | .title{min-width:0;flex:1;color:#20334c;font-size:32rpx;font-weight:600} |
| | | .status{flex:none;padding:6rpx 18rpx;color:#1769d8;font-size:23rpx;background:#edf5ff;border:1rpx solid #bfdbff;border-radius:999rpx} |
| | | .status{flex:none;padding:6rpx 18rpx;color:var(--color-primary, #1769d8);font-size:23rpx;background:var(--color-primary-soft, #edf5ff);border:1rpx solid var(--color-primary-border, #bfdbff);border-radius:999rpx} |
| | | .grid{display:grid;gap:10rpx;padding-top:16rpx;margin-top:16rpx;color:#66778c;font-size:23rpx;border-top:1rpx solid #edf1f6} |
| | | .grid text{overflow:hidden;text-overflow:ellipsis;white-space:nowrap} |
| | | .remark{padding-top:14rpx;margin-top:14rpx;color:#66778c;font-size:23rpx;border-top:1rpx solid #edf1f6} |
| | | .banner{padding:18rpx 22rpx;margin:16rpx 30rpx 0;color:#c2570d;font-size:24rpx;background:#fff8ee;border:1rpx solid #f5d9b0;border-radius:14rpx} |
| | | .tabs{display:flex;gap:12rpx;padding:16rpx 30rpx 0} |
| | | .tab{padding:14rpx 28rpx;color:#617287;font-size:26rpx;background:#fff;border-radius:14rpx} |
| | | .tab.on{color:#fff;background:#1769d8} |
| | | .tab.on{color:#fff;background:var(--color-primary, #1769d8)} |
| | | .content{height:0;flex:1} |
| | | .panel{padding:16rpx 30rpx 40rpx} |
| | | .panel-head{display:flex;align-items:center;justify-content:space-between;padding:8rpx 4rpx 16rpx} |
| | | .panel-title{color:#20334c;font-size:27rpx;font-weight:600} |
| | | .panel-btn{color:#1769d8;font-size:25rpx} |
| | | .panel-btn{color:var(--color-primary, #1769d8);font-size:25rpx} |
| | | .panel-readonly{color:#9aa8ba;font-size:24rpx} |
| | | .tip{padding:16rpx 20rpx;margin-bottom:16rpx;color:#c2570d;font-size:24rpx;background:#fff8ee;border-radius:14rpx} |
| | | .steps{padding:20rpx 8rpx;background:#fff;border-radius:16rpx;box-shadow:0 10rpx 24rpx rgba(43,69,107,.08)} |
| | | .step{display:flex;align-items:flex-start;gap:18rpx} |
| | | .step-dot-wrap{display:flex;width:36rpx;flex:none;flex-direction:column;align-items:center} |
| | | .step-dot{width:22rpx;height:22rpx;background:#e2e8f1;border:2rpx solid #cfd9e6;border-radius:50%} |
| | | .step-dot.done{background:#1769d8;border-color:#1769d8} |
| | | .step-dot.current{width:28rpx;height:28rpx;background:#fff;border:6rpx solid #1769d8} |
| | | .step-dot.done{background:var(--color-primary, #1769d8);border-color:var(--color-primary, #1769d8)} |
| | | .step-dot.current{width:28rpx;height:28rpx;background:#fff;border:6rpx solid var(--color-primary, #1769d8)} |
| | | .step-line{width:2rpx;height:54rpx;background:#e2e8f1} |
| | | .step-line.done{background:#1769d8} |
| | | .step-line.done{background:var(--color-primary, #1769d8)} |
| | | .step-text{padding-top:2rpx;color:#9aa8ba;font-size:25rpx} |
| | | .step-text.done{color:#20334c} |
| | | .archived-tip{padding:20rpx;margin-top:16rpx;color:#3d5069;font-size:24rpx;text-align:center;background:#eef2f7;border-radius:14rpx} |
| | | .item{padding:22rpx;margin-bottom:16rpx;background:#fff;border-radius:16rpx;box-shadow:0 10rpx 24rpx rgba(43,69,107,.08)} |
| | | .item-head{display:flex;align-items:center;justify-content:space-between;gap:14rpx} |
| | | .item-name{min-width:0;flex:1;overflow:hidden;color:#20334c;font-size:28rpx;font-weight:600;text-overflow:ellipsis;white-space:nowrap} |
| | | .item-tag{flex:none;padding:5rpx 14rpx;color:#1769d8;font-size:22rpx;background:#f2f6fc;border:1rpx solid #d5e4f7;border-radius:8rpx} |
| | | .item-tag{flex:none;padding:5rpx 14rpx;color:var(--color-primary, #1769d8);font-size:22rpx;background:#f2f6fc;border:1rpx solid #d5e4f7;border-radius:8rpx} |
| | | .item-grid{display:grid;gap:8rpx;padding:14rpx 0;margin-top:14rpx;color:#66778c;font-size:23rpx;border-top:1rpx solid #edf1f6} |
| | | .item-grid text{overflow:hidden;text-overflow:ellipsis;white-space:nowrap} |
| | | .actions{display:flex;flex-wrap:wrap;justify-content:flex-end;gap:12rpx;padding-top:12rpx;border-top:1rpx solid #edf1f6} |
| | | .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{min-height:50rpx;padding:0 16rpx;margin:0;color:var(--color-primary, #1769d8);font-size:22rpx;line-height:48rpx;background:var(--color-primary-soft, #f5f8ff);border:1rpx solid var(--color-primary-border, #8ab3ee);border-radius:8rpx} |
| | | .actions button::after{border:0} |
| | | .actions .danger{color:#c65050;background:#fff7f7;border-color:#e3a0a0} |
| | | .more{display:block;padding:16rpx 0 6rpx;color:#93a1b3;font-size:22rpx;text-align:center} |
| | |
| | | .foot{display:flex;flex-wrap:wrap;gap:16rpx;padding:16rpx 30rpx 40rpx;background:#f3f6fb} |
| | | .foot button{min-width:180rpx;flex:1;height:84rpx;margin:0;font-size:28rpx;line-height:84rpx;border-radius:42rpx} |
| | | .foot button::after{border:0} |
| | | .foot .primary{color:#fff;background:#1769d8} |
| | | .foot .ghost{color:#1769d8;background:#f2f6fc;border:1rpx solid #cfe0f7} |
| | | .foot .primary{color:#fff;background:var(--color-primary, #1769d8)} |
| | | .foot .ghost{color:var(--color-primary, #1769d8);background:#f2f6fc;border:1rpx solid #cfe0f7} |
| | | .foot-text{color:#9aa8ba;font-size:25rpx;text-align:center;flex:1;line-height:84rpx} |
| | | .mask{position:fixed;top:0;right:0;bottom:0;left:0;z-index:900;display:flex;align-items:flex-end;background:rgba(16,35,63,.45)} |
| | | .modal{display:flex;width:100%;max-height:84vh;flex-direction:column;background:#fff;border-radius:24rpx 24rpx 0 0} |
| | | .modal-head{display:flex;align-items:center;justify-content:space-between;height:96rpx;padding:0 28rpx;border-bottom:1rpx solid #edf1f6} |
| | | .modal-head text:first-child{color:#10233f;font-size:30rpx;font-weight:600} |
| | | .modal-close{color:#1769d8;font-size:25rpx} |
| | | .modal-close{color:var(--color-primary, #1769d8);font-size:25rpx} |
| | | .modal-body{flex:1;padding:0 28rpx;box-sizing:border-box} |
| | | .modal-foot{display:flex;gap:16rpx;padding:18rpx 28rpx 34rpx;border-top:1rpx solid #edf1f6} |
| | | .modal-foot button{flex:1;height:80rpx;margin:0;font-size:28rpx;line-height:80rpx;border-radius:40rpx} |
| | | .modal-foot button::after{border:0} |
| | | .modal-foot .primary{color:#fff;background:#1769d8} |
| | | .modal-foot .ghost{color:#1769d8;background:#f2f6fc;border:1rpx solid #cfe0f7} |
| | | .modal-foot .primary{color:#fff;background:var(--color-primary, #1769d8)} |
| | | .modal-foot .ghost{color:var(--color-primary, #1769d8);background:#f2f6fc;border:1rpx solid #cfe0f7} |
| | | .field{display:flex;align-items:center;min-height:96rpx;gap:20rpx;border-bottom:1rpx solid #f2f5f9} |
| | | .field.column{align-items:flex-start;flex-direction:column;padding:20rpx 0;gap:12rpx} |
| | | .label{width:180rpx;flex:none;color:#44586f;font-size:26rpx} |
| | |
| | | .file-name{min-width:0;flex:1;overflow:hidden;color:#20334c;font-size:24rpx;text-overflow:ellipsis;white-space:nowrap} |
| | | .file-del{flex:none;margin-left:16rpx;color:#c65050;font-size:23rpx} |
| | | .file-empty{color:#9aa8ba;font-size:24rpx} |
| | | .upload{align-self:flex-start;height:68rpx;padding:0 30rpx;margin:12rpx 0 0;color:#1769d8;font-size:25rpx;line-height:66rpx;background:#f2f6fc;border:1rpx solid #cfe0f7;border-radius:34rpx} |
| | | .upload{align-self:flex-start;height:68rpx;padding:0 30rpx;margin:12rpx 0 0;color:var(--color-primary, #1769d8);font-size:25rpx;line-height:66rpx;background:#f2f6fc;border:1rpx solid #cfe0f7;border-radius:34rpx} |
| | | .upload::after{border:0} |
| | | </style> |
| | |
| | | .arrow{flex:none;color:#b5c0cd;font-size:32rpx} |
| | | .control-inline{display:flex;min-width:0;flex:1;align-items:center;gap:16rpx} |
| | | .control-inline input{min-width:0;flex:1;font-size:27rpx;text-align:right} |
| | | .inline-btn{flex:none;padding:8rpx 20rpx;color:#1769d8;font-size:24rpx;background:#f2f6fc;border:1rpx solid #cfe0f7;border-radius:8rpx} |
| | | .inline-btn{flex:none;padding:8rpx 20rpx;color:var(--color-primary, #1769d8);font-size:24rpx;background:#f2f6fc;border:1rpx solid #cfe0f7;border-radius:8rpx} |
| | | .foot{padding:16rpx 30rpx 40rpx;background:#f3f6fb} |
| | | .save{height:88rpx;color:#fff;font-size:30rpx;line-height:88rpx;background:#1769d8;border-radius:44rpx} |
| | | .save{height:88rpx;color:#fff;font-size:30rpx;line-height:88rpx;background:var(--color-primary, #1769d8);border-radius:44rpx} |
| | | .save::after{border:0} |
| | | .save[disabled]{opacity:.6} |
| | | </style> |
| | |
| | | .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 12rpx;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} |
| | | .search text{color:var(--color-primary, #1769d8);font-size:24rpx} |
| | | .filters{display:flex;align-items:center;gap:16rpx;margin-bottom:16rpx} |
| | | .filter{display:flex;flex:1;align-items:center;justify-content:space-between;height:72rpx;padding:0 20rpx;background:#fff;border-radius:16rpx;box-shadow:0 8rpx 20rpx rgba(43,69,107,.06)} |
| | | .filter-label{color:#66778c;font-size:24rpx} |
| | | .filter-value{color:#20334c;font-size:25rpx} |
| | | .filter-value.empty{color:#9aa8ba} |
| | | .filter-reset{flex:none;color:#1769d8;font-size:24rpx} |
| | | .content{height:0;flex:1;padding-bottom:150rpx;box-sizing:border-box} |
| | | .filter-reset{flex:none;color:var(--color-primary, #1769d8);font-size:24rpx} |
| | | .content{height:0;flex:1;padding-bottom: 132rpx;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-main{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} |
| | | .status{display:inline-flex;flex:none;align-items:center;height:44rpx;padding:0 18rpx;font-size:23rpx;border-radius:999rpx} |
| | | .tag-draft{color:#66778c;background:#f6f8fb;border:1rpx solid #dce4ee} |
| | | .tag-upload{color:#1769d8;background:#edf5ff;border:1rpx solid #bfdbff} |
| | | .tag-upload{color:var(--color-primary, #1769d8);background:var(--color-primary-soft, #edf5ff);border:1rpx solid var(--color-primary-border, #bfdbff)} |
| | | .tag-audit{color:#c2570d;background:#fff4e7;border:1rpx solid #f5cfa4} |
| | | .tag-approving{color:#7a4ddb;background:#f4f0ff;border:1rpx solid #d6c8f7} |
| | | .tag-archive{color:#17865a;background:#eafaf2;border:1rpx solid #b8efd5} |
| | |
| | | .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 button{min-height:50rpx;padding:0 16rpx;margin:0;color:var(--color-primary, #1769d8);font-size:22rpx;line-height:48rpx;background:var(--color-primary-soft, #f5f8ff);border:1rpx solid var(--color-primary-border, #8ab3ee);border-radius:8rpx} |
| | | .actions button::after{border:0} |
| | | .actions .danger{color:#c65050;background:#fff7f7;border-color:#e3a0a0} |
| | | .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} |
| | | .fab{position:fixed;right:32rpx;bottom:56rpx;display:flex;width:100rpx;height:100rpx;align-items:center;justify-content:center;padding:0;margin:0;background:#1769d8;border-radius:50%;box-shadow:0 14rpx 28rpx rgba(23,105,216,.32)} |
| | | .fab{position:fixed;right:32rpx;bottom:56rpx;display:flex;width:100rpx;height:100rpx;align-items:center;justify-content:center;padding:0;margin:0;background:var(--color-primary, #1769d8);border-radius:50%;box-shadow:0 14rpx 28rpx rgba(23,105,216,.32)} |
| | | .fab::after{border:0} |
| | | .fab view{position:relative;width:38rpx;height:38rpx} |
| | | .fab view::before,.fab view::after{position:absolute;content:"";background:#fff;border-radius:3rpx} |
| | |
| | | .head-main{display:flex;min-width:0;flex:1;flex-direction:column;gap:8rpx} |
| | | .head-main .item-code{color:#78879b;font-size:23rpx} |
| | | .item-name{overflow:hidden;color:#20334c;font-size:28rpx;font-weight:600;text-overflow:ellipsis;white-space:nowrap} |
| | | .item-tag{flex:none;padding:5rpx 14rpx;color:#1769d8;font-size:22rpx;background:#f2f6fc;border:1rpx solid #d5e4f7;border-radius:8rpx} |
| | | .item-tag{flex:none;padding:5rpx 14rpx;color:var(--color-primary, #1769d8);font-size:22rpx;background:#f2f6fc;border:1rpx solid #d5e4f7;border-radius:8rpx} |
| | | .item-grid{display:grid;gap:8rpx;padding:14rpx 0;margin-top:14rpx;color:#66778c;font-size:23rpx;border-top:1rpx solid #edf1f6} |
| | | .item-grid text{overflow:hidden;text-overflow:ellipsis;white-space:nowrap} |
| | | .actions{display:flex;flex-wrap:wrap;justify-content:flex-end;gap:12rpx;padding-top:12rpx;border-top:1rpx solid #edf1f6} |
| | | .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{min-height:50rpx;padding:0 16rpx;margin:0;color:var(--color-primary, #1769d8);font-size:22rpx;line-height:48rpx;background:var(--color-primary-soft, #f5f8ff);border:1rpx solid var(--color-primary-border, #8ab3ee);border-radius:8rpx} |
| | | .actions button::after{border:0} |
| | | .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} |
| | |
| | | .modal{display:flex;width:100%;max-height:84vh;flex-direction:column;background:#fff;border-radius:24rpx 24rpx 0 0} |
| | | .modal-head{display:flex;align-items:center;justify-content:space-between;height:96rpx;padding:0 28rpx;border-bottom:1rpx solid #edf1f6} |
| | | .modal-head text:first-child{color:#10233f;font-size:30rpx;font-weight:600} |
| | | .modal-close{color:#1769d8;font-size:25rpx} |
| | | .modal-close{color:var(--color-primary, #1769d8);font-size:25rpx} |
| | | .modal-body{flex:1;padding:0 28rpx;box-sizing:border-box} |
| | | .modal-foot{display:flex;gap:16rpx;padding:18rpx 28rpx 34rpx;border-top:1rpx solid #edf1f6} |
| | | .modal-foot button{flex:1;height:80rpx;margin:0;font-size:28rpx;line-height:80rpx;border-radius:40rpx} |
| | | .modal-foot button::after{border:0} |
| | | .modal-foot .primary{color:#fff;background:#1769d8} |
| | | .modal-foot .ghost{color:#1769d8;background:#f2f6fc;border:1rpx solid #cfe0f7} |
| | | .modal-foot .primary{color:#fff;background:var(--color-primary, #1769d8)} |
| | | .modal-foot .ghost{color:var(--color-primary, #1769d8);background:#f2f6fc;border:1rpx solid #cfe0f7} |
| | | .field{display:flex;align-items:center;min-height:96rpx;gap:20rpx;border-bottom:1rpx solid #f2f5f9} |
| | | .field.column{align-items:flex-start;flex-direction:column;padding:20rpx 0;gap:12rpx} |
| | | .label{width:180rpx;flex:none;color:#44586f;font-size:26rpx} |
| | |
| | | .radios{display:flex;gap:28rpx} |
| | | .radio{display:flex;align-items:center;gap:12rpx;color:#44586f;font-size:26rpx} |
| | | .radio-dot{width:32rpx;height:32rpx;background:#fff;border:2rpx solid #cfd9e6;border-radius:50%} |
| | | .radio.on{color:#1769d8} |
| | | .radio.on .radio-dot{background:#1769d8;border-color:#1769d8;box-shadow:inset 0 0 0 6rpx #fff} |
| | | .radio.on{color:var(--color-primary, #1769d8)} |
| | | .radio.on .radio-dot{background:var(--color-primary, #1769d8);border-color:var(--color-primary, #1769d8);box-shadow:inset 0 0 0 6rpx #fff} |
| | | </style> |
| | |
| | | |
| | | <style lang="scss" scoped> |
| | | .page{display:flex;height:100vh;flex-direction:column;overflow:hidden;background:#f3f6fb} |
| | | .content{height:0;flex:1;padding:20rpx 30rpx 150rpx;box-sizing:border-box} |
| | | .content{height:0;flex:1;padding: 20rpx 30rpx 132rpx;box-sizing:border-box} |
| | | .item{padding:22rpx;margin-bottom:16rpx;background:#fff;border-radius:16rpx;box-shadow:0 10rpx 24rpx rgba(43,69,107,.08)} |
| | | .item-head{display:flex;align-items:center;justify-content:space-between;gap:14rpx} |
| | | .head-main{display:flex;min-width:0;flex:1;flex-direction:column;gap:8rpx} |
| | | .head-main .item-code{color:#78879b;font-size:23rpx} |
| | | .item-name{overflow:hidden;color:#20334c;font-size:28rpx;font-weight:600;text-overflow:ellipsis;white-space:nowrap} |
| | | .item-tag{flex:none;padding:5rpx 14rpx;color:#1769d8;font-size:22rpx;background:#f2f6fc;border:1rpx solid #d5e4f7;border-radius:8rpx} |
| | | .item-tag{flex:none;padding:5rpx 14rpx;color:var(--color-primary, #1769d8);font-size:22rpx;background:#f2f6fc;border:1rpx solid #d5e4f7;border-radius:8rpx} |
| | | .item-grid{display:grid;gap:8rpx;padding:14rpx 0;margin-top:14rpx;color:#66778c;font-size:23rpx;border-top:1rpx solid #edf1f6} |
| | | .item-grid text{overflow:hidden;text-overflow:ellipsis;white-space:nowrap} |
| | | .actions{display:flex;flex-wrap:wrap;justify-content:flex-end;gap:12rpx;padding-top:12rpx;border-top:1rpx solid #edf1f6} |
| | | .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{min-height:50rpx;padding:0 16rpx;margin:0;color:var(--color-primary, #1769d8);font-size:22rpx;line-height:48rpx;background:var(--color-primary-soft, #f5f8ff);border:1rpx solid var(--color-primary-border, #8ab3ee);border-radius:8rpx} |
| | | .actions button::after{border:0} |
| | | .actions .danger{color:#c65050;background:#fff7f7;border-color:#e3a0a0} |
| | | .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} |
| | | .fab{position:fixed;right:32rpx;bottom:56rpx;display:flex;width:100rpx;height:100rpx;align-items:center;justify-content:center;padding:0;margin:0;background:#1769d8;border-radius:50%;box-shadow:0 14rpx 28rpx rgba(23,105,216,.32)} |
| | | .fab{position:fixed;right:32rpx;bottom:56rpx;display:flex;width:100rpx;height:100rpx;align-items:center;justify-content:center;padding:0;margin:0;background:var(--color-primary, #1769d8);border-radius:50%;box-shadow:0 14rpx 28rpx rgba(23,105,216,.32)} |
| | | .fab::after{border:0} |
| | | .fab view{position:relative;width:38rpx;height:38rpx} |
| | | .fab view::before,.fab view::after{position:absolute;content:"";background:#fff;border-radius:3rpx} |
| | |
| | | .modal{display:flex;width:100%;max-height:84vh;flex-direction:column;background:#fff;border-radius:24rpx 24rpx 0 0} |
| | | .modal-head{display:flex;align-items:center;justify-content:space-between;height:96rpx;padding:0 28rpx;border-bottom:1rpx solid #edf1f6} |
| | | .modal-head text:first-child{color:#10233f;font-size:30rpx;font-weight:600} |
| | | .modal-close{color:#1769d8;font-size:25rpx} |
| | | .modal-close{color:var(--color-primary, #1769d8);font-size:25rpx} |
| | | .modal-body{flex:1;padding:0 28rpx;box-sizing:border-box} |
| | | .modal-foot{display:flex;gap:16rpx;padding:18rpx 28rpx 34rpx;border-top:1rpx solid #edf1f6} |
| | | .modal-foot button{flex:1;height:80rpx;margin:0;font-size:28rpx;line-height:80rpx;border-radius:40rpx} |
| | | .modal-foot button::after{border:0} |
| | | .modal-foot .primary{color:#fff;background:#1769d8} |
| | | .modal-foot .ghost{color:#1769d8;background:#f2f6fc;border:1rpx solid #cfe0f7} |
| | | .modal-foot .primary{color:#fff;background:var(--color-primary, #1769d8)} |
| | | .modal-foot .ghost{color:var(--color-primary, #1769d8);background:#f2f6fc;border:1rpx solid #cfe0f7} |
| | | .field{display:flex;align-items:center;min-height:96rpx;gap:20rpx;border-bottom:1rpx solid #f2f5f9} |
| | | .field.column{align-items:flex-start;flex-direction:column;padding:20rpx 0;gap:12rpx} |
| | | .label{width:180rpx;flex:none;color:#44586f;font-size:26rpx} |
| | |
| | | .arrow{flex:none;color:#b5c0cd;font-size:32rpx} |
| | | .control-inline{display:flex;min-width:0;flex:1;align-items:center;gap:16rpx} |
| | | .control-inline input{min-width:0;flex:1;font-size:27rpx;text-align:right} |
| | | .inline-btn{flex:none;padding:8rpx 20rpx;color:#1769d8;font-size:24rpx;background:#f2f6fc;border:1rpx solid #cfe0f7;border-radius:8rpx} |
| | | .inline-btn{flex:none;padding:8rpx 20rpx;color:var(--color-primary, #1769d8);font-size:24rpx;background:#f2f6fc;border:1rpx solid #cfe0f7;border-radius:8rpx} |
| | | </style> |
| | |
| | | |
| | | <style lang="scss" scoped> |
| | | .page{display:flex;height:100vh;flex-direction:column;overflow:hidden;background:#f3f6fb} |
| | | .content{height:0;flex:1;padding:20rpx 30rpx 150rpx;box-sizing:border-box} |
| | | .content{height:0;flex:1;padding: 20rpx 30rpx 132rpx;box-sizing:border-box} |
| | | .item{padding:22rpx;margin-bottom:16rpx;background:#fff;border-radius:16rpx;box-shadow:0 10rpx 24rpx rgba(43,69,107,.08)} |
| | | .item-head{display:flex;align-items:center;justify-content:space-between;gap:14rpx} |
| | | .head-main{display:flex;min-width:0;flex:1;flex-direction:column;gap:8rpx} |
| | | .head-main .item-code{color:#78879b;font-size:23rpx} |
| | | .item-name{overflow:hidden;color:#20334c;font-size:28rpx;font-weight:600;text-overflow:ellipsis;white-space:nowrap} |
| | | .item-tag{flex:none;padding:5rpx 14rpx;color:#1769d8;font-size:22rpx;background:#f2f6fc;border:1rpx solid #d5e4f7;border-radius:8rpx} |
| | | .item-tag{flex:none;padding:5rpx 14rpx;color:var(--color-primary, #1769d8);font-size:22rpx;background:#f2f6fc;border:1rpx solid #d5e4f7;border-radius:8rpx} |
| | | .item-grid{display:grid;gap:8rpx;padding:14rpx 0;margin-top:14rpx;color:#66778c;font-size:23rpx;border-top:1rpx solid #edf1f6} |
| | | .item-grid text{overflow:hidden;text-overflow:ellipsis;white-space:nowrap} |
| | | .actions{display:flex;flex-wrap:wrap;justify-content:flex-end;gap:12rpx;padding-top:12rpx;border-top:1rpx solid #edf1f6} |
| | | .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{min-height:50rpx;padding:0 16rpx;margin:0;color:var(--color-primary, #1769d8);font-size:22rpx;line-height:48rpx;background:var(--color-primary-soft, #f5f8ff);border:1rpx solid var(--color-primary-border, #8ab3ee);border-radius:8rpx} |
| | | .actions button::after{border:0} |
| | | .actions .danger{color:#c65050;background:#fff7f7;border-color:#e3a0a0} |
| | | .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} |
| | | .fab{position:fixed;right:32rpx;bottom:56rpx;display:flex;width:100rpx;height:100rpx;align-items:center;justify-content:center;padding:0;margin:0;background:#1769d8;border-radius:50%;box-shadow:0 14rpx 28rpx rgba(23,105,216,.32)} |
| | | .fab{position:fixed;right:32rpx;bottom:56rpx;display:flex;width:100rpx;height:100rpx;align-items:center;justify-content:center;padding:0;margin:0;background:var(--color-primary, #1769d8);border-radius:50%;box-shadow:0 14rpx 28rpx rgba(23,105,216,.32)} |
| | | .fab::after{border:0} |
| | | .fab view{position:relative;width:38rpx;height:38rpx} |
| | | .fab view::before,.fab view::after{position:absolute;content:"";background:#fff;border-radius:3rpx} |
| | |
| | | .modal{display:flex;width:100%;max-height:84vh;flex-direction:column;background:#fff;border-radius:24rpx 24rpx 0 0} |
| | | .modal-head{display:flex;align-items:center;justify-content:space-between;height:96rpx;padding:0 28rpx;border-bottom:1rpx solid #edf1f6} |
| | | .modal-head text:first-child{color:#10233f;font-size:30rpx;font-weight:600} |
| | | .modal-close{color:#1769d8;font-size:25rpx} |
| | | .modal-close{color:var(--color-primary, #1769d8);font-size:25rpx} |
| | | .modal-body{flex:1;padding:0 28rpx;box-sizing:border-box} |
| | | .modal-foot{display:flex;gap:16rpx;padding:18rpx 28rpx 34rpx;border-top:1rpx solid #edf1f6} |
| | | .modal-foot button{flex:1;height:80rpx;margin:0;font-size:28rpx;line-height:80rpx;border-radius:40rpx} |
| | | .modal-foot button::after{border:0} |
| | | .modal-foot .primary{color:#fff;background:#1769d8} |
| | | .modal-foot .ghost{color:#1769d8;background:#f2f6fc;border:1rpx solid #cfe0f7} |
| | | .modal-foot .primary{color:#fff;background:var(--color-primary, #1769d8)} |
| | | .modal-foot .ghost{color:var(--color-primary, #1769d8);background:#f2f6fc;border:1rpx solid #cfe0f7} |
| | | .field{display:flex;align-items:center;min-height:96rpx;gap:20rpx;border-bottom:1rpx solid #f2f5f9} |
| | | .field.column{align-items:flex-start;flex-direction:column;padding:20rpx 0;gap:12rpx} |
| | | .label{width:180rpx;flex:none;color:#44586f;font-size:26rpx} |
| | |
| | | .arrow{flex:none;color:#b5c0cd;font-size:32rpx} |
| | | .control-inline{display:flex;min-width:0;flex:1;align-items:center;gap:16rpx} |
| | | .control-inline input{min-width:0;flex:1;font-size:27rpx;text-align:right} |
| | | .inline-btn{flex:none;padding:8rpx 20rpx;color:#1769d8;font-size:24rpx;background:#f2f6fc;border:1rpx solid #cfe0f7;border-radius:8rpx} |
| | | .inline-btn{flex:none;padding:8rpx 20rpx;color:var(--color-primary, #1769d8);font-size:24rpx;background:#f2f6fc;border:1rpx solid #cfe0f7;border-radius:8rpx} |
| | | </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><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:var(--color-primary, #1769d8)}.section-head{display:flex;justify-content:space-between;padding:22rpx}.section-head button,.line button{min-height:48rpx;margin:0;color:var(--color-primary, #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> |
| | | import { computed, ref } from "vue"; |
| | | import { onPullDownRefresh, onShow } 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(); |
| | | const keyword = ref(""), rows = ref<TransferCard[]>([]), loading = ref(false), pageNo = ref(1), total = ref(0); |
| | | const pageSize = 15; |
| | | const p = (action: string) => hasPermission("mes:pro-card:" + action); |
| | | const canQuery = computed(() => p("query")), canCreate = computed(() => p("create")); |
| | | const hasMore = computed(() => rows.value.length < total.value); |
| | | const labels: Record<number, string> = { 0: "è稿", 1: "已确认", 2: "å·²å®å·¥", 3: "已忶" }; |
| | | async function load(reset = true) { |
| | | if (!state.accessToken || !canQuery.value || loading.value) return; |
| | | if (reset) { pageNo.value = 1; total.value = 0; } |
| | | loading.value = true; |
| | | try { |
| | | const data = await getCardPage(state.accessToken, { pageNo: pageNo.value, pageSize, code: keyword.value || undefined }); |
| | | rows.value = reset ? (data.list || []) : [...rows.value, ...(data.list || [])]; |
| | | total.value = Number(data.total || 0); |
| | | if (rows.value.length < total.value) pageNo.value += 1; |
| | | } catch (error) { uni.showToast({ title: error instanceof Error ? error.message : "å 载失败", icon: "none" }); } |
| | | finally { loading.value = false; uni.stopPullDownRefresh(); } |
| | | } |
| | | function loadMore() { if (hasMore.value) load(false); } |
| | | function clearSearch() { keyword.value = ""; load(true); } |
| | | function go(id?: number, mode = "edit") { uni.navigateTo({ url: "/pages/mes/pro/card/form" + (id ? "?id=" + id + "&mode=" + mode : "") }); } |
| | | async function run(item: TransferCard, type: string) { |
| | | if (!state.accessToken || !item.id) return; |
| | | const ok = await new Promise<boolean>(resolve => uni.showModal({ title: "确认æä½", content: "ç¡®å®æ§è¡è¯¥æä½åï¼", success: result => resolve(result.confirm) })); |
| | | if (!ok) return; |
| | | if (type === "delete") await deleteCard(state.accessToken, item.id); |
| | | else if (type === "submit") await submitCard(state.accessToken, item.id); |
| | | else if (type === "finish") await finishCard(state.accessToken, item.id); |
| | | else await cancelCard(state.accessToken, item.id); |
| | | load(true); |
| | | } |
| | | onShow(() => load(true)); |
| | | onPullDownRefresh(() => load(true)); |
| | | </script><template><view class="page"><template v-if="isLoggedIn"><view v-if="canQuery" class="search"><input v-model="keyword" placeholder="æç´¢æµè½¬å¡ç¼å·" @confirm="load(true)"/><text @click="clearSearch">æ¸
é¤</text></view><scroll-view v-if="canQuery" class="list" scroll-y @scrolltolower="loadMore"><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><view v-else class="state more">{{loading?'å è½½ä¸...':hasMore?'䏿å è½½æ´å¤':'æ²¡ææ´å¤äº'}}</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} |
| | | .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:var(--color-primary, #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} |
| | | .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:var(--color-primary, #1769d8);background:var(--color-primary-soft, #edf5ff);border:1rpx solid var(--color-primary-border, #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> |
| | | .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:var(--color-primary, #1769d8);font-size:22rpx;line-height:48rpx;background:var(--color-primary-soft, #f5f8ff);border:1rpx solid var(--color-primary-border, #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: 104rpx; height: 104rpx; min-height: 104rpx;padding:0;margin:0;background:var(--color-primary, #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{min-height:100vh;padding:24rpx 30rpx 70rpx;box-sizing:border-box;background:#f6f7f9}.form-card{overflow:hidden;background:#fff;border-radius:16rpx}.batch-card{margin-top:22rpx}.section-title{padding:24rpx;color:#172b45;font-size:31rpx;font-weight:600;border-bottom:1rpx solid #eef1f5}.field{display:flex;align-items:center;min-height:96rpx;padding:0 24rpx;gap:20rpx;border-bottom:1rpx solid #eef1f5}.field>text:first-child{width:210rpx;flex:none;color:#33455d;font-size:27rpx}.field input,.field picker,.picker,.value{min-width:0;flex:1;color:#1e3049;font-size:27rpx}.field input,.value{text-align:right}.picker{display:flex;align-items:center;justify-content:space-between;color:#65758a}.picker text:first-child,.value{overflow:hidden;text-align:right;text-overflow:ellipsis;white-space:nowrap}.picker text:last-child{margin-left:16rpx;color:#8092a7;font-size:36rpx}.required{color:#e23b3b}.code-field button{flex:none;min-width:92rpx;padding:0 12rpx;margin:0;color:#1769d8;font-size:23rpx;line-height:56rpx;background:#fff;border:1rpx solid #1769d8;border-radius:8rpx}.code-field button::after,.save::after,.confirm::after{border:0}.column{align-items:flex-start;flex-direction:column;padding:20rpx 24rpx}.column>text:first-child{width:auto}.column textarea{width:100%;height:150rpx;font-size:27rpx;box-sizing:border-box}.save,.confirm{margin-top:30rpx;color:#fff;font-size:30rpx;background:#1769d8;border-radius:12rpx}.confirm{background:#16a36a} |
| | | .page{min-height:100vh;padding:24rpx 30rpx 70rpx;box-sizing:border-box;background:#f6f7f9}.form-card{overflow:hidden;background:#fff;border-radius:16rpx}.batch-card{margin-top:22rpx}.section-title{padding:24rpx;color:#172b45;font-size:31rpx;font-weight:600;border-bottom:1rpx solid #eef1f5}.field{display:flex;align-items:center;min-height:96rpx;padding:0 24rpx;gap:20rpx;border-bottom:1rpx solid #eef1f5}.field>text:first-child{width:210rpx;flex:none;color:#33455d;font-size:27rpx}.field input,.field picker,.picker,.value{min-width:0;flex:1;color:#1e3049;font-size:27rpx}.field input,.value{text-align:right}.picker{display:flex;align-items:center;justify-content:space-between;color:#65758a}.picker text:first-child,.value{overflow:hidden;text-align:right;text-overflow:ellipsis;white-space:nowrap}.picker text:last-child{margin-left:16rpx;color:#8092a7;font-size:36rpx}.required{color:#e23b3b}.code-field button{flex:none;min-width:92rpx;padding:0 12rpx;margin:0;color:var(--color-primary, #1769d8);font-size:23rpx;line-height:56rpx;background:#fff;border:1rpx solid var(--color-primary, #1769d8);border-radius:8rpx}.code-field button::after,.save::after,.confirm::after{border:0}.column{align-items:flex-start;flex-direction:column;padding:20rpx 24rpx}.column>text:first-child{width:auto}.column textarea{width:100%;height:150rpx;font-size:27rpx;box-sizing:border-box}.save,.confirm{margin-top:30rpx;color:#fff;font-size:30rpx;background:var(--color-primary, #1769d8);border-radius:12rpx}.confirm{background:#16a36a} |
| | | </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{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} |
| | | .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:var(--color-primary, #1769d8);font-size:24rpx}.list{height:0;flex:1;padding-bottom: 132rpx;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:var(--color-primary, #1769d8);background:var(--color-primary-soft, #edf5ff);border:1rpx solid var(--color-primary-border, #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:var(--color-primary, #1769d8);font-size:22rpx;background:var(--color-primary-soft, #edf5ff);border:1rpx solid var(--color-primary-border, #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:var(--color-primary, #1769d8);font-size:22rpx;line-height:48rpx;background:var(--color-primary-soft, #f5f8ff);border:1rpx solid var(--color-primary-border, #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: 104rpx; height: 104rpx; min-height: 104rpx;padding:0;margin:0;background:var(--color-primary, #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{min-height:100vh;padding:24rpx 30rpx 70rpx;box-sizing:border-box;background:#f6f7f9}.form-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 #eef1f5}.field>text:first-child{width:210rpx;flex:none;color:#33455d;font-size:27rpx}.field input,.field picker,.picker,.value{min-width:0;flex:1;color:#1e3049;font-size:27rpx}.field input,.value{text-align:right}.picker{display:flex;align-items:center;justify-content:space-between;color:#65758a}.picker text:first-child,.value{overflow:hidden;text-align:right;text-overflow:ellipsis;white-space:nowrap}.picker text:last-child{margin-left:16rpx;color:#8092a7;font-size:36rpx}.required{color:#e23b3b}.column{align-items:flex-start;flex-direction:column;padding:20rpx 24rpx}.column>text:first-child{width:auto}.column textarea{width:100%;height:150rpx;font-size:27rpx;box-sizing:border-box}.save{margin-top:32rpx;color:#fff;font-size:30rpx;background:#1769d8;border-radius:12rpx}.save::after{border:0}.state{padding:38rpx;color:#8795a8;font-size:26rpx;text-align:center} |
| | | .page{min-height:100vh;padding:24rpx 30rpx 70rpx;box-sizing:border-box;background:#f6f7f9}.form-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 #eef1f5}.field>text:first-child{width:210rpx;flex:none;color:#33455d;font-size:27rpx}.field input,.field picker,.picker,.value{min-width:0;flex:1;color:#1e3049;font-size:27rpx}.field input,.value{text-align:right}.picker{display:flex;align-items:center;justify-content:space-between;color:#65758a}.picker text:first-child,.value{overflow:hidden;text-align:right;text-overflow:ellipsis;white-space:nowrap}.picker text:last-child{margin-left:16rpx;color:#8092a7;font-size:36rpx}.required{color:#e23b3b}.column{align-items:flex-start;flex-direction:column;padding:20rpx 24rpx}.column>text:first-child{width:auto}.column textarea{width:100%;height:150rpx;font-size:27rpx;box-sizing:border-box}.save{margin-top:32rpx;color:#fff;font-size:30rpx;background:var(--color-primary, #1769d8);border-radius:12rpx}.save::after{border:0}.state{padding:38rpx;color:#8795a8;font-size:26rpx;text-align:center} |
| | | </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{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} |
| | | .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:var(--color-primary, #1769d8);font-size:24rpx}.merge{align-self:flex-end;padding:10rpx 18rpx;margin-bottom:14rpx;background:var(--color-primary-soft, #eef5ff);border:1rpx solid #9bc1f5;border-radius:999rpx}.list{height:0;flex:1;padding-bottom: 132rpx;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:var(--color-primary, #1769d8);background:var(--color-primary-soft, #edf5ff);border:1rpx solid var(--color-primary-border, #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:var(--color-primary, #1769d8);font-size:22rpx;background:var(--color-primary-soft, #edf5ff);border:1rpx solid var(--color-primary-border, #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:var(--color-primary, #1769d8);font-size:22rpx;line-height:48rpx;background:var(--color-primary-soft, #f5f8ff);border:1rpx solid var(--color-primary-border, #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: 104rpx; height: 104rpx; min-height: 104rpx;padding:0;margin:0;background:var(--color-primary, #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{min-height:100vh;padding:24rpx 30rpx 70rpx;box-sizing:border-box;background:#f6f7f9}.form-card,.tab-card{overflow:hidden;background:#fff;border-radius:16rpx}.tab-card{margin-top:22rpx;padding-bottom:20rpx}.field{display:flex;align-items:center;min-height:96rpx;padding:0 24rpx;gap:20rpx;border-bottom:1rpx solid #eef1f5}.field>text:first-child{width:210rpx;flex:none;color:#33455d;font-size:27rpx}.field input,.field picker,.picker,.value{min-width:0;flex:1;color:#1e3049;font-size:27rpx}.field input,.value{text-align:right}.picker{display:flex;align-items:center;justify-content:space-between;color:#65758a}.picker.disabled{color:#9aa8b8}.picker text:first-child,.value{overflow:hidden;text-align:right;text-overflow:ellipsis;white-space:nowrap}.picker text:last-child{margin-left:16rpx;color:#8092a7;font-size:36rpx}.required{color:#e23b3b}.column{align-items:flex-start;flex-direction:column;padding:20rpx 24rpx}.column>text:first-child{width:auto}.column textarea{width:100%;height:150rpx;font-size:27rpx;box-sizing:border-box}.section{display:flex;align-items:center;justify-content:space-between;padding:20rpx 24rpx;border-bottom:1rpx solid #eef1f5}.section>text{color:#172b45;font-size:31rpx;font-weight:600}.section button,.actions button{min-height:50rpx;padding:0 16rpx;margin:0;color:#1769d8;font-size:23rpx;line-height:48rpx;background:#fff;border:1rpx solid #1769d8;border-radius:8rpx}.section button::after,.actions button::after,.dialog-actions button::after,.save::after{border:0}.process-tabs{display:flex;gap:12rpx;overflow-x:auto;padding:18rpx 24rpx;border-bottom:1rpx solid #eef1f5}.process-tabs text{flex:none;height:52rpx;padding:0 22rpx;color:#66778c;font-size:24rpx;line-height:52rpx;background:#f3f6fb;border-radius:999rpx}.process-tabs .active{color:#1769d8;font-weight:600;background:#eaf3ff}.sub-row{display:grid;gap:14rpx;padding:22rpx 22rpx;margin:18rpx 10rpx;color:#51657e;font-size:24rpx;background:#fff;border:1rpx solid #e2eaf5;border-radius:16rpx;box-shadow:0 12rpx 28rpx rgba(43,69,107,.08)}.sub-head{display:flex;align-items:flex-start;justify-content:space-between;gap:12rpx}.sub-title{min-width:0;color:#102846;font-size:29rpx;font-weight:700}.status-wrap{display:flex;align-items:center;flex:none;height:40rpx}.task-tag{display:inline-flex;align-items:center;min-width:70rpx;height:34rpx;justify-content:center;padding:0 14rpx;color:#17865a;font-size:22rpx;background:#eafaf2;border:1rpx solid #b8efd5;border-radius:999rpx;white-space:nowrap}.sub-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));column-gap:18rpx;row-gap:10rpx;padding-top:12rpx;border-top:1rpx solid #edf1f6}.sub-grid text{min-width:0;line-height:1.5;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.progress{display:flex;align-items:center;gap:12rpx;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;justify-content:flex-end;gap:10rpx}.actions .danger{color:#c65050;border-color:#e3a0a0}.empty{padding:36rpx;color:#8795a8;font-size:26rpx;text-align:center}.save{margin-top:30rpx;color:#fff;font-size:30rpx;background:#1769d8;border-radius:12rpx}.mask{position:fixed;inset:0;z-index:50;display:flex;align-items:flex-end;background:rgba(0,0,0,.42)}.dialog{width:100%;max-height:88vh;overflow:auto;background:#fff;border-radius:24rpx 24rpx 0 0}.dialog-title{padding:26rpx 30rpx;color:#172b45;font-size:31rpx;font-weight:600;text-align:center;border-bottom:1rpx solid #eef1f5}.checks{display:flex;flex-wrap:wrap;gap:12rpx;width:100%}.checks text{padding:8rpx 16rpx;color:#66778c;font-size:24rpx;background:#f4f7fb;border:1rpx solid #dce4ee;border-radius:999rpx}.checks .active{color:#1769d8;background:#edf5ff;border-color:#8ab3ee}.checks .hint{width:100%;box-sizing:border-box;color:#8795a8;text-align:center;background:#f7f9fc;border-color:#e6edf5}.dialog-actions{display:flex;gap:18rpx;padding:22rpx 30rpx calc(22rpx + env(safe-area-inset-bottom))}.dialog-actions button{flex:1;margin:0;color:#33455d;background:#f3f6fb;border-radius:12rpx}.dialog-actions .primary{color:#fff;background:#1769d8} |
| | | .page{min-height:100vh;padding:24rpx 30rpx 70rpx;box-sizing:border-box;background:#f6f7f9}.form-card,.tab-card{overflow:hidden;background:#fff;border-radius:16rpx}.tab-card{margin-top:22rpx;padding-bottom:20rpx}.field{display:flex;align-items:center;min-height:96rpx;padding:0 24rpx;gap:20rpx;border-bottom:1rpx solid #eef1f5}.field>text:first-child{width:210rpx;flex:none;color:#33455d;font-size:27rpx}.field input,.field picker,.picker,.value{min-width:0;flex:1;color:#1e3049;font-size:27rpx}.field input,.value{text-align:right}.picker{display:flex;align-items:center;justify-content:space-between;color:#65758a}.picker.disabled{color:#9aa8b8}.picker text:first-child,.value{overflow:hidden;text-align:right;text-overflow:ellipsis;white-space:nowrap}.picker text:last-child{margin-left:16rpx;color:#8092a7;font-size:36rpx}.required{color:#e23b3b}.column{align-items:flex-start;flex-direction:column;padding:20rpx 24rpx}.column>text:first-child{width:auto}.column textarea{width:100%;height:150rpx;font-size:27rpx;box-sizing:border-box}.section{display:flex;align-items:center;justify-content:space-between;padding:20rpx 24rpx;border-bottom:1rpx solid #eef1f5}.section>text{color:#172b45;font-size:31rpx;font-weight:600}.section button,.actions button{min-height:50rpx;padding:0 16rpx;margin:0;color:var(--color-primary, #1769d8);font-size:23rpx;line-height:48rpx;background:#fff;border:1rpx solid var(--color-primary, #1769d8);border-radius:8rpx}.section button::after,.actions button::after,.dialog-actions button::after,.save::after{border:0}.process-tabs{display:flex;gap:12rpx;overflow-x:auto;padding:18rpx 24rpx;border-bottom:1rpx solid #eef1f5}.process-tabs text{flex:none;height:52rpx;padding:0 22rpx;color:#66778c;font-size:24rpx;line-height:52rpx;background:#f3f6fb;border-radius:999rpx}.process-tabs .active{color:var(--color-primary, #1769d8);font-weight:600;background:#eaf3ff}.sub-row{display:grid;gap:14rpx;padding:22rpx 22rpx;margin:18rpx 10rpx;color:#51657e;font-size:24rpx;background:#fff;border:1rpx solid #e2eaf5;border-radius:16rpx;box-shadow:0 12rpx 28rpx rgba(43,69,107,.08)}.sub-head{display:flex;align-items:flex-start;justify-content:space-between;gap:12rpx}.sub-title{min-width:0;color:#102846;font-size:29rpx;font-weight:700}.status-wrap{display:flex;align-items:center;flex:none;height:40rpx}.task-tag{display:inline-flex;align-items:center;min-width:70rpx;height:34rpx;justify-content:center;padding:0 14rpx;color:#17865a;font-size:22rpx;background:#eafaf2;border:1rpx solid #b8efd5;border-radius:999rpx;white-space:nowrap}.sub-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));column-gap:18rpx;row-gap:10rpx;padding-top:12rpx;border-top:1rpx solid #edf1f6}.sub-grid text{min-width:0;line-height:1.5;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.progress{display:flex;align-items:center;gap:12rpx;color:#66778c;font-size:22rpx}.progress>view{height:12rpx;flex:1;overflow:hidden;background:#eef3f8;border-radius:999rpx}.progress>view>view{height:100%;background:var(--color-primary, #1769d8);border-radius:999rpx}.actions{display:flex;justify-content:flex-end;gap:10rpx}.actions .danger{color:#c65050;border-color:#e3a0a0}.empty{padding:36rpx;color:#8795a8;font-size:26rpx;text-align:center}.save{margin-top:30rpx;color:#fff;font-size:30rpx;background:var(--color-primary, #1769d8);border-radius:12rpx}.mask{position:fixed;inset:0;z-index:50;display:flex;align-items:flex-end;background:rgba(0,0,0,.42)}.dialog{width:100%;max-height:88vh;overflow:auto;background:#fff;border-radius:24rpx 24rpx 0 0}.dialog-title{padding:26rpx 30rpx;color:#172b45;font-size:31rpx;font-weight:600;text-align:center;border-bottom:1rpx solid #eef1f5}.checks{display:flex;flex-wrap:wrap;gap:12rpx;width:100%}.checks text{padding:8rpx 16rpx;color:#66778c;font-size:24rpx;background:#f4f7fb;border:1rpx solid #dce4ee;border-radius:999rpx}.checks .active{color:var(--color-primary, #1769d8);background:var(--color-primary-soft, #edf5ff);border-color:var(--color-primary-border, #8ab3ee)}.checks .hint{width:100%;box-sizing:border-box;color:#8795a8;text-align:center;background:#f7f9fc;border-color:#e6edf5}.dialog-actions{display:flex;gap:18rpx;padding:22rpx 30rpx calc(22rpx + env(safe-area-inset-bottom))}.dialog-actions button{flex:1;margin:0;color:#33455d;background:#f3f6fb;border-radius:12rpx}.dialog-actions .primary{color:#fff;background:var(--color-primary, #1769d8)} |
| | | </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 12rpx;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}.tabs{display:flex;gap:14rpx;margin-bottom:14rpx}.tabs text{height:54rpx;padding:0 24rpx;color:#66778c;font-size:24rpx;line-height:54rpx;background:#fff;border-radius:999rpx}.tabs .active{color:#1769d8;font-weight:600;background:#eaf3ff}.list{height:0;flex:1;padding-bottom:90rpx;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;color:#17865a;font-size:22rpx;background:#eafaf2;border:1rpx solid #b8efd5;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: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 button::after{border:0}.more,.state{display:block;padding:35rpx;color:#8795a8;font-size:26rpx;text-align:center}.error{color:#c3654d} |
| | | .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 12rpx;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:var(--color-primary, #1769d8);font-size:24rpx}.tabs{display:flex;gap:14rpx;margin-bottom:14rpx}.tabs text{height:54rpx;padding:0 24rpx;color:#66778c;font-size:24rpx;line-height:54rpx;background:#fff;border-radius:999rpx}.tabs .active{color:var(--color-primary, #1769d8);font-weight:600;background:#eaf3ff}.list{height:0;flex:1;padding-bottom:90rpx;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;color:#17865a;font-size:22rpx;background:#eafaf2;border:1rpx solid #b8efd5;border-radius:999rpx;white-space:nowrap}.tags{display:flex;flex-wrap:wrap;gap:10rpx;margin-top:14rpx}.tags text{padding:4rpx 12rpx;color:var(--color-primary, #1769d8);font-size:22rpx;background:var(--color-primary-soft, #edf5ff);border:1rpx solid var(--color-primary-border, #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:var(--color-primary, #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:var(--color-primary, #1769d8);font-size:22rpx;line-height:48rpx;background:var(--color-primary-soft, #f5f8ff);border:1rpx solid var(--color-primary-border, #8ab3ee);border-radius:8rpx}.actions button::after{border:0}.more,.state{display:block;padding:35rpx;color:#8795a8;font-size:26rpx;text-align:center}.error{color:#c3654d} |
| | | </style> |
| | |
| | | </template> |
| | | |
| | | <style lang="scss" scoped> |
| | | .page{min-height:100vh;padding:24rpx 30rpx 70rpx;box-sizing:border-box;background:#f6f7f9}.form-card,.tab-card{overflow:hidden;background:#fff;border-radius:16rpx}.tab-card{margin-top:22rpx;padding-bottom:20rpx}.field{display:flex;align-items:center;min-height:96rpx;padding:0 24rpx;gap:20rpx;border-bottom:1rpx solid #eef1f5}.field>text:first-child{width:210rpx;flex:none;color:#33455d;font-size:27rpx}.field input,.field picker,.picker,.value{min-width:0;flex:1;color:#1e3049;font-size:27rpx}.field input,.value{text-align:right}.picker{display:flex;align-items:center;justify-content:space-between;color:#65758a}.picker text:first-child,.value{overflow:hidden;text-align:right;text-overflow:ellipsis;white-space:nowrap}.picker text:last-child{margin-left:16rpx;color:#8092a7;font-size:36rpx}.required{color:#e23b3b}.code-field button,.tab-tools button,.sub-actions button{flex:none;min-width:100rpx;padding:0 14rpx;margin:0;color:#1769d8;font-size:24rpx;line-height:56rpx;background:#fff;border:1rpx solid #1769d8;border-radius:8rpx}.code-field button::after,.tab-tools button::after,.sub-actions button::after,.save::after,.confirm::after,.dialog-actions button::after{border:0}.column{align-items:flex-start;flex-direction:column;padding:20rpx 24rpx}.column>text:first-child{width:auto}.column textarea{width:100%;height:150rpx;font-size:27rpx;box-sizing:border-box}.tabs{display:flex;padding:18rpx 24rpx;border-bottom:1rpx solid #eef1f5}.tabs text{height:56rpx;padding:0 24rpx;margin-right:16rpx;color:#637287;font-size:25rpx;line-height:56rpx;background:#f3f6fb;border-radius:999rpx}.tabs .active{color:#1769d8;font-weight:600;background:#eaf3ff}.tab-tools{display:flex;justify-content:flex-end;padding:18rpx 24rpx 0}.sub-list{display:grid;gap:18rpx;padding:18rpx 10rpx;background:#f6f8fb}.sub-row{display:grid;gap:14rpx;padding:22rpx 22rpx;color:#51657e;font-size:24rpx;background:#fff;border:1rpx solid #e2eaf5;border-radius:16rpx;box-shadow:0 12rpx 28rpx rgba(43,69,107,.08)}.sub-head{display:flex;align-items:flex-start;justify-content:space-between;gap:12rpx}.sub-title{color:#102846;font-size:29rpx;font-weight:700}.sub-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));column-gap:18rpx;row-gap:10rpx;padding-top:12rpx;border-top:1rpx solid #edf1f6}.sub-grid text{min-width:0;line-height:1.5;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.sub-actions{display:flex;flex-wrap:wrap;justify-content:flex-end;gap:8rpx}.sub-actions button{min-width:auto;line-height:46rpx;font-size:22rpx}.sub-actions .danger{color:#c65050;border-color:#e3a0a0}.materials{display:flex;flex-wrap:wrap;gap:10rpx;padding-top:8rpx}.materials>text{padding:5rpx 12rpx;color:#1769d8;background:#edf5ff;border:1rpx solid #bfdbff;border-radius:999rpx}.materials>text>text{margin-left:10rpx;color:#c65050}.empty{padding:36rpx;color:#8795a8;font-size:26rpx;text-align:center}.save,.confirm{margin-top:30rpx;color:#fff;font-size:30rpx;background:#1769d8;border-radius:12rpx}.confirm{background:#16a36a}.mask{position:fixed;inset:0;z-index:50;display:flex;align-items:flex-end;background:rgba(0,0,0,.42)}.dialog{width:100%;max-height:88vh;overflow:auto;background:#fff;border-radius:24rpx 24rpx 0 0}.dialog-title{padding:26rpx 30rpx;color:#172b45;font-size:31rpx;font-weight:600;text-align:center;border-bottom:1rpx solid #eef1f5}.dialog-actions{display:flex;gap:18rpx;padding:22rpx 30rpx calc(22rpx + env(safe-area-inset-bottom))}.dialog-actions button{flex:1;margin:0;color:#33455d;background:#f3f6fb;border-radius:12rpx}.dialog-actions .primary{color:#fff;background:#1769d8}.search{display:flex;align-items:center;height:76rpx;margin:20rpx 24rpx;padding:0 20rpx;background:#f6f8fb;border-radius:14rpx}.search input{flex:1;font-size:26rpx}.material-list{max-height:55vh;padding:0 24rpx 20rpx;box-sizing:border-box}.material-item{display:flex;flex-direction:column;gap:8rpx;padding:18rpx 0;border-bottom:1rpx solid #eef1f5}.material-item text:first-child{color:#20334c;font-size:27rpx;font-weight:600}.material-item text:last-child{color:#66778c;font-size:23rpx} |
| | | .page{min-height:100vh;padding:24rpx 30rpx 70rpx;box-sizing:border-box;background:#f6f7f9}.form-card,.tab-card{overflow:hidden;background:#fff;border-radius:16rpx}.tab-card{margin-top:22rpx;padding-bottom:20rpx}.field{display:flex;align-items:center;min-height:96rpx;padding:0 24rpx;gap:20rpx;border-bottom:1rpx solid #eef1f5}.field>text:first-child{width:210rpx;flex:none;color:#33455d;font-size:27rpx}.field input,.field picker,.picker,.value{min-width:0;flex:1;color:#1e3049;font-size:27rpx}.field input,.value{text-align:right}.picker{display:flex;align-items:center;justify-content:space-between;color:#65758a}.picker text:first-child,.value{overflow:hidden;text-align:right;text-overflow:ellipsis;white-space:nowrap}.picker text:last-child{margin-left:16rpx;color:#8092a7;font-size:36rpx}.required{color:#e23b3b}.code-field button,.tab-tools button,.sub-actions button{flex:none;min-width:100rpx;padding:0 14rpx;margin:0;color:var(--color-primary, #1769d8);font-size:24rpx;line-height:56rpx;background:#fff;border:1rpx solid var(--color-primary, #1769d8);border-radius:8rpx}.code-field button::after,.tab-tools button::after,.sub-actions button::after,.save::after,.confirm::after,.dialog-actions button::after{border:0}.column{align-items:flex-start;flex-direction:column;padding:20rpx 24rpx}.column>text:first-child{width:auto}.column textarea{width:100%;height:150rpx;font-size:27rpx;box-sizing:border-box}.tabs{display:flex;padding:18rpx 24rpx;border-bottom:1rpx solid #eef1f5}.tabs text{height:56rpx;padding:0 24rpx;margin-right:16rpx;color:#637287;font-size:25rpx;line-height:56rpx;background:#f3f6fb;border-radius:999rpx}.tabs .active{color:var(--color-primary, #1769d8);font-weight:600;background:#eaf3ff}.tab-tools{display:flex;justify-content:flex-end;padding:18rpx 24rpx 0}.sub-list{display:grid;gap:18rpx;padding:18rpx 10rpx;background:#f6f8fb}.sub-row{display:grid;gap:14rpx;padding:22rpx 22rpx;color:#51657e;font-size:24rpx;background:#fff;border:1rpx solid #e2eaf5;border-radius:16rpx;box-shadow:0 12rpx 28rpx rgba(43,69,107,.08)}.sub-head{display:flex;align-items:flex-start;justify-content:space-between;gap:12rpx}.sub-title{color:#102846;font-size:29rpx;font-weight:700}.sub-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));column-gap:18rpx;row-gap:10rpx;padding-top:12rpx;border-top:1rpx solid #edf1f6}.sub-grid text{min-width:0;line-height:1.5;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.sub-actions{display:flex;flex-wrap:wrap;justify-content:flex-end;gap:8rpx}.sub-actions button{min-width:auto;line-height:46rpx;font-size:22rpx}.sub-actions .danger{color:#c65050;border-color:#e3a0a0}.materials{display:flex;flex-wrap:wrap;gap:10rpx;padding-top:8rpx}.materials>text{padding:5rpx 12rpx;color:var(--color-primary, #1769d8);background:var(--color-primary-soft, #edf5ff);border:1rpx solid var(--color-primary-border, #bfdbff);border-radius:999rpx}.materials>text>text{margin-left:10rpx;color:#c65050}.empty{padding:36rpx;color:#8795a8;font-size:26rpx;text-align:center}.save,.confirm{margin-top:30rpx;color:#fff;font-size:30rpx;background:var(--color-primary, #1769d8);border-radius:12rpx}.confirm{background:#16a36a}.mask{position:fixed;inset:0;z-index:50;display:flex;align-items:flex-end;background:rgba(0,0,0,.42)}.dialog{width:100%;max-height:88vh;overflow:auto;background:#fff;border-radius:24rpx 24rpx 0 0}.dialog-title{padding:26rpx 30rpx;color:#172b45;font-size:31rpx;font-weight:600;text-align:center;border-bottom:1rpx solid #eef1f5}.dialog-actions{display:flex;gap:18rpx;padding:22rpx 30rpx calc(22rpx + env(safe-area-inset-bottom))}.dialog-actions button{flex:1;margin:0;color:#33455d;background:#f3f6fb;border-radius:12rpx}.dialog-actions .primary{color:#fff;background:var(--color-primary, #1769d8)}.search{display:flex;align-items:center;height:76rpx;margin:20rpx 24rpx;padding:0 20rpx;background:#f6f8fb;border-radius:14rpx}.search input{flex:1;font-size:26rpx}.material-list{max-height:55vh;padding:0 24rpx 20rpx;box-sizing:border-box}.material-item{display:flex;flex-direction:column;gap:8rpx;padding:18rpx 0;border-bottom:1rpx solid #eef1f5}.material-item text:first-child{color:#20334c;font-size:27rpx;font-weight:600}.material-item text:last-child{color:#66778c;font-size:23rpx} |
| | | </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}.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} |
| | | .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:var(--color-primary, #1769d8);font-size:24rpx}.list{height:0;flex:1;padding-bottom: 132rpx;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:var(--color-primary, #1769d8);background:var(--color-primary-soft, #edf5ff);border:1rpx solid var(--color-primary-border, #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:var(--color-primary, #1769d8);font-size:22rpx;background:var(--color-primary-soft, #edf5ff);border:1rpx solid var(--color-primary-border, #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:var(--color-primary, #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:var(--color-primary, #1769d8);font-size:22rpx;line-height:48rpx;background:var(--color-primary-soft, #f5f8ff);border:1rpx solid var(--color-primary-border, #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: 104rpx; height: 104rpx; min-height: 104rpx;padding:0;margin:0;background:var(--color-primary, #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}.status-card{display:flex;align-items:center;justify-content:space-between;gap:20rpx;padding:24rpx 22rpx;margin:20rpx 0 14rpx;background:#fff;border-radius:16rpx;box-shadow:0 10rpx 24rpx rgba(43,69,107,.08)}.status-card>view{display:flex;min-width:0;flex:1;flex-direction:column;gap:6rpx;color:#66778c;font-size:23rpx}.status-card .status-title{color:#20334c;font-size:30rpx;font-weight:600}.status-card button{min-width:112rpx;margin:0;color:#fff;font-size:26rpx;background:#1769d8;border-radius:10rpx}.status-card .danger{background:#c65050}.status-card button::after{border:0}.search{display:flex;flex:none;align-items:center;height:80rpx;margin:0 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:90rpx;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-ok{color:#17865a;background:#eafaf2;border:1rpx solid #b8efd5}.tag-stop{color:#c65050;background:#fff7f7;border:1rpx solid #e3a0a0}.grid{display:grid;gap:9rpx;padding:14rpx 0 0;margin-top:14rpx;color:#66778c;font-size:22rpx;border-top:1rpx solid #edf1f6}.grid text{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.more,.state{display:block;padding:35rpx;color:#8795a8;font-size:26rpx;text-align:center}.error{color:#c3654d} |
| | | .page{height:100vh;display:flex;flex-direction:column;padding:0 24rpx;box-sizing:border-box;overflow:hidden;background:#f3f6fb}.status-card{display:flex;align-items:center;justify-content:space-between;gap:20rpx;padding:24rpx 22rpx;margin:20rpx 0 14rpx;background:#fff;border-radius:16rpx;box-shadow:0 10rpx 24rpx rgba(43,69,107,.08)}.status-card>view{display:flex;min-width:0;flex:1;flex-direction:column;gap:6rpx;color:#66778c;font-size:23rpx}.status-card .status-title{color:#20334c;font-size:30rpx;font-weight:600}.status-card button{min-width:112rpx;margin:0;color:#fff;font-size:26rpx;background:var(--color-primary, #1769d8);border-radius:10rpx}.status-card .danger{background:#c65050}.status-card button::after{border:0}.search{display:flex;flex:none;align-items:center;height:80rpx;margin:0 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:var(--color-primary, #1769d8);font-size:24rpx}.list{height:0;flex:1;padding-bottom:90rpx;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-ok{color:#17865a;background:#eafaf2;border:1rpx solid #b8efd5}.tag-stop{color:#c65050;background:#fff7f7;border:1rpx solid #e3a0a0}.grid{display:grid;gap:9rpx;padding:14rpx 0 0;margin-top:14rpx;color:#66778c;font-size:22rpx;border-top:1rpx solid #edf1f6}.grid text{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.more,.state{display:block;padding:35rpx;color:#8795a8;font-size:26rpx;text-align:center}.error{color:#c3654d} |
| | | </style> |
| | |
| | | .sheet{display:flex;flex-direction:column;width:100%;max-height:80vh;background:#fff;border-radius:24rpx 24rpx 0 0} |
| | | .sheet-head{display:flex;align-items:center;justify-content:space-between;height:96rpx;padding:0 28rpx;border-bottom:1rpx solid #edf1f6} |
| | | .sheet-head text:first-child{color:#10233f;font-size:30rpx;font-weight:600} |
| | | .sheet-close{color:#1769d8;font-size:25rpx} |
| | | .sheet-close{color:var(--color-primary, #1769d8);font-size:25rpx} |
| | | .sheet-search{display:flex;align-items:center;height:76rpx;gap:16rpx;margin:18rpx 28rpx 6rpx;padding:0 20rpx;background:#f4f7fb;border-radius:14rpx} |
| | | .sheet-search input{min-width:0;flex:1;font-size:26rpx} |
| | | .sheet-search text{flex:none;color:#1769d8;font-size:24rpx} |
| | | .sheet-search text{flex:none;color:var(--color-primary, #1769d8);font-size:24rpx} |
| | | .sheet-body{height:620rpx;flex:none;padding:8rpx 28rpx 0;box-sizing:border-box} |
| | | .sheet-row{display:flex;align-items:center;gap:16rpx;padding:22rpx 0;border-bottom:1rpx solid #f2f5f9} |
| | | .sheet-row-main{display:flex;min-width:0;flex:1;flex-direction:column;gap:8rpx} |
| | |
| | | .sheet-row-sub{overflow:hidden;color:#8494a8;font-size:22rpx;text-overflow:ellipsis;white-space:nowrap} |
| | | .sheet-row-extra{flex:none;color:#617287;font-size:23rpx} |
| | | .sheet-check{display:flex;width:40rpx;height:40rpx;flex:none;align-items:center;justify-content:center;color:#fff;font-size:24rpx;background:#fff;border:2rpx solid #cfd9e6;border-radius:50%} |
| | | .sheet-check.on{background:#1769d8;border-color:#1769d8} |
| | | .sheet-check.on{background:var(--color-primary, #1769d8);border-color:var(--color-primary, #1769d8)} |
| | | .sheet-state{padding:60rpx 0;color:#8795a8;font-size:25rpx;text-align:center} |
| | | .sheet-state.more{padding:26rpx 0 34rpx;font-size:24rpx} |
| | | .sheet-foot{display:flex;align-items:center;justify-content:space-between;padding:18rpx 28rpx 34rpx;border-top:1rpx solid #edf1f6} |
| | |
| | | .sheet-foot>view{display:flex;gap:16rpx} |
| | | .sheet-foot button{height:72rpx;min-height:72rpx;padding:0 34rpx;margin:0;font-size:26rpx;line-height:70rpx;border-radius:36rpx} |
| | | .sheet-foot button::after{border:0} |
| | | .ghost{color:#1769d8;background:#f2f6fc;border:1rpx solid #cfe0f7} |
| | | .primary{color:#fff;background:#1769d8} |
| | | .ghost{color:var(--color-primary, #1769d8);background:#f2f6fc;border:1rpx solid #cfe0f7} |
| | | .primary{color:#fff;background:var(--color-primary, #1769d8)} |
| | | </style> |
| | |
| | | </template> |
| | | |
| | | <style lang="scss" scoped> |
| | | .page{min-height:100vh;padding:24rpx 30rpx 70rpx;background:#f6f7f9}.form-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 #eef1f5}.field>text:first-child{width:190rpx;flex:none;color:#33455d;font-size:27rpx}.field input,.field picker,.picker,.value{min-width:0;flex:1;color:#1e3049;font-size:27rpx}.field input{flex:1}.picker{display:flex;align-items:center;justify-content:space-between;color:#65758a}.picker text:first-child,.value{overflow:hidden;text-align:right;text-overflow:ellipsis;white-space:nowrap}.picker text:last-child{margin-left:16rpx;color:#8092a7;font-size:36rpx}.value.muted{color:#8494a8}.required{color:#e23b3b}.column{align-items:flex-start;flex-direction:column;padding:20rpx 24rpx}.column>text:first-child{width:auto}.column textarea{width:100%;height:140rpx;font-size:27rpx}.save{margin-top:32rpx;color:#fff;font-size:30rpx;background:#1769d8;border-radius:12rpx}.save::after{border:0}.state{padding:38rpx;color:#8795a8;font-size:26rpx;text-align:center} |
| | | .page{min-height:100vh;padding:24rpx 30rpx 70rpx;background:#f6f7f9}.form-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 #eef1f5}.field>text:first-child{width:190rpx;flex:none;color:#33455d;font-size:27rpx}.field input,.field picker,.picker,.value{min-width:0;flex:1;color:#1e3049;font-size:27rpx}.field input{flex:1}.picker{display:flex;align-items:center;justify-content:space-between;color:#65758a}.picker text:first-child,.value{overflow:hidden;text-align:right;text-overflow:ellipsis;white-space:nowrap}.picker text:last-child{margin-left:16rpx;color:#8092a7;font-size:36rpx}.value.muted{color:#8494a8}.required{color:#e23b3b}.column{align-items:flex-start;flex-direction:column;padding:20rpx 24rpx}.column>text:first-child{width:auto}.column textarea{width:100%;height:140rpx;font-size:27rpx}.save{margin-top:32rpx;color:#fff;font-size:30rpx;background:var(--color-primary, #1769d8);border-radius:12rpx}.save::after{border:0}.state{padding:38rpx;color:#8795a8;font-size:26rpx;text-align:center} |
| | | </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-required{color:#c2570d;background:#fff4e7;border:1rpx solid #f5cfa4}.tag-optional{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 button::after{border:0}.actions .danger{color:#c65050;background:#fff7f7;border-color:#e3a0a0}.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}.fab{position:fixed;right:32rpx;bottom:56rpx;display:flex;width:100rpx;height:100rpx;align-items:center;justify-content:center;padding:0;margin:0;background:#1769d8;border-radius:50%;box-shadow:0 14rpx 28rpx rgba(23,105,216,.32)}.fab::after{border:0}.fab view{position:relative;width:38rpx;height:38rpx}.fab view::before,.fab view::after{position:absolute;content:"";background:#fff;border-radius:3rpx}.fab view::before{top:17rpx;left:0;width:38rpx;height:4rpx}.fab view::after{top:0;left:17rpx;width:4rpx;height:38rpx}.mask{position:fixed;top:0;right:0;bottom:0;left:0;z-index:900;display:flex;align-items:flex-end;background:rgba(16,35,63,.45)}.sheet{width:100%;max-height:76vh;background:#fff;border-radius:24rpx 24rpx 0 0}.sheet-head{display:flex;align-items:center;justify-content:space-between;height:96rpx;padding:0 28rpx;border-bottom:1rpx solid #edf1f6}.sheet-head text:first-child{color:#10233f;font-size:30rpx;font-weight:600}.sheet-head text:last-child{color:#1769d8;font-size:25rpx}.sheet-body{height:600rpx;padding:0 28rpx;box-sizing:border-box}.link-row{display:flex;flex-direction:column;gap:10rpx;padding:22rpx 0;border-bottom:1rpx solid #f2f5f9}.link-row>view{display:flex;align-items:baseline;gap:14rpx}.link-name{color:#1e3049;font-size:27rpx;font-weight:600}.link-code{color:#8494a8;font-size:23rpx}.link-attention{color:#66778c;font-size:23rpx} |
| | | .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:var(--color-primary, #1769d8);font-size:24rpx}.content{height:0;flex:1;padding-bottom: 132rpx;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-required{color:#c2570d;background:#fff4e7;border:1rpx solid #f5cfa4}.tag-optional{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:var(--color-primary, #1769d8);font-size:22rpx;line-height:48rpx;background:var(--color-primary-soft, #f5f8ff);border:1rpx solid var(--color-primary-border, #8ab3ee);border-radius:8rpx}.actions button::after{border:0}.actions .danger{color:#c65050;background:#fff7f7;border-color:#e3a0a0}.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}.fab{position:fixed;right:32rpx;bottom:56rpx;display:flex;width:100rpx;height:100rpx;align-items:center;justify-content:center;padding:0;margin:0;background:var(--color-primary, #1769d8);border-radius:50%;box-shadow:0 14rpx 28rpx rgba(23,105,216,.32)}.fab::after{border:0}.fab view{position:relative;width:38rpx;height:38rpx}.fab view::before,.fab view::after{position:absolute;content:"";background:#fff;border-radius:3rpx}.fab view::before{top:17rpx;left:0;width:38rpx;height:4rpx}.fab view::after{top:0;left:17rpx;width:4rpx;height:38rpx}.mask{position:fixed;top:0;right:0;bottom:0;left:0;z-index:900;display:flex;align-items:flex-end;background:rgba(16,35,63,.45)}.sheet{width:100%;max-height:76vh;background:#fff;border-radius:24rpx 24rpx 0 0}.sheet-head{display:flex;align-items:center;justify-content:space-between;height:96rpx;padding:0 28rpx;border-bottom:1rpx solid #edf1f6}.sheet-head text:first-child{color:#10233f;font-size:30rpx;font-weight:600}.sheet-head text:last-child{color:var(--color-primary, #1769d8);font-size:25rpx}.sheet-body{height:600rpx;padding:0 28rpx;box-sizing:border-box}.link-row{display:flex;flex-direction:column;gap:10rpx;padding:22rpx 0;border-bottom:1rpx solid #f2f5f9}.link-row>view{display:flex;align-items:baseline;gap:14rpx}.link-name{color:#1e3049;font-size:27rpx;font-weight:600}.link-code{color:#8494a8;font-size:23rpx}.link-attention{color:#66778c;font-size:23rpx} |
| | | </style> |
| | |
| | | </template> |
| | | |
| | | <style lang="scss" scoped> |
| | | .page{min-height:100vh;padding:24rpx 30rpx 70rpx;box-sizing:border-box;background:#f6f7f9}.form-card{margin-bottom:18rpx;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 #eef1f5}.field>text:first-child{width:190rpx;flex:none;color:#33455d;font-size:27rpx}.field input,.field picker,.picker,.value{min-width:0;flex:1;color:#1e3049;font-size:27rpx}.picker{display:flex;align-items:center;justify-content:space-between;color:#65758a}.picker text:first-child,.value{overflow:hidden;text-align:right;text-overflow:ellipsis;white-space:nowrap}.picker text:last-child{margin-left:16rpx;color:#8092a7;font-size:36rpx}.required{color:#e23b3b}.code-field input{min-width:0}.code-field button{flex:none;min-width:136rpx;padding:0 16rpx;margin:0;color:#1769d8;font-size:24rpx;line-height:56rpx;background:#fff;border:1rpx solid #1769d8;border-radius:8rpx}.code-field button::after,.save::after,.step-actions button::after,.modal-actions button::after,.section button::after{border:0}.column{align-items:flex-start;flex-direction:column;padding:20rpx 24rpx}.column>text:first-child{width:auto}.column textarea{width:100%;height:140rpx;font-size:27rpx}.section{display:flex;align-items:center;justify-content:space-between;height:88rpx;padding:0 24rpx;color:#10233f;font-size:29rpx;font-weight:600}.section button{height:56rpx;min-height:56rpx;padding:0 20rpx;margin:0;color:#1769d8;font-size:24rpx;line-height:54rpx;background:#f5f8ff;border:1rpx solid #8ab3ee;border-radius:8rpx}.step{margin:0 20rpx 18rpx;border:1rpx solid #edf1f6;border-radius:12rpx;overflow:hidden}.step-head{padding:18rpx 20rpx;background:#f9fbff}.step-head>view{display:flex;min-width:0;flex-direction:column;gap:8rpx}.step-sort{color:#1769d8;font-size:22rpx;font-weight:600}.step-content{overflow:hidden;color:#10233f;font-size:27rpx;text-overflow:ellipsis;white-space:nowrap}.grid{display:grid;gap:10rpx;padding:16rpx 20rpx;color:#66778c;font-size:23rpx;border-top:1rpx solid #edf1f6}.grid text{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.step-actions{display:flex;justify-content:flex-end;gap:12rpx;padding:12rpx 20rpx;border-top:1rpx solid #f2f5f9}.step-actions button{height:50rpx;min-height:50rpx;padding:0 18rpx;margin:0;color:#1769d8;font-size:23rpx;line-height:48rpx;background:#f5f8ff;border:1rpx solid #8ab3ee;border-radius:8rpx}.danger{color:#c65050;background:#fff7f7;border:1rpx solid #e3a0a0}.save{margin-top:20rpx;color:#fff;font-size:30rpx;background:#1769d8;border-radius:12rpx}.state{padding:38rpx;color:#8795a8;font-size:26rpx;text-align:center}.compact{padding:44rpx 0}.mask{position:fixed;top:0;right:0;bottom:0;left:0;z-index:900;display:flex;align-items:center;justify-content:center;padding:0 40rpx;background:rgba(16,35,63,.45)}.modal{width:100%;max-height:84vh;padding-bottom:20rpx;overflow-y:auto;background:#fff;border-radius:20rpx}.modal-title{padding:28rpx 28rpx 12rpx;color:#10233f;font-size:30rpx;font-weight:600}.modal-actions{display:flex;justify-content:flex-end;gap:16rpx;padding:20rpx 24rpx 0}.modal-actions button{height:72rpx;min-height:72rpx;padding:0 34rpx;margin:0;font-size:26rpx;line-height:70rpx;border-radius:36rpx}.ghost{color:#1769d8;background:#f2f6fc;border:1rpx solid #cfe0f7}.primary{color:#fff;background:#1769d8} |
| | | .page{min-height:100vh;padding:24rpx 30rpx 70rpx;box-sizing:border-box;background:#f6f7f9}.form-card{margin-bottom:18rpx;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 #eef1f5}.field>text:first-child{width:190rpx;flex:none;color:#33455d;font-size:27rpx}.field input,.field picker,.picker,.value{min-width:0;flex:1;color:#1e3049;font-size:27rpx}.picker{display:flex;align-items:center;justify-content:space-between;color:#65758a}.picker text:first-child,.value{overflow:hidden;text-align:right;text-overflow:ellipsis;white-space:nowrap}.picker text:last-child{margin-left:16rpx;color:#8092a7;font-size:36rpx}.required{color:#e23b3b}.code-field input{min-width:0}.code-field button{flex:none;min-width:136rpx;padding:0 16rpx;margin:0;color:var(--color-primary, #1769d8);font-size:24rpx;line-height:56rpx;background:#fff;border:1rpx solid var(--color-primary, #1769d8);border-radius:8rpx}.code-field button::after,.save::after,.step-actions button::after,.modal-actions button::after,.section button::after{border:0}.column{align-items:flex-start;flex-direction:column;padding:20rpx 24rpx}.column>text:first-child{width:auto}.column textarea{width:100%;height:140rpx;font-size:27rpx}.section{display:flex;align-items:center;justify-content:space-between;height:88rpx;padding:0 24rpx;color:#10233f;font-size:29rpx;font-weight:600}.section button{height:56rpx;min-height:56rpx;padding:0 20rpx;margin:0;color:var(--color-primary, #1769d8);font-size:24rpx;line-height:54rpx;background:var(--color-primary-soft, #f5f8ff);border:1rpx solid var(--color-primary-border, #8ab3ee);border-radius:8rpx}.step{margin:0 20rpx 18rpx;border:1rpx solid #edf1f6;border-radius:12rpx;overflow:hidden}.step-head{padding:18rpx 20rpx;background:#f9fbff}.step-head>view{display:flex;min-width:0;flex-direction:column;gap:8rpx}.step-sort{color:var(--color-primary, #1769d8);font-size:22rpx;font-weight:600}.step-content{overflow:hidden;color:#10233f;font-size:27rpx;text-overflow:ellipsis;white-space:nowrap}.grid{display:grid;gap:10rpx;padding:16rpx 20rpx;color:#66778c;font-size:23rpx;border-top:1rpx solid #edf1f6}.grid text{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.step-actions{display:flex;justify-content:flex-end;gap:12rpx;padding:12rpx 20rpx;border-top:1rpx solid #f2f5f9}.step-actions button{height:50rpx;min-height:50rpx;padding:0 18rpx;margin:0;color:var(--color-primary, #1769d8);font-size:23rpx;line-height:48rpx;background:var(--color-primary-soft, #f5f8ff);border:1rpx solid var(--color-primary-border, #8ab3ee);border-radius:8rpx}.danger{color:#c65050;background:#fff7f7;border:1rpx solid #e3a0a0}.save{margin-top:20rpx;color:#fff;font-size:30rpx;background:var(--color-primary, #1769d8);border-radius:12rpx}.state{padding:38rpx;color:#8795a8;font-size:26rpx;text-align:center}.compact{padding:44rpx 0}.mask{position:fixed;top:0;right:0;bottom:0;left:0;z-index:900;display:flex;align-items:center;justify-content:center;padding:0 40rpx;background:rgba(16,35,63,.45)}.modal{width:100%;max-height:84vh;padding-bottom:20rpx;overflow-y:auto;background:#fff;border-radius:20rpx}.modal-title{padding:28rpx 28rpx 12rpx;color:#10233f;font-size:30rpx;font-weight:600}.modal-actions{display:flex;justify-content:flex-end;gap:16rpx;padding:20rpx 24rpx 0}.modal-actions button{height:72rpx;min-height:72rpx;padding:0 34rpx;margin:0;font-size:26rpx;line-height:70rpx;border-radius:36rpx}.ghost{color:var(--color-primary, #1769d8);background:#f2f6fc;border:1rpx solid #cfe0f7}.primary{color:#fff;background:var(--color-primary, #1769d8)} |
| | | </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-enabled{color:#17865a;background:#eafaf2;border:1rpx solid #b8efd5}.tag-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 button::after{border:0}.actions .danger{color:#c65050;background:#fff7f7;border-color:#e3a0a0}.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}.fab{position:fixed;right:32rpx;bottom:56rpx;display:flex;width:100rpx;height:100rpx;align-items:center;justify-content:center;padding:0;margin:0;background:#1769d8;border-radius:50%;box-shadow:0 14rpx 28rpx rgba(23,105,216,.32)}.fab::after{border:0}.fab view{position:relative;width:38rpx;height:38rpx}.fab view::before,.fab view::after{position:absolute;content:"";background:#fff;border-radius:3rpx}.fab view::before{top:17rpx;left:0;width:38rpx;height:4rpx}.fab view::after{top:0;left:17rpx;width:4rpx;height:38rpx} |
| | | .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:var(--color-primary, #1769d8);font-size:24rpx}.content{height:0;flex:1;padding-bottom: 132rpx;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-enabled{color:#17865a;background:#eafaf2;border:1rpx solid #b8efd5}.tag-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:var(--color-primary, #1769d8);font-size:22rpx;line-height:48rpx;background:var(--color-primary-soft, #f5f8ff);border:1rpx solid var(--color-primary-border, #8ab3ee);border-radius:8rpx}.actions button::after{border:0}.actions .danger{color:#c65050;background:#fff7f7;border-color:#e3a0a0}.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}.fab{position:fixed;right:32rpx;bottom:56rpx;display:flex;width:100rpx;height:100rpx;align-items:center;justify-content:center;padding:0;margin:0;background:var(--color-primary, #1769d8);border-radius:50%;box-shadow:0 14rpx 28rpx rgba(23,105,216,.32)}.fab::after{border:0}.fab view{position:relative;width:38rpx;height:38rpx}.fab view::before,.fab view::after{position:absolute;content:"";background:#fff;border-radius:3rpx}.fab view::before{top:17rpx;left:0;width:38rpx;height:4rpx}.fab view::after{top:0;left:17rpx;width:4rpx;height:38rpx} |
| | | </style> |
| | |
| | | </template> |
| | | |
| | | <style lang="scss" scoped> |
| | | .page{min-height:100vh;padding:24rpx 30rpx 70rpx;box-sizing:border-box;background:#f6f7f9}.hero{display:flex;flex-direction:column;gap:8rpx;margin-bottom:18rpx;padding:26rpx 24rpx;color:#fff;background:#1769d8;border-radius:16rpx;box-shadow:0 14rpx 26rpx rgba(23,105,216,.2)}.hero text:first-child{font-size:31rpx;font-weight:700}.hero text:last-child{color:#d7e8ff;font-size:23rpx}.card{overflow:hidden;background:#fff;border-radius:16rpx}.section{display:flex;align-items:center;justify-content:space-between;height:92rpx;padding:0 24rpx;color:#10233f;font-size:29rpx;font-weight:600;border-bottom:1rpx solid #eef1f5}.section button{height:56rpx;min-height:56rpx;padding:0 20rpx;margin:0;color:#1769d8;font-size:24rpx;line-height:54rpx;background:#f5f8ff;border:1rpx solid #8ab3ee;border-radius:8rpx}.section button::after,.bind-actions button::after,.save::after{border:0}.bind{margin:18rpx 20rpx;border:1rpx solid #edf1f6;border-radius:12rpx;overflow:hidden}.bind-head{display:flex;align-items:center;justify-content:space-between;gap:14rpx;padding:18rpx 20rpx;background:#f9fbff}.bind-head>view{display:flex;min-width:0;flex-direction:column;gap:8rpx}.bind-name{overflow:hidden;color:#10233f;font-size:27rpx;font-weight:600;text-overflow:ellipsis;white-space:nowrap}.bind-code{color:#8494a8;font-size:22rpx}.bind-type{flex:none;padding:6rpx 14rpx;color:#1769d8;font-size:22rpx;background:#edf5ff;border:1rpx solid #bfdbff;border-radius:999rpx}.bind-row{display:flex;align-items:center;gap:16rpx;min-height:78rpx;padding:0 20rpx;border-top:1rpx solid #f2f5f9}.bind-row>text:first-child{width:150rpx;flex:none;color:#617287;font-size:25rpx}.bind-row input{min-width:0;flex:1;color:#1e3049;font-size:26rpx;text-align:right}.bind-value{min-width:0;flex:1;color:#1e3049;font-size:26rpx;text-align:right}.bind-actions{display:flex;justify-content:flex-end;padding:12rpx 20rpx;border-top:1rpx solid #f2f5f9}.bind-actions button{height:50rpx;min-height:50rpx;padding:0 18rpx;margin:0;font-size:23rpx;line-height:48rpx;border-radius:8rpx}.danger{color:#c65050;background:#fff7f7;border:1rpx solid #e3a0a0}.save{margin-top:28rpx;color:#fff;font-size:30rpx;background:#1769d8;border-radius:12rpx}.state{padding:38rpx;color:#8795a8;font-size:26rpx;text-align:center}.compact{padding:44rpx 0} |
| | | .page{min-height:100vh;padding:24rpx 30rpx 70rpx;box-sizing:border-box;background:#f6f7f9}.hero{display:flex;flex-direction:column;gap:8rpx;margin-bottom:18rpx;padding:26rpx 24rpx;color:#fff;background:var(--color-primary, #1769d8);border-radius:16rpx;box-shadow:0 14rpx 26rpx rgba(23,105,216,.2)}.hero text:first-child{font-size:31rpx;font-weight:700}.hero text:last-child{color:#d7e8ff;font-size:23rpx}.card{overflow:hidden;background:#fff;border-radius:16rpx}.section{display:flex;align-items:center;justify-content:space-between;height:92rpx;padding:0 24rpx;color:#10233f;font-size:29rpx;font-weight:600;border-bottom:1rpx solid #eef1f5}.section button{height:56rpx;min-height:56rpx;padding:0 20rpx;margin:0;color:var(--color-primary, #1769d8);font-size:24rpx;line-height:54rpx;background:var(--color-primary-soft, #f5f8ff);border:1rpx solid var(--color-primary-border, #8ab3ee);border-radius:8rpx}.section button::after,.bind-actions button::after,.save::after{border:0}.bind{margin:18rpx 20rpx;border:1rpx solid #edf1f6;border-radius:12rpx;overflow:hidden}.bind-head{display:flex;align-items:center;justify-content:space-between;gap:14rpx;padding:18rpx 20rpx;background:#f9fbff}.bind-head>view{display:flex;min-width:0;flex-direction:column;gap:8rpx}.bind-name{overflow:hidden;color:#10233f;font-size:27rpx;font-weight:600;text-overflow:ellipsis;white-space:nowrap}.bind-code{color:#8494a8;font-size:22rpx}.bind-type{flex:none;padding:6rpx 14rpx;color:var(--color-primary, #1769d8);font-size:22rpx;background:var(--color-primary-soft, #edf5ff);border:1rpx solid var(--color-primary-border, #bfdbff);border-radius:999rpx}.bind-row{display:flex;align-items:center;gap:16rpx;min-height:78rpx;padding:0 20rpx;border-top:1rpx solid #f2f5f9}.bind-row>text:first-child{width:150rpx;flex:none;color:#617287;font-size:25rpx}.bind-row input{min-width:0;flex:1;color:#1e3049;font-size:26rpx;text-align:right}.bind-value{min-width:0;flex:1;color:#1e3049;font-size:26rpx;text-align:right}.bind-actions{display:flex;justify-content:flex-end;padding:12rpx 20rpx;border-top:1rpx solid #f2f5f9}.bind-actions button{height:50rpx;min-height:50rpx;padding:0 18rpx;margin:0;font-size:23rpx;line-height:48rpx;border-radius:8rpx}.danger{color:#c65050;background:#fff7f7;border:1rpx solid #e3a0a0}.save{margin-top:28rpx;color:#fff;font-size:30rpx;background:var(--color-primary, #1769d8);border-radius:12rpx}.state{padding:38rpx;color:#8795a8;font-size:26rpx;text-align:center}.compact{padding:44rpx 0} |
| | | </style> |
| | |
| | | </template> |
| | | |
| | | <style lang="scss" scoped> |
| | | .page{min-height:100vh;padding:24rpx 30rpx 70rpx;box-sizing:border-box;background:#f6f7f9}.form-card{margin-bottom:18rpx;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 #eef1f5}.field>text:first-child{width:210rpx;flex:none;color:#33455d;font-size:27rpx}.field input,.field picker,.picker,.value{min-width:0;flex:1;color:#1e3049;font-size:27rpx}.picker{display:flex;align-items:center;justify-content:space-between;color:#65758a}.picker text:first-child,.value{overflow:hidden;text-align:right;text-overflow:ellipsis;white-space:nowrap}.picker text:last-child{margin-left:16rpx;color:#8092a7;font-size:36rpx}.required{color:#e23b3b}.code-field button{flex:none;min-width:136rpx;padding:0 16rpx;margin:0;color:#1769d8;font-size:24rpx;line-height:56rpx;background:#fff;border:1rpx solid #1769d8;border-radius:8rpx}.code-field button::after,.save::after,.button-row button::after,.section button::after,.bom-actions button::after,.modal-actions button::after{border:0}.column{align-items:flex-start;flex-direction:column;padding:20rpx 24rpx}.column>text:first-child{width:auto}.column textarea{width:100%;height:140rpx;font-size:27rpx}.section{display:flex;align-items:center;justify-content:space-between;height:88rpx;padding:0 24rpx;color:#10233f;font-size:29rpx;font-weight:600;border-bottom:1rpx solid #f2f5f9}.section button{height:56rpx;min-height:56rpx;padding:0 20rpx;margin:0;color:#1769d8;font-size:24rpx;line-height:54rpx;background:#f5f8ff;border:1rpx solid #8ab3ee;border-radius:8rpx}.section-hint{color:#8494a8;font-size:23rpx;font-weight:400}.button-row{display:flex;flex-wrap:wrap;gap:14rpx;padding:18rpx 24rpx;border-bottom:1rpx solid #eef1f5}.button-row button{flex:1;min-width:190rpx;height:64rpx;min-height:64rpx;padding:0 12rpx;margin:0;color:#1769d8;font-size:24rpx;line-height:62rpx;background:#f5f8ff;border:1rpx solid #8ab3ee;border-radius:10rpx}.button-row button[disabled]{color:#aab6c6;background:#fafbfd;border-color:#e2e8f0}.button-row .danger{color:#c65050;background:#fff7f7;border-color:#e3a0a0}.process-list{padding:8rpx 0}.process-item{display:flex;align-items:center;gap:14rpx;padding:22rpx 24rpx;border-bottom:1rpx solid #f2f5f9}.process-item:last-child{border-bottom:0}.process-item.active{background:#eef5ff}.process-sort{width:38rpx;flex:none;color:#8494a8;font-size:23rpx;text-align:center}.process-dot{width:20rpx;height:20rpx;flex:none;background:#d5dde8;border-radius:50%}.process-name{min-width:0;flex:1;overflow:hidden;color:#1e3049;font-size:27rpx;text-overflow:ellipsis;white-space:nowrap}.process-item.active .process-name{color:#1769d8;font-weight:600}.flag{font-size:22rpx}.flag.key{color:#df8919}.flag.check{color:#17865a}.flag.back{color:#268ca7}.process-remove{flex:none;padding:4rpx 12rpx;color:#c65050;font-size:22rpx}.process-head{display:flex;align-items:flex-start;justify-content:space-between;gap:16rpx;padding:20rpx 24rpx 0}.process-head>view:first-child{display:flex;min-width:0;flex-direction:column;gap:8rpx}.process-title{color:#10233f;font-size:29rpx;font-weight:600}.process-code{color:#8494a8;font-size:23rpx}.flags{display:flex;flex-wrap:wrap;justify-content:flex-end;gap:10rpx}.grid{display:grid;gap:10rpx;padding:16rpx 24rpx;color:#66778c;font-size:23rpx}.grid text{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.bom{margin:16rpx 20rpx;border:1rpx solid #edf1f6;border-radius:12rpx;overflow:hidden}.bom-head{display:flex;align-items:center;justify-content:space-between;gap:14rpx;padding:16rpx 20rpx;background:#f9fbff}.bom-head>view{display:flex;min-width:0;flex-direction:column;gap:6rpx}.bom-name{overflow:hidden;color:#10233f;font-size:26rpx;font-weight:600;text-overflow:ellipsis;white-space:nowrap}.bom-code{color:#8494a8;font-size:22rpx}.bom-unit{flex:none;color:#617287;font-size:23rpx}.bom-row{display:flex;align-items:center;gap:16rpx;min-height:76rpx;padding:0 20rpx;border-top:1rpx solid #f2f5f9}.bom-row>text:first-child{width:110rpx;flex:none;color:#617287;font-size:25rpx}.bom-row input{min-width:0;flex:1;color:#1e3049;font-size:26rpx;text-align:right}.bom-actions{display:flex;justify-content:flex-end;padding:12rpx 20rpx;border-top:1rpx solid #f2f5f9}.bom-actions button{height:50rpx;min-height:50rpx;padding:0 18rpx;margin:0;font-size:23rpx;line-height:48rpx;border-radius:8rpx}.danger{color:#c65050;background:#fff7f7;border:1rpx solid #e3a0a0}.save{margin-top:20rpx;color:#fff;font-size:30rpx;background:#1769d8;border-radius:12rpx}.state{padding:38rpx 24rpx;color:#8795a8;font-size:25rpx;text-align:center}.compact{padding:30rpx 24rpx}.hint{color:#df8919;text-align:left}.mask{position:fixed;top:0;right:0;bottom:0;left:0;z-index:900;display:flex;align-items:center;justify-content:center;padding:0 32rpx;background:rgba(16,35,63,.45)}.modal{width:100%;max-height:86vh;padding-bottom:20rpx;overflow-y:auto;background:#fff;border-radius:20rpx}.modal-title{padding:28rpx 28rpx 12rpx;color:#10233f;font-size:30rpx;font-weight:600}.modal-actions{display:flex;justify-content:flex-end;gap:16rpx;padding:20rpx 24rpx 0}.modal-actions button{height:72rpx;min-height:72rpx;padding:0 34rpx;margin:0;font-size:26rpx;line-height:70rpx;border-radius:36rpx}.ghost{color:#1769d8;background:#f2f6fc;border:1rpx solid #cfe0f7}.primary{color:#fff;background:#1769d8}.color-row{display:flex;flex-wrap:wrap;align-items:center;gap:18rpx;width:100%}.color-dot{width:52rpx;height:52rpx;border:3rpx solid #fff;border-radius:10rpx;box-shadow:0 0 0 1rpx #dce4ee}.color-dot.on{box-shadow:0 0 0 3rpx #1769d8}.color-text{color:#8494a8;font-size:23rpx} |
| | | .page{min-height:100vh;padding:24rpx 30rpx 70rpx;box-sizing:border-box;background:#f6f7f9}.form-card{margin-bottom:18rpx;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 #eef1f5}.field>text:first-child{width:210rpx;flex:none;color:#33455d;font-size:27rpx}.field input,.field picker,.picker,.value{min-width:0;flex:1;color:#1e3049;font-size:27rpx}.picker{display:flex;align-items:center;justify-content:space-between;color:#65758a}.picker text:first-child,.value{overflow:hidden;text-align:right;text-overflow:ellipsis;white-space:nowrap}.picker text:last-child{margin-left:16rpx;color:#8092a7;font-size:36rpx}.required{color:#e23b3b}.code-field button{flex:none;min-width:136rpx;padding:0 16rpx;margin:0;color:var(--color-primary, #1769d8);font-size:24rpx;line-height:56rpx;background:#fff;border:1rpx solid var(--color-primary, #1769d8);border-radius:8rpx}.code-field button::after,.save::after,.button-row button::after,.section button::after,.bom-actions button::after,.modal-actions button::after{border:0}.column{align-items:flex-start;flex-direction:column;padding:20rpx 24rpx}.column>text:first-child{width:auto}.column textarea{width:100%;height:140rpx;font-size:27rpx}.section{display:flex;align-items:center;justify-content:space-between;height:88rpx;padding:0 24rpx;color:#10233f;font-size:29rpx;font-weight:600;border-bottom:1rpx solid #f2f5f9}.section button{height:56rpx;min-height:56rpx;padding:0 20rpx;margin:0;color:var(--color-primary, #1769d8);font-size:24rpx;line-height:54rpx;background:var(--color-primary-soft, #f5f8ff);border:1rpx solid var(--color-primary-border, #8ab3ee);border-radius:8rpx}.section-hint{color:#8494a8;font-size:23rpx;font-weight:400}.button-row{display:flex;flex-wrap:wrap;gap:14rpx;padding:18rpx 24rpx;border-bottom:1rpx solid #eef1f5}.button-row button{flex:1;min-width:190rpx;height:64rpx;min-height:64rpx;padding:0 12rpx;margin:0;color:var(--color-primary, #1769d8);font-size:24rpx;line-height:62rpx;background:var(--color-primary-soft, #f5f8ff);border:1rpx solid var(--color-primary-border, #8ab3ee);border-radius:10rpx}.button-row button[disabled]{color:#aab6c6;background:#fafbfd;border-color:#e2e8f0}.button-row .danger{color:#c65050;background:#fff7f7;border-color:#e3a0a0}.process-list{padding:8rpx 0}.process-item{display:flex;align-items:center;gap:14rpx;padding:22rpx 24rpx;border-bottom:1rpx solid #f2f5f9}.process-item:last-child{border-bottom:0}.process-item.active{background:var(--color-primary-soft, #eef5ff)}.process-sort{width:38rpx;flex:none;color:#8494a8;font-size:23rpx;text-align:center}.process-dot{width:20rpx;height:20rpx;flex:none;background:#d5dde8;border-radius:50%}.process-name{min-width:0;flex:1;overflow:hidden;color:#1e3049;font-size:27rpx;text-overflow:ellipsis;white-space:nowrap}.process-item.active .process-name{color:var(--color-primary, #1769d8);font-weight:600}.flag{font-size:22rpx}.flag.key{color:#df8919}.flag.check{color:#17865a}.flag.back{color:#268ca7}.process-remove{flex:none;padding:4rpx 12rpx;color:#c65050;font-size:22rpx}.process-head{display:flex;align-items:flex-start;justify-content:space-between;gap:16rpx;padding:20rpx 24rpx 0}.process-head>view:first-child{display:flex;min-width:0;flex-direction:column;gap:8rpx}.process-title{color:#10233f;font-size:29rpx;font-weight:600}.process-code{color:#8494a8;font-size:23rpx}.flags{display:flex;flex-wrap:wrap;justify-content:flex-end;gap:10rpx}.grid{display:grid;gap:10rpx;padding:16rpx 24rpx;color:#66778c;font-size:23rpx}.grid text{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.bom{margin:16rpx 20rpx;border:1rpx solid #edf1f6;border-radius:12rpx;overflow:hidden}.bom-head{display:flex;align-items:center;justify-content:space-between;gap:14rpx;padding:16rpx 20rpx;background:#f9fbff}.bom-head>view{display:flex;min-width:0;flex-direction:column;gap:6rpx}.bom-name{overflow:hidden;color:#10233f;font-size:26rpx;font-weight:600;text-overflow:ellipsis;white-space:nowrap}.bom-code{color:#8494a8;font-size:22rpx}.bom-unit{flex:none;color:#617287;font-size:23rpx}.bom-row{display:flex;align-items:center;gap:16rpx;min-height:76rpx;padding:0 20rpx;border-top:1rpx solid #f2f5f9}.bom-row>text:first-child{width:110rpx;flex:none;color:#617287;font-size:25rpx}.bom-row input{min-width:0;flex:1;color:#1e3049;font-size:26rpx;text-align:right}.bom-actions{display:flex;justify-content:flex-end;padding:12rpx 20rpx;border-top:1rpx solid #f2f5f9}.bom-actions button{height:50rpx;min-height:50rpx;padding:0 18rpx;margin:0;font-size:23rpx;line-height:48rpx;border-radius:8rpx}.danger{color:#c65050;background:#fff7f7;border:1rpx solid #e3a0a0}.save{margin-top:20rpx;color:#fff;font-size:30rpx;background:var(--color-primary, #1769d8);border-radius:12rpx}.state{padding:38rpx 24rpx;color:#8795a8;font-size:25rpx;text-align:center}.compact{padding:30rpx 24rpx}.hint{color:#df8919;text-align:left}.mask{position:fixed;top:0;right:0;bottom:0;left:0;z-index:900;display:flex;align-items:center;justify-content:center;padding:0 32rpx;background:rgba(16,35,63,.45)}.modal{width:100%;max-height:86vh;padding-bottom:20rpx;overflow-y:auto;background:#fff;border-radius:20rpx}.modal-title{padding:28rpx 28rpx 12rpx;color:#10233f;font-size:30rpx;font-weight:600}.modal-actions{display:flex;justify-content:flex-end;gap:16rpx;padding:20rpx 24rpx 0}.modal-actions button{height:72rpx;min-height:72rpx;padding:0 34rpx;margin:0;font-size:26rpx;line-height:70rpx;border-radius:36rpx}.ghost{color:var(--color-primary, #1769d8);background:#f2f6fc;border:1rpx solid #cfe0f7}.primary{color:#fff;background:var(--color-primary, #1769d8)}.color-row{display:flex;flex-wrap:wrap;align-items:center;gap:18rpx;width:100%}.color-dot{width:52rpx;height:52rpx;border:3rpx solid #fff;border-radius:10rpx;box-shadow:0 0 0 1rpx #dce4ee}.color-dot.on{box-shadow:0 0 0 3rpx var(--color-primary, #1769d8)}.color-text{color:#8494a8;font-size:23rpx} |
| | | </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-enabled{color:#17865a;background:#eafaf2;border:1rpx solid #b8efd5}.tag-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 button::after{border:0}.actions .danger{color:#c65050;background:#fff7f7;border-color:#e3a0a0}.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}.fab{position:fixed;right:32rpx;bottom:56rpx;display:flex;width:100rpx;height:100rpx;align-items:center;justify-content:center;padding:0;margin:0;background:#1769d8;border-radius:50%;box-shadow:0 14rpx 28rpx rgba(23,105,216,.32)}.fab::after{border:0}.fab view{position:relative;width:38rpx;height:38rpx}.fab view::before,.fab view::after{position:absolute;content:"";background:#fff;border-radius:3rpx}.fab view::before{top:17rpx;left:0;width:38rpx;height:4rpx}.fab view::after{top:0;left:17rpx;width:4rpx;height:38rpx} |
| | | .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:var(--color-primary, #1769d8);font-size:24rpx}.content{height:0;flex:1;padding-bottom: 132rpx;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-enabled{color:#17865a;background:#eafaf2;border:1rpx solid #b8efd5}.tag-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:var(--color-primary, #1769d8);font-size:22rpx;line-height:48rpx;background:var(--color-primary-soft, #f5f8ff);border:1rpx solid var(--color-primary-border, #8ab3ee);border-radius:8rpx}.actions button::after{border:0}.actions .danger{color:#c65050;background:#fff7f7;border-color:#e3a0a0}.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}.fab{position:fixed;right:32rpx;bottom:56rpx;display:flex;width:100rpx;height:100rpx;align-items:center;justify-content:center;padding:0;margin:0;background:var(--color-primary, #1769d8);border-radius:50%;box-shadow:0 14rpx 28rpx rgba(23,105,216,.32)}.fab::after{border:0}.fab view{position:relative;width:38rpx;height:38rpx}.fab view::before,.fab view::after{position:absolute;content:"";background:#fff;border-radius:3rpx}.fab view::before{top:17rpx;left:0;width:38rpx;height:4rpx}.fab view::after{top:0;left:17rpx;width:4rpx;height:38rpx} |
| | | </style> |
| | |
| | | </template> |
| | | |
| | | <style lang="scss" scoped> |
| | | .page{min-height:100vh;padding:24rpx 30rpx 70rpx;box-sizing:border-box;background:#f6f7f9}.form-card{margin-bottom:18rpx;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 #eef1f5}.field>text:first-child{width:190rpx;flex:none;color:#33455d;font-size:27rpx}.field input,.field picker,.picker,.value{min-width:0;flex:1;color:#1e3049;font-size:27rpx}.picker{display:flex;align-items:center;justify-content:space-between;color:#65758a}.picker text:first-child,.value{overflow:hidden;text-align:right;text-overflow:ellipsis;white-space:nowrap}.picker text:last-child{margin-left:16rpx;color:#8092a7;font-size:36rpx}.value.muted{color:#8494a8}.required{color:#e23b3b}.column{align-items:flex-start;flex-direction:column;padding:20rpx 24rpx}.column>text:first-child{width:auto}.column textarea{width:100%;height:140rpx;font-size:27rpx}.section{display:flex;align-items:center;justify-content:space-between;height:88rpx;padding:0 24rpx;color:#10233f;font-size:29rpx;font-weight:600}.section button{height:56rpx;min-height:56rpx;padding:0 20rpx;margin:0;color:#1769d8;font-size:24rpx;line-height:54rpx;background:#f5f8ff;border:1rpx solid #8ab3ee;border-radius:8rpx}.section button::after{border:0}.detail{margin:0 20rpx 18rpx;border:1rpx solid #edf1f6;border-radius:12rpx;overflow:hidden}.detail-head{display:flex;align-items:center;justify-content:space-between;gap:14rpx;padding:18rpx 20rpx;background:#f9fbff}.detail-head>view{display:flex;min-width:0;flex-direction:column;gap:8rpx}.detail-name{overflow:hidden;color:#10233f;font-size:27rpx;font-weight:600;text-overflow:ellipsis;white-space:nowrap}.detail-code{color:#8494a8;font-size:22rpx}.detail-type{flex:none;padding:6rpx 14rpx;color:#1769d8;font-size:22rpx;background:#edf5ff;border:1rpx solid #bfdbff;border-radius:999rpx}.detail-row{display:flex;align-items:center;gap:16rpx;min-height:78rpx;padding:0 20rpx;border-top:1rpx solid #f2f5f9}.detail-row>text:first-child{width:150rpx;flex:none;color:#617287;font-size:25rpx}.detail-row input{min-width:0;flex:1;color:#1e3049;font-size:26rpx;text-align:right}.detail-value{min-width:0;flex:1;color:#1e3049;font-size:26rpx;text-align:right}.detail-actions{display:flex;justify-content:flex-end;padding:12rpx 20rpx;border-top:1rpx solid #f2f5f9}.detail-actions button{height:50rpx;min-height:50rpx;padding:0 18rpx;margin:0;font-size:23rpx;line-height:48rpx;border-radius:8rpx}.detail-actions button::after{border:0}.danger{color:#c65050;background:#fff7f7;border:1rpx solid #e3a0a0}.save{margin-top:20rpx;color:#fff;font-size:30rpx;background:#1769d8;border-radius:12rpx}.save::after{border:0}.state{padding:38rpx;color:#8795a8;font-size:26rpx;text-align:center}.compact{padding:44rpx 0} |
| | | .page{min-height:100vh;padding:24rpx 30rpx 70rpx;box-sizing:border-box;background:#f6f7f9}.form-card{margin-bottom:18rpx;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 #eef1f5}.field>text:first-child{width:190rpx;flex:none;color:#33455d;font-size:27rpx}.field input,.field picker,.picker,.value{min-width:0;flex:1;color:#1e3049;font-size:27rpx}.picker{display:flex;align-items:center;justify-content:space-between;color:#65758a}.picker text:first-child,.value{overflow:hidden;text-align:right;text-overflow:ellipsis;white-space:nowrap}.picker text:last-child{margin-left:16rpx;color:#8092a7;font-size:36rpx}.value.muted{color:#8494a8}.required{color:#e23b3b}.column{align-items:flex-start;flex-direction:column;padding:20rpx 24rpx}.column>text:first-child{width:auto}.column textarea{width:100%;height:140rpx;font-size:27rpx}.section{display:flex;align-items:center;justify-content:space-between;height:88rpx;padding:0 24rpx;color:#10233f;font-size:29rpx;font-weight:600}.section button{height:56rpx;min-height:56rpx;padding:0 20rpx;margin:0;color:var(--color-primary, #1769d8);font-size:24rpx;line-height:54rpx;background:var(--color-primary-soft, #f5f8ff);border:1rpx solid var(--color-primary-border, #8ab3ee);border-radius:8rpx}.section button::after{border:0}.detail{margin:0 20rpx 18rpx;border:1rpx solid #edf1f6;border-radius:12rpx;overflow:hidden}.detail-head{display:flex;align-items:center;justify-content:space-between;gap:14rpx;padding:18rpx 20rpx;background:#f9fbff}.detail-head>view{display:flex;min-width:0;flex-direction:column;gap:8rpx}.detail-name{overflow:hidden;color:#10233f;font-size:27rpx;font-weight:600;text-overflow:ellipsis;white-space:nowrap}.detail-code{color:#8494a8;font-size:22rpx}.detail-type{flex:none;padding:6rpx 14rpx;color:var(--color-primary, #1769d8);font-size:22rpx;background:var(--color-primary-soft, #edf5ff);border:1rpx solid var(--color-primary-border, #bfdbff);border-radius:999rpx}.detail-row{display:flex;align-items:center;gap:16rpx;min-height:78rpx;padding:0 20rpx;border-top:1rpx solid #f2f5f9}.detail-row>text:first-child{width:150rpx;flex:none;color:#617287;font-size:25rpx}.detail-row input{min-width:0;flex:1;color:#1e3049;font-size:26rpx;text-align:right}.detail-value{min-width:0;flex:1;color:#1e3049;font-size:26rpx;text-align:right}.detail-actions{display:flex;justify-content:flex-end;padding:12rpx 20rpx;border-top:1rpx solid #f2f5f9}.detail-actions button{height:50rpx;min-height:50rpx;padding:0 18rpx;margin:0;font-size:23rpx;line-height:48rpx;border-radius:8rpx}.detail-actions button::after{border:0}.danger{color:#c65050;background:#fff7f7;border:1rpx solid #e3a0a0}.save{margin-top:20rpx;color:#fff;font-size:30rpx;background:var(--color-primary, #1769d8);border-radius:12rpx}.save::after{border:0}.state{padding:38rpx;color:#8795a8;font-size:26rpx;text-align:center}.compact{padding:44rpx 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-type{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 button::after{border:0}.actions .danger{color:#c65050;background:#fff7f7;border-color:#e3a0a0}.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}.fab{position:fixed;right:32rpx;bottom:56rpx;display:flex;width:100rpx;height:100rpx;align-items:center;justify-content:center;padding:0;margin:0;background:#1769d8;border-radius:50%;box-shadow:0 14rpx 28rpx rgba(23,105,216,.32)}.fab::after{border:0}.fab view{position:relative;width:38rpx;height:38rpx}.fab view::before,.fab view::after{position:absolute;content:"";background:#fff;border-radius:3rpx}.fab view::before{top:17rpx;left:0;width:38rpx;height:4rpx}.fab view::after{top:0;left:17rpx;width:4rpx;height:38rpx} |
| | | .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:var(--color-primary, #1769d8);font-size:24rpx}.content{height:0;flex:1;padding-bottom: 132rpx;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-type{color:var(--color-primary, #1769d8);background:var(--color-primary-soft, #edf5ff);border:1rpx solid var(--color-primary-border, #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:var(--color-primary, #1769d8);font-size:22rpx;line-height:48rpx;background:var(--color-primary-soft, #f5f8ff);border:1rpx solid var(--color-primary-border, #8ab3ee);border-radius:8rpx}.actions button::after{border:0}.actions .danger{color:#c65050;background:#fff7f7;border-color:#e3a0a0}.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}.fab{position:fixed;right:32rpx;bottom:56rpx;display:flex;width:100rpx;height:100rpx;align-items:center;justify-content:center;padding:0;margin:0;background:var(--color-primary, #1769d8);border-radius:50%;box-shadow:0 14rpx 28rpx rgba(23,105,216,.32)}.fab::after{border:0}.fab view{position:relative;width:38rpx;height:38rpx}.fab view::before,.fab view::after{position:absolute;content:"";background:#fff;border-radius:3rpx}.fab view::before{top:17rpx;left:0;width:38rpx;height:4rpx}.fab view::after{top:0;left:17rpx;width:4rpx;height:38rpx} |
| | | </style> |
| | |
| | | </template> |
| | | |
| | | <style lang="scss" scoped> |
| | | .page{min-height:100vh;background:#f3f6fb}.search{display:flex;align-items:center;height:76rpx;margin:18rpx 20rpx 0;padding:0 20rpx;gap:16rpx;background:#fff;border-radius:14rpx}.search.sub{margin-top:12rpx}.search input{min-width:0;flex:1;font-size:26rpx;color:#1e3049}.search text{flex:none;color:#1769d8;font-size:24rpx}.content{height:calc(100vh - 188rpx);padding:18rpx 20rpx 32rpx;box-sizing:border-box}.card{margin-bottom:18rpx;padding:22rpx 22rpx 18rpx;background:#fff;border-radius:14rpx;box-shadow:0 8rpx 20rpx rgba(33,54,86,.05)}.head{display:flex;justify-content:space-between;gap:16rpx;border-bottom:1rpx solid #edf1f6;padding-bottom:16rpx}.head>view:first-child{display:grid;gap:6rpx;min-width:0;color:#63758c;font-size:24rpx}.name{color:#10253f;font-size:31rpx;font-weight:700;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.status-wrap{display:flex;align-items:flex-start;justify-content:flex-end;flex:none;min-width:92rpx}.status{display:inline-flex;align-items:center;justify-content:center;min-height:40rpx;padding:0 18rpx;border-radius:999rpx;font-size:22rpx;border:1rpx solid #bdd8ff;color:#1769d8;background:#eef6ff}.tag-green{color:#159166;background:#e9fbf2;border-color:#bcebd4}.tag-blue{color:#1769d8;background:#eef6ff;border-color:#bdd8ff}.tag-orange{color:#b36b00;background:#fff7e8;border-color:#f3d49b}.tag-red{color:#d64b4b;background:#fff1f0;border-color:#efb0b0}.grid{display:grid;grid-template-columns:1fr 1fr;gap:10rpx 18rpx;margin-top:16rpx;color:#40536c;font-size:25rpx}.grid text{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.actions{display:flex;justify-content:flex-end;gap:12rpx;margin-top:16rpx;border-top:1rpx solid #edf1f6;padding-top:16rpx}.actions button,.detail-head button{min-width:96rpx;margin:0;padding:0 16rpx;color:#1769d8;font-size:24rpx;line-height:56rpx;background:#fff;border:1rpx solid #1769d8;border-radius:8rpx}.actions button::after,.detail-head button::after{border:0}.detail-head{display:flex;align-items:center;gap:18rpx}.detail-head text{min-width:0;flex:1;color:#10253f;font-size:31rpx;font-weight:700}.tabs{display:flex;gap:12rpx;overflow-x:auto;padding:0 20rpx 16rpx}.tabs text{flex:none;padding:12rpx 22rpx;color:#55677f;background:#fff;border-radius:999rpx;font-size:25rpx}.tabs .on{color:#1769d8;background:#eaf3ff;font-weight:700}.state,.more{display:block;padding:42rpx 0;color:#8795a8;font-size:26rpx;text-align:center}.error{color:#d64b4b} |
| | | .page{min-height:100vh;background:#f3f6fb}.search{display:flex;align-items:center;height:76rpx;margin:18rpx 20rpx 0;padding:0 20rpx;gap:16rpx;background:#fff;border-radius:14rpx}.search.sub{margin-top:12rpx}.search input{min-width:0;flex:1;font-size:26rpx;color:#1e3049}.search text{flex:none;color:var(--color-primary, #1769d8);font-size:24rpx}.content{height:calc(100vh - 188rpx);padding:18rpx 20rpx 32rpx;box-sizing:border-box}.card{margin-bottom:18rpx;padding:22rpx 22rpx 18rpx;background:#fff;border-radius:14rpx;box-shadow:0 8rpx 20rpx rgba(33,54,86,.05)}.head{display:flex;justify-content:space-between;gap:16rpx;border-bottom:1rpx solid #edf1f6;padding-bottom:16rpx}.head>view:first-child{display:grid;gap:6rpx;min-width:0;color:#63758c;font-size:24rpx}.name{color:#10253f;font-size:31rpx;font-weight:700;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.status-wrap{display:flex;align-items:flex-start;justify-content:flex-end;flex:none;min-width:92rpx}.status{display:inline-flex;align-items:center;justify-content:center;min-height:40rpx;padding:0 18rpx;border-radius:999rpx;font-size:22rpx;border:1rpx solid #bdd8ff;color:var(--color-primary, #1769d8);background:var(--color-primary-soft, #eef6ff)}.tag-green{color:#159166;background:#e9fbf2;border-color:#bcebd4}.tag-blue{color:var(--color-primary, #1769d8);background:var(--color-primary-soft, #eef6ff);border-color:#bdd8ff}.tag-orange{color:#b36b00;background:#fff7e8;border-color:#f3d49b}.tag-red{color:#d64b4b;background:#fff1f0;border-color:#efb0b0}.grid{display:grid;grid-template-columns:1fr 1fr;gap:10rpx 18rpx;margin-top:16rpx;color:#40536c;font-size:25rpx}.grid text{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.actions{display:flex;justify-content:flex-end;gap:12rpx;margin-top:16rpx;border-top:1rpx solid #edf1f6;padding-top:16rpx}.actions button,.detail-head button{min-width:96rpx;margin:0;padding:0 16rpx;color:var(--color-primary, #1769d8);font-size:24rpx;line-height:56rpx;background:#fff;border:1rpx solid var(--color-primary, #1769d8);border-radius:8rpx}.actions button::after,.detail-head button::after{border:0}.detail-head{display:flex;align-items:center;gap:18rpx}.detail-head text{min-width:0;flex:1;color:#10253f;font-size:31rpx;font-weight:700}.tabs{display:flex;gap:12rpx;overflow-x:auto;padding:0 20rpx 16rpx}.tabs text{flex:none;padding:12rpx 22rpx;color:#55677f;background:#fff;border-radius:999rpx;font-size:25rpx}.tabs .on{color:var(--color-primary, #1769d8);background:#eaf3ff;font-weight:700}.state,.more{display:block;padding:42rpx 0;color:#8795a8;font-size:26rpx;text-align:center}.error{color:#d64b4b} |
| | | </style> |
| | |
| | | </template> |
| | | |
| | | <style lang="scss" scoped> |
| | | .page{min-height:100vh;padding:24rpx 30rpx 70rpx;box-sizing:border-box;background:#f6f7f9}.form-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 #eef1f5}.field>text:first-child{width:210rpx;flex:none;color:#33455d;font-size:27rpx}.field input,.field picker,.picker,.value{min-width:0;flex:1;color:#1e3049;font-size:27rpx}.field input,.value{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:36rpx;text-align:right}.required{color:#e23b3b}.code-field button{flex:none;min-width:100rpx;padding:0 14rpx;margin:0;color:#1769d8;font-size:24rpx;line-height:56rpx;background:#fff;border:1rpx solid #1769d8;border-radius:8rpx}.code-field button::after,.save::after{border:0}.column{align-items:flex-start;flex-direction:column;padding:20rpx 24rpx}.column>text:first-child{width:auto}.column textarea{width:100%;height:150rpx;box-sizing:border-box;font-size:27rpx}.save{margin-top:32rpx;color:#fff;font-size:30rpx;background:#1769d8;border-radius:12rpx}.state{padding:38rpx;color:#8795a8;font-size:26rpx;text-align:center} |
| | | .page{min-height:100vh;padding:24rpx 30rpx 70rpx;box-sizing:border-box;background:#f6f7f9}.form-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 #eef1f5}.field>text:first-child{width:210rpx;flex:none;color:#33455d;font-size:27rpx}.field input,.field picker,.picker,.value{min-width:0;flex:1;color:#1e3049;font-size:27rpx}.field input,.value{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:36rpx;text-align:right}.required{color:#e23b3b}.code-field button{flex:none;min-width:100rpx;padding:0 14rpx;margin:0;color:var(--color-primary, #1769d8);font-size:24rpx;line-height:56rpx;background:#fff;border:1rpx solid var(--color-primary, #1769d8);border-radius:8rpx}.code-field button::after,.save::after{border:0}.column{align-items:flex-start;flex-direction:column;padding:20rpx 24rpx}.column>text:first-child{width:auto}.column textarea{width:100%;height:150rpx;box-sizing:border-box;font-size:27rpx}.save{margin-top:32rpx;color:#fff;font-size:30rpx;background:var(--color-primary, #1769d8);border-radius:12rpx}.state{padding:38rpx;color:#8795a8;font-size:26rpx;text-align:center} |
| | | </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{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} |
| | | .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:var(--color-primary, #1769d8);font-size:24rpx}.content{height:0;flex:1;padding-bottom: 132rpx;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:var(--color-primary, #1769d8);font-size:22rpx;line-height:48rpx;background:var(--color-primary-soft, #f5f8ff);border:1rpx solid var(--color-primary-border, #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:var(--color-primary, #1769d8);background:var(--color-primary-soft, #eef6ff);border:1rpx solid var(--color-primary-border, #c9e1ff)}.tag-approved{color:var(--color-primary, #1769d8);background:var(--color-primary-soft, #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: 104rpx; height: 104rpx; min-height: 104rpx;padding:0;margin:0;background:var(--color-primary, #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{min-height:100vh;padding:24rpx 30rpx 70rpx;box-sizing:border-box;background:#f6f7f9}.form-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 #eef1f5}.field>text:first-child{width:210rpx;flex:none;color:#33455d;font-size:27rpx}.field input,.field picker,.picker,.value{min-width:0;flex:1;color:#1e3049;font-size:27rpx}.field input,.value{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:36rpx;text-align:right}.required{color:#e23b3b}.code-field button{flex:none;min-width:100rpx;padding:0 14rpx;margin:0;color:#1769d8;font-size:24rpx;line-height:56rpx;background:#fff;border:1rpx solid #1769d8;border-radius:8rpx}.code-field button::after,.save::after{border:0}.column{align-items:flex-start;flex-direction:column;padding:20rpx 24rpx}.column>text:first-child{width:auto}.column textarea{width:100%;height:140rpx;font-size:27rpx}.save{margin-top:32rpx;color:#fff;font-size:30rpx;background:#1769d8;border-radius:12rpx}.state{padding:38rpx;color:#8795a8;font-size:26rpx;text-align:center} |
| | | .page{min-height:100vh;padding:24rpx 30rpx 70rpx;box-sizing:border-box;background:#f6f7f9}.form-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 #eef1f5}.field>text:first-child{width:210rpx;flex:none;color:#33455d;font-size:27rpx}.field input,.field picker,.picker,.value{min-width:0;flex:1;color:#1e3049;font-size:27rpx}.field input,.value{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:36rpx;text-align:right}.required{color:#e23b3b}.code-field button{flex:none;min-width:100rpx;padding:0 14rpx;margin:0;color:var(--color-primary, #1769d8);font-size:24rpx;line-height:56rpx;background:#fff;border:1rpx solid var(--color-primary, #1769d8);border-radius:8rpx}.code-field button::after,.save::after{border:0}.column{align-items:flex-start;flex-direction:column;padding:20rpx 24rpx}.column>text:first-child{width:auto}.column textarea{width:100%;height:140rpx;font-size:27rpx}.save{margin-top:32rpx;color:#fff;font-size:30rpx;background:var(--color-primary, #1769d8);border-radius:12rpx}.state{padding:38rpx;color:#8795a8;font-size:26rpx;text-align:center} |
| | | </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{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} |
| | | .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:var(--color-primary, #1769d8);font-size:24rpx}.content{height:0;flex:1;padding-bottom: 132rpx;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:var(--color-primary, #1769d8);font-size:22rpx;line-height:48rpx;background:var(--color-primary-soft, #f5f8ff);border:1rpx solid var(--color-primary-border, #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: 104rpx; height: 104rpx; min-height: 104rpx;padding:0;margin:0;background:var(--color-primary, #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{min-height:100vh;padding:24rpx 30rpx 70rpx;box-sizing:border-box;background:#f6f7f9}.form-card,.section-card{overflow:hidden;margin-bottom:22rpx;background:#fff;border-radius:16rpx}.field{display:flex;align-items:center;min-height:96rpx;padding:0 24rpx;gap:20rpx;border-bottom:1rpx solid #eef1f5}.field>text:first-child{width:220rpx;flex:none;color:#33455d;font-size:27rpx}.field input,.field picker,.picker,.value{min-width:0;flex:1;color:#1e3049;font-size:27rpx}.field input,.value{text-align:right}.picker{display:flex;width:100%;align-items:center;justify-content:space-between;gap:12rpx;color:#65758a}.picker.disabled{color:#a8b3c1}.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:36rpx;text-align:right}.required{color:#e23b3b}.code-field button,.section-tools button,.sub-actions button{flex:none;min-width:100rpx;padding:0 14rpx;margin:0;color:#1769d8;font-size:24rpx;line-height:56rpx;background:#fff;border:1rpx solid #1769d8;border-radius:8rpx}.danger{color:#d64b4b!important;border-color:#efb0b0!important}.code-field button::after,.save::after,.submit::after,.section-tools button::after,.sub-actions button::after{border:0}.column{align-items:flex-start;flex-direction:column;padding:20rpx 24rpx}.column>text:first-child{width:auto}.column textarea{width:100%;height:140rpx;font-size:27rpx}.save,.submit{margin-top:24rpx;color:#fff;font-size:30rpx;background:#1769d8;border-radius:12rpx}.submit{background:#12a06a}.tabs{display:flex;gap:14rpx;padding:18rpx 20rpx 0;border-bottom:1rpx solid #eef1f5}.tabs text{margin-bottom:18rpx;padding:12rpx 26rpx;color:#55677f;background:#f2f5f9;border-radius:999rpx;font-size:25rpx}.tabs .on{color:#1769d8;background:#eaf3ff;font-weight:700}.section-tools{display:flex;justify-content:flex-end;padding:18rpx 20rpx 0}.sub-card{margin:20rpx;padding:20rpx;border:1rpx solid #edf1f6;border-radius:14rpx}.sub-title{display:block;margin-bottom:14rpx;color:#0f2744;font-size:29rpx;font-weight:700}.sub-grid{display:grid;grid-template-columns:1fr 1fr;gap:10rpx 18rpx;color:#40536c;font-size:25rpx}.sub-grid text{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.sub-grid .span{grid-column:1/3}.sub-actions{display:flex;justify-content:flex-end;gap:12rpx;margin-top:16rpx}.state{padding:38rpx;color:#8795a8;font-size:26rpx;text-align:center}.compact{padding:24rpx}.mask{position:fixed;left:0;right:0;top:0;bottom:0;z-index:20;display:flex;align-items:flex-end;background:rgba(20,32,48,.45)}.modal{width:100%;max-height:86vh;overflow:auto;padding-bottom:30rpx;background:#fff;border-radius:24rpx 24rpx 0 0}.modal-title{height:96rpx;line-height:96rpx;text-align:center;color:#122033;font-size:30rpx;font-weight:700;border-bottom:1rpx solid #eef1f5}.in-modal{margin:24rpx}.result-item{margin:20rpx;border:1rpx solid #edf1f6;border-radius:14rpx;overflow:hidden}.result-title{display:block;padding:18rpx 24rpx;color:#0f2744;font-size:27rpx;font-weight:700;background:#f8fafc}.inner{padding-left:20rpx;padding-right:20rpx}.load-more{margin:0 20rpx 20rpx;padding:18rpx 0;color:#1769d8;font-size:25rpx;text-align:center;background:#f5f8ff;border:1rpx dashed #bcd3f2;border-radius:12rpx}.field.hint-field{border-bottom:0}.field-hint{padding:0 24rpx 20rpx 264rpx;color:#8a94a6;font-size:22rpx;line-height:1.45;border-bottom:1rpx solid #eef1f5} |
| | | .page{min-height:100vh;padding:24rpx 30rpx 70rpx;box-sizing:border-box;background:#f6f7f9}.form-card,.section-card{overflow:hidden;margin-bottom:22rpx;background:#fff;border-radius:16rpx}.field{display:flex;align-items:center;min-height:96rpx;padding:0 24rpx;gap:20rpx;border-bottom:1rpx solid #eef1f5}.field>text:first-child{width:220rpx;flex:none;color:#33455d;font-size:27rpx}.field input,.field picker,.picker,.value{min-width:0;flex:1;color:#1e3049;font-size:27rpx}.field input,.value{text-align:right}.picker{display:flex;width:100%;align-items:center;justify-content:space-between;gap:12rpx;color:#65758a}.picker.disabled{color:#a8b3c1}.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:36rpx;text-align:right}.required{color:#e23b3b}.code-field button,.section-tools button,.sub-actions button{flex:none;min-width:100rpx;padding:0 14rpx;margin:0;color:var(--color-primary, #1769d8);font-size:24rpx;line-height:56rpx;background:#fff;border:1rpx solid var(--color-primary, #1769d8);border-radius:8rpx}.danger{color:#d64b4b!important;border-color:#efb0b0!important}.code-field button::after,.save::after,.submit::after,.section-tools button::after,.sub-actions button::after{border:0}.column{align-items:flex-start;flex-direction:column;padding:20rpx 24rpx}.column>text:first-child{width:auto}.column textarea{width:100%;height:140rpx;font-size:27rpx}.save,.submit{margin-top:24rpx;color:#fff;font-size:30rpx;background:var(--color-primary, #1769d8);border-radius:12rpx}.submit{background:#12a06a}.tabs{display:flex;gap:14rpx;padding:18rpx 20rpx 0;border-bottom:1rpx solid #eef1f5}.tabs text{margin-bottom:18rpx;padding:12rpx 26rpx;color:#55677f;background:#f2f5f9;border-radius:999rpx;font-size:25rpx}.tabs .on{color:var(--color-primary, #1769d8);background:#eaf3ff;font-weight:700}.section-tools{display:flex;justify-content:flex-end;padding:18rpx 20rpx 0}.sub-card{margin:20rpx;padding:20rpx;border:1rpx solid #edf1f6;border-radius:14rpx}.sub-title{display:block;margin-bottom:14rpx;color:#0f2744;font-size:29rpx;font-weight:700}.sub-grid{display:grid;grid-template-columns:1fr 1fr;gap:10rpx 18rpx;color:#40536c;font-size:25rpx}.sub-grid text{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.sub-grid .span{grid-column:1/3}.sub-actions{display:flex;justify-content:flex-end;gap:12rpx;margin-top:16rpx}.state{padding:38rpx;color:#8795a8;font-size:26rpx;text-align:center}.compact{padding:24rpx}.mask{position:fixed;left:0;right:0;top:0;bottom:0;z-index:20;display:flex;align-items:flex-end;background:rgba(20,32,48,.45)}.modal{width:100%;max-height:86vh;overflow:auto;padding-bottom:30rpx;background:#fff;border-radius:24rpx 24rpx 0 0}.modal-title{height:96rpx;line-height:96rpx;text-align:center;color:#122033;font-size:30rpx;font-weight:700;border-bottom:1rpx solid #eef1f5}.in-modal{margin:24rpx}.result-item{margin:20rpx;border:1rpx solid #edf1f6;border-radius:14rpx;overflow:hidden}.result-title{display:block;padding:18rpx 24rpx;color:#0f2744;font-size:27rpx;font-weight:700;background:#f8fafc}.inner{padding-left:20rpx;padding-right:20rpx}.load-more{margin:0 20rpx 20rpx;padding:18rpx 0;color:var(--color-primary, #1769d8);font-size:25rpx;text-align:center;background:var(--color-primary-soft, #f5f8ff);border:1rpx dashed #bcd3f2;border-radius:12rpx}.field.hint-field{border-bottom:0}.field-hint{padding:0 24rpx 20rpx 264rpx;color:#8a94a6;font-size:22rpx;line-height:1.45;border-bottom:1rpx solid #eef1f5} |
| | | </style> |
| | |
| | | </template> |
| | | |
| | | <style lang="scss" scoped> |
| | | .page{min-height:100vh;background:#f3f6fb}.search{display:flex;align-items:center;height:76rpx;margin:18rpx 20rpx 0;padding:0 20rpx;gap:16rpx;background:#fff;border-radius:14rpx}.search input{min-width:0;flex:1;font-size:26rpx;color:#1e3049}.search text{flex:none;color:#1769d8;font-size:24rpx}.content{height:calc(100vh - 100rpx);padding:18rpx 20rpx 32rpx;box-sizing:border-box}.card{margin-bottom:18rpx;padding:22rpx 22rpx 18rpx;background:#fff;border-radius:14rpx;box-shadow:0 8rpx 20rpx rgba(33,54,86,.05)}.head{display:flex;justify-content:space-between;gap:16rpx;border-bottom:1rpx solid #edf1f6;padding-bottom:16rpx}.head>view:first-child{display:grid;gap:6rpx;min-width:0;color:#63758c;font-size:24rpx}.name{color:#10253f;font-size:31rpx;font-weight:700;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.status-wrap{display:flex;align-items:flex-start;justify-content:flex-end;flex:none;min-width:92rpx}.status,.tags text{display:inline-flex;align-items:center;justify-content:center;min-height:40rpx;padding:0 18rpx;border-radius:999rpx;font-size:22rpx;border:1rpx solid #bdd8ff;color:#1769d8;background:#eef6ff}.tag-green{color:#159166;background:#e9fbf2;border-color:#bcebd4}.tag-blue{color:#1769d8;background:#eef6ff;border-color:#bdd8ff}.tag-orange{color:#b36b00;background:#fff7e8;border-color:#f3d49b}.tag-red{color:#d64b4b;background:#fff1f0;border-color:#efb0b0}.tags{display:flex;gap:10rpx;flex-wrap:wrap;margin-top:14rpx}.grid{display:grid;grid-template-columns:1fr 1fr;gap:10rpx 18rpx;margin-top:16rpx;color:#40536c;font-size:25rpx}.grid text{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.grid text.full{grid-column:1/-1;white-space:normal}.actions{display:flex;justify-content:flex-end;gap:12rpx;margin-top:16rpx;border-top:1rpx solid #edf1f6;padding-top:16rpx}.actions button{min-width:96rpx;margin:0;padding:0 16rpx;color:#1769d8;font-size:24rpx;line-height:56rpx;background:#fff;border:1rpx solid #1769d8;border-radius:8rpx}.actions .danger{color:#d64b4b;border-color:#efb0b0}.actions button::after{border:0}.state,.more{display:block;padding:42rpx 0;color:#8795a8;font-size:26rpx;text-align:center}.error{color:#d64b4b}.fab{position:fixed;right:28rpx;bottom:44rpx;width:104rpx;height:104rpx;border-radius:50%;background:#1769d8;box-shadow:0 12rpx 26rpx rgba(23,105,216,.35)}.fab::after{border:0}.fab view,.fab view::after{position:absolute;left:50%;top:50%;content:"";background:#fff;border-radius:4rpx;transform:translate(-50%,-50%)}.fab view{width:42rpx;height:8rpx}.fab view::after{width:8rpx;height:42rpx} |
| | | .page{min-height:100vh;background:#f3f6fb}.search{display:flex;align-items:center;height:76rpx;margin:18rpx 20rpx 0;padding:0 20rpx;gap:16rpx;background:#fff;border-radius:14rpx}.search input{min-width:0;flex:1;font-size:26rpx;color:#1e3049}.search text{flex:none;color:var(--color-primary, #1769d8);font-size:24rpx}.content{height:calc(100vh - 100rpx);padding:18rpx 20rpx 32rpx;box-sizing:border-box}.card{margin-bottom:18rpx;padding:22rpx 22rpx 18rpx;background:#fff;border-radius:14rpx;box-shadow:0 8rpx 20rpx rgba(33,54,86,.05)}.head{display:flex;justify-content:space-between;gap:16rpx;border-bottom:1rpx solid #edf1f6;padding-bottom:16rpx}.head>view:first-child{display:grid;gap:6rpx;min-width:0;color:#63758c;font-size:24rpx}.name{color:#10253f;font-size:31rpx;font-weight:700;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.status-wrap{display:flex;align-items:flex-start;justify-content:flex-end;flex:none;min-width:92rpx}.status,.tags text{display:inline-flex;align-items:center;justify-content:center;min-height:40rpx;padding:0 18rpx;border-radius:999rpx;font-size:22rpx;border:1rpx solid #bdd8ff;color:var(--color-primary, #1769d8);background:var(--color-primary-soft, #eef6ff)}.tag-green{color:#159166;background:#e9fbf2;border-color:#bcebd4}.tag-blue{color:var(--color-primary, #1769d8);background:var(--color-primary-soft, #eef6ff);border-color:#bdd8ff}.tag-orange{color:#b36b00;background:#fff7e8;border-color:#f3d49b}.tag-red{color:#d64b4b;background:#fff1f0;border-color:#efb0b0}.tags{display:flex;gap:10rpx;flex-wrap:wrap;margin-top:14rpx}.grid{display:grid;grid-template-columns:1fr 1fr;gap:10rpx 18rpx;margin-top:16rpx;color:#40536c;font-size:25rpx}.grid text{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.grid text.full{grid-column:1/-1;white-space:normal}.actions{display:flex;justify-content:flex-end;gap:12rpx;margin-top:16rpx;border-top:1rpx solid #edf1f6;padding-top:16rpx}.actions button{min-width:96rpx;margin:0;padding:0 16rpx;color:var(--color-primary, #1769d8);font-size:24rpx;line-height:56rpx;background:#fff;border:1rpx solid var(--color-primary, #1769d8);border-radius:8rpx}.actions .danger{color:#d64b4b;border-color:#efb0b0}.actions button::after{border:0}.state,.more{display:block;padding:42rpx 0;color:#8795a8;font-size:26rpx;text-align:center}.error{color:#d64b4b}.fab{position:fixed;right:28rpx;bottom:44rpx;width:104rpx;height:104rpx;border-radius:50%;background:var(--color-primary, #1769d8);box-shadow:0 12rpx 26rpx rgba(23,105,216,.35)}.fab::after{border:0}.fab view,.fab view::after{position:absolute;left:50%;top:50%;content:"";background:#fff;border-radius:4rpx;transform:translate(-50%,-50%)}.fab view{width:42rpx;height:8rpx}.fab view::after{width:8rpx;height:42rpx} |
| | | </style> |
| | |
| | | </template> |
| | | |
| | | <style lang="scss" scoped> |
| | | .page{min-height:100vh;padding:24rpx 30rpx 70rpx;box-sizing:border-box;background:#f6f7f9}.form-card,.section-card{overflow:hidden;margin-bottom:22rpx;background:#fff;border-radius:16rpx}.field{display:flex;align-items:center;min-height:96rpx;padding:0 24rpx;gap:20rpx;border-bottom:1rpx solid #eef1f5}.field>text:first-child{width:220rpx;flex:none;color:#33455d;font-size:27rpx}.field input,.field picker,.picker,.value{min-width:0;flex:1;color:#1e3049;font-size:27rpx}.field input,.value{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:36rpx;text-align:right}.required{color:#e23b3b}.code-field button,.section-tools button,.sub-actions button{flex:none;min-width:100rpx;padding:0 14rpx;margin:0;color:#1769d8;font-size:24rpx;line-height:56rpx;background:#fff;border:1rpx solid #1769d8;border-radius:8rpx}.danger{color:#d64b4b!important;border-color:#efb0b0!important}.code-field button::after,.save::after,.submit::after,.section-tools button::after,.sub-actions button::after{border:0}.column{align-items:flex-start;flex-direction:column;padding:20rpx 24rpx}.column>text:first-child{width:auto}.column textarea{width:100%;height:140rpx;font-size:27rpx}.save,.submit{margin-top:24rpx;color:#fff;font-size:30rpx;background:#1769d8;border-radius:12rpx}.submit{background:#12a06a}.tabs{display:flex;gap:14rpx;padding:18rpx 20rpx 0;border-bottom:1rpx solid #eef1f5}.tabs text{margin-bottom:18rpx;padding:12rpx 26rpx;color:#55677f;background:#f2f5f9;border-radius:999rpx;font-size:25rpx}.tabs .on{color:#1769d8;background:#eaf3ff;font-weight:700}.section-tools{display:flex;justify-content:flex-end;padding:18rpx 20rpx 0}.sub-card{margin:20rpx;padding:20rpx;border:1rpx solid #edf1f6;border-radius:14rpx}.sub-title{display:block;margin-bottom:14rpx;color:#0f2744;font-size:29rpx;font-weight:700}.sub-grid{display:grid;grid-template-columns:1fr 1fr;gap:10rpx 18rpx;color:#40536c;font-size:25rpx}.sub-grid text{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.sub-grid .span{grid-column:1/3}.sub-actions{display:flex;justify-content:flex-end;gap:12rpx;margin-top:16rpx}.state{padding:38rpx;color:#8795a8;font-size:26rpx;text-align:center}.compact{padding:24rpx}.mask{position:fixed;left:0;right:0;top:0;bottom:0;z-index:20;display:flex;align-items:flex-end;background:rgba(20,32,48,.45)}.modal{width:100%;max-height:86vh;overflow:auto;padding-bottom:30rpx;background:#fff;border-radius:24rpx 24rpx 0 0}.modal-title{height:96rpx;line-height:96rpx;text-align:center;color:#122033;font-size:30rpx;font-weight:700;border-bottom:1rpx solid #eef1f5}.in-modal{margin:24rpx}.result-item{margin:20rpx;border:1rpx solid #edf1f6;border-radius:14rpx;overflow:hidden}.result-title{display:block;padding:18rpx 24rpx;color:#0f2744;font-size:27rpx;font-weight:700;background:#f8fafc}.inner{padding-left:20rpx;padding-right:20rpx}.load-more{margin:0 20rpx 20rpx;padding:18rpx 0;color:#1769d8;font-size:25rpx;text-align:center;background:#f5f8ff;border:1rpx dashed #bcd3f2;border-radius:12rpx}.field.hint-field{border-bottom:0}.field-hint{padding:0 24rpx 20rpx 264rpx;color:#8a94a6;font-size:22rpx;line-height:1.45;border-bottom:1rpx solid #eef1f5} |
| | | .page{min-height:100vh;padding:24rpx 30rpx 70rpx;box-sizing:border-box;background:#f6f7f9}.form-card,.section-card{overflow:hidden;margin-bottom:22rpx;background:#fff;border-radius:16rpx}.field{display:flex;align-items:center;min-height:96rpx;padding:0 24rpx;gap:20rpx;border-bottom:1rpx solid #eef1f5}.field>text:first-child{width:220rpx;flex:none;color:#33455d;font-size:27rpx}.field input,.field picker,.picker,.value{min-width:0;flex:1;color:#1e3049;font-size:27rpx}.field input,.value{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:36rpx;text-align:right}.required{color:#e23b3b}.code-field button,.section-tools button,.sub-actions button{flex:none;min-width:100rpx;padding:0 14rpx;margin:0;color:var(--color-primary, #1769d8);font-size:24rpx;line-height:56rpx;background:#fff;border:1rpx solid var(--color-primary, #1769d8);border-radius:8rpx}.danger{color:#d64b4b!important;border-color:#efb0b0!important}.code-field button::after,.save::after,.submit::after,.section-tools button::after,.sub-actions button::after{border:0}.column{align-items:flex-start;flex-direction:column;padding:20rpx 24rpx}.column>text:first-child{width:auto}.column textarea{width:100%;height:140rpx;font-size:27rpx}.save,.submit{margin-top:24rpx;color:#fff;font-size:30rpx;background:var(--color-primary, #1769d8);border-radius:12rpx}.submit{background:#12a06a}.tabs{display:flex;gap:14rpx;padding:18rpx 20rpx 0;border-bottom:1rpx solid #eef1f5}.tabs text{margin-bottom:18rpx;padding:12rpx 26rpx;color:#55677f;background:#f2f5f9;border-radius:999rpx;font-size:25rpx}.tabs .on{color:var(--color-primary, #1769d8);background:#eaf3ff;font-weight:700}.section-tools{display:flex;justify-content:flex-end;padding:18rpx 20rpx 0}.sub-card{margin:20rpx;padding:20rpx;border:1rpx solid #edf1f6;border-radius:14rpx}.sub-title{display:block;margin-bottom:14rpx;color:#0f2744;font-size:29rpx;font-weight:700}.sub-grid{display:grid;grid-template-columns:1fr 1fr;gap:10rpx 18rpx;color:#40536c;font-size:25rpx}.sub-grid text{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.sub-grid .span{grid-column:1/3}.sub-actions{display:flex;justify-content:flex-end;gap:12rpx;margin-top:16rpx}.state{padding:38rpx;color:#8795a8;font-size:26rpx;text-align:center}.compact{padding:24rpx}.mask{position:fixed;left:0;right:0;top:0;bottom:0;z-index:20;display:flex;align-items:flex-end;background:rgba(20,32,48,.45)}.modal{width:100%;max-height:86vh;overflow:auto;padding-bottom:30rpx;background:#fff;border-radius:24rpx 24rpx 0 0}.modal-title{height:96rpx;line-height:96rpx;text-align:center;color:#122033;font-size:30rpx;font-weight:700;border-bottom:1rpx solid #eef1f5}.in-modal{margin:24rpx}.result-item{margin:20rpx;border:1rpx solid #edf1f6;border-radius:14rpx;overflow:hidden}.result-title{display:block;padding:18rpx 24rpx;color:#0f2744;font-size:27rpx;font-weight:700;background:#f8fafc}.inner{padding-left:20rpx;padding-right:20rpx}.load-more{margin:0 20rpx 20rpx;padding:18rpx 0;color:var(--color-primary, #1769d8);font-size:25rpx;text-align:center;background:var(--color-primary-soft, #f5f8ff);border:1rpx dashed #bcd3f2;border-radius:12rpx}.field.hint-field{border-bottom:0}.field-hint{padding:0 24rpx 20rpx 264rpx;color:#8a94a6;font-size:22rpx;line-height:1.45;border-bottom:1rpx solid #eef1f5} |
| | | </style> |
| | |
| | | </template> |
| | | |
| | | <style lang="scss" scoped> |
| | | .page{min-height:100vh;background:#f3f6fb}.search{display:flex;align-items:center;height:76rpx;margin:18rpx 20rpx 0;padding:0 20rpx;gap:16rpx;background:#fff;border-radius:14rpx}.search input{min-width:0;flex:1;font-size:26rpx;color:#1e3049}.search text{flex:none;color:#1769d8;font-size:24rpx}.content{height:calc(100vh - 100rpx);padding:18rpx 20rpx 32rpx;box-sizing:border-box}.card{margin-bottom:18rpx;padding:22rpx 22rpx 18rpx;background:#fff;border-radius:14rpx;box-shadow:0 8rpx 20rpx rgba(33,54,86,.05)}.head{display:flex;justify-content:space-between;gap:16rpx;border-bottom:1rpx solid #edf1f6;padding-bottom:16rpx}.head>view:first-child{display:grid;gap:6rpx;min-width:0;color:#63758c;font-size:24rpx}.name{color:#10253f;font-size:31rpx;font-weight:700;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.status-wrap{display:flex;align-items:flex-start;justify-content:flex-end;flex:none;min-width:92rpx}.status,.tags text{display:inline-flex;align-items:center;justify-content:center;min-height:40rpx;padding:0 18rpx;border-radius:999rpx;font-size:22rpx;border:1rpx solid #bdd8ff;color:#1769d8;background:#eef6ff}.tag-green{color:#159166;background:#e9fbf2;border-color:#bcebd4}.tag-blue{color:#1769d8;background:#eef6ff;border-color:#bdd8ff}.tag-orange{color:#b36b00;background:#fff7e8;border-color:#f3d49b}.tag-red{color:#d64b4b;background:#fff1f0;border-color:#efb0b0}.tags{display:flex;gap:10rpx;flex-wrap:wrap;margin-top:14rpx}.grid{display:grid;grid-template-columns:1fr 1fr;gap:10rpx 18rpx;margin-top:16rpx;color:#40536c;font-size:25rpx}.grid text{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.grid text.full{grid-column:1/-1;white-space:normal}.actions{display:flex;justify-content:flex-end;gap:12rpx;margin-top:16rpx;border-top:1rpx solid #edf1f6;padding-top:16rpx}.actions button{min-width:96rpx;margin:0;padding:0 16rpx;color:#1769d8;font-size:24rpx;line-height:56rpx;background:#fff;border:1rpx solid #1769d8;border-radius:8rpx}.actions .danger{color:#d64b4b;border-color:#efb0b0}.actions button::after{border:0}.state,.more{display:block;padding:42rpx 0;color:#8795a8;font-size:26rpx;text-align:center}.error{color:#d64b4b}.fab{position:fixed;right:28rpx;bottom:44rpx;width:104rpx;height:104rpx;border-radius:50%;background:#1769d8;box-shadow:0 12rpx 26rpx rgba(23,105,216,.35)}.fab::after{border:0}.fab view,.fab view::after{position:absolute;left:50%;top:50%;content:"";background:#fff;border-radius:4rpx;transform:translate(-50%,-50%)}.fab view{width:42rpx;height:8rpx}.fab view::after{width:8rpx;height:42rpx} |
| | | .page{min-height:100vh;background:#f3f6fb}.search{display:flex;align-items:center;height:76rpx;margin:18rpx 20rpx 0;padding:0 20rpx;gap:16rpx;background:#fff;border-radius:14rpx}.search input{min-width:0;flex:1;font-size:26rpx;color:#1e3049}.search text{flex:none;color:var(--color-primary, #1769d8);font-size:24rpx}.content{height:calc(100vh - 100rpx);padding:18rpx 20rpx 32rpx;box-sizing:border-box}.card{margin-bottom:18rpx;padding:22rpx 22rpx 18rpx;background:#fff;border-radius:14rpx;box-shadow:0 8rpx 20rpx rgba(33,54,86,.05)}.head{display:flex;justify-content:space-between;gap:16rpx;border-bottom:1rpx solid #edf1f6;padding-bottom:16rpx}.head>view:first-child{display:grid;gap:6rpx;min-width:0;color:#63758c;font-size:24rpx}.name{color:#10253f;font-size:31rpx;font-weight:700;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.status-wrap{display:flex;align-items:flex-start;justify-content:flex-end;flex:none;min-width:92rpx}.status,.tags text{display:inline-flex;align-items:center;justify-content:center;min-height:40rpx;padding:0 18rpx;border-radius:999rpx;font-size:22rpx;border:1rpx solid #bdd8ff;color:var(--color-primary, #1769d8);background:var(--color-primary-soft, #eef6ff)}.tag-green{color:#159166;background:#e9fbf2;border-color:#bcebd4}.tag-blue{color:var(--color-primary, #1769d8);background:var(--color-primary-soft, #eef6ff);border-color:#bdd8ff}.tag-orange{color:#b36b00;background:#fff7e8;border-color:#f3d49b}.tag-red{color:#d64b4b;background:#fff1f0;border-color:#efb0b0}.tags{display:flex;gap:10rpx;flex-wrap:wrap;margin-top:14rpx}.grid{display:grid;grid-template-columns:1fr 1fr;gap:10rpx 18rpx;margin-top:16rpx;color:#40536c;font-size:25rpx}.grid text{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.grid text.full{grid-column:1/-1;white-space:normal}.actions{display:flex;justify-content:flex-end;gap:12rpx;margin-top:16rpx;border-top:1rpx solid #edf1f6;padding-top:16rpx}.actions button{min-width:96rpx;margin:0;padding:0 16rpx;color:var(--color-primary, #1769d8);font-size:24rpx;line-height:56rpx;background:#fff;border:1rpx solid var(--color-primary, #1769d8);border-radius:8rpx}.actions .danger{color:#d64b4b;border-color:#efb0b0}.actions button::after{border:0}.state,.more{display:block;padding:42rpx 0;color:#8795a8;font-size:26rpx;text-align:center}.error{color:#d64b4b}.fab{position:fixed;right:28rpx;bottom:44rpx;width:104rpx;height:104rpx;border-radius:50%;background:var(--color-primary, #1769d8);box-shadow:0 12rpx 26rpx rgba(23,105,216,.35)}.fab::after{border:0}.fab view,.fab view::after{position:absolute;left:50%;top:50%;content:"";background:#fff;border-radius:4rpx;transform:translate(-50%,-50%)}.fab view{width:42rpx;height:8rpx}.fab view::after{width:8rpx;height:42rpx} |
| | | </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{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:40rpx;box-sizing:border-box}.card{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;padding-bottom:16rpx;border-bottom:1rpx solid #edf1f6}.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,.tags text{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}.grid{display:grid;grid-template-columns:1fr 1fr;gap:10rpx 18rpx;padding:16rpx 0;margin-top:14rpx;color:#40536c;font-size:24rpx;border-top:1rpx solid #edf1f6}.grid text{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.remark{display:grid;gap:8rpx;padding-top:14rpx;color:#6a7c91;font-size:24rpx;border-top:1rpx solid #edf1f6}.remark text{line-height:1.45}.more,.state{display:block;padding:35rpx;color:#8795a8;font-size:26rpx;text-align:center}.error{color:#c3654d}.tag-green{color:#0e9663;background:#e9fbf2;border:1rpx solid #b8eed4}.tag-blue{color:#1769d8;background:#eef6ff;border:1rpx solid #c9e1ff}.tag-orange{color:#b06a00;background:#fff6df;border:1rpx solid #f0d390}.tag-red{color:#c65050;background:#fff2f2;border:1rpx solid #efb8b8}.tag-gray{color:#637083;background:#eef2f6;border:1rpx solid #d7e0eb} |
| | | .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:var(--color-primary, #1769d8);font-size:24rpx}.content{height:0;flex:1;padding-bottom:40rpx;box-sizing:border-box}.card{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;padding-bottom:16rpx;border-bottom:1rpx solid #edf1f6}.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,.tags text{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}.grid{display:grid;grid-template-columns:1fr 1fr;gap:10rpx 18rpx;padding:16rpx 0;margin-top:14rpx;color:#40536c;font-size:24rpx;border-top:1rpx solid #edf1f6}.grid text{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.remark{display:grid;gap:8rpx;padding-top:14rpx;color:#6a7c91;font-size:24rpx;border-top:1rpx solid #edf1f6}.remark text{line-height:1.45}.more,.state{display:block;padding:35rpx;color:#8795a8;font-size:26rpx;text-align:center}.error{color:#c3654d}.tag-green{color:#0e9663;background:#e9fbf2;border:1rpx solid #b8eed4}.tag-blue{color:var(--color-primary, #1769d8);background:var(--color-primary-soft, #eef6ff);border:1rpx solid var(--color-primary-border, #c9e1ff)}.tag-orange{color:#b06a00;background:#fff6df;border:1rpx solid #f0d390}.tag-red{color:#c65050;background:#fff2f2;border:1rpx solid #efb8b8}.tag-gray{color:#637083;background:#eef2f6;border:1rpx solid #d7e0eb} |
| | | </style> |
| | |
| | | </template> |
| | | |
| | | <style lang="scss" scoped> |
| | | .page{min-height:100vh;padding:24rpx 30rpx 70rpx;box-sizing:border-box;background:#f6f7f9}.form-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 #eef1f5}.field>text:first-child{width:210rpx;flex:none;color:#33455d;font-size:27rpx}.field input,.field picker,.picker,.value{min-width:0;flex:1;color:#1e3049;font-size:27rpx}.field input,.value{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:36rpx;text-align:right}.required{color:#e23b3b}.code-field button{flex:none;min-width:120rpx;padding:0 14rpx;margin:0;color:#1769d8;font-size:24rpx;line-height:56rpx;background:#fff;border:1rpx solid #1769d8;border-radius:8rpx}.code-field button::after,.save::after{border:0}.column{align-items:flex-start;flex-direction:column;padding:20rpx 24rpx}.column>text:first-child{width:auto}.column textarea{width:100%;height:140rpx;box-sizing:border-box;font-size:27rpx}.detail-text{width:100%;color:#1e3049;font-size:27rpx;line-height:1.6}.save{margin-top:32rpx;color:#fff;font-size:30rpx;background:#1769d8;border-radius:12rpx}.state{padding:38rpx;color:#8795a8;font-size:26rpx;text-align:center} |
| | | .page{min-height:100vh;padding:24rpx 30rpx 70rpx;box-sizing:border-box;background:#f6f7f9}.form-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 #eef1f5}.field>text:first-child{width:210rpx;flex:none;color:#33455d;font-size:27rpx}.field input,.field picker,.picker,.value{min-width:0;flex:1;color:#1e3049;font-size:27rpx}.field input,.value{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:36rpx;text-align:right}.required{color:#e23b3b}.code-field button{flex:none;min-width:120rpx;padding:0 14rpx;margin:0;color:var(--color-primary, #1769d8);font-size:24rpx;line-height:56rpx;background:#fff;border:1rpx solid var(--color-primary, #1769d8);border-radius:8rpx}.code-field button::after,.save::after{border:0}.column{align-items:flex-start;flex-direction:column;padding:20rpx 24rpx}.column>text:first-child{width:auto}.column textarea{width:100%;height:140rpx;box-sizing:border-box;font-size:27rpx}.detail-text{width:100%;color:#1e3049;font-size:27rpx;line-height:1.6}.save{margin-top:32rpx;color:#fff;font-size:30rpx;background:var(--color-primary, #1769d8);border-radius:12rpx}.state{padding:38rpx;color:#8795a8;font-size:26rpx;text-align:center} |
| | | </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{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} |
| | | .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:var(--color-primary, #1769d8);font-size:24rpx}.content{height:0;flex:1;padding-bottom: 132rpx;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:var(--color-primary, #1769d8);font-size:22rpx;line-height:48rpx;background:var(--color-primary-soft, #f5f8ff);border:1rpx solid var(--color-primary-border, #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:var(--color-primary, #1769d8);background:var(--color-primary-soft, #eef6ff);border:1rpx solid var(--color-primary-border, #c9e1ff)}.tag-approved{color:var(--color-primary, #1769d8);background:var(--color-primary-soft, #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: 104rpx; height: 104rpx; min-height: 104rpx;padding:0;margin:0;background:var(--color-primary, #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:var(--color-primary, #1769d8)} |
| | | </style> |
| | |
| | | </template> |
| | | |
| | | <style lang="scss" scoped> |
| | | .page{min-height:100vh;padding:24rpx 30rpx 70rpx;box-sizing:border-box;background:#f6f7f9}.form-card,.section-card{overflow:hidden;margin-bottom:22rpx;background:#fff;border-radius:16rpx}.field{display:flex;align-items:center;min-height:96rpx;padding:0 24rpx;gap:20rpx;border-bottom:1rpx solid #eef1f5}.field>text:first-child{width:220rpx;flex:none;color:#33455d;font-size:27rpx}.field input,.field picker,.picker,.value{min-width:0;flex:1;color:#1e3049;font-size:27rpx}.field input,.value{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:36rpx;text-align:right}.required{color:#e23b3b}.code-field button,.section-tools button,.sub-actions button{flex:none;min-width:100rpx;padding:0 14rpx;margin:0;color:#1769d8;font-size:24rpx;line-height:56rpx;background:#fff;border:1rpx solid #1769d8;border-radius:8rpx}.danger{color:#d64b4b!important;border-color:#efb0b0!important}.code-field button::after,.save::after,.submit::after,.section-tools button::after,.sub-actions button::after{border:0}.column{align-items:flex-start;flex-direction:column;padding:20rpx 24rpx}.column>text:first-child{width:auto}.column textarea{width:100%;height:140rpx;font-size:27rpx}.save,.submit{margin-top:24rpx;color:#fff;font-size:30rpx;background:#1769d8;border-radius:12rpx}.submit{background:#12a06a}.tabs{display:flex;gap:14rpx;padding:18rpx 20rpx 0;border-bottom:1rpx solid #eef1f5}.tabs text{margin-bottom:18rpx;padding:12rpx 26rpx;color:#55677f;background:#f2f5f9;border-radius:999rpx;font-size:25rpx}.tabs .on{color:#1769d8;background:#eaf3ff;font-weight:700}.section-tools{display:flex;justify-content:flex-end;padding:18rpx 20rpx 0}.sub-card{margin:20rpx;padding:20rpx;border:1rpx solid #edf1f6;border-radius:14rpx}.sub-title{display:block;margin-bottom:14rpx;color:#0f2744;font-size:29rpx;font-weight:700}.sub-grid{display:grid;grid-template-columns:1fr 1fr;gap:10rpx 18rpx;color:#40536c;font-size:25rpx}.sub-grid text{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.sub-grid .span{grid-column:1/3}.sub-actions{display:flex;justify-content:flex-end;gap:12rpx;margin-top:16rpx}.state{padding:38rpx;color:#8795a8;font-size:26rpx;text-align:center}.compact{padding:24rpx}.mask{position:fixed;left:0;right:0;top:0;bottom:0;z-index:20;display:flex;align-items:flex-end;background:rgba(20,32,48,.45)}.modal{width:100%;max-height:86vh;overflow:auto;padding-bottom:30rpx;background:#fff;border-radius:24rpx 24rpx 0 0}.modal-title{height:96rpx;line-height:96rpx;text-align:center;color:#122033;font-size:30rpx;font-weight:700;border-bottom:1rpx solid #eef1f5}.in-modal{margin:24rpx}.result-item{margin:20rpx;border:1rpx solid #edf1f6;border-radius:14rpx;overflow:hidden}.result-title{display:block;padding:18rpx 24rpx;color:#0f2744;font-size:27rpx;font-weight:700;background:#f8fafc}.inner{padding-left:20rpx;padding-right:20rpx}.load-more{margin:0 20rpx 20rpx;padding:18rpx 0;color:#1769d8;font-size:25rpx;text-align:center;background:#f5f8ff;border:1rpx dashed #bcd3f2;border-radius:12rpx}.field.hint-field{border-bottom:0}.field-hint{padding:0 24rpx 20rpx 264rpx;color:#8a94a6;font-size:22rpx;line-height:1.45;border-bottom:1rpx solid #eef1f5} |
| | | .page{min-height:100vh;padding:24rpx 30rpx 70rpx;box-sizing:border-box;background:#f6f7f9}.form-card,.section-card{overflow:hidden;margin-bottom:22rpx;background:#fff;border-radius:16rpx}.field{display:flex;align-items:center;min-height:96rpx;padding:0 24rpx;gap:20rpx;border-bottom:1rpx solid #eef1f5}.field>text:first-child{width:220rpx;flex:none;color:#33455d;font-size:27rpx}.field input,.field picker,.picker,.value{min-width:0;flex:1;color:#1e3049;font-size:27rpx}.field input,.value{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:36rpx;text-align:right}.required{color:#e23b3b}.code-field button,.section-tools button,.sub-actions button{flex:none;min-width:100rpx;padding:0 14rpx;margin:0;color:var(--color-primary, #1769d8);font-size:24rpx;line-height:56rpx;background:#fff;border:1rpx solid var(--color-primary, #1769d8);border-radius:8rpx}.danger{color:#d64b4b!important;border-color:#efb0b0!important}.code-field button::after,.save::after,.submit::after,.section-tools button::after,.sub-actions button::after{border:0}.column{align-items:flex-start;flex-direction:column;padding:20rpx 24rpx}.column>text:first-child{width:auto}.column textarea{width:100%;height:140rpx;font-size:27rpx}.save,.submit{margin-top:24rpx;color:#fff;font-size:30rpx;background:var(--color-primary, #1769d8);border-radius:12rpx}.submit{background:#12a06a}.tabs{display:flex;gap:14rpx;padding:18rpx 20rpx 0;border-bottom:1rpx solid #eef1f5}.tabs text{margin-bottom:18rpx;padding:12rpx 26rpx;color:#55677f;background:#f2f5f9;border-radius:999rpx;font-size:25rpx}.tabs .on{color:var(--color-primary, #1769d8);background:#eaf3ff;font-weight:700}.section-tools{display:flex;justify-content:flex-end;padding:18rpx 20rpx 0}.sub-card{margin:20rpx;padding:20rpx;border:1rpx solid #edf1f6;border-radius:14rpx}.sub-title{display:block;margin-bottom:14rpx;color:#0f2744;font-size:29rpx;font-weight:700}.sub-grid{display:grid;grid-template-columns:1fr 1fr;gap:10rpx 18rpx;color:#40536c;font-size:25rpx}.sub-grid text{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.sub-grid .span{grid-column:1/3}.sub-actions{display:flex;justify-content:flex-end;gap:12rpx;margin-top:16rpx}.state{padding:38rpx;color:#8795a8;font-size:26rpx;text-align:center}.compact{padding:24rpx}.mask{position:fixed;left:0;right:0;top:0;bottom:0;z-index:20;display:flex;align-items:flex-end;background:rgba(20,32,48,.45)}.modal{width:100%;max-height:86vh;overflow:auto;padding-bottom:30rpx;background:#fff;border-radius:24rpx 24rpx 0 0}.modal-title{height:96rpx;line-height:96rpx;text-align:center;color:#122033;font-size:30rpx;font-weight:700;border-bottom:1rpx solid #eef1f5}.in-modal{margin:24rpx}.result-item{margin:20rpx;border:1rpx solid #edf1f6;border-radius:14rpx;overflow:hidden}.result-title{display:block;padding:18rpx 24rpx;color:#0f2744;font-size:27rpx;font-weight:700;background:#f8fafc}.inner{padding-left:20rpx;padding-right:20rpx}.load-more{margin:0 20rpx 20rpx;padding:18rpx 0;color:var(--color-primary, #1769d8);font-size:25rpx;text-align:center;background:var(--color-primary-soft, #f5f8ff);border:1rpx dashed #bcd3f2;border-radius:12rpx}.field.hint-field{border-bottom:0}.field-hint{padding:0 24rpx 20rpx 264rpx;color:#8a94a6;font-size:22rpx;line-height:1.45;border-bottom:1rpx solid #eef1f5} |
| | | </style> |
| | |
| | | </template> |
| | | |
| | | <style lang="scss" scoped> |
| | | .page{min-height:100vh;background:#f3f6fb}.search{display:flex;align-items:center;height:76rpx;margin:18rpx 20rpx 0;padding:0 20rpx;gap:16rpx;background:#fff;border-radius:14rpx}.search input{min-width:0;flex:1;font-size:26rpx;color:#1e3049}.search text{flex:none;color:#1769d8;font-size:24rpx}.content{height:calc(100vh - 100rpx);padding:18rpx 20rpx 32rpx;box-sizing:border-box}.card{margin-bottom:18rpx;padding:22rpx 22rpx 18rpx;background:#fff;border-radius:14rpx;box-shadow:0 8rpx 20rpx rgba(33,54,86,.05)}.head{display:flex;justify-content:space-between;gap:16rpx;border-bottom:1rpx solid #edf1f6;padding-bottom:16rpx}.head>view:first-child{display:grid;gap:6rpx;min-width:0;color:#63758c;font-size:24rpx}.name{color:#10253f;font-size:31rpx;font-weight:700;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.status-wrap{display:flex;align-items:flex-start;justify-content:flex-end;flex:none;min-width:92rpx}.status,.tags text{display:inline-flex;align-items:center;justify-content:center;min-height:40rpx;padding:0 18rpx;border-radius:999rpx;font-size:22rpx;border:1rpx solid #bdd8ff;color:#1769d8;background:#eef6ff}.tag-green{color:#159166;background:#e9fbf2;border-color:#bcebd4}.tag-blue{color:#1769d8;background:#eef6ff;border-color:#bdd8ff}.tag-orange{color:#b36b00;background:#fff7e8;border-color:#f3d49b}.tag-red{color:#d64b4b;background:#fff1f0;border-color:#efb0b0}.tags{display:flex;gap:10rpx;flex-wrap:wrap;margin-top:14rpx}.grid{display:grid;grid-template-columns:1fr 1fr;gap:10rpx 18rpx;margin-top:16rpx;color:#40536c;font-size:25rpx}.grid text{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.grid text.full{grid-column:1/-1;white-space:normal}.actions{display:flex;justify-content:flex-end;gap:12rpx;margin-top:16rpx;border-top:1rpx solid #edf1f6;padding-top:16rpx}.actions button{min-width:96rpx;margin:0;padding:0 16rpx;color:#1769d8;font-size:24rpx;line-height:56rpx;background:#fff;border:1rpx solid #1769d8;border-radius:8rpx}.actions .danger{color:#d64b4b;border-color:#efb0b0}.actions button::after{border:0}.state,.more{display:block;padding:42rpx 0;color:#8795a8;font-size:26rpx;text-align:center}.error{color:#d64b4b}.fab{position:fixed;right:28rpx;bottom:44rpx;width:104rpx;height:104rpx;border-radius:50%;background:#1769d8;box-shadow:0 12rpx 26rpx rgba(23,105,216,.35)}.fab::after{border:0}.fab view,.fab view::after{position:absolute;left:50%;top:50%;content:"";background:#fff;border-radius:4rpx;transform:translate(-50%,-50%)}.fab view{width:42rpx;height:8rpx}.fab view::after{width:8rpx;height:42rpx} |
| | | .page{min-height:100vh;background:#f3f6fb}.search{display:flex;align-items:center;height:76rpx;margin:18rpx 20rpx 0;padding:0 20rpx;gap:16rpx;background:#fff;border-radius:14rpx}.search input{min-width:0;flex:1;font-size:26rpx;color:#1e3049}.search text{flex:none;color:var(--color-primary, #1769d8);font-size:24rpx}.content{height:calc(100vh - 100rpx);padding:18rpx 20rpx 32rpx;box-sizing:border-box}.card{margin-bottom:18rpx;padding:22rpx 22rpx 18rpx;background:#fff;border-radius:14rpx;box-shadow:0 8rpx 20rpx rgba(33,54,86,.05)}.head{display:flex;justify-content:space-between;gap:16rpx;border-bottom:1rpx solid #edf1f6;padding-bottom:16rpx}.head>view:first-child{display:grid;gap:6rpx;min-width:0;color:#63758c;font-size:24rpx}.name{color:#10253f;font-size:31rpx;font-weight:700;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.status-wrap{display:flex;align-items:flex-start;justify-content:flex-end;flex:none;min-width:92rpx}.status,.tags text{display:inline-flex;align-items:center;justify-content:center;min-height:40rpx;padding:0 18rpx;border-radius:999rpx;font-size:22rpx;border:1rpx solid #bdd8ff;color:var(--color-primary, #1769d8);background:var(--color-primary-soft, #eef6ff)}.tag-green{color:#159166;background:#e9fbf2;border-color:#bcebd4}.tag-blue{color:var(--color-primary, #1769d8);background:var(--color-primary-soft, #eef6ff);border-color:#bdd8ff}.tag-orange{color:#b36b00;background:#fff7e8;border-color:#f3d49b}.tag-red{color:#d64b4b;background:#fff1f0;border-color:#efb0b0}.tags{display:flex;gap:10rpx;flex-wrap:wrap;margin-top:14rpx}.grid{display:grid;grid-template-columns:1fr 1fr;gap:10rpx 18rpx;margin-top:16rpx;color:#40536c;font-size:25rpx}.grid text{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.grid text.full{grid-column:1/-1;white-space:normal}.actions{display:flex;justify-content:flex-end;gap:12rpx;margin-top:16rpx;border-top:1rpx solid #edf1f6;padding-top:16rpx}.actions button{min-width:96rpx;margin:0;padding:0 16rpx;color:var(--color-primary, #1769d8);font-size:24rpx;line-height:56rpx;background:#fff;border:1rpx solid var(--color-primary, #1769d8);border-radius:8rpx}.actions .danger{color:#d64b4b;border-color:#efb0b0}.actions button::after{border:0}.state,.more{display:block;padding:42rpx 0;color:#8795a8;font-size:26rpx;text-align:center}.error{color:#d64b4b}.fab{position:fixed;right:28rpx;bottom:44rpx;width:104rpx;height:104rpx;border-radius:50%;background:var(--color-primary, #1769d8);box-shadow:0 12rpx 26rpx rgba(23,105,216,.35)}.fab::after{border:0}.fab view,.fab view::after{position:absolute;left:50%;top:50%;content:"";background:#fff;border-radius:4rpx;transform:translate(-50%,-50%)}.fab view{width:42rpx;height:8rpx}.fab view::after{width:8rpx;height:42rpx} |
| | | </style> |
| | |
| | | </template> |
| | | |
| | | <style lang="scss" scoped> |
| | | .page{min-height:100vh;background:#f3f6fb}.search{display:flex;align-items:center;height:76rpx;margin:18rpx 20rpx 0;padding:0 20rpx;gap:16rpx;background:#fff;border-radius:14rpx}.search input{min-width:0;flex:1;font-size:26rpx;color:#1e3049}.search text{flex:none;color:#1769d8;font-size:24rpx}.content{height:calc(100vh - 100rpx);padding:18rpx 20rpx 32rpx;box-sizing:border-box}.card{position:relative;margin-bottom:18rpx;padding:22rpx 22rpx 18rpx;background:#fff;border-radius:14rpx;box-shadow:0 8rpx 20rpx rgba(33,54,86,.05)}.head{display:flex;justify-content:space-between;gap:16rpx;border-bottom:1rpx solid #edf1f6;padding-bottom:16rpx}.head>view:first-child{display:grid;gap:6rpx;min-width:0;color:#63758c;font-size:24rpx}.name{color:#10253f;font-size:31rpx;font-weight:700;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.status-wrap{display:flex;align-items:flex-start;justify-content:flex-end;flex:none;min-width:92rpx}.status,.tags text{display:inline-flex;align-items:center;justify-content:center;min-height:40rpx;padding:0 18rpx;border-radius:999rpx;font-size:22rpx;border:1rpx solid #bdd8ff;color:#1769d8;background:#eef6ff}.tag-green{color:#159166;background:#e9fbf2;border-color:#bcebd4}.tag-blue{color:#1769d8;background:#eef6ff;border-color:#bdd8ff}.tag-orange{color:#b36b00;background:#fff7e8;border-color:#f3d49b}.tag-red{color:#d64b4b;background:#fff1f0;border-color:#efb0b0}.tags{display:flex;gap:10rpx;flex-wrap:wrap;margin-top:14rpx}.grid{display:grid;grid-template-columns:1fr 1fr;gap:10rpx 18rpx;margin-top:16rpx;color:#40536c;font-size:25rpx}.grid text{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.actions{display:flex;justify-content:flex-end;margin-top:16rpx}.actions button{min-width:128rpx;margin:0;padding:0 18rpx;color:#1769d8;font-size:24rpx;line-height:56rpx;background:#fff;border:1rpx solid #1769d8;border-radius:8rpx}.actions button::after{border:0}.state,.more{display:block;padding:42rpx 0;color:#8795a8;font-size:26rpx;text-align:center}.error{color:#d64b4b} |
| | | .page{min-height:100vh;background:#f3f6fb}.search{display:flex;align-items:center;height:76rpx;margin:18rpx 20rpx 0;padding:0 20rpx;gap:16rpx;background:#fff;border-radius:14rpx}.search input{min-width:0;flex:1;font-size:26rpx;color:#1e3049}.search text{flex:none;color:var(--color-primary, #1769d8);font-size:24rpx}.content{height:calc(100vh - 100rpx);padding:18rpx 20rpx 32rpx;box-sizing:border-box}.card{position:relative;margin-bottom:18rpx;padding:22rpx 22rpx 18rpx;background:#fff;border-radius:14rpx;box-shadow:0 8rpx 20rpx rgba(33,54,86,.05)}.head{display:flex;justify-content:space-between;gap:16rpx;border-bottom:1rpx solid #edf1f6;padding-bottom:16rpx}.head>view:first-child{display:grid;gap:6rpx;min-width:0;color:#63758c;font-size:24rpx}.name{color:#10253f;font-size:31rpx;font-weight:700;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.status-wrap{display:flex;align-items:flex-start;justify-content:flex-end;flex:none;min-width:92rpx}.status,.tags text{display:inline-flex;align-items:center;justify-content:center;min-height:40rpx;padding:0 18rpx;border-radius:999rpx;font-size:22rpx;border:1rpx solid #bdd8ff;color:var(--color-primary, #1769d8);background:var(--color-primary-soft, #eef6ff)}.tag-green{color:#159166;background:#e9fbf2;border-color:#bcebd4}.tag-blue{color:var(--color-primary, #1769d8);background:var(--color-primary-soft, #eef6ff);border-color:#bdd8ff}.tag-orange{color:#b36b00;background:#fff7e8;border-color:#f3d49b}.tag-red{color:#d64b4b;background:#fff1f0;border-color:#efb0b0}.tags{display:flex;gap:10rpx;flex-wrap:wrap;margin-top:14rpx}.grid{display:grid;grid-template-columns:1fr 1fr;gap:10rpx 18rpx;margin-top:16rpx;color:#40536c;font-size:25rpx}.grid text{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.actions{display:flex;justify-content:flex-end;margin-top:16rpx}.actions button{min-width:128rpx;margin:0;padding:0 18rpx;color:var(--color-primary, #1769d8);font-size:24rpx;line-height:56rpx;background:#fff;border:1rpx solid var(--color-primary, #1769d8);border-radius:8rpx}.actions button::after{border:0}.state,.more{display:block;padding:42rpx 0;color:#8795a8;font-size:26rpx;text-align:center}.error{color:#d64b4b} |
| | | </style> |
| | |
| | | </template><view v-else class="state">ææ æ¥å详æ
</view></view></template> |
| | | |
| | | <style lang="scss" scoped> |
| | | .page{min-height:100vh;padding:24rpx 30rpx 70rpx;box-sizing:border-box;background:#f6f7f9}.card{overflow:hidden;margin-bottom:20rpx;background:#fff;border-radius:16rpx}.row{display:flex;align-items:center;justify-content:space-between;gap:22rpx;min-height:88rpx;padding:0 24rpx;border-bottom:1rpx solid #eef1f5}.row text:first-child{flex:none;color:#718198;font-size:26rpx}.row text:last-child{min-width:0;color:#263a54;font-size:26rpx;text-align:right;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.tabs{display:flex;gap:12rpx;padding:14rpx 0}.tabs text{padding:10rpx 24rpx;color:#66778c;font-size:25rpx;background:#fff;border-radius:999rpx}.tabs .on{color:#1769d8;background:#eaf3ff;font-weight:600}.preview,.snapshot{padding:24rpx;box-sizing:border-box}.snapshot text{white-space:pre-wrap;color:#263a54;font-size:23rpx;line-height:1.6}.state{padding:80rpx 20rpx;color:#8795a8;font-size:26rpx;text-align:center}.compact{padding:40rpx 20rpx} |
| | | .page{min-height:100vh;padding:24rpx 30rpx 70rpx;box-sizing:border-box;background:#f6f7f9}.card{overflow:hidden;margin-bottom:20rpx;background:#fff;border-radius:16rpx}.row{display:flex;align-items:center;justify-content:space-between;gap:22rpx;min-height:88rpx;padding:0 24rpx;border-bottom:1rpx solid #eef1f5}.row text:first-child{flex:none;color:#718198;font-size:26rpx}.row text:last-child{min-width:0;color:#263a54;font-size:26rpx;text-align:right;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.tabs{display:flex;gap:12rpx;padding:14rpx 0}.tabs text{padding:10rpx 24rpx;color:#66778c;font-size:25rpx;background:#fff;border-radius:999rpx}.tabs .on{color:var(--color-primary, #1769d8);background:#eaf3ff;font-weight:600}.preview,.snapshot{padding:24rpx;box-sizing:border-box}.snapshot text{white-space:pre-wrap;color:#263a54;font-size:23rpx;line-height:1.6}.state{padding:80rpx 20rpx;color:#8795a8;font-size:26rpx;text-align:center}.compact{padding:40rpx 20rpx} |
| | | </style> |
| | |
| | | </template><view v-else class="state">ç»å½åæ¥çæ¥åå®ä¾</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;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:80rpx;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;gap:10rpx;padding:16rpx 0;margin-top:16rpx;color:#66778c;font-size:23rpx;border-top:1rpx solid #edf1f6;border-bottom:1rpx solid #edf1f6}.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{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{color:#1769d8;background:#eef6ff;border:1rpx solid #c9e1ff} |
| | | .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:var(--color-primary, #1769d8);font-size:24rpx}.content{height:0;flex:1;padding-bottom:80rpx;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:var(--color-primary, #1769d8);background:var(--color-primary-soft, #eef6ff)}.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}.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:var(--color-primary, #1769d8);font-size:22rpx;line-height:48rpx;background:var(--color-primary-soft, #f5f8ff);border:1rpx solid var(--color-primary-border, #8ab3ee);border-radius:8rpx}.actions .danger{color:#c65050;background:#fff7f7;border-color:#e3a0a0}.actions button::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{color:var(--color-primary, #1769d8);background:var(--color-primary-soft, #eef6ff);border:1rpx solid var(--color-primary-border, #c9e1ff)} |
| | | </style> |
| | |
| | | </view><button v-if="canSave" class="save" :loading="saving" :disabled="saving" @click="save">ä¿å</button><button v-else-if="readonly && hasPermission('qc-report:template:update')" class="save" @click="mode='edit'">ç¼è¾</button><view v-else class="state">ææ ä¿åæé</view></view></template> |
| | | |
| | | <style lang="scss" scoped> |
| | | .page{min-height:100vh;padding:24rpx 30rpx 70rpx;box-sizing:border-box;background:#f6f7f9}.form-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 #eef1f5}.field>text:first-child{width:210rpx;flex:none;color:#33455d;font-size:27rpx}.field input,.field picker,.picker,.value{min-width:0;flex:1;color:#1e3049;font-size:27rpx}.field input,.value{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:36rpx;text-align:right}.required{color:#e23b3b}.column{align-items:flex-start;flex-direction:column;padding:20rpx 24rpx}.column>text:first-child{width:auto}.column textarea{width:100%;height:150rpx;box-sizing:border-box;font-size:27rpx}.save{margin-top:32rpx;color:#fff;font-size:30rpx;background:#1769d8;border-radius:12rpx}.save::after{border:0}.state{padding:38rpx;color:#8795a8;font-size:26rpx;text-align:center} |
| | | .page{min-height:100vh;padding:24rpx 30rpx 70rpx;box-sizing:border-box;background:#f6f7f9}.form-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 #eef1f5}.field>text:first-child{width:210rpx;flex:none;color:#33455d;font-size:27rpx}.field input,.field picker,.picker,.value{min-width:0;flex:1;color:#1e3049;font-size:27rpx}.field input,.value{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:36rpx;text-align:right}.required{color:#e23b3b}.column{align-items:flex-start;flex-direction:column;padding:20rpx 24rpx}.column>text:first-child{width:auto}.column textarea{width:100%;height:150rpx;box-sizing:border-box;font-size:27rpx}.save{margin-top:32rpx;color:#fff;font-size:30rpx;background:var(--color-primary, #1769d8);border-radius:12rpx}.save::after{border:0}.state{padding:38rpx;color:#8795a8;font-size:26rpx;text-align:center} |
| | | </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{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} |
| | | .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:var(--color-primary, #1769d8);font-size:24rpx}.content{height:0;flex:1;padding-bottom: 132rpx;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:var(--color-primary, #1769d8);background:var(--color-primary-soft, #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:var(--color-primary, #1769d8);font-size:22rpx;line-height:48rpx;background:var(--color-primary-soft, #f5f8ff);border:1rpx solid var(--color-primary-border, #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:var(--color-primary, #1769d8)!important;background:var(--color-primary-soft, #eef6ff)!important;border:1rpx solid var(--color-primary-border, #c9e1ff)}.fab{position:fixed;right:30rpx;bottom:calc(32rpx + env(safe-area-inset-bottom));display:flex;align-items:center;justify-content:center;width: 104rpx; height: 104rpx; min-height: 104rpx;padding:0;margin:0;background:var(--color-primary, #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{min-height:100vh;padding:24rpx 30rpx 70rpx;box-sizing:border-box;background:#f6f7f9}.form-card,.section-card{overflow:hidden;margin-bottom:22rpx;background:#fff;border-radius:16rpx}.field{display:flex;align-items:center;min-height:96rpx;padding:0 24rpx;gap:20rpx;border-bottom:1rpx solid #eef1f5}.field>text:first-child{width:220rpx;flex:none;color:#33455d;font-size:27rpx}.field input,.field picker,.picker,.value{min-width:0;flex:1;color:#1e3049;font-size:27rpx}.field input,.value{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:36rpx;text-align:right}.required{color:#e23b3b}.code-field button,.section-tools button,.sub-actions button{flex:none;min-width:100rpx;padding:0 14rpx;margin:0;color:#1769d8;font-size:24rpx;line-height:56rpx;background:#fff;border:1rpx solid #1769d8;border-radius:8rpx}.danger{color:#d64b4b!important;border-color:#efb0b0!important}.code-field button::after,.save::after,.submit::after,.section-tools button::after,.sub-actions button::after{border:0}.column{align-items:flex-start;flex-direction:column;padding:20rpx 24rpx}.column>text:first-child{width:auto}.column textarea{width:100%;height:140rpx;font-size:27rpx}.save,.submit{margin-top:24rpx;color:#fff;font-size:30rpx;background:#1769d8;border-radius:12rpx}.submit{background:#12a06a}.tabs{display:flex;gap:14rpx;padding:18rpx 20rpx 0;border-bottom:1rpx solid #eef1f5}.tabs text{margin-bottom:18rpx;padding:12rpx 26rpx;color:#55677f;background:#f2f5f9;border-radius:999rpx;font-size:25rpx}.tabs .on{color:#1769d8;background:#eaf3ff;font-weight:700}.section-tools{display:flex;justify-content:flex-end;padding:18rpx 20rpx 0}.sub-card{margin:20rpx;padding:20rpx;border:1rpx solid #edf1f6;border-radius:14rpx}.sub-title{display:block;margin-bottom:14rpx;color:#0f2744;font-size:29rpx;font-weight:700}.sub-grid{display:grid;grid-template-columns:1fr 1fr;gap:10rpx 18rpx;color:#40536c;font-size:25rpx}.sub-grid text{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.sub-grid .span{grid-column:1/3}.sub-actions{display:flex;justify-content:flex-end;gap:12rpx;margin-top:16rpx}.state{padding:38rpx;color:#8795a8;font-size:26rpx;text-align:center}.compact{padding:24rpx}.mask{position:fixed;left:0;right:0;top:0;bottom:0;z-index:20;display:flex;align-items:flex-end;background:rgba(20,32,48,.45)}.modal{width:100%;max-height:86vh;overflow:auto;padding-bottom:30rpx;background:#fff;border-radius:24rpx 24rpx 0 0}.modal-title{height:96rpx;line-height:96rpx;text-align:center;color:#122033;font-size:30rpx;font-weight:700;border-bottom:1rpx solid #eef1f5}.in-modal{margin:24rpx}.result-item{margin:20rpx;border:1rpx solid #edf1f6;border-radius:14rpx;overflow:hidden}.result-title{display:block;padding:18rpx 24rpx;color:#0f2744;font-size:27rpx;font-weight:700;background:#f8fafc}.inner{padding-left:20rpx;padding-right:20rpx}.load-more{margin:0 20rpx 20rpx;padding:18rpx 0;color:#1769d8;font-size:25rpx;text-align:center;background:#f5f8ff;border:1rpx dashed #bcd3f2;border-radius:12rpx}.field.hint-field{border-bottom:0}.field-hint{padding:0 24rpx 20rpx 264rpx;color:#8a94a6;font-size:22rpx;line-height:1.45;border-bottom:1rpx solid #eef1f5} |
| | | .page{min-height:100vh;padding:24rpx 30rpx 70rpx;box-sizing:border-box;background:#f6f7f9}.form-card,.section-card{overflow:hidden;margin-bottom:22rpx;background:#fff;border-radius:16rpx}.field{display:flex;align-items:center;min-height:96rpx;padding:0 24rpx;gap:20rpx;border-bottom:1rpx solid #eef1f5}.field>text:first-child{width:220rpx;flex:none;color:#33455d;font-size:27rpx}.field input,.field picker,.picker,.value{min-width:0;flex:1;color:#1e3049;font-size:27rpx}.field input,.value{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:36rpx;text-align:right}.required{color:#e23b3b}.code-field button,.section-tools button,.sub-actions button{flex:none;min-width:100rpx;padding:0 14rpx;margin:0;color:var(--color-primary, #1769d8);font-size:24rpx;line-height:56rpx;background:#fff;border:1rpx solid var(--color-primary, #1769d8);border-radius:8rpx}.danger{color:#d64b4b!important;border-color:#efb0b0!important}.code-field button::after,.save::after,.submit::after,.section-tools button::after,.sub-actions button::after{border:0}.column{align-items:flex-start;flex-direction:column;padding:20rpx 24rpx}.column>text:first-child{width:auto}.column textarea{width:100%;height:140rpx;font-size:27rpx}.save,.submit{margin-top:24rpx;color:#fff;font-size:30rpx;background:var(--color-primary, #1769d8);border-radius:12rpx}.submit{background:#12a06a}.tabs{display:flex;gap:14rpx;padding:18rpx 20rpx 0;border-bottom:1rpx solid #eef1f5}.tabs text{margin-bottom:18rpx;padding:12rpx 26rpx;color:#55677f;background:#f2f5f9;border-radius:999rpx;font-size:25rpx}.tabs .on{color:var(--color-primary, #1769d8);background:#eaf3ff;font-weight:700}.section-tools{display:flex;justify-content:flex-end;padding:18rpx 20rpx 0}.sub-card{margin:20rpx;padding:20rpx;border:1rpx solid #edf1f6;border-radius:14rpx}.sub-title{display:block;margin-bottom:14rpx;color:#0f2744;font-size:29rpx;font-weight:700}.sub-grid{display:grid;grid-template-columns:1fr 1fr;gap:10rpx 18rpx;color:#40536c;font-size:25rpx}.sub-grid text{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.sub-grid .span{grid-column:1/3}.sub-actions{display:flex;justify-content:flex-end;gap:12rpx;margin-top:16rpx}.state{padding:38rpx;color:#8795a8;font-size:26rpx;text-align:center}.compact{padding:24rpx}.mask{position:fixed;left:0;right:0;top:0;bottom:0;z-index:20;display:flex;align-items:flex-end;background:rgba(20,32,48,.45)}.modal{width:100%;max-height:86vh;overflow:auto;padding-bottom:30rpx;background:#fff;border-radius:24rpx 24rpx 0 0}.modal-title{height:96rpx;line-height:96rpx;text-align:center;color:#122033;font-size:30rpx;font-weight:700;border-bottom:1rpx solid #eef1f5}.in-modal{margin:24rpx}.result-item{margin:20rpx;border:1rpx solid #edf1f6;border-radius:14rpx;overflow:hidden}.result-title{display:block;padding:18rpx 24rpx;color:#0f2744;font-size:27rpx;font-weight:700;background:#f8fafc}.inner{padding-left:20rpx;padding-right:20rpx}.load-more{margin:0 20rpx 20rpx;padding:18rpx 0;color:var(--color-primary, #1769d8);font-size:25rpx;text-align:center;background:var(--color-primary-soft, #f5f8ff);border:1rpx dashed #bcd3f2;border-radius:12rpx}.field.hint-field{border-bottom:0}.field-hint{padding:0 24rpx 20rpx 264rpx;color:#8a94a6;font-size:22rpx;line-height:1.45;border-bottom:1rpx solid #eef1f5} |
| | | </style> |
| | |
| | | </template> |
| | | |
| | | <style lang="scss" scoped> |
| | | .page{min-height:100vh;background:#f3f6fb}.search{display:flex;align-items:center;height:76rpx;margin:18rpx 20rpx 0;padding:0 20rpx;gap:16rpx;background:#fff;border-radius:14rpx}.search input{min-width:0;flex:1;font-size:26rpx;color:#1e3049}.search text{flex:none;color:#1769d8;font-size:24rpx}.content{height:calc(100vh - 100rpx);padding:18rpx 20rpx 32rpx;box-sizing:border-box}.card{margin-bottom:18rpx;padding:22rpx 22rpx 18rpx;background:#fff;border-radius:14rpx;box-shadow:0 8rpx 20rpx rgba(33,54,86,.05)}.head{display:flex;justify-content:space-between;gap:16rpx;border-bottom:1rpx solid #edf1f6;padding-bottom:16rpx}.head>view:first-child{display:grid;gap:6rpx;min-width:0;color:#63758c;font-size:24rpx}.name{color:#10253f;font-size:31rpx;font-weight:700;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.status-wrap{display:flex;align-items:flex-start;justify-content:flex-end;flex:none;min-width:92rpx}.status,.tags text{display:inline-flex;align-items:center;justify-content:center;min-height:40rpx;padding:0 18rpx;border-radius:999rpx;font-size:22rpx;border:1rpx solid #bdd8ff;color:#1769d8;background:#eef6ff}.tag-green{color:#159166;background:#e9fbf2;border-color:#bcebd4}.tag-blue{color:#1769d8;background:#eef6ff;border-color:#bdd8ff}.tag-orange{color:#b36b00;background:#fff7e8;border-color:#f3d49b}.tag-red{color:#d64b4b;background:#fff1f0;border-color:#efb0b0}.tags{display:flex;gap:10rpx;flex-wrap:wrap;margin-top:14rpx}.grid{display:grid;grid-template-columns:1fr 1fr;gap:10rpx 18rpx;margin-top:16rpx;color:#40536c;font-size:25rpx}.grid text{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.grid text.full{grid-column:1/-1;white-space:normal}.actions{display:flex;justify-content:flex-end;gap:12rpx;margin-top:16rpx;border-top:1rpx solid #edf1f6;padding-top:16rpx}.actions button{min-width:96rpx;margin:0;padding:0 16rpx;color:#1769d8;font-size:24rpx;line-height:56rpx;background:#fff;border:1rpx solid #1769d8;border-radius:8rpx}.actions .danger{color:#d64b4b;border-color:#efb0b0}.actions button::after{border:0}.state,.more{display:block;padding:42rpx 0;color:#8795a8;font-size:26rpx;text-align:center}.error{color:#d64b4b}.fab{position:fixed;right:28rpx;bottom:44rpx;width:104rpx;height:104rpx;border-radius:50%;background:#1769d8;box-shadow:0 12rpx 26rpx rgba(23,105,216,.35)}.fab::after{border:0}.fab view,.fab view::after{position:absolute;left:50%;top:50%;content:"";background:#fff;border-radius:4rpx;transform:translate(-50%,-50%)}.fab view{width:42rpx;height:8rpx}.fab view::after{width:8rpx;height:42rpx} |
| | | .page{min-height:100vh;background:#f3f6fb}.search{display:flex;align-items:center;height:76rpx;margin:18rpx 20rpx 0;padding:0 20rpx;gap:16rpx;background:#fff;border-radius:14rpx}.search input{min-width:0;flex:1;font-size:26rpx;color:#1e3049}.search text{flex:none;color:var(--color-primary, #1769d8);font-size:24rpx}.content{height:calc(100vh - 100rpx);padding:18rpx 20rpx 32rpx;box-sizing:border-box}.card{margin-bottom:18rpx;padding:22rpx 22rpx 18rpx;background:#fff;border-radius:14rpx;box-shadow:0 8rpx 20rpx rgba(33,54,86,.05)}.head{display:flex;justify-content:space-between;gap:16rpx;border-bottom:1rpx solid #edf1f6;padding-bottom:16rpx}.head>view:first-child{display:grid;gap:6rpx;min-width:0;color:#63758c;font-size:24rpx}.name{color:#10253f;font-size:31rpx;font-weight:700;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.status-wrap{display:flex;align-items:flex-start;justify-content:flex-end;flex:none;min-width:92rpx}.status,.tags text{display:inline-flex;align-items:center;justify-content:center;min-height:40rpx;padding:0 18rpx;border-radius:999rpx;font-size:22rpx;border:1rpx solid #bdd8ff;color:var(--color-primary, #1769d8);background:var(--color-primary-soft, #eef6ff)}.tag-green{color:#159166;background:#e9fbf2;border-color:#bcebd4}.tag-blue{color:var(--color-primary, #1769d8);background:var(--color-primary-soft, #eef6ff);border-color:#bdd8ff}.tag-orange{color:#b36b00;background:#fff7e8;border-color:#f3d49b}.tag-red{color:#d64b4b;background:#fff1f0;border-color:#efb0b0}.tags{display:flex;gap:10rpx;flex-wrap:wrap;margin-top:14rpx}.grid{display:grid;grid-template-columns:1fr 1fr;gap:10rpx 18rpx;margin-top:16rpx;color:#40536c;font-size:25rpx}.grid text{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.grid text.full{grid-column:1/-1;white-space:normal}.actions{display:flex;justify-content:flex-end;gap:12rpx;margin-top:16rpx;border-top:1rpx solid #edf1f6;padding-top:16rpx}.actions button{min-width:96rpx;margin:0;padding:0 16rpx;color:var(--color-primary, #1769d8);font-size:24rpx;line-height:56rpx;background:#fff;border:1rpx solid var(--color-primary, #1769d8);border-radius:8rpx}.actions .danger{color:#d64b4b;border-color:#efb0b0}.actions button::after{border:0}.state,.more{display:block;padding:42rpx 0;color:#8795a8;font-size:26rpx;text-align:center}.error{color:#d64b4b}.fab{position:fixed;right:28rpx;bottom:44rpx;width:104rpx;height:104rpx;border-radius:50%;background:var(--color-primary, #1769d8);box-shadow:0 12rpx 26rpx rgba(23,105,216,.35)}.fab::after{border:0}.fab view,.fab view::after{position:absolute;left:50%;top:50%;content:"";background:#fff;border-radius:4rpx;transform:translate(-50%,-50%)}.fab view{width:42rpx;height:8rpx}.fab view::after{width:8rpx;height:42rpx} |
| | | </style> |
| | |
| | | </template> |
| | | |
| | | <style lang="scss" scoped> |
| | | .page{min-height:100vh;padding:24rpx 30rpx 70rpx;box-sizing:border-box;background:#f6f7f9}.form-card,.section-card{overflow:hidden;margin-bottom:22rpx;background:#fff;border-radius:16rpx}.field{display:flex;align-items:center;min-height:96rpx;padding:0 24rpx;gap:20rpx;border-bottom:1rpx solid #eef1f5}.field>text:first-child{width:220rpx;flex:none;color:#33455d;font-size:27rpx}.field input,.field picker,.picker,.value{min-width:0;flex:1;color:#1e3049;font-size:27rpx}.field input,.value{text-align:right}.value.full{width:100%;text-align:left}.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:36rpx;text-align:right}.required{color:#e23b3b}.code-field button,.section-head button,.actions button{flex:none;min-width:100rpx;padding:0 14rpx;margin:0;color:#1769d8;font-size:24rpx;line-height:56rpx;background:#fff;border:1rpx solid #1769d8;border-radius:8rpx}.danger{color:#d64b4b!important;border-color:#efb0b0!important}.code-field button::after,.save::after,.section-head button::after,.actions button::after{border:0}.column{align-items:flex-start;flex-direction:column;padding:20rpx 24rpx}.column>text:first-child{width:auto}.column textarea{width:100%;height:140rpx;font-size:27rpx}.check-row{display:flex;flex-wrap:wrap;gap:14rpx 22rpx;color:#1e3049;font-size:26rpx}.check-row label{display:flex;align-items:center;gap:6rpx}.save{margin-top:24rpx;color:#fff;font-size:30rpx;background:#1769d8;border-radius:12rpx}.tabs{display:flex;gap:14rpx;padding:18rpx 20rpx 0}.tabs text{padding:12rpx 26rpx;color:#55677f;background:#f2f5f9;border-radius:999rpx;font-size:25rpx}.tabs .on{color:#1769d8;background:#eaf3ff;font-weight:700}.section-head{display:flex;align-items:center;justify-content:space-between;min-height:82rpx;padding:0 24rpx;color:#1d2f46;font-size:28rpx;font-weight:600;border-bottom:1rpx solid #eef1f5}.sub-card{margin:20rpx;padding:20rpx;border:1rpx solid #edf1f6;border-radius:14rpx}.sub-title{display:block;margin-bottom:14rpx;color:#0f2744;font-size:29rpx;font-weight:700}.sub-grid{display:grid;grid-template-columns:1fr 1fr;gap:10rpx 18rpx;color:#40536c;font-size:25rpx}.sub-grid text{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.sub-grid .span{grid-column:1/3}.actions{display:flex;justify-content:flex-end;gap:12rpx;margin-top:16rpx}.state{padding:38rpx;color:#8795a8;font-size:26rpx;text-align:center}.compact{padding:24rpx}.mask{position:fixed;left:0;right:0;top:0;bottom:0;z-index:20;display:flex;align-items:flex-end;background:rgba(20,32,48,.45)}.modal{width:100%;max-height:86vh;overflow:auto;padding-bottom:30rpx;background:#fff;border-radius:24rpx 24rpx 0 0}.modal-title{height:96rpx;line-height:96rpx;text-align:center;color:#122033;font-size:30rpx;font-weight:700;border-bottom:1rpx solid #eef1f5}.in-modal{margin:24rpx}.load-more{margin:0 20rpx 20rpx;padding:18rpx 0;color:#1769d8;font-size:25rpx;text-align:center;background:#f5f8ff;border:1rpx dashed #bcd3f2;border-radius:12rpx}.load-more.end{color:#8795a8;background:transparent;border:0} |
| | | .page{min-height:100vh;padding:24rpx 30rpx 70rpx;box-sizing:border-box;background:#f6f7f9}.form-card,.section-card{overflow:hidden;margin-bottom:22rpx;background:#fff;border-radius:16rpx}.field{display:flex;align-items:center;min-height:96rpx;padding:0 24rpx;gap:20rpx;border-bottom:1rpx solid #eef1f5}.field>text:first-child{width:220rpx;flex:none;color:#33455d;font-size:27rpx}.field input,.field picker,.picker,.value{min-width:0;flex:1;color:#1e3049;font-size:27rpx}.field input,.value{text-align:right}.value.full{width:100%;text-align:left}.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:36rpx;text-align:right}.required{color:#e23b3b}.code-field button,.section-head button,.actions button{flex:none;min-width:100rpx;padding:0 14rpx;margin:0;color:var(--color-primary, #1769d8);font-size:24rpx;line-height:56rpx;background:#fff;border:1rpx solid var(--color-primary, #1769d8);border-radius:8rpx}.danger{color:#d64b4b!important;border-color:#efb0b0!important}.code-field button::after,.save::after,.section-head button::after,.actions button::after{border:0}.column{align-items:flex-start;flex-direction:column;padding:20rpx 24rpx}.column>text:first-child{width:auto}.column textarea{width:100%;height:140rpx;font-size:27rpx}.check-row{display:flex;flex-wrap:wrap;gap:14rpx 22rpx;color:#1e3049;font-size:26rpx}.check-row label{display:flex;align-items:center;gap:6rpx}.save{margin-top:24rpx;color:#fff;font-size:30rpx;background:var(--color-primary, #1769d8);border-radius:12rpx}.tabs{display:flex;gap:14rpx;padding:18rpx 20rpx 0}.tabs text{padding:12rpx 26rpx;color:#55677f;background:#f2f5f9;border-radius:999rpx;font-size:25rpx}.tabs .on{color:var(--color-primary, #1769d8);background:#eaf3ff;font-weight:700}.section-head{display:flex;align-items:center;justify-content:space-between;min-height:82rpx;padding:0 24rpx;color:#1d2f46;font-size:28rpx;font-weight:600;border-bottom:1rpx solid #eef1f5}.sub-card{margin:20rpx;padding:20rpx;border:1rpx solid #edf1f6;border-radius:14rpx}.sub-title{display:block;margin-bottom:14rpx;color:#0f2744;font-size:29rpx;font-weight:700}.sub-grid{display:grid;grid-template-columns:1fr 1fr;gap:10rpx 18rpx;color:#40536c;font-size:25rpx}.sub-grid text{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.sub-grid .span{grid-column:1/3}.actions{display:flex;justify-content:flex-end;gap:12rpx;margin-top:16rpx}.state{padding:38rpx;color:#8795a8;font-size:26rpx;text-align:center}.compact{padding:24rpx}.mask{position:fixed;left:0;right:0;top:0;bottom:0;z-index:20;display:flex;align-items:flex-end;background:rgba(20,32,48,.45)}.modal{width:100%;max-height:86vh;overflow:auto;padding-bottom:30rpx;background:#fff;border-radius:24rpx 24rpx 0 0}.modal-title{height:96rpx;line-height:96rpx;text-align:center;color:#122033;font-size:30rpx;font-weight:700;border-bottom:1rpx solid #eef1f5}.in-modal{margin:24rpx}.load-more{margin:0 20rpx 20rpx;padding:18rpx 0;color:var(--color-primary, #1769d8);font-size:25rpx;text-align:center;background:var(--color-primary-soft, #f5f8ff);border:1rpx dashed #bcd3f2;border-radius:12rpx}.load-more.end{color:#8795a8;background:transparent;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: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} |
| | | .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:var(--color-primary, #1769d8);font-size:24rpx}.content{height:0;flex:1;padding-bottom: 132rpx;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:var(--color-primary, #1769d8);font-size:22rpx;line-height:48rpx;background:var(--color-primary-soft, #f5f8ff);border:1rpx solid var(--color-primary-border, #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: 104rpx; height: 104rpx; min-height: 104rpx;padding:0;margin:0;background:var(--color-primary, #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{min-height:100vh;padding:24rpx 30rpx 70rpx;box-sizing:border-box;background:#f6f7f9}.form-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 #eef1f5}.field>text:first-child{width:200rpx;flex:none;color:#33455d;font-size:27rpx}.field input,.field picker,.picker,.value{min-width:0;flex:1;color:#1e3049;font-size:27rpx}.field input,.value{text-align:right}.picker{display:flex;align-items:center;justify-content:space-between;color:#65758a}.picker text:first-child,.value{overflow:hidden;text-align:right;text-overflow:ellipsis;white-space:nowrap}.picker text:last-child{margin-left:16rpx;color:#8092a7;font-size:36rpx}.required{color:#e23b3b}.code-field button{flex:none;min-width:100rpx;padding:0 14rpx;margin:0;color:#1769d8;font-size:24rpx;line-height:56rpx;background:#fff;border:1rpx solid #1769d8;border-radius:8rpx}.code-field button::after,.save::after{border:0}.column{align-items:flex-start;flex-direction:column;padding:20rpx 24rpx}.column>text:first-child{width:auto}.column textarea{width:100%;height:140rpx;font-size:27rpx}.save{margin-top:32rpx;color:#fff;font-size:30rpx;background:#1769d8;border-radius:12rpx}.state{padding:38rpx;color:#8795a8;font-size:26rpx;text-align:center} |
| | | .page{min-height:100vh;padding:24rpx 30rpx 70rpx;box-sizing:border-box;background:#f6f7f9}.form-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 #eef1f5}.field>text:first-child{width:200rpx;flex:none;color:#33455d;font-size:27rpx}.field input,.field picker,.picker,.value{min-width:0;flex:1;color:#1e3049;font-size:27rpx}.field input,.value{text-align:right}.picker{display:flex;align-items:center;justify-content:space-between;color:#65758a}.picker text:first-child,.value{overflow:hidden;text-align:right;text-overflow:ellipsis;white-space:nowrap}.picker text:last-child{margin-left:16rpx;color:#8092a7;font-size:36rpx}.required{color:#e23b3b}.code-field button{flex:none;min-width:100rpx;padding:0 14rpx;margin:0;color:var(--color-primary, #1769d8);font-size:24rpx;line-height:56rpx;background:#fff;border:1rpx solid var(--color-primary, #1769d8);border-radius:8rpx}.code-field button::after,.save::after{border:0}.column{align-items:flex-start;flex-direction:column;padding:20rpx 24rpx}.column>text:first-child{width:auto}.column textarea{width:100%;height:140rpx;font-size:27rpx}.save{margin-top:32rpx;color:#fff;font-size:30rpx;background:var(--color-primary, #1769d8);border-radius:12rpx}.state{padding:38rpx;color:#8795a8;font-size:26rpx;text-align:center} |
| | | </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{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} |
| | | .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:var(--color-primary, #1769d8);font-size:24rpx}.main-layout{height:0;min-height:0;flex:1;display:flex;gap:16rpx;padding-bottom: 132rpx;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:var(--color-primary, #1769d8);font-weight:600;background:var(--color-primary-soft, #eef5ff)}.type-item.active::before{position:absolute;top:18rpx;bottom:18rpx;left:0;width:6rpx;background:var(--color-primary, #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:var(--color-primary, #1769d8);background:var(--color-primary-soft, #edf5ff);border:1rpx solid var(--color-primary-border, #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:var(--color-primary, #1769d8);font-size:22rpx;background:var(--color-primary-soft, #edf5ff);border:1rpx solid var(--color-primary-border, #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:var(--color-primary, #1769d8);font-size:22rpx;line-height:48rpx;background:var(--color-primary-soft, #f5f8ff);border:1rpx solid var(--color-primary-border, #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: 104rpx; height: 104rpx; min-height: 104rpx;padding:0;margin:0;background:var(--color-primary, #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{min-height:100vh;padding:24rpx 30rpx 70rpx;box-sizing:border-box;background:#f6f7f9}.form-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 #eef1f5}.field>text:first-child{width:200rpx;flex:none;color:#33455d;font-size:27rpx}.field input,.field picker,.picker,.value{min-width:0;flex:1;color:#1e3049;font-size:27rpx}.field input,.value{text-align:right}.picker{display:flex;align-items:center;justify-content:space-between;color:#65758a}.picker text:first-child,.value{overflow:hidden;text-align:right;text-overflow:ellipsis;white-space:nowrap}.picker text:last-child{margin-left:16rpx;color:#8092a7;font-size:36rpx}.required{color:#e23b3b}.switch{justify-content:space-between}.switch>text:first-child{width:auto}.code-field button{flex:none;min-width:100rpx;padding:0 14rpx;margin:0;color:#1769d8;font-size:24rpx;line-height:56rpx;background:#fff;border:1rpx solid #1769d8;border-radius:8rpx}.code-field button::after,.save::after{border:0}.column{align-items:flex-start;flex-direction:column;padding:20rpx 24rpx}.column>text:first-child{width:auto}.column textarea{width:100%;height:140rpx;font-size:27rpx}.save{margin-top:32rpx;color:#fff;font-size:30rpx;background:#1769d8;border-radius:12rpx}.state{padding:38rpx;color:#8795a8;font-size:26rpx;text-align:center} |
| | | .page{min-height:100vh;padding:24rpx 30rpx 70rpx;box-sizing:border-box;background:#f6f7f9}.form-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 #eef1f5}.field>text:first-child{width:200rpx;flex:none;color:#33455d;font-size:27rpx}.field input,.field picker,.picker,.value{min-width:0;flex:1;color:#1e3049;font-size:27rpx}.field input,.value{text-align:right}.picker{display:flex;align-items:center;justify-content:space-between;color:#65758a}.picker text:first-child,.value{overflow:hidden;text-align:right;text-overflow:ellipsis;white-space:nowrap}.picker text:last-child{margin-left:16rpx;color:#8092a7;font-size:36rpx}.required{color:#e23b3b}.switch{justify-content:space-between}.switch>text:first-child{width:auto}.code-field button{flex:none;min-width:100rpx;padding:0 14rpx;margin:0;color:var(--color-primary, #1769d8);font-size:24rpx;line-height:56rpx;background:#fff;border:1rpx solid var(--color-primary, #1769d8);border-radius:8rpx}.code-field button::after,.save::after{border:0}.column{align-items:flex-start;flex-direction:column;padding:20rpx 24rpx}.column>text:first-child{width:auto}.column textarea{width:100%;height:140rpx;font-size:27rpx}.save{margin-top:32rpx;color:#fff;font-size:30rpx;background:var(--color-primary, #1769d8);border-radius:12rpx}.state{padding:38rpx;color:#8795a8;font-size:26rpx;text-align:center} |
| | | </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{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} |
| | | .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:var(--color-primary, #1769d8);font-size:24rpx}.content{height:0;flex:1;padding-bottom: 132rpx;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:var(--color-primary, #1769d8);font-size:22rpx;line-height:48rpx;background:var(--color-primary-soft, #f5f8ff);border:1rpx solid var(--color-primary-border, #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: 104rpx; height: 104rpx; min-height: 104rpx;padding:0;margin:0;background:var(--color-primary, #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> |
| | |
| | | border-radius: 17rpx; |
| | | } |
| | | .read-all { |
| | | color: #1769d8; |
| | | color: var(--color-primary, #1769d8); |
| | | font-size: 25rpx; |
| | | } |
| | | .read-all.disabled { |
| | |
| | | line-height: 73rpx; |
| | | } |
| | | .filter-bar .active { |
| | | color: #1769d8; |
| | | color: var(--color-primary, #1769d8); |
| | | font-weight: 600; |
| | | } |
| | | .filter-bar .active::after { |
| | |
| | | left: 4rpx; |
| | | height: 5rpx; |
| | | content: ""; |
| | | background: #1769d8; |
| | | background: var(--color-primary, #1769d8); |
| | | border-radius: 5rpx; |
| | | } |
| | | .message-list { |
| | |
| | | height: 64rpx; |
| | | align-items: center; |
| | | justify-content: center; |
| | | color: #1769d8; |
| | | color: var(--color-primary, #1769d8); |
| | | background: #e8f1ff; |
| | | border-radius: 18rpx; |
| | | } |
| | |
| | | color: #fff; |
| | | font-size: 26rpx; |
| | | line-height: 76rpx; |
| | | background: #1769d8; |
| | | background: var(--color-primary, #1769d8); |
| | | border-radius: 14rpx; |
| | | } |
| | | .login-state button::after { |
| | |
| | | color: #fff; |
| | | font-size: 42rpx; |
| | | font-weight: 700; |
| | | background: #1769d8; |
| | | background: var(--color-primary, #1769d8); |
| | | } |
| | | .profile-card text:nth-of-type(1) { |
| | | margin-top: 22rpx; |
| | |
| | | color: #fff; |
| | | font-size: 34rpx; |
| | | font-weight: 600; |
| | | background: #1769d8; |
| | | background: var(--color-primary, #1769d8); |
| | | } |
| | | .user-info { |
| | | flex: 1; |
| | |
| | | } |
| | | .role { |
| | | padding: 3rpx 11rpx; |
| | | color: #1769d8; |
| | | color: var(--color-primary, #1769d8); |
| | | font-size: 19rpx; |
| | | background: #e8f1ff; |
| | | border-radius: 10rpx; |
| | |
| | | } |
| | | .login { |
| | | color: #fff; |
| | | background: #1769d8; |
| | | background: var(--color-primary, #1769d8); |
| | | } |
| | | .logout { |
| | | color: #e05258; |
| | |
| | | import { reactive } from "vue"; |
| | | import { onShow } from "@dcloudio/uni-app"; |
| | | |
| | | import type { ThemeKey } from "../../stores/theme"; |
| | | import { useAppTheme } from "../../stores/theme"; |
| | | |
| | | const PROFILE_SETTINGS_KEY = "mom_profile_settings"; |
| | | const settings = reactive({ |
| | | messageNotify: true, |
| | | compactDisplay: false, |
| | | keepLastModule: true, |
| | | }); |
| | | const { |
| | | themes, |
| | | theme, |
| | | themeKey, |
| | | themeStyle, |
| | | primaryColor, |
| | | setTheme, |
| | | resetTheme, |
| | | restoreTheme, |
| | | } = useAppTheme(); |
| | | |
| | | onShow(() => loadSettings()); |
| | | onShow(() => { |
| | | loadSettings(); |
| | | restoreTheme(); |
| | | }); |
| | | |
| | | function loadSettings() { |
| | | try { |
| | |
| | | saveSettings(); |
| | | } |
| | | |
| | | function selectTheme(key: ThemeKey) { |
| | | if (key === themeKey.value) return; |
| | | setTheme(key); |
| | | uni.showToast({ title: "主é¢å·²åæ¢", icon: "success" }); |
| | | } |
| | | |
| | | async function clearLocalPreference() { |
| | | const { confirm } = await uni.showModal({ |
| | | title: "æ¢å¤é»è®¤è®¾ç½®", |
| | | content: "ä»
æ¢å¤æ¬æºæ¾ç¤ºå好ï¼ä¸ä¼éåºç»å½ã", |
| | | content: "å°æ¢å¤é»è®¤æ¾ç¤ºå好ååå¡è主é¢ï¼ä¸ä¼éåºç»å½ã", |
| | | }); |
| | | if (!confirm) return; |
| | | settings.messageNotify = true; |
| | | settings.compactDisplay = false; |
| | | settings.keepLastModule = true; |
| | | uni.removeStorageSync(PROFILE_SETTINGS_KEY); |
| | | resetTheme(); |
| | | uni.showToast({ title: "å·²æ¢å¤é»è®¤è®¾ç½®", icon: "success" }); |
| | | } |
| | | </script> |
| | | |
| | | <template> |
| | | <view class="page"> |
| | | <view class="page" :style="themeStyle"> |
| | | <view class="section-title">主é¢é¢è²</view> |
| | | <view class="theme-card"> |
| | | <view |
| | | v-for="item in themes" |
| | | :key="item.key" |
| | | class="theme-option" |
| | | :class="{ active: themeKey === item.key }" |
| | | @click="selectTheme(item.key)" |
| | | > |
| | | <view class="theme-swatch" :style="{ background: item.primary }"> |
| | | <text v-if="themeKey === item.key">â</text> |
| | | </view> |
| | | <view class="theme-copy"> |
| | | <text>{{ item.name }}</text> |
| | | <text>{{ item.description }}</text> |
| | | </view> |
| | | <text class="theme-check">{{ themeKey === item.key ? "已使ç¨" : "" }}</text> |
| | | </view> |
| | | </view> |
| | | |
| | | <view class="section-title">æ¾ç¤ºå好</view> |
| | | <view class="card"> |
| | | <view class="setting-row"> |
| | | <view><text>æ¶æ¯æé</text><text>ä¿çæ¶æ¯é¡µçº¢ç¹ä¸æéæ¾ç¤º</text></view> |
| | | <switch :checked="settings.messageNotify" |
| | | color="#1769d8" |
| | | :color="primaryColor" |
| | | @change="updateSetting('messageNotify', $event.detail.value)" /> |
| | | </view> |
| | | <view class="setting-row"> |
| | | <view><text>ç´§åæ¾ç¤º</text><text>è®°å½å表å好ï¼åç»é¡µé¢å¯è¯»å使ç¨</text></view> |
| | | <switch :checked="settings.compactDisplay" |
| | | color="#1769d8" |
| | | :color="primaryColor" |
| | | @change="updateSetting('compactDisplay', $event.detail.value)" /> |
| | | </view> |
| | | <view class="setting-row"> |
| | | <view><text>è®°ä½ä¸æ¬¡æ¨¡å</text><text>ä¿çæè¿ä½¿ç¨æ¨¡åçæ¬å°å好</text></view> |
| | | <switch :checked="settings.keepLastModule" |
| | | color="#1769d8" |
| | | :color="primaryColor" |
| | | @change="updateSetting('keepLastModule', $event.detail.value)" /> |
| | | </view> |
| | | </view> |
| | | <button class="plain-button" |
| | | @click="clearLocalPreference">æ¢å¤é»è®¤è®¾ç½®</button> |
| | | |
| | | <view class="theme-preview"> |
| | | <view> |
| | | <text>å½å主é¢</text> |
| | | <text>{{ theme.name }}</text> |
| | | </view> |
| | | <view class="preview-button">ä¸»è¦æä½</view> |
| | | </view> |
| | | |
| | | <button class="plain-button" @click="clearLocalPreference">æ¢å¤é»è®¤è®¾ç½®</button> |
| | | </view> |
| | | </template> |
| | | |
| | |
| | | .page { |
| | | min-height: 100vh; |
| | | padding: 24rpx; |
| | | background: #f6f7f9; |
| | | background: var(--color-bg-page, #f6f7f9); |
| | | } |
| | | .section-title { |
| | | margin: 8rpx 4rpx 14rpx; |
| | | color: var(--color-text-secondary, #65758b); |
| | | font-size: 24rpx; |
| | | font-weight: 600; |
| | | } |
| | | .theme-card, |
| | | .card { |
| | | overflow: hidden; |
| | | background: #fff; |
| | | margin-bottom: 28rpx; |
| | | background: var(--color-bg-card, #fff); |
| | | border-radius: 20rpx; |
| | | } |
| | | .theme-option { |
| | | display: flex; |
| | | min-height: 112rpx; |
| | | align-items: center; |
| | | gap: 20rpx; |
| | | padding: 18rpx 28rpx; |
| | | border-bottom: 1rpx solid var(--color-border, #edf0f4); |
| | | } |
| | | .theme-option:last-child, |
| | | .setting-row:last-child { |
| | | border-bottom: 0; |
| | | } |
| | | .theme-option.active { |
| | | background: var(--color-primary-soft, #eef5ff); |
| | | } |
| | | .theme-swatch { |
| | | display: flex; |
| | | flex: none; |
| | | width: 54rpx; |
| | | height: 54rpx; |
| | | align-items: center; |
| | | justify-content: center; |
| | | color: #fff; |
| | | font-size: 28rpx; |
| | | font-weight: 700; |
| | | border: 6rpx solid rgba(255, 255, 255, 0.78); |
| | | border-radius: 50%; |
| | | box-shadow: 0 0 0 2rpx rgba(32, 49, 72, 0.12); |
| | | } |
| | | .theme-copy { |
| | | flex: 1; |
| | | min-width: 0; |
| | | } |
| | | .theme-copy text { |
| | | display: block; |
| | | } |
| | | .theme-copy text:first-child { |
| | | color: var(--color-text-primary, #24344e); |
| | | font-size: 28rpx; |
| | | font-weight: 700; |
| | | } |
| | | .theme-copy text:last-child { |
| | | margin-top: 5rpx; |
| | | color: var(--color-text-muted, #8a96a8); |
| | | font-size: 22rpx; |
| | | } |
| | | .theme-check { |
| | | flex: none; |
| | | color: var(--color-primary, #1769d8); |
| | | font-size: 23rpx; |
| | | } |
| | | .setting-row { |
| | | display: flex; |
| | |
| | | justify-content: space-between; |
| | | gap: 20rpx; |
| | | padding: 20rpx 28rpx; |
| | | border-bottom: 1rpx solid #edf0f4; |
| | | } |
| | | .setting-row:last-child { |
| | | border-bottom: 0; |
| | | border-bottom: 1rpx solid var(--color-border, #edf0f4); |
| | | } |
| | | .setting-row > view { |
| | | flex: 1; |
| | |
| | | display: block; |
| | | } |
| | | .setting-row text:first-child { |
| | | color: #24344e; |
| | | color: var(--color-text-primary, #24344e); |
| | | font-size: 28rpx; |
| | | font-weight: 700; |
| | | } |
| | | .setting-row text:last-child { |
| | | margin-top: 8rpx; |
| | | color: #8a96a8; |
| | | color: var(--color-text-muted, #8a96a8); |
| | | font-size: 23rpx; |
| | | line-height: 1.4; |
| | | } |
| | | .theme-preview { |
| | | display: flex; |
| | | align-items: center; |
| | | justify-content: space-between; |
| | | gap: 24rpx; |
| | | padding: 24rpx 28rpx; |
| | | background: var(--color-bg-card, #fff); |
| | | border: 1rpx solid var(--color-primary-border, #bfdbff); |
| | | border-radius: 18rpx; |
| | | } |
| | | .theme-preview text { |
| | | display: block; |
| | | } |
| | | .theme-preview text:first-child { |
| | | color: var(--color-text-muted, #8a96a8); |
| | | font-size: 22rpx; |
| | | } |
| | | .theme-preview text:last-child { |
| | | margin-top: 4rpx; |
| | | color: var(--color-text-primary, #24344e); |
| | | font-size: 28rpx; |
| | | font-weight: 700; |
| | | } |
| | | .preview-button { |
| | | flex: none; |
| | | padding: 14rpx 26rpx; |
| | | color: #fff; |
| | | font-size: 24rpx; |
| | | background: var(--color-primary, #1769d8); |
| | | border-radius: 10rpx; |
| | | } |
| | | .plain-button { |
| | | height: 84rpx; |
| | | margin-top: 32rpx; |
| | | color: #1769d8; |
| | | margin-top: 28rpx; |
| | | color: var(--color-primary, #1769d8); |
| | | font-size: 28rpx; |
| | | line-height: 84rpx; |
| | | background: #fff; |
| | | background: var(--color-bg-card, #fff); |
| | | border-radius: 16rpx; |
| | | } |
| | | .plain-button::after { |
| | |
| | | display: block; |
| | | padding: 18rpx 0; |
| | | border-top: 1rpx solid #f2f3f5; |
| | | color: #165dff; |
| | | color: var(--color-primary, #165dff); |
| | | font-size: 25rpx; |
| | | } |
| | | .empty, |
| | |
| | | color: #4e5969; |
| | | } |
| | | .emphasis { |
| | | color: #165dff; |
| | | color: var(--color-primary, #165dff); |
| | | font-weight: 600; |
| | | } |
| | | .full-field, |
| | |
| | | .check { |
| | | min-height: 64rpx; |
| | | padding: 0 16rpx; |
| | | color: #165dff; |
| | | color: var(--color-primary, #165dff); |
| | | font-size: 26rpx; |
| | | line-height: 64rpx; |
| | | background: #edf4ff; |
| | |
| | | display: flex; |
| | | flex-direction: column; |
| | | align-items: flex-end; |
| | | color: #165dff; |
| | | color: var(--color-primary, #165dff); |
| | | font-size: 24rpx; |
| | | font-weight: 400; |
| | | line-height: 38rpx; |
| | |
| | | .item button { |
| | | margin: 0; |
| | | padding: 0 16rpx; |
| | | color: #165dff; |
| | | color: var(--color-primary, #165dff); |
| | | font-size: 23rpx; |
| | | line-height: 52rpx; |
| | | background: #edf4ff; |
| | |
| | | display: flex; |
| | | justify-content: space-between; |
| | | padding: 18rpx 24rpx; |
| | | color: #165dff; |
| | | color: var(--color-primary, #165dff); |
| | | font-size: 25rpx; |
| | | border-bottom: 1rpx solid #f2f3f5; |
| | | } |
| | |
| | | color: #fff; |
| | | font-size: 30rpx; |
| | | line-height: 84rpx; |
| | | background: #165dff; |
| | | background: var(--color-primary, #165dff); |
| | | border-radius: 14rpx; |
| | | } |
| | | .save::after, |
| | |
| | | flex: 1; |
| | | } |
| | | .search text { |
| | | color: #165dff; |
| | | color: var(--color-primary, #165dff); |
| | | } |
| | | .content { |
| | | min-height: 0; |
| | | height: 0; |
| | | flex: 1; |
| | | padding-bottom: 150rpx; |
| | | padding-bottom: 132rpx; |
| | | box-sizing: border-box; |
| | | } |
| | | .card { |
| | |
| | | } |
| | | .actions button { |
| | | margin: 0; |
| | | color: #165dff; |
| | | color: var(--color-primary, #165dff); |
| | | font-size: 23rpx; |
| | | background: #f2f6ff; |
| | | } |
| | |
| | | display: flex; |
| | | align-items: center; |
| | | justify-content: center; |
| | | width: 132rpx; |
| | | height: 132rpx; |
| | | min-height: 132rpx; |
| | | width: 104rpx; height: 104rpx; min-height: 104rpx; |
| | | padding: 0; |
| | | color: #fff; |
| | | background: #165dff; |
| | | background: var(--color-primary, #165dff); |
| | | border-radius: 50%; |
| | | } |
| | | .fab-plus, |
| | |
| | | flex: 1; |
| | | } |
| | | .search text { |
| | | color: #165dff; |
| | | color: var(--color-primary, #165dff); |
| | | } |
| | | .content { |
| | | height: 0; |
| | |
| | | } |
| | | .tag { |
| | | padding: 5rpx 12rpx; |
| | | color: #165dff; |
| | | color: var(--color-primary, #165dff); |
| | | background: #edf4ff; |
| | | border-radius: 8rpx; |
| | | font-size: 22rpx; |
| | |
| | | .actions button { |
| | | margin: 0; |
| | | padding: 0 16rpx; |
| | | color: #165dff; |
| | | color: var(--color-primary, #165dff); |
| | | font-size: 23rpx; |
| | | background: #f2f6ff; |
| | | border-radius: 8rpx; |
| | |
| | | display: flex; |
| | | align-items: center; |
| | | justify-content: center; |
| | | width: 132rpx; |
| | | height: 132rpx; |
| | | min-height: 132rpx; |
| | | width: 104rpx; height: 104rpx; min-height: 104rpx; |
| | | padding: 0; |
| | | color: #fff; |
| | | background: #165dff; |
| | | background: var(--color-primary, #165dff); |
| | | border-radius: 50%; |
| | | } |
| | | .fab-plus, |
| | |
| | | flex: 1; |
| | | } |
| | | .search text { |
| | | color: #165dff; |
| | | color: var(--color-primary, #165dff); |
| | | } |
| | | .content { |
| | | min-height: 0; |
| | | height: 0; |
| | | flex: 1; |
| | | padding-bottom: 150rpx; |
| | | padding-bottom: 132rpx; |
| | | box-sizing: border-box; |
| | | } |
| | | .card { |
| | |
| | | } |
| | | .tag { |
| | | padding: 5rpx 12rpx; |
| | | color: #165dff; |
| | | color: var(--color-primary, #165dff); |
| | | background: #edf4ff; |
| | | border-radius: 8rpx; |
| | | font-size: 22rpx; |
| | |
| | | } |
| | | .actions button { |
| | | margin: 0; |
| | | color: #165dff; |
| | | color: var(--color-primary, #165dff); |
| | | font-size: 23rpx; |
| | | background: #f2f6ff; |
| | | } |
| | |
| | | display: flex; |
| | | align-items: center; |
| | | justify-content: center; |
| | | width: 132rpx; |
| | | height: 132rpx; |
| | | min-height: 132rpx; |
| | | width: 104rpx; height: 104rpx; min-height: 104rpx; |
| | | padding: 0; |
| | | color: #fff; |
| | | background: #165dff; |
| | | background: var(--color-primary, #165dff); |
| | | border-radius: 50%; |
| | | } |
| | | .fab-plus, |
| | |
| | | flex: 1; |
| | | } |
| | | .search text { |
| | | color: #165dff; |
| | | color: var(--color-primary, #165dff); |
| | | } |
| | | .content { |
| | | min-height: 0; |
| | | height: 0; |
| | | flex: 1; |
| | | padding-bottom: 150rpx; |
| | | padding-bottom: 132rpx; |
| | | box-sizing: border-box; |
| | | } |
| | | .card { |
| | |
| | | } |
| | | .tag { |
| | | padding: 5rpx 12rpx; |
| | | color: #165dff; |
| | | color: var(--color-primary, #165dff); |
| | | background: #edf4ff; |
| | | border-radius: 8rpx; |
| | | font-size: 22rpx; |
| | |
| | | .actions button { |
| | | margin: 0; |
| | | padding: 0 16rpx; |
| | | color: #165dff; |
| | | color: var(--color-primary, #165dff); |
| | | font-size: 23rpx; |
| | | background: #f2f6ff; |
| | | border-radius: 8rpx; |
| | |
| | | display: flex; |
| | | align-items: center; |
| | | justify-content: center; |
| | | width: 132rpx; |
| | | height: 132rpx; |
| | | min-height: 132rpx; |
| | | width: 104rpx; height: 104rpx; min-height: 104rpx; |
| | | padding: 0; |
| | | color: #fff; |
| | | background: #165dff; |
| | | background: var(--color-primary, #165dff); |
| | | border-radius: 50%; |
| | | } |
| | | .fab-plus, |
| | |
| | | } |
| | | .process-actions .primary { |
| | | color: #fff; |
| | | background: #165dff; |
| | | background: var(--color-primary, #165dff); |
| | | } |
| | | .process-actions button::after { |
| | | border: 0; |
| | |
| | | </template> |
| | | |
| | | <style lang="scss" scoped> |
| | | .page{min-height:100vh;padding:24rpx 30rpx 70rpx;box-sizing:border-box;background:#f3f6fb}.hero{padding:32rpx 28rpx;color:#fff;background:linear-gradient(135deg,#1769d8,#27a2ef);border-radius:18rpx;box-shadow:0 14rpx 28rpx rgba(23,105,216,.18)}.hero text{display:block}.hero text:first-child{font-size:38rpx;font-weight:700}.hero text:last-child{margin-top:12rpx;color:#dcecff;font-size:24rpx;line-height:1.55}.card,.tips{margin-top:22rpx;padding:24rpx;background:#fff;border-radius:16rpx;box-shadow:0 8rpx 20rpx rgba(37,57,89,.06)}.tags{display:flex;flex-wrap:wrap;gap:12rpx;margin-bottom:18rpx}.tags text{padding:8rpx 16rpx;color:#1769d8;font-size:23rpx;background:#eef6ff;border:1rpx solid #cfe2ff;border-radius:999rpx}.row{display:flex;align-items:center;justify-content:space-between;gap:20rpx;min-height:78rpx;border-bottom:1rpx solid #edf1f6}.row text:first-child{flex:none;color:#718198;font-size:25rpx}.row text:last-child{min-width:0;color:#20334c;font-size:26rpx;text-align:right}.card button{margin-top:28rpx;color:#fff;font-size:29rpx;background:#1769d8;border-radius:12rpx}.card button::after{border:0}.tips text{display:block}.tips text:first-child{color:#20334c;font-size:29rpx;font-weight:700}.tips text:last-child{margin-top:12rpx;color:#66778c;font-size:25rpx;line-height:1.7} |
| | | .page{min-height:100vh;padding:24rpx 30rpx 70rpx;box-sizing:border-box;background:#f3f6fb}.hero{padding:32rpx 28rpx;color:#fff;background:linear-gradient(135deg,var(--color-primary, #1769d8),#27a2ef);border-radius:18rpx;box-shadow:0 14rpx 28rpx rgba(23,105,216,.18)}.hero text{display:block}.hero text:first-child{font-size:38rpx;font-weight:700}.hero text:last-child{margin-top:12rpx;color:#dcecff;font-size:24rpx;line-height:1.55}.card,.tips{margin-top:22rpx;padding:24rpx;background:#fff;border-radius:16rpx;box-shadow:0 8rpx 20rpx rgba(37,57,89,.06)}.tags{display:flex;flex-wrap:wrap;gap:12rpx;margin-bottom:18rpx}.tags text{padding:8rpx 16rpx;color:var(--color-primary, #1769d8);font-size:23rpx;background:var(--color-primary-soft, #eef6ff);border:1rpx solid #cfe2ff;border-radius:999rpx}.row{display:flex;align-items:center;justify-content:space-between;gap:20rpx;min-height:78rpx;border-bottom:1rpx solid #edf1f6}.row text:first-child{flex:none;color:#718198;font-size:25rpx}.row text:last-child{min-width:0;color:#20334c;font-size:26rpx;text-align:right}.card button{margin-top:28rpx;color:#fff;font-size:29rpx;background:var(--color-primary, #1769d8);border-radius:12rpx}.card button::after{border:0}.tips text{display:block}.tips text:first-child{color:#20334c;font-size:29rpx;font-weight:700}.tips text:last-child{margin-top:12rpx;color:#66778c;font-size:25rpx;line-height:1.7} |
| | | </style> |
| | |
| | | </template> |
| | | |
| | | <style lang="scss" scoped> |
| | | .state-panel{min-height:70vh;padding:180rpx 48rpx 60rpx;box-sizing:border-box;text-align:center;background:#f4f7fb}.state-title,.state-text{display:block}.state-title{color:#172b4d;font-size:34rpx;font-weight:700}.state-text{margin-top:18rpx;color:#718198;font-size:25rpx;line-height:1.6}.state-panel button{width:240rpx;margin-top:36rpx;color:#fff;font-size:27rpx;background:#1769d8;border-radius:12rpx}.state-panel button::after{border:0} |
| | | .state-panel{min-height:70vh;padding:180rpx 48rpx 60rpx;box-sizing:border-box;text-align:center;background:#f4f7fb}.state-title,.state-text{display:block}.state-title{color:#172b4d;font-size:34rpx;font-weight:700}.state-text{margin-top:18rpx;color:#718198;font-size:25rpx;line-height:1.6}.state-panel button{width:240rpx;margin-top:36rpx;color:#fff;font-size:27rpx;background:var(--color-primary, #1769d8);border-radius:12rpx}.state-panel button::after{border:0} |
| | | </style> |
| | |
| | | .summary { display: flex; justify-content: space-between; align-items: center; gap: 16rpx; padding: 24rpx; } |
| | | .summary view { display: flex; flex: 1; min-width: 0; flex-direction: column; gap: 8rpx; color: #718198; font-size: 24rpx; } |
| | | .title { overflow: hidden; color: #20334c; font-size: 31rpx; font-weight: 600; text-overflow: ellipsis; white-space: nowrap; } |
| | | .tag { flex: none; padding: 5rpx 12rpx; color: #165dff; background: #edf4ff; border-radius: 8rpx; font-size: 22rpx; } |
| | | .tag { flex: none; padding: 5rpx 12rpx; color: var(--color-primary, #165dff); background: #edf4ff; border-radius: 8rpx; font-size: 22rpx; } |
| | | .tag.invalid { color: #f53f3f; background: #fff1f0; } |
| | | .toolbar { display: flex; flex-wrap: wrap; justify-content: flex-end; gap: 12rpx; margin-bottom: 20rpx; } |
| | | .toolbar button { margin: 0; padding: 0 22rpx; color: #165dff; font-size: 24rpx; background: #f2f6ff; border-radius: 8rpx; } |
| | | .toolbar button { margin: 0; padding: 0 22rpx; color: var(--color-primary, #165dff); font-size: 24rpx; background: #f2f6ff; border-radius: 8rpx; } |
| | | .toolbar .danger { color: #f53f3f; background: #fff1f0; } |
| | | .toolbar button::after { border: 0; } |
| | | .card { padding: 0 24rpx; } |
| | |
| | | .item { display: block; color: #66778c; } |
| | | .item text { display: block; margin: 8rpx 0; } |
| | | .item text:first-child { color: #20334c; font-weight: 600; } |
| | | .attachment { display: block; padding: 18rpx 0; border-top: 1rpx solid #f2f3f5; color: #165dff; font-size: 25rpx; } |
| | | .attachment { display: block; padding: 18rpx 0; border-top: 1rpx solid #f2f3f5; color: var(--color-primary, #165dff); font-size: 25rpx; } |
| | | .empty, .state { display: block; padding: 42rpx 0; color: #86909c; text-align: center; } |
| | | .error { color: #f53f3f; } |
| | | </style> |
| | |
| | | .area, .column { align-items: flex-start; padding: 22rpx 0; } |
| | | .area textarea { height: 130rpx; text-align: left; } |
| | | .attachments { display: flex; flex-direction: column; align-items: flex-end; gap: 12rpx; } |
| | | .attachments button { margin: 0; padding: 0 18rpx; color: #165dff; font-size: 23rpx; background: #f2f6ff; border-radius: 8rpx; } |
| | | .attachments text { color: #165dff; font-size: 24rpx; } |
| | | .attachments button { margin: 0; padding: 0 18rpx; color: var(--color-primary, #165dff); font-size: 23rpx; background: #f2f6ff; border-radius: 8rpx; } |
| | | .attachments text { color: var(--color-primary, #165dff); font-size: 24rpx; } |
| | | .sectionHead { display: flex; justify-content: space-between; align-items: center; padding: 22rpx 0; font-weight: 600; } |
| | | .sectionHead button { margin: 0; padding: 0 18rpx; color: #165dff; font-size: 23rpx; background: #f2f6ff; border-radius: 8rpx; } |
| | | .sectionHead button { margin: 0; padding: 0 18rpx; color: var(--color-primary, #165dff); font-size: 23rpx; background: #f2f6ff; border-radius: 8rpx; } |
| | | .sectionHead button::after, .attachments button::after, .remove::after, .save::after { border: 0; } |
| | | .product { padding-bottom: 18rpx; border-top: 1rpx solid #edf1f6; } |
| | | .remove { margin: 8rpx 0 0 auto; padding: 0 18rpx; color: #f53f3f; font-size: 23rpx; background: #fff1f0; border-radius: 8rpx; } |
| | | .summaryLine { padding: 20rpx 0 24rpx; color: #66778c; font-size: 24rpx; text-align: right; } |
| | | .save { position: fixed; right: 30rpx; bottom: calc(30rpx + env(safe-area-inset-bottom)); left: 30rpx; color: #fff; background: #165dff; border-radius: 12rpx; } |
| | | .save { position: fixed; right: 30rpx; bottom: calc(30rpx + env(safe-area-inset-bottom)); left: 30rpx; color: #fff; background: var(--color-primary, #165dff); border-radius: 12rpx; } |
| | | .no-permission { padding: 34rpx 0; color: #8795a8; font-size: 26rpx; text-align: center; } |
| | | </style> |
| | |
| | | .page { position: fixed; top: var(--window-top); right: 0; bottom: var(--window-bottom); left: 0; min-height: 0; display: flex; flex-direction: column; padding: 0 30rpx; overflow: hidden; background: #f5f6f7; } |
| | | .search { display: flex; align-items: center; flex: none; height: 80rpx; margin: 20rpx 0 12rpx; padding: 0 22rpx; background: #fff; border-radius: 16rpx; } |
| | | .search input { flex: 1; } |
| | | .search text { color: #165dff; } |
| | | .search text { color: var(--color-primary, #165dff); } |
| | | .content { height: 0; flex: 1; } |
| | | .card { padding: 24rpx; margin-bottom: 18rpx; background: #fff; border-radius: 16rpx; } |
| | | .head, .meta, .actions { display: flex; justify-content: space-between; align-items: center; } |
| | | .head text:first-child { overflow: hidden; font-weight: 600; text-overflow: ellipsis; white-space: nowrap; } |
| | | .voidNo { color: #f53f3f; } |
| | | .customer { display: block; margin-top: 12rpx; color: #20334c; font-size: 26rpx; } |
| | | .tag { flex: none; padding: 5rpx 12rpx; color: #165dff; background: #edf4ff; border-radius: 8rpx; font-size: 22rpx; } |
| | | .tag { flex: none; padding: 5rpx 12rpx; color: var(--color-primary, #165dff); background: #edf4ff; border-radius: 8rpx; font-size: 22rpx; } |
| | | .grid { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 10rpx 16rpx; padding: 14rpx 0; margin-top: 14rpx; color: #66778c; font-size: 22rpx; border-top: 1rpx solid #f2f3f5; border-bottom: 1rpx solid #f2f3f5; } |
| | | .grid text { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; } |
| | | .meta { margin-top: 14rpx; color: #86909c; font-size: 24rpx; } |
| | | .meta text:last-child { color: #ff7d00; } |
| | | .actions { flex-wrap: wrap; justify-content: flex-end; gap: 12rpx; margin-top: 18rpx; } |
| | | .actions button { margin: 0; padding: 0 16rpx; color: #165dff; font-size: 23rpx; background: #f2f6ff; border-radius: 8rpx; } |
| | | .actions button { margin: 0; padding: 0 16rpx; color: var(--color-primary, #165dff); font-size: 23rpx; background: #f2f6ff; border-radius: 8rpx; } |
| | | .actions .danger { color: #f53f3f; background: #fff1f0; } |
| | | .actions button::after, .fab::after { border: 0; } |
| | | .state { padding: 48rpx 0; color: #86909c; text-align: center; } |
| | | .error { color: #f53f3f; } |
| | | .fab { position: fixed; right: 30rpx; bottom: calc(32rpx + env(safe-area-inset-bottom)); z-index: 5; display: flex; align-items: center; justify-content: center; width: 96rpx; height: 96rpx; border-radius: 50%; background: #165dff; box-shadow: 0 12rpx 24rpx rgba(22, 93, 255, 0.28); } |
| | | .fab { position: fixed; right: 30rpx; bottom: calc(32rpx + env(safe-area-inset-bottom)); z-index: 5; display: flex; align-items: center; justify-content: center; width: 96rpx; height: 96rpx; border-radius: 50%; background: var(--color-primary, #165dff); box-shadow: 0 12rpx 24rpx rgba(22, 93, 255, 0.28); } |
| | | .fab-plus { position: relative; width: 34rpx; height: 34rpx; } |
| | | .fab-plus::before, .fab-plus::after { position: absolute; top: 50%; left: 50%; content: ""; background: #fff; border-radius: 2rpx; transform: translate(-50%, -50%); } |
| | | .fab-plus::before { width: 34rpx; height: 4rpx; } |
| | |
| | | .summary { display: flex; align-items: center; justify-content: space-between; gap: 16rpx; padding: 24rpx; } |
| | | .summary view { display: flex; flex: 1; min-width: 0; flex-direction: column; gap: 8rpx; color: #718198; font-size: 24rpx; } |
| | | .title { overflow: hidden; color: #20334c; font-size: 31rpx; font-weight: 600; text-overflow: ellipsis; white-space: nowrap; } |
| | | .tag { flex: none; padding: 5rpx 12rpx; color: #1769d8; font-size: 22rpx; background: #edf5ff; border-radius: 8rpx; } |
| | | .tag { flex: none; padding: 5rpx 12rpx; color: var(--color-primary, #1769d8); font-size: 22rpx; background: var(--color-primary-soft, #edf5ff); border-radius: 8rpx; } |
| | | .tag.invalid { color: #e54949; background: #fff1f0; } |
| | | .toolbar { display: flex; flex-wrap: wrap; justify-content: flex-end; gap: 12rpx; margin-bottom: 20rpx; } |
| | | .toolbar button { margin: 0; padding: 0 24rpx; color: #1769d8; font-size: 24rpx; background: #edf4ff; border-radius: 8rpx; } |
| | | .toolbar button { margin: 0; padding: 0 24rpx; color: var(--color-primary, #1769d8); font-size: 24rpx; background: #edf4ff; border-radius: 8rpx; } |
| | | .toolbar .danger { color: #e54949; background: #fff1f0; } |
| | | .toolbar button::after { border: 0; } |
| | | .card { padding: 0 24rpx; } |
| | |
| | | .picker text { margin-left: 16rpx; color: #8092a7; font-size: 36rpx; } |
| | | .area { align-items: flex-start; padding: 22rpx 0; } |
| | | .area textarea { height: 150rpx; text-align: left; } |
| | | .save { position: fixed; right: 30rpx; bottom: calc(30rpx + env(safe-area-inset-bottom)); left: 30rpx; color: #fff; background: #1769d8; border-radius: 12rpx; } |
| | | .save { position: fixed; right: 30rpx; bottom: calc(30rpx + env(safe-area-inset-bottom)); left: 30rpx; color: #fff; background: var(--color-primary, #1769d8); border-radius: 12rpx; } |
| | | .save::after { border: 0; } |
| | | .no-permission { padding: 34rpx 0; color: #8795a8; font-size: 26rpx; text-align: center; } |
| | | </style> |
| | |
| | | .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; flex: none; height: 80rpx; padding: 0 20rpx; margin: 20rpx 0 12rpx; background: #fff; border-radius: 16rpx; box-shadow: 0 8rpx 20rpx rgba(43, 69, 107, 0.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; } |
| | | .search text { color: var(--color-primary, #1769d8); font-size: 24rpx; } |
| | | .content { height: 0; flex: 1; padding-bottom: 132rpx; 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, 0.08); } |
| | | .head, .actions { display: flex; align-items: center; justify-content: space-between; gap: 16rpx; } |
| | | .head > view { display: flex; flex: 1; min-width: 0; flex-direction: column; gap: 8rpx; } |
| | | .name { overflow: hidden; color: #20334c; font-size: 30rpx; font-weight: 600; text-overflow: ellipsis; white-space: nowrap; } |
| | | .sub { overflow: hidden; color: #718198; font-size: 22rpx; text-overflow: ellipsis; white-space: nowrap; } |
| | | .tag { flex: none; padding: 4rpx 10rpx; color: #1769d8; font-size: 21rpx; background: #edf5ff; border-radius: 7rpx; } |
| | | .tag { flex: none; padding: 4rpx 10rpx; color: var(--color-primary, #1769d8); font-size: 21rpx; background: var(--color-primary-soft, #edf5ff); border-radius: 7rpx; } |
| | | .tag.invalid { color: #e54949; background: #fff1f0; } |
| | | .grid { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 10rpx 16rpx; padding: 16rpx 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 { flex-wrap: wrap; justify-content: flex-end; margin-top: 18rpx; } |
| | | .actions button { margin: 0; padding: 0 18rpx; color: #1769d8; font-size: 23rpx; background: #edf4ff; border-radius: 8rpx; } |
| | | .actions button { margin: 0; padding: 0 18rpx; color: var(--color-primary, #1769d8); font-size: 23rpx; background: #edf4ff; border-radius: 8rpx; } |
| | | .actions .danger { color: #e54949; background: #fff1f0; } |
| | | .actions button::after, .fab::after { border: 0; } |
| | | .state, .more { display: block; padding: 42rpx 0; color: #86909c; text-align: center; } |
| | | .error { color: #e54949; } |
| | | .fab { position: fixed; right: 30rpx; bottom: calc(32rpx + env(safe-area-inset-bottom)); width: 96rpx; height: 96rpx; color: #fff; font-size: 48rpx; line-height: 96rpx; background: #1769d8; border-radius: 50%; box-shadow: 0 12rpx 28rpx rgba(23, 105, 216, 0.28); } |
| | | .fab { position: fixed; right: 30rpx; bottom: calc(32rpx + env(safe-area-inset-bottom)); width: 96rpx; height: 96rpx; color: #fff; font-size: 48rpx; line-height: 96rpx; background: var(--color-primary, #1769d8); border-radius: 50%; box-shadow: 0 12rpx 28rpx rgba(23, 105, 216, 0.28); } |
| | | </style> |
| | |
| | | box-shadow: 0 8rpx 20rpx rgba(43, 69, 107, 0.06); |
| | | } |
| | | .filter picker { |
| | | color: #1769d8; |
| | | color: var(--color-primary, #1769d8); |
| | | } |
| | | .year-picker { |
| | | display: flex; |
| | |
| | | width: 14rpx; |
| | | height: 14rpx; |
| | | margin-top: -3rpx; |
| | | border-right: 3rpx solid #1769d8; |
| | | border-bottom: 3rpx solid #1769d8; |
| | | border-right: 3rpx solid var(--color-primary, #1769d8); |
| | | border-bottom: 3rpx solid var(--color-primary, #1769d8); |
| | | transform: rotate(45deg); |
| | | } |
| | | .summary { |
| | | padding: 30rpx; |
| | | color: #fff; |
| | | background: linear-gradient(135deg, #1769d8, #2d82e9); |
| | | background: linear-gradient(135deg, var(--color-primary, #1769d8), #2d82e9); |
| | | border-radius: 20rpx; |
| | | box-shadow: 0 14rpx 28rpx rgba(23, 105, 216, 0.2); |
| | | } |
| | |
| | | display: block; |
| | | } |
| | | .metrics text:first-child { |
| | | color: #1769d8; |
| | | color: var(--color-primary, #1769d8); |
| | | font-size: 38rpx; |
| | | font-weight: 700; |
| | | } |
| | |
| | | color: #6d7c90; |
| | | font-size: 24rpx; |
| | | line-height: 1.7; |
| | | background: #eef5ff; |
| | | background: var(--color-primary-soft, #eef5ff); |
| | | border-radius: 14rpx; |
| | | } |
| | | .state { |
| | |
| | | width: 220rpx; |
| | | margin: 20rpx auto; |
| | | color: #fff; |
| | | background: #1769d8; |
| | | background: var(--color-primary, #1769d8); |
| | | border-radius: 12rpx; |
| | | } |
| | | </style> |
| | |
| | | justify-content: space-between; |
| | | gap: 16rpx; |
| | | padding: 30rpx; |
| | | background: linear-gradient(135deg, #1769d8, #3184e8); |
| | | background: linear-gradient(135deg, var(--color-primary, #1769d8), #3184e8); |
| | | border-radius: 20rpx; |
| | | color: #fff; |
| | | } |
| | |
| | | font-size: 26rpx; |
| | | } |
| | | .tab.active { |
| | | color: #1769d8; |
| | | color: var(--color-primary, #1769d8); |
| | | font-weight: 700; |
| | | border-bottom: 4rpx solid #1769d8; |
| | | border-bottom: 4rpx solid var(--color-primary, #1769d8); |
| | | } |
| | | .card { |
| | | padding: 24rpx; |
| | |
| | | text-align: right; |
| | | } |
| | | .right b { |
| | | color: #1769d8; |
| | | color: var(--color-primary, #1769d8); |
| | | } |
| | | .mini { |
| | | display: flex; |
| | |
| | | min-height: 58rpx; |
| | | padding: 0 18rpx; |
| | | margin: 0; |
| | | color: #1769d8; |
| | | color: var(--color-primary, #1769d8); |
| | | font-size: 23rpx; |
| | | line-height: 56rpx; |
| | | background: #f4f8ff; |
| | | border: 1rpx solid #8ab3ee; |
| | | border: 1rpx solid var(--color-primary-border, #8ab3ee); |
| | | border-radius: 10rpx; |
| | | } |
| | | button::after { |
| | |
| | | } |
| | | .create-action, |
| | | .edit-action { |
| | | color: #1769d8; |
| | | color: var(--color-primary, #1769d8); |
| | | background: #f2f6ff; |
| | | border-color: #a9c7fa; |
| | | } |
| | |
| | | } |
| | | .evaluate-action, |
| | | .award-action { |
| | | color: #1769d8; |
| | | background: #edf5ff; |
| | | color: var(--color-primary, #1769d8); |
| | | background: var(--color-primary-soft, #edf5ff); |
| | | border-color: #a9c7fa; |
| | | } |
| | | .approve-action, |
| | |
| | | } |
| | | .primary { |
| | | color: #fff; |
| | | background: #1769d8; |
| | | border-color: #1769d8; |
| | | background: var(--color-primary, #1769d8); |
| | | border-color: var(--color-primary, #1769d8); |
| | | } |
| | | .danger { |
| | | color: #c65050; |
| | |
| | | .type-1, |
| | | .type-2, |
| | | .mode-full { |
| | | color: #165dff; |
| | | color: var(--color-primary, #165dff); |
| | | background: #e8f1ff; |
| | | } |
| | | .type-3, |
| | |
| | | } |
| | | .attachmentHead text:last-child, |
| | | .attachment text:first-child { |
| | | color: #1769d8; |
| | | color: var(--color-primary, #1769d8); |
| | | } |
| | | .attachment { |
| | | padding: 16rpx 0; |
| | |
| | | margin-top: 32rpx; |
| | | color: #fff; |
| | | font-size: 30rpx; |
| | | background: #1769d8; |
| | | background: var(--color-primary, #1769d8); |
| | | border-radius: 12rpx; |
| | | } |
| | | .save::after { |
| | |
| | | font-size: 27rpx; |
| | | } |
| | | .search text { |
| | | color: #165dff; |
| | | color: var(--color-primary, #165dff); |
| | | font-size: 24rpx; |
| | | } |
| | | .status-picker { |
| | |
| | | } |
| | | .status { |
| | | padding: 5rpx 12rpx; |
| | | color: #165dff; |
| | | color: var(--color-primary, #165dff); |
| | | background: #edf4ff; |
| | | border-radius: 8rpx; |
| | | font-size: 22rpx; |
| | |
| | | } |
| | | .type-1, |
| | | .mode-full { |
| | | color: #165dff; |
| | | color: var(--color-primary, #165dff); |
| | | background: #e8f1ff; |
| | | } |
| | | .type-2 { |
| | | color: #165dff; |
| | | color: var(--color-primary, #165dff); |
| | | background: #eef4ff; |
| | | } |
| | | .type-3, |
| | |
| | | padding: 0 16rpx; |
| | | min-height: 54rpx; |
| | | line-height: 52rpx; |
| | | color: #165dff; |
| | | color: var(--color-primary, #165dff); |
| | | background: #f2f6ff; |
| | | border: 0; |
| | | border-radius: 8rpx; |
| | |
| | | .state button { |
| | | margin-top: 24rpx; |
| | | color: #fff; |
| | | background: #165dff; |
| | | background: var(--color-primary, #165dff); |
| | | font-size: 25rpx; |
| | | } |
| | | .mask { |
| | |
| | | display: flex; |
| | | align-items: center; |
| | | justify-content: center; |
| | | width: 132rpx; |
| | | height: 132rpx; |
| | | min-height: 132rpx; |
| | | width: 104rpx; height: 104rpx; min-height: 104rpx; |
| | | padding: 0; |
| | | color: #fff; |
| | | background: #165dff; |
| | | background: var(--color-primary, #165dff); |
| | | border: 0; |
| | | border-radius: 50%; |
| | | box-shadow: 0 12rpx 24rpx #165dff55; |
| | | box-shadow: 0 12rpx 24rpx var(--color-primary, #165dff)55; |
| | | } |
| | | .fab-plus { |
| | | position: relative; |
| | |
| | | font-size: 27rpx; |
| | | } |
| | | .search text { |
| | | color: #1769d8; |
| | | color: var(--color-primary, #1769d8); |
| | | font-size: 24rpx; |
| | | } |
| | | .content { |
| | | height: 0; |
| | | flex: 1; |
| | | padding-bottom: 150rpx; |
| | | padding-bottom: 132rpx; |
| | | } |
| | | .card { |
| | | padding: 24rpx; |
| | |
| | | } |
| | | .tag { |
| | | padding: 4rpx 10rpx; |
| | | color: #1769d8; |
| | | background: #eef5ff; |
| | | color: var(--color-primary, #1769d8); |
| | | background: var(--color-primary-soft, #eef5ff); |
| | | border-radius: 8rpx; |
| | | font-size: 21rpx; |
| | | } |
| | |
| | | padding: 0 18rpx; |
| | | min-height: 54rpx; |
| | | line-height: 52rpx; |
| | | color: #1769d8; |
| | | color: var(--color-primary, #1769d8); |
| | | background: #f4f8ff; |
| | | border: 1rpx solid #9fbee9; |
| | | border-radius: 10rpx; |
| | |
| | | color: #fff; |
| | | line-height: 32rpx; |
| | | font-size: 24rpx; |
| | | background: #1769d8; |
| | | background: var(--color-primary, #1769d8); |
| | | border-radius: 50%; |
| | | } |
| | | .fab:after, |
| | |
| | | .editorHead text:last-child { |
| | | font-size: 25rpx; |
| | | font-weight: 400; |
| | | color: #1769d8; |
| | | color: var(--color-primary, #1769d8); |
| | | } |
| | | .field { |
| | | min-height: 92rpx; |
| | |
| | | } |
| | | .attachmentHead text:last-child, |
| | | .attachment text:first-child { |
| | | color: #1769d8; |
| | | color: var(--color-primary, #1769d8); |
| | | } |
| | | .attachment { |
| | | padding: 16rpx 0; |
| | |
| | | .save { |
| | | margin: 30rpx 0; |
| | | color: #fff; |
| | | background: #1769d8; |
| | | background: var(--color-primary, #1769d8); |
| | | border-radius: 14rpx; |
| | | } |
| | | .dialog { |
| | |
| | | } |
| | | .dialogActions .confirm { |
| | | color: #fff; |
| | | background: #1769d8; |
| | | border-color: #1769d8; |
| | | background: var(--color-primary, #1769d8); |
| | | border-color: var(--color-primary, #1769d8); |
| | | } |
| | | .fab-plus { |
| | | position: relative; |
| | |
| | | font-size: 27rpx; |
| | | } |
| | | .search text { |
| | | color: #1769d8; |
| | | color: var(--color-primary, #1769d8); |
| | | font-size: 24rpx; |
| | | } |
| | | .content { |
| | | height: 0; |
| | | flex: 1; |
| | | padding-bottom: 150rpx; |
| | | padding-bottom: 132rpx; |
| | | } |
| | | .card { |
| | | padding: 24rpx; |
| | |
| | | border-radius: 8rpx; |
| | | } |
| | | .type-1 { |
| | | color: #165dff; |
| | | color: var(--color-primary, #165dff); |
| | | background: #e8f1ff; |
| | | } |
| | | .type-2 { |
| | |
| | | padding: 0 20rpx; |
| | | min-height: 54rpx; |
| | | line-height: 52rpx; |
| | | color: #1769d8; |
| | | color: var(--color-primary, #1769d8); |
| | | background: #f4f8ff; |
| | | border: 1rpx solid #9fbee9; |
| | | border-radius: 10rpx; |
| | |
| | | color: #fff; |
| | | line-height: 32rpx; |
| | | font-size: 24rpx; |
| | | background: #1769d8; |
| | | background: var(--color-primary, #1769d8); |
| | | border-radius: 50%; |
| | | box-shadow: 0 12rpx 24rpx #1769d855; |
| | | box-shadow: 0 12rpx 24rpx var(--color-primary, #1769d8)55; |
| | | } |
| | | .fab:after, |
| | | .save:after { |
| | |
| | | .editorHead text:last-child { |
| | | font-size: 25rpx; |
| | | font-weight: 400; |
| | | color: #1769d8; |
| | | color: var(--color-primary, #1769d8); |
| | | } |
| | | .field { |
| | | min-height: 92rpx; |
| | |
| | | .save { |
| | | margin: 30rpx 0; |
| | | color: #fff; |
| | | background: #1769d8; |
| | | background: var(--color-primary, #1769d8); |
| | | border-radius: 14rpx; |
| | | } |
| | | .fab-plus { |
| | |
| | | } |
| | | .search text { |
| | | margin-left: 16rpx; |
| | | color: #1769d8; |
| | | color: var(--color-primary, #1769d8); |
| | | font-size: 23rpx; |
| | | } |
| | | .search .remind { |
| | |
| | | .content { |
| | | height: 0; |
| | | flex: 1; |
| | | padding-bottom: 150rpx; |
| | | padding-bottom: 132rpx; |
| | | } |
| | | .card { |
| | | padding: 24rpx; |
| | |
| | | border-radius: 8rpx; |
| | | } |
| | | .type-1 { |
| | | color: #165dff; |
| | | color: var(--color-primary, #165dff); |
| | | background: #e8f1ff; |
| | | } |
| | | .type-2 { |
| | |
| | | .attachmentLinks text { |
| | | max-width: 260rpx; |
| | | overflow: hidden; |
| | | color: #1769d8; |
| | | color: var(--color-primary, #1769d8); |
| | | text-overflow: ellipsis; |
| | | white-space: nowrap; |
| | | } |
| | |
| | | padding: 0 20rpx; |
| | | min-height: 54rpx; |
| | | line-height: 52rpx; |
| | | color: #1769d8; |
| | | color: var(--color-primary, #1769d8); |
| | | background: #f4f8ff; |
| | | border: 1rpx solid #9fbee9; |
| | | border-radius: 10rpx; |
| | |
| | | color: #fff; |
| | | line-height: 32rpx; |
| | | font-size: 24rpx; |
| | | background: #1769d8; |
| | | background: var(--color-primary, #1769d8); |
| | | border-radius: 50%; |
| | | } |
| | | .fab:after, |
| | |
| | | .editorHead text:last-child { |
| | | font-size: 25rpx; |
| | | font-weight: 400; |
| | | color: #1769d8; |
| | | color: var(--color-primary, #1769d8); |
| | | } |
| | | .field { |
| | | min-height: 92rpx; |
| | |
| | | } |
| | | .attachmentHead > text:last-child, |
| | | .attachment > text:last-child { |
| | | color: #1769d8; |
| | | color: var(--color-primary, #1769d8); |
| | | } |
| | | .attachment { |
| | | margin-top: 18rpx; |
| | |
| | | .save { |
| | | margin: 30rpx 0; |
| | | color: #fff; |
| | | background: #1769d8; |
| | | background: var(--color-primary, #1769d8); |
| | | border-radius: 14rpx; |
| | | } |
| | | .fab-plus { |
| | |
| | | font-size: 26rpx; |
| | | } |
| | | .search text { |
| | | color: #1769d8; |
| | | color: var(--color-primary, #1769d8); |
| | | font-size: 24rpx; |
| | | } |
| | | .content { |
| | | height: 0; |
| | | flex: 1; |
| | | padding-bottom: 150rpx; |
| | | padding-bottom: 132rpx; |
| | | } |
| | | .card { |
| | | padding: 24rpx; |
| | |
| | | } |
| | | .grade { |
| | | padding: 4rpx 12rpx; |
| | | color: #1769d8; |
| | | background: #eef5ff; |
| | | color: var(--color-primary, #1769d8); |
| | | background: var(--color-primary-soft, #eef5ff); |
| | | border-radius: 8rpx; |
| | | font-size: 22rpx; |
| | | } |
| | |
| | | padding: 0 20rpx; |
| | | min-height: 54rpx; |
| | | line-height: 52rpx; |
| | | color: #1769d8; |
| | | color: var(--color-primary, #1769d8); |
| | | background: #f4f8ff; |
| | | border: 1rpx solid #9fbee9; |
| | | border-radius: 10rpx; |
| | |
| | | color: #fff; |
| | | line-height: 32rpx; |
| | | font-size: 24rpx; |
| | | background: #1769d8; |
| | | background: var(--color-primary, #1769d8); |
| | | border-radius: 50%; |
| | | } |
| | | .fab:after, |
| | |
| | | .editorHead text:last-child { |
| | | font-size: 25rpx; |
| | | font-weight: 400; |
| | | color: #1769d8; |
| | | color: var(--color-primary, #1769d8); |
| | | } |
| | | .field { |
| | | min-height: 92rpx; |
| | |
| | | .save { |
| | | margin: 30rpx 0; |
| | | color: #fff; |
| | | background: #1769d8; |
| | | background: var(--color-primary, #1769d8); |
| | | border-radius: 14rpx; |
| | | } |
| | | </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{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} |
| | | .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:var(--color-primary, #1769d8);font-size:24rpx}.content{height:0;flex:1;padding-bottom: 132rpx;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:var(--color-primary, #1769d8);font-size:22rpx;line-height:48rpx;background:var(--color-primary-soft, #f5f8ff);border:1rpx solid var(--color-primary-border, #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: 104rpx; height: 104rpx; min-height: 104rpx;padding:0;margin:0;background:var(--color-primary, #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:var(--color-primary, #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{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} |
| | | .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:var(--color-primary, #1769d8);font-size:24rpx}.content{height:0;flex:1;padding-bottom: 132rpx;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:var(--color-primary, #1769d8);font-size:22rpx;line-height:48rpx;background:var(--color-primary-soft, #f5f8ff);border:1rpx solid var(--color-primary-border, #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: 104rpx; height: 104rpx; min-height: 104rpx;padding:0;margin:0;background:var(--color-primary, #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:var(--color-primary, #1769d8);font-size:22rpx;line-height:1.25;background:#fff;border:1rpx solid var(--color-primary-border, #8ab3ee);border-radius:50%;box-shadow:0 10rpx 24rpx rgba(43,69,107,.16)}.config-fab text{display:block;color:var(--color-primary, #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:var(--color-primary, #1769d8);font-size:23rpx;line-height:50rpx;background:var(--color-primary-soft, #f5f8ff);border:1rpx solid var(--color-primary-border, #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:var(--color-primary, #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{min-height:100vh;padding:20rpx 24rpx 60rpx;box-sizing:border-box;background:#f3f6fb}.form-card{margin-bottom:18rpx;background:#fff;border-radius:16rpx;overflow:hidden}.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,.section button,.line-head button,.detail-actions button,.line-bottom 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}.section{display:flex;align-items:center;justify-content:space-between;height:82rpx;padding:0 22rpx;color:#10233f;font-size:30rpx;font-weight:600}.line{margin:0 18rpx 18rpx;border:1rpx solid #edf1f6;border-radius:12rpx;overflow:hidden}.line-head{display:flex;align-items:center;justify-content:space-between;padding:16rpx 18rpx;color:#10233f;font-size:27rpx;font-weight:600;background:#f9fbff}.line-head>view{display:flex;gap:10rpx}.grid{display:grid;gap:10rpx;padding:16rpx 18rpx;color:#66778c;font-size:23rpx;border-top:1rpx solid #edf1f6}.grid text{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.danger{color:#c65050!important;background:#fff7f7!important;border-color:#e3a0a0!important}.details{padding:10rpx 18rpx 16rpx;border-top:1rpx solid #edf1f6}.stock-title{color:#10233f;font-size:26rpx;font-weight:600}.detail-row{display:flex;align-items:flex-start;justify-content:space-between;gap:14rpx;padding:14rpx 0;color:#66778c;font-size:23rpx;border-bottom:1rpx solid #f2f4f8}.detail-row>view:first-child{display:flex;min-width:0;flex:1;flex-direction:column;gap:8rpx}.detail-actions{display:flex;flex:none;align-items:center;justify-content:flex-end;gap:10rpx}.line-bottom{display:flex;justify-content:flex-end;padding:0 18rpx 18rpx}.empty{padding:34rpx;color:#8795a8;font-size:25rpx;text-align:center}.empty.small{padding:18rpx}.save,.submit{width:100%;height:78rpx;margin:18rpx 0 0;color:#fff;font-size:28rpx;line-height:78rpx;background:#1769d8;border-radius:10rpx}.submit{background:#16a36f}.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}.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}.code-field button::after,.section button::after,.line-head button::after,.detail-actions button::after,.save::after,.submit::after,.modal-actions button::after,.line-bottom button::after{border:0} |
| | | .page{min-height:100vh;padding:20rpx 24rpx 60rpx;box-sizing:border-box;background:#f3f6fb}.form-card{margin-bottom:18rpx;background:#fff;border-radius:16rpx;overflow:hidden}.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,.section button,.line-head button,.detail-actions button,.line-bottom button{height:52rpx;min-height:52rpx;padding:0 16rpx;margin:0;color:var(--color-primary, #1769d8);font-size:23rpx;line-height:50rpx;background:var(--color-primary-soft, #f5f8ff);border:1rpx solid var(--color-primary-border, #8ab3ee);border-radius:8rpx}.section{display:flex;align-items:center;justify-content:space-between;height:82rpx;padding:0 22rpx;color:#10233f;font-size:30rpx;font-weight:600}.line{margin:0 18rpx 18rpx;border:1rpx solid #edf1f6;border-radius:12rpx;overflow:hidden}.line-head{display:flex;align-items:center;justify-content:space-between;padding:16rpx 18rpx;color:#10233f;font-size:27rpx;font-weight:600;background:#f9fbff}.line-head>view{display:flex;gap:10rpx}.grid{display:grid;gap:10rpx;padding:16rpx 18rpx;color:#66778c;font-size:23rpx;border-top:1rpx solid #edf1f6}.grid text{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.danger{color:#c65050!important;background:#fff7f7!important;border-color:#e3a0a0!important}.details{padding:10rpx 18rpx 16rpx;border-top:1rpx solid #edf1f6}.stock-title{color:#10233f;font-size:26rpx;font-weight:600}.detail-row{display:flex;align-items:flex-start;justify-content:space-between;gap:14rpx;padding:14rpx 0;color:#66778c;font-size:23rpx;border-bottom:1rpx solid #f2f4f8}.detail-row>view:first-child{display:flex;min-width:0;flex:1;flex-direction:column;gap:8rpx}.detail-actions{display:flex;flex:none;align-items:center;justify-content:flex-end;gap:10rpx}.line-bottom{display:flex;justify-content:flex-end;padding:0 18rpx 18rpx}.empty{padding:34rpx;color:#8795a8;font-size:25rpx;text-align:center}.empty.small{padding:18rpx}.save,.submit{width:100%;height:78rpx;margin:18rpx 0 0;color:#fff;font-size:28rpx;line-height:78rpx;background:var(--color-primary, #1769d8);border-radius:10rpx}.submit{background:#16a36f}.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}.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:var(--color-primary, #1769d8)}.code-field button::after,.section button::after,.line-head button::after,.detail-actions button::after,.save::after,.submit::after,.modal-actions button::after,.line-bottom 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-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} |
| | | .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:var(--color-primary, #1769d8);font-size:24rpx}.content{height:0;flex:1;padding-bottom: 132rpx;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:var(--color-primary, #1769d8);background:var(--color-primary-soft, #edf5ff);border:1rpx solid var(--color-primary-border, #bfdbff)}.tag-progress{color:#b57800;background:#fff7dd;border:1rpx solid #f3dc98}.tag-approved{color:var(--color-primary, #1769d8);background:var(--color-primary-soft, #edf5ff);border:1rpx solid var(--color-primary-border, #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:var(--color-primary, #1769d8);font-size:22rpx;line-height:48rpx;background:var(--color-primary-soft, #f5f8ff);border:1rpx solid var(--color-primary-border, #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: 104rpx; height: 104rpx; min-height: 104rpx;padding:0;margin:0;background:var(--color-primary, #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{min-height:100vh;padding:24rpx 30rpx 70rpx;background:#f6f7f9}.form-card{overflow:hidden;margin-bottom:20rpx;background:#fff;border-radius:16rpx}.field{display:flex;align-items:center;min-height:96rpx;padding:0 24rpx;gap:20rpx;border-bottom:1rpx solid #eef1f5}.field>text:first-child{width:190rpx;flex:none;color:#33455d;font-size:27rpx}.field>picker{display:block;flex:1;min-width:0}.field input,.picker,.value{min-width:0;flex:1;color:#1e3049;font-size:27rpx;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:36rpx;text-align:right}.code-field button,.section button,.line-head button,.stock-actions button{flex:none;min-width:112rpx;padding:0 16rpx;margin:0;color:#1769d8;font-size:24rpx;line-height:56rpx;background:#fff;border:1rpx solid #1769d8;border-radius:8rpx}.column{align-items:flex-start;flex-direction:column;padding:20rpx 24rpx}.column>text:first-child{width:auto}.column textarea{width:100%;height:130rpx;font-size:27rpx}.section,.line-head{display:flex;align-items:center;justify-content:space-between;min-height:82rpx;padding:0 24rpx;color:#1d2f46;font-size:28rpx;font-weight:600;border-bottom:1rpx solid #eef1f5}.line{margin:20rpx;border:1rpx solid #eef1f5;border-radius:14rpx;overflow:hidden}.danger{color:#c65050!important;border-color:#e3a0a0!important}.empty{padding:32rpx;color:#8795a8;font-size:25rpx;text-align:center}.empty.small{padding:20rpx}.save,.submit{margin-top:24rpx;color:#fff;font-size:30rpx;background:#1769d8;border-radius:12rpx}.submit{background:#12a06a}.stock-details{padding:18rpx 24rpx 22rpx;background:#fbfcff;border-top:1rpx solid #eef1f5}.stock-title{display:flex;align-items:center;justify-content:space-between;margin-bottom:14rpx;color:#1d2f46;font-size:27rpx;font-weight:600}.stock-row{padding:16rpx 0;border-top:1rpx solid #edf1f6}.stock-row:first-of-type{border-top:0}.stock-info{display:grid;grid-template-columns:1fr 1fr;gap:10rpx 18rpx;color:#40536c;font-size:25rpx}.stock-info text{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.stock-actions{display:flex;justify-content:flex-end;gap:12rpx;margin-top:14rpx}.mask{position:fixed;left:0;right:0;top:0;bottom:0;z-index:20;display:flex;align-items:flex-end;background:rgba(20,32,48,.45)}.stock-select-mask{z-index:30}.modal{width:100%;max-height:86vh;overflow:auto;padding-bottom:30rpx;background:#fff;border-radius:24rpx 24rpx 0 0}.modal-title{height:96rpx;line-height:96rpx;text-align:center;color:#122033;font-size:30rpx;font-weight:700;border-bottom:1rpx solid #eef1f5}.select-search{display:flex;align-items:center;height:76rpx;margin:18rpx 24rpx 0;padding:0 18rpx;gap:18rpx;background:#f6f8fb;border-radius:14rpx}.select-search input{min-width:0;flex:1;color:#1e3049;font-size:26rpx}.select-search text{flex:none;color:#1769d8;font-size:24rpx}.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}.modal-actions{display:flex;gap:18rpx;padding:24rpx}.modal-actions button{flex:1;margin:0;color:#1769d8;background:#fff;border:1rpx solid #1769d8;border-radius:12rpx}.modal-actions .primary{color:#fff;background:#1769d8}.save::after,.submit::after,button::after{border:0} |
| | | .page{min-height:100vh;padding:24rpx 30rpx 70rpx;background:#f6f7f9}.form-card{overflow:hidden;margin-bottom:20rpx;background:#fff;border-radius:16rpx}.field{display:flex;align-items:center;min-height:96rpx;padding:0 24rpx;gap:20rpx;border-bottom:1rpx solid #eef1f5}.field>text:first-child{width:190rpx;flex:none;color:#33455d;font-size:27rpx}.field>picker{display:block;flex:1;min-width:0}.field input,.picker,.value{min-width:0;flex:1;color:#1e3049;font-size:27rpx;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:36rpx;text-align:right}.code-field button,.section button,.line-head button,.stock-actions button{flex:none;min-width:112rpx;padding:0 16rpx;margin:0;color:var(--color-primary, #1769d8);font-size:24rpx;line-height:56rpx;background:#fff;border:1rpx solid var(--color-primary, #1769d8);border-radius:8rpx}.column{align-items:flex-start;flex-direction:column;padding:20rpx 24rpx}.column>text:first-child{width:auto}.column textarea{width:100%;height:130rpx;font-size:27rpx}.section,.line-head{display:flex;align-items:center;justify-content:space-between;min-height:82rpx;padding:0 24rpx;color:#1d2f46;font-size:28rpx;font-weight:600;border-bottom:1rpx solid #eef1f5}.line{margin:20rpx;border:1rpx solid #eef1f5;border-radius:14rpx;overflow:hidden}.danger{color:#c65050!important;border-color:#e3a0a0!important}.empty{padding:32rpx;color:#8795a8;font-size:25rpx;text-align:center}.empty.small{padding:20rpx}.save,.submit{margin-top:24rpx;color:#fff;font-size:30rpx;background:var(--color-primary, #1769d8);border-radius:12rpx}.submit{background:#12a06a}.stock-details{padding:18rpx 24rpx 22rpx;background:#fbfcff;border-top:1rpx solid #eef1f5}.stock-title{display:flex;align-items:center;justify-content:space-between;margin-bottom:14rpx;color:#1d2f46;font-size:27rpx;font-weight:600}.stock-row{padding:16rpx 0;border-top:1rpx solid #edf1f6}.stock-row:first-of-type{border-top:0}.stock-info{display:grid;grid-template-columns:1fr 1fr;gap:10rpx 18rpx;color:#40536c;font-size:25rpx}.stock-info text{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.stock-actions{display:flex;justify-content:flex-end;gap:12rpx;margin-top:14rpx}.mask{position:fixed;left:0;right:0;top:0;bottom:0;z-index:20;display:flex;align-items:flex-end;background:rgba(20,32,48,.45)}.stock-select-mask{z-index:30}.modal{width:100%;max-height:86vh;overflow:auto;padding-bottom:30rpx;background:#fff;border-radius:24rpx 24rpx 0 0}.modal-title{height:96rpx;line-height:96rpx;text-align:center;color:#122033;font-size:30rpx;font-weight:700;border-bottom:1rpx solid #eef1f5}.select-search{display:flex;align-items:center;height:76rpx;margin:18rpx 24rpx 0;padding:0 18rpx;gap:18rpx;background:#f6f8fb;border-radius:14rpx}.select-search input{min-width:0;flex:1;color:#1e3049;font-size:26rpx}.select-search text{flex:none;color:var(--color-primary, #1769d8);font-size:24rpx}.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}.modal-actions{display:flex;gap:18rpx;padding:24rpx}.modal-actions button{flex:1;margin:0;color:var(--color-primary, #1769d8);background:#fff;border:1rpx solid var(--color-primary, #1769d8);border-radius:12rpx}.modal-actions .primary{color:#fff;background:var(--color-primary, #1769d8)}.save::after,.submit::after,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}.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} |
| | | .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:var(--color-primary, #1769d8);font-size:24rpx}.toolbar{display:flex;justify-content:flex-end;padding-bottom:16rpx}.toolbar button{height:62rpx;padding:0 22rpx;margin:0;color:var(--color-primary, #1769d8);font-size:24rpx;line-height:62rpx;background:#fff;border:1rpx solid var(--color-primary-border, #8ab3ee);border-radius:12rpx}.content{height:0;flex:1;padding-bottom: 132rpx;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:var(--color-primary, #1769d8);background:var(--color-primary-soft, #edf5ff);border:1rpx solid var(--color-primary-border, #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:var(--color-primary, #1769d8);font-size:22rpx;line-height:48rpx;background:var(--color-primary-soft, #f5f8ff);border:1rpx solid var(--color-primary-border, #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: 104rpx; height: 104rpx; min-height: 104rpx;padding:0;margin:0;background:var(--color-primary, #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:var(--color-primary, #1769d8);background:#fff;border-radius:12rpx} |
| | | </style> |
| | |
| | | min-height: 52rpx; |
| | | padding: 0 16rpx; |
| | | margin: 0; |
| | | color: #1769d8; |
| | | color: var(--color-primary, #1769d8); |
| | | font-size: 23rpx; |
| | | line-height: 50rpx; |
| | | background: #f5f8ff; |
| | | border: 1rpx solid #8ab3ee; |
| | | background: var(--color-primary-soft, #f5f8ff); |
| | | border: 1rpx solid var(--color-primary-border, #8ab3ee); |
| | | border-radius: 8rpx; |
| | | } |
| | | .code-field button::after, |
| | |
| | | color: #fff; |
| | | font-size: 28rpx; |
| | | line-height: 78rpx; |
| | | background: #1769d8; |
| | | background: var(--color-primary, #1769d8); |
| | | border-radius: 10rpx; |
| | | } |
| | | .submit { |
| | |
| | | } |
| | | .modal-actions .primary { |
| | | color: #fff; |
| | | background: #1769d8; |
| | | background: var(--color-primary, #1769d8); |
| | | } |
| | | </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{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} |
| | | .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:var(--color-primary, #1769d8);font-size:24rpx}.content{height:0;flex:1;padding-bottom: 132rpx;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:var(--color-primary, #1769d8);background:var(--color-primary-soft, #edf5ff);border:1rpx solid var(--color-primary-border, #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:var(--color-primary, #1769d8);font-size:22rpx;line-height:48rpx;background:var(--color-primary-soft, #f5f8ff);border:1rpx solid var(--color-primary-border, #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: 104rpx; height: 104rpx; min-height: 104rpx;padding:0;margin:0;background:var(--color-primary, #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{min-height:100vh;padding:20rpx 24rpx 60rpx;box-sizing:border-box;background:#f3f6fb}.form-card{margin-bottom:18rpx;background:#fff;border-radius:16rpx;overflow:hidden}.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:180rpx;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,.section button,.line-head button,.detail-actions 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}.code-field button::after,.section button::after,.line-head button::after,.detail-actions button::after,.save::after,.submit::after,.modal-actions button::after{border:0}.section{display:flex;align-items:center;justify-content:space-between;height:82rpx;padding:0 22rpx;color:#10233f;font-size:30rpx;font-weight:600}.line-card{margin:0 18rpx 18rpx;border:1rpx solid #edf1f6;border-radius:12rpx;overflow:hidden}.line-head{display:flex;align-items:center;justify-content:space-between;padding:16rpx 18rpx;color:#10233f;font-size:27rpx;font-weight:600;background:#f9fbff}.line-head>view{display:flex;gap:10rpx}.danger{color:#c65050!important;background:#fff7f7!important;border-color:#e3a0a0!important}.detail-list{padding:10rpx 18rpx 16rpx;border-top:1rpx solid #edf1f6}.detail-row{display:flex;align-items:flex-start;justify-content:space-between;gap:14rpx;padding:14rpx 0;color:#66778c;font-size:23rpx;border-bottom:1rpx solid #f2f4f8}.detail-info{display:flex;min-width:0;flex:1;flex-direction:column;gap:8rpx}.detail-info text{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.detail-actions{display:flex;flex:none;align-items:center;justify-content:flex-end;gap:10rpx}.detail-actions button{width:84rpx;padding:0}.empty{padding:34rpx;color:#8795a8;font-size:25rpx;text-align:center}.save,.submit{width:100%;height:78rpx;margin:18rpx 0 0;color:#fff;font-size:28rpx;line-height:78rpx;background:#1769d8;border-radius:10rpx}.submit{background:#16a36f}.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;padding:0 24rpx 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}.modal-actions{display:flex;gap:18rpx;padding-top:24rpx}.modal-actions button{flex:1;height:72rpx;line-height:72rpx;font-size:27rpx;border-radius:10rpx}.modal-actions .primary{color:#fff;background:#1769d8} |
| | | .page{min-height:100vh;padding:20rpx 24rpx 60rpx;box-sizing:border-box;background:#f3f6fb}.form-card{margin-bottom:18rpx;background:#fff;border-radius:16rpx;overflow:hidden}.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:180rpx;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,.section button,.line-head button,.detail-actions button{height:52rpx;min-height:52rpx;padding:0 16rpx;margin:0;color:var(--color-primary, #1769d8);font-size:23rpx;line-height:50rpx;background:var(--color-primary-soft, #f5f8ff);border:1rpx solid var(--color-primary-border, #8ab3ee);border-radius:8rpx}.code-field button::after,.section button::after,.line-head button::after,.detail-actions button::after,.save::after,.submit::after,.modal-actions button::after{border:0}.section{display:flex;align-items:center;justify-content:space-between;height:82rpx;padding:0 22rpx;color:#10233f;font-size:30rpx;font-weight:600}.line-card{margin:0 18rpx 18rpx;border:1rpx solid #edf1f6;border-radius:12rpx;overflow:hidden}.line-head{display:flex;align-items:center;justify-content:space-between;padding:16rpx 18rpx;color:#10233f;font-size:27rpx;font-weight:600;background:#f9fbff}.line-head>view{display:flex;gap:10rpx}.danger{color:#c65050!important;background:#fff7f7!important;border-color:#e3a0a0!important}.detail-list{padding:10rpx 18rpx 16rpx;border-top:1rpx solid #edf1f6}.detail-row{display:flex;align-items:flex-start;justify-content:space-between;gap:14rpx;padding:14rpx 0;color:#66778c;font-size:23rpx;border-bottom:1rpx solid #f2f4f8}.detail-info{display:flex;min-width:0;flex:1;flex-direction:column;gap:8rpx}.detail-info text{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.detail-actions{display:flex;flex:none;align-items:center;justify-content:flex-end;gap:10rpx}.detail-actions button{width:84rpx;padding:0}.empty{padding:34rpx;color:#8795a8;font-size:25rpx;text-align:center}.save,.submit{width:100%;height:78rpx;margin:18rpx 0 0;color:#fff;font-size:28rpx;line-height:78rpx;background:var(--color-primary, #1769d8);border-radius:10rpx}.submit{background:#16a36f}.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;padding:0 24rpx 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}.modal-actions{display:flex;gap:18rpx;padding-top:24rpx}.modal-actions button{flex:1;height:72rpx;line-height:72rpx;font-size:27rpx;border-radius:10rpx}.modal-actions .primary{color:#fff;background:var(--color-primary, #1769d8)} |
| | | </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{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} |
| | | .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:var(--color-primary, #1769d8);font-size:24rpx}.content{height:0;flex:1;padding-bottom: 132rpx;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:var(--color-primary, #1769d8);background:var(--color-primary-soft, #edf5ff);border:1rpx solid var(--color-primary-border, #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:var(--color-primary, #1769d8);font-size:22rpx;line-height:48rpx;background:var(--color-primary-soft, #f5f8ff);border:1rpx solid var(--color-primary-border, #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: 104rpx; height: 104rpx; min-height: 104rpx;padding:0;margin:0;background:var(--color-primary, #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> |
| | |
| | | <view v-if="showAdjust" class="mask"><view class="modal"><view class="modal-title">åºåè°æ´</view><view class="field"><text>è°æ´ç±»å <text class="required">*</text></text><picker :range="['èªå®ä¹å
¥åº','èªå®ä¹åºåº']" @change="adjustForm.type=Number($event.detail.value)===0?'in':'out'"><view class="picker"><text>{{adjustForm.type==='in'?'èªå®ä¹å
¥åº':'èªå®ä¹åºåº'}}</text><text>âº</text></view></picker></view><view class="field"><text>ç©æ <text class="required">*</text></text><picker :range="materialOptions" @change="pickMaterial"><view class="picker"><text>{{materialName(materials.find(i=>i.id===adjustForm.itemId))}}</text><text>âº</text></view></picker></view><view v-if="batchManaged()" class="field"><text>æå¨å¡«åæ¹æ¬¡å·</text><switch :checked="adjustForm.manualBatchEntry" @change="adjustForm.manualBatchEntry=$event.detail.value" /></view><view v-if="batchManaged()&&adjustForm.manualBatchEntry" class="field"><text>æ¹æ¬¡å·</text><input v-model="adjustForm.batchCode" placeholder="请è¾å
¥æ¹æ¬¡å·" /></view><view v-if="showBatchField('produceDateFlag')" class="field"><text>çäº§æ¥æ <text class="required">*</text></text><picker mode="date" :value="adjustForm.produceDate" @change="adjustForm.produceDate=$event.detail.value"><view class="picker"><text>{{adjustForm.produceDate||'è¯·éæ©çäº§æ¥æ'}}</text><text>âº</text></view></picker></view><view v-if="showBatchField('expireDateFlag')" class="field"><text>æææè³ <text class="required">*</text></text><picker mode="date" :value="adjustForm.expireDate" @change="adjustForm.expireDate=$event.detail.value"><view class="picker"><text>{{adjustForm.expireDate||'è¯·éæ©æææ'}}</text><text>âº</text></view></picker></view><view v-if="showBatchField('receiptDateFlag')" class="field"><text>å
¥åºæ¥æ <text class="required">*</text></text><picker mode="date" :value="adjustForm.receiptDate" @change="adjustForm.receiptDate=$event.detail.value"><view class="picker"><text>{{adjustForm.receiptDate||'è¯·éæ©å
¥åºæ¥æ'}}</text><text>âº</text></view></picker></view><view v-if="adjustForm.type==='out'||!batchManaged()||!!selectedMaterial?.vendorFlag" class="field"><text>ä¾åºå</text><picker :range="supplierOptions" @change="pickSupplier"><view class="picker"><text>{{supplierOptions[suppliers.findIndex(i=>i.id===adjustForm.vendorId)]||'è¯·éæ©ä¾åºå'}}</text><text>âº</text></view></picker></view><view v-if="showBatchField('purchaseOrderCodeFlag')" class="field"><text>éè´è®¢åå· <text class="required">*</text></text><input v-model="adjustForm.purchaseOrderCode" placeholder="请è¾å
¥éè´è®¢åå·" /></view><view v-if="showBatchField('lotNumberFlag')" class="field"><text>ç产æ¹å· <text class="required">*</text></text><input v-model="adjustForm.lotNumber" placeholder="请è¾å
¥ç产æ¹å·" /></view><view v-if="showBatchField('qualityStatusFlag')" class="field"><text>è´¨éç¶æ <text class="required">*</text></text><picker :range="['åæ ¼','ä¸åæ ¼','å¾
æ£']" @change="adjustForm.qualityStatus=['QUALIFIED','UNQUALIFIED','PENDING'][Number($event.detail.value)]"><view class="picker"><text>{{adjustForm.qualityStatus==='QUALIFIED'?'åæ ¼':adjustForm.qualityStatus==='UNQUALIFIED'?'ä¸åæ ¼':adjustForm.qualityStatus==='PENDING'?'å¾
æ£':'è¯·éæ©è´¨éç¶æ'}}</text><text>âº</text></view></picker></view><view class="field"><text>ä»åº <text class="required">*</text></text><picker :range="warehouseOptions" @change="pickWarehouse($event,'adjust')"><view class="picker"><text>{{warehouseOptions[warehouses.findIndex(i=>i.id===adjustForm.warehouseId)]||'è¯·éæ©ä»åº'}}</text><text>âº</text></view></picker></view><view class="field"><text>åºåº <text class="required">*</text></text><picker :range="locationOptions" @change="pickLocation($event,'adjust')"><view class="picker"><text>{{locationOptions[locations.findIndex(i=>i.id===adjustForm.locationId)]||'è¯·éæ©åºåº'}}</text><text>âº</text></view></picker></view><view class="field"><text>åºä½ <text class="required">*</text></text><picker :range="areaOptions" @change="pickArea($event,'adjust')"><view class="picker"><text>{{areaOptions[areas.findIndex(i=>i.id===adjustForm.areaId)]||'è¯·éæ©åºä½'}}</text><text>âº</text></view></picker></view><view v-if="adjustForm.type==='out'&&!batchManaged()" class="field"><text>æ¹æ¬¡å·</text><input v-model="adjustForm.batchCode" placeholder="请è¾å
¥æ¹æ¬¡å·" /></view><view class="field"><text>æ°é <text class="required">*</text></text><input :value="String(adjustForm.quantity||'')" type="digit" placeholder="请è¾å
¥æ°é" @input="adjustForm.quantity=Number($event.detail.value)||0" /></view><view class="field column"><text>åå </text><textarea v-model="adjustForm.reason" placeholder="请è¾å
¥åå " ></textarea></view><view class="modal-actions"><button @click="showAdjust=false">åæ¶</button><button class="primary" :loading="adjusting" @click="submitAdjust">确认</button></view></view></view> |
| | | </view></template> |
| | | <style lang="scss" scoped> |
| | | .page{height:100vh;display:flex;flex-direction:column;padding:0 20rpx;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}.body{height:0;flex:1;display:flex;gap:16rpx;min-height:0}.side{width:174rpx;flex:none;height:100%;background:#fff;border-radius:16rpx}.cat{min-height:72rpx;padding:0 16rpx;display:flex;align-items:center;color:#53677f;font-size:24rpx;border-bottom:1rpx solid #f1f4f8}.cat.active{color:#1769d8;font-weight:600;background:#edf5ff}.content{height:100%;flex:1;padding-bottom:90rpx;box-sizing:border-box}.tool{padding-bottom:14rpx}.tool button{height:62rpx;line-height:62rpx;margin:0;color:#1769d8;font-size:24rpx;background:#fff;border-radius:12rpx}.row{padding:22rpx 20rpx 18rpx;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:12rpx}.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}.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;justify-content:flex-end;gap:12rpx;padding-top:14rpx}.actions button{min-height:48rpx;padding:0 16rpx;margin:0;color:#1769d8;font-size:22rpx;line-height:46rpx;background:#f5f8ff;border:1rpx solid #8ab3ee;border-radius:8rpx}.more,.state{display:block;padding:35rpx;color:#8795a8;font-size:26rpx;text-align:center}.error{color:#c3654d}.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;text-align:center;color:#1d2f46;font-size:30rpx;font-weight:600;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}.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}.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 20rpx;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:var(--color-primary, #1769d8);font-size:24rpx}.body{height:0;flex:1;display:flex;gap:16rpx;min-height:0}.side{width:174rpx;flex:none;height:100%;background:#fff;border-radius:16rpx}.cat{min-height:72rpx;padding:0 16rpx;display:flex;align-items:center;color:#53677f;font-size:24rpx;border-bottom:1rpx solid #f1f4f8}.cat.active{color:var(--color-primary, #1769d8);font-weight:600;background:var(--color-primary-soft, #edf5ff)}.content{height:100%;flex:1;padding-bottom:90rpx;box-sizing:border-box}.tool{padding-bottom:14rpx}.tool button{height:62rpx;line-height:62rpx;margin:0;color:var(--color-primary, #1769d8);font-size:24rpx;background:#fff;border-radius:12rpx}.row{padding:22rpx 20rpx 18rpx;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:12rpx}.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}.tags{display:flex;gap:10rpx;margin-top:14rpx}.tags text{padding:4rpx 12rpx;color:var(--color-primary, #1769d8);font-size:22rpx;background:var(--color-primary-soft, #edf5ff);border:1rpx solid var(--color-primary-border, #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;justify-content:flex-end;gap:12rpx;padding-top:14rpx}.actions button{min-height:48rpx;padding:0 16rpx;margin:0;color:var(--color-primary, #1769d8);font-size:22rpx;line-height:46rpx;background:var(--color-primary-soft, #f5f8ff);border:1rpx solid var(--color-primary-border, #8ab3ee);border-radius:8rpx}.more,.state{display:block;padding:35rpx;color:#8795a8;font-size:26rpx;text-align:center}.error{color:#c3654d}.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;text-align:center;color:#1d2f46;font-size:30rpx;font-weight:600;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}.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}.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:var(--color-primary, #1769d8);background:var(--color-primary-soft, #edf5ff);border-radius:12rpx}.modal-actions .primary{color:#fff;background:var(--color-primary, #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}.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} |
| | | .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:var(--color-primary, #1769d8);font-size:24rpx}.content{height:0;flex:1;padding-bottom: 132rpx}.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:var(--color-primary, #1769d8);background:var(--color-primary-soft, #edf5ff);border:1rpx solid var(--color-primary-border, #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:var(--color-primary, #1769d8);font-size:22rpx;line-height:48rpx;background:var(--color-primary-soft, #f5f8ff);border:1rpx solid var(--color-primary-border, #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: 104rpx; height: 104rpx; min-height: 104rpx;padding:0;margin:0;background:var(--color-primary, #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:var(--color-primary, #1769d8);background:var(--color-primary-soft, #edf5ff);border-radius:12rpx}.modal-actions .primary{color:#fff;background:var(--color-primary, #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><view v-else class="state">ç»å½åæ¥çåºåäºå¡æµæ°´</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;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:80rpx;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{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}.qty-pos{color:#17865a;font-weight:600}.qty-neg{color:#c65050;font-weight:600}.grid{display:grid;gap:10rpx;padding-top:16rpx;margin-top:16rpx;color:#66778c;font-size:23rpx;border-top:1rpx solid #edf1f6}.grid text{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.more,.state{display:block;padding:35rpx;color:#8795a8;font-size:26rpx;text-align:center}.error{color:#c3654d} |
| | | .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:var(--color-primary, #1769d8);font-size:24rpx}.content{height:0;flex:1;padding-bottom:80rpx;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{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}.qty-pos{color:#17865a;font-weight:600}.qty-neg{color:#c65050;font-weight:600}.grid{display:grid;gap:10rpx;padding-top:16rpx;margin-top:16rpx;color:#66778c;font-size:23rpx;border-top:1rpx solid #edf1f6}.grid text{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.more,.state{display:block;padding:35rpx;color:#8795a8;font-size:26rpx;text-align:center}.error{color:#c3654d} |
| | | </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{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} |
| | | .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:var(--color-primary, #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:var(--color-primary, #1769d8);background:var(--color-primary-soft, #edf5ff);border:1rpx solid var(--color-primary-border, #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:var(--color-primary, #1769d8);font-size:22rpx;line-height:48rpx;background:var(--color-primary-soft, #f5f8ff);border:1rpx solid var(--color-primary-border, #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: 104rpx; height: 104rpx; min-height: 104rpx;padding:0;margin:0;background:var(--color-primary, #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:var(--color-primary, #1769d8);font-size:23rpx;line-height:54rpx;background:#fff;border:1rpx solid var(--color-primary, #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:var(--color-primary, #1769d8);background:var(--color-primary-soft, #edf5ff);border-radius:12rpx}.modal-actions .primary{color:#fff;background:var(--color-primary, #1769d8)}button::after{border:0} |
| | | </style> |
| | |
| | | </script> |
| | | <template><view class="page"><view class="form-card"><view class="field code-field"><text>ä»åºç¼ç <text class="required">*</text></text><input v-model="form.code" :disabled="readonly" placeholder="请è¾å
¥ä»åºç¼ç " /><button v-if="!readonly" :loading="generating" :disabled="generating" @click="generateCode">èªå¨çæ</button></view><view class="field"><text>ä»åºåç§° <text class="required">*</text></text><input v-model="form.name" :disabled="readonly" placeholder="请è¾å
¥ä»åºåç§°" /></view><view class="field"><text>è´è´£äºº</text><picker v-if="!readonly" :range="users" range-key="nickname" @change="selectUser"><view class="picker"><text>{{form.chargeUserName||'è¯·éæ©è´è´£äºº'}}</text><text>âº</text></view></picker><text v-else class="value">{{form.chargeUserName||form.chargeUserId||'--'}}</text></view><view class="field"><text>ä»åºå°å</text><input v-model="form.address" :disabled="readonly" placeholder="请è¾å
¥ä»åºå°å" /></view><view class="field"><text>é¢ç§¯ï¼ã¡ï¼</text><input :value="String(form.area||'')" :disabled="readonly" type="digit" placeholder="请è¾å
¥é¢ç§¯" @input="form.area=num($event.detail.value)" /></view><view class="field"><text>æ¯å¦å»ç»</text><switch :checked="form.frozen" :disabled="readonly" @change="form.frozen=$event.detail.value" /></view><view v-if="readonly" class="field"><text>å建æ¶é´</text><text class="value">{{dateText(form.createTime)}}</text></view><view class="field column"><text>夿³¨</text><textarea v-model="form.remark" :disabled="readonly" placeholder="请è¾å
¥å¤æ³¨" ></textarea></view></view><button v-if="canSave" class="save" :loading="saving" :disabled="saving" @click="save">ä¿å</button><button v-else-if="readonly&&hasPermission('mes:wm-warehouse:update')" class="save" @click="mode='edit'">ç¼è¾</button></view></template> |
| | | <style lang="scss" scoped> |
| | | .page{min-height:100vh;padding:24rpx 30rpx 70rpx;background:#f6f7f9}.form-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 #eef1f5}.field>text:first-child{width:190rpx;flex:none;color:#33455d;font-size:27rpx}.field>picker{display:block;flex:1;min-width:0}.field input,.picker,.value{min-width:0;flex:1;color:#1e3049;font-size:27rpx;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:36rpx;text-align:right}.code-field button{flex:none;min-width:136rpx;padding:0 16rpx;margin:0;color:#1769d8;font-size:24rpx;line-height:56rpx;background:#fff;border:1rpx solid #1769d8;border-radius:8rpx}.column{align-items:flex-start;flex-direction:column;padding:20rpx 24rpx}.column>text:first-child{width:auto}.column textarea{width:100%;height:130rpx;font-size:27rpx}.save{margin-top:32rpx;color:#fff;font-size:30rpx;background:#1769d8;border-radius:12rpx}.save::after,button::after{border:0} |
| | | .page{min-height:100vh;padding:24rpx 30rpx 70rpx;background:#f6f7f9}.form-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 #eef1f5}.field>text:first-child{width:190rpx;flex:none;color:#33455d;font-size:27rpx}.field>picker{display:block;flex:1;min-width:0}.field input,.picker,.value{min-width:0;flex:1;color:#1e3049;font-size:27rpx;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:36rpx;text-align:right}.code-field button{flex:none;min-width:136rpx;padding:0 16rpx;margin:0;color:var(--color-primary, #1769d8);font-size:24rpx;line-height:56rpx;background:#fff;border:1rpx solid var(--color-primary, #1769d8);border-radius:8rpx}.column{align-items:flex-start;flex-direction:column;padding:20rpx 24rpx}.column>text:first-child{width:auto}.column textarea{width:100%;height:130rpx;font-size:27rpx}.save{margin-top:32rpx;color:#fff;font-size:30rpx;background:var(--color-primary, #1769d8);border-radius:12rpx}.save::after,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{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} |
| | | .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:var(--color-primary, #1769d8);font-size:24rpx}.content{height:0;flex:1;padding-bottom: 132rpx;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:var(--color-primary, #1769d8);font-size:22rpx;line-height:48rpx;background:var(--color-primary-soft, #f5f8ff);border:1rpx solid var(--color-primary-border, #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: 104rpx; height: 104rpx; min-height: 104rpx;padding:0;margin:0;background:var(--color-primary, #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{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} |
| | | .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:var(--color-primary, #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:var(--color-primary, #1769d8);font-size:22rpx;line-height:48rpx;background:var(--color-primary-soft, #f5f8ff);border:1rpx solid var(--color-primary-border, #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: 104rpx; height: 104rpx; min-height: 104rpx;padding:0;margin:0;background:var(--color-primary, #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:var(--color-primary, #1769d8);font-size:23rpx;line-height:54rpx;background:#fff;border:1rpx solid var(--color-primary, #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:var(--color-primary, #1769d8);background:var(--color-primary-soft, #edf5ff);border-radius:12rpx}.modal-actions .primary{color:#fff;background:var(--color-primary, #1769d8)}button::after{border:0} |
| | | </style> |
| | |
| | | background: linear-gradient( |
| | | 180deg, |
| | | #dcecff 0, |
| | | #edf5ff 250rpx, |
| | | var(--color-primary-soft, #edf5ff) 250rpx, |
| | | #f4f7fb 455rpx |
| | | ); |
| | | } |
| | |
| | | min-height: 152rpx; |
| | | padding: 27rpx 28rpx; |
| | | color: #fff; |
| | | background: linear-gradient(135deg, #1769d8, #2b88ef); |
| | | background: linear-gradient(135deg, var(--color-primary, #1769d8), #2b88ef); |
| | | border: 1rpx solid rgba(255, 255, 255, 0.46); |
| | | border-radius: 24rpx; |
| | | box-shadow: 0 18rpx 32rpx rgba(23, 105, 216, 0.18); |
| | |
| | | font-size: 25rpx; |
| | | } |
| | | .search-box > text { |
| | | color: #1769d8; |
| | | color: var(--color-primary, #1769d8); |
| | | font-size: 21rpx; |
| | | } |
| | | .group-tabs { |
| | |
| | | .group-tab-list text.active { |
| | | color: #fff; |
| | | font-weight: 600; |
| | | background: #1769d8; |
| | | background: var(--color-primary, #1769d8); |
| | | box-shadow: 0 7rpx 14rpx rgba(23, 105, 216, 0.2); |
| | | } |
| | | .app-content { |
| | |
| | | left: 0; |
| | | width: 5rpx; |
| | | content: ""; |
| | | background: #1769d8; |
| | | background: var(--color-primary, #1769d8); |
| | | border-radius: 5rpx; |
| | | } |
| | | .section-heading > view text:first-child { |
| | |
| | | width: 28rpx; |
| | | height: 28rpx; |
| | | border: 3rpx solid #b7cae7; |
| | | border-top-color: #1769d8; |
| | | border-top-color: var(--color-primary, #1769d8); |
| | | border-radius: 50%; |
| | | animation: spin 0.8s linear infinite; |
| | | } |
| | |
| | | color: #fff; |
| | | font-size: 27rpx; |
| | | line-height: 84rpx; |
| | | background: #1769d8; |
| | | background: var(--color-primary, #1769d8); |
| | | border-radius: 42rpx; |
| | | } |
| | | @keyframes spin { |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | import { computed, readonly, ref } from "vue"; |
| | | |
| | | export type ThemeKey = "blue" | "green" | "purple"; |
| | | |
| | | export interface AppTheme { |
| | | key: ThemeKey; |
| | | name: string; |
| | | description: string; |
| | | primary: string; |
| | | primaryDark: string; |
| | | primaryLight: string; |
| | | primarySoft: string; |
| | | primaryBorder: string; |
| | | pageBackground: string; |
| | | cardBackground: string; |
| | | } |
| | | |
| | | export const THEME_STORAGE_KEY = "mom_app_theme"; |
| | | |
| | | export const appThemes: AppTheme[] = [ |
| | | { |
| | | key: "blue", |
| | | name: "åå¡è", |
| | | description: "æ¸
æ°ç¨³éï¼é忥叏åå
¬", |
| | | primary: "#1769d8", |
| | | primaryDark: "#0f54b8", |
| | | primaryLight: "#4b8ee8", |
| | | primarySoft: "#eef5ff", |
| | | primaryBorder: "#bfdbff", |
| | | pageBackground: "#f6f7f9", |
| | | cardBackground: "#ffffff", |
| | | }, |
| | | { |
| | | key: "green", |
| | | name: "ç产绿", |
| | | description: "æ²ç¨³èªç¶ï¼çªåºçäº§ç¶æ", |
| | | primary: "#16835d", |
| | | primaryDark: "#0f6949", |
| | | primaryLight: "#42a782", |
| | | primarySoft: "#eaf8f2", |
| | | primaryBorder: "#bdebd7", |
| | | pageBackground: "#f5f8f7", |
| | | cardBackground: "#ffffff", |
| | | }, |
| | | { |
| | | key: "purple", |
| | | name: "ç§æç´«", |
| | | description: "屿¬¡é²æï¼éåæ°æ®åºæ¯", |
| | | primary: "#7156c7", |
| | | primaryDark: "#5940ad", |
| | | primaryLight: "#927de0", |
| | | primarySoft: "#f3efff", |
| | | primaryBorder: "#d8ccff", |
| | | pageBackground: "#f7f6fa", |
| | | cardBackground: "#ffffff", |
| | | }, |
| | | ]; |
| | | |
| | | const defaultTheme = appThemes[0]; |
| | | const currentTheme = ref<AppTheme>(defaultTheme); |
| | | |
| | | function findTheme(key?: string) { |
| | | return appThemes.find((item) => item.key === key) || defaultTheme; |
| | | } |
| | | |
| | | function syncPlatformChrome(theme: AppTheme) { |
| | | uni.setNavigationBarColor({ |
| | | frontColor: "#000000", |
| | | backgroundColor: theme.cardBackground, |
| | | animation: { duration: 180, timingFunc: "easeIn" }, |
| | | fail: () => undefined, |
| | | }); |
| | | uni.setTabBarStyle({ |
| | | color: "#7a8494", |
| | | selectedColor: theme.primary, |
| | | backgroundColor: theme.cardBackground, |
| | | borderStyle: "white", |
| | | fail: () => undefined, |
| | | }); |
| | | } |
| | | |
| | | function syncCssVariables(theme: AppTheme) { |
| | | // #ifdef H5 |
| | | if (typeof document !== "undefined") { |
| | | const root = document.documentElement; |
| | | root.style.setProperty("--color-primary", theme.primary); |
| | | root.style.setProperty("--color-primary-dark", theme.primaryDark); |
| | | root.style.setProperty("--color-primary-light", theme.primaryLight); |
| | | root.style.setProperty("--color-primary-soft", theme.primarySoft); |
| | | root.style.setProperty("--color-primary-border", theme.primaryBorder); |
| | | root.style.setProperty("--color-bg-page", theme.pageBackground); |
| | | root.style.setProperty("--color-bg-card", theme.cardBackground); |
| | | } |
| | | // #endif |
| | | } |
| | | |
| | | export function applyTheme(theme: AppTheme) { |
| | | currentTheme.value = theme; |
| | | syncCssVariables(theme); |
| | | syncPlatformChrome(theme); |
| | | uni.$emit("app-theme-change", theme); |
| | | } |
| | | |
| | | export function restoreTheme() { |
| | | let savedKey: string | undefined; |
| | | try { |
| | | savedKey = uni.getStorageSync(THEME_STORAGE_KEY) || undefined; |
| | | } catch { |
| | | savedKey = undefined; |
| | | } |
| | | applyTheme(findTheme(savedKey)); |
| | | } |
| | | |
| | | export function setTheme(key: ThemeKey) { |
| | | const theme = findTheme(key); |
| | | uni.setStorageSync(THEME_STORAGE_KEY, theme.key); |
| | | applyTheme(theme); |
| | | } |
| | | |
| | | export function resetTheme() { |
| | | uni.removeStorageSync(THEME_STORAGE_KEY); |
| | | applyTheme(defaultTheme); |
| | | } |
| | | |
| | | export function useAppTheme() { |
| | | return { |
| | | themes: appThemes, |
| | | theme: readonly(currentTheme), |
| | | themeKey: computed(() => currentTheme.value.key), |
| | | primaryColor: computed(() => currentTheme.value.primary), |
| | | themeStyle: computed(() => ({ |
| | | "--color-primary": currentTheme.value.primary, |
| | | "--color-primary-dark": currentTheme.value.primaryDark, |
| | | "--color-primary-light": currentTheme.value.primaryLight, |
| | | "--color-primary-soft": currentTheme.value.primarySoft, |
| | | "--color-primary-border": currentTheme.value.primaryBorder, |
| | | "--color-bg-page": currentTheme.value.pageBackground, |
| | | "--color-bg-card": currentTheme.value.cardBackground, |
| | | })), |
| | | setTheme, |
| | | resetTheme, |
| | | restoreTheme, |
| | | }; |
| | | } |
| | |
| | | // ============================================ |
| | | |
| | | // åç主é¢è²ï¼æ ¹æ®äº§ååçå®ä½ä¿®æ¹ |
| | | $color-primary: #165dff; |
| | | $color-primary-light: #4080ff; |
| | | $color-primary-dark: #0e42d2; |
| | | $color-primary: #1769d8; |
| | | $color-primary-light: #4b8ee8; |
| | | $color-primary-dark: #0f54b8; |
| | | $color-primary-soft: #eef5ff; |
| | | $color-primary-border: #bfdbff; |
| | | |
| | | // åè½è² |
| | | $color-success: #00b42a; |
| | | $color-warning: #ff7d00; |
| | | $color-error: #f53f3f; |
| | | $color-info: #165dff; |
| | | $color-info: #1769d8; |
| | | |
| | | // èæ¯è² |
| | | $color-bg-page: #f5f6f7; |