申请表单、审批详情、新建协同、协同详情、工作汇报和修改密码

This commit is contained in:
2026-09-24 14:25:44 +08:00
parent 892acc6d23
commit 471cfe6188
6 changed files with 92 additions and 53 deletions
+11 -8
View File
@@ -51,7 +51,9 @@
<text class="lab">审批链</text> <text class="lab">审批链</text>
<text class="hint">{{ suggestedLabel || '将按固定审批链流转' }}</text> <text class="hint">{{ suggestedLabel || '将按固定审批链流转' }}</text>
</view> </view>
<wd-button type="primary" block size="large" @click="submit">提交申请</wd-button> <view class="submit">
<wd-button type="primary" block size="large" @click="submit">提交申请</wd-button>
</view>
</view> </view>
</view> </view>
</template> </template>
@@ -164,14 +166,15 @@ export default {
</script> </script>
<style scoped> <style scoped>
.body { padding: 24rpx 28rpx 48rpx; } .body { padding: 16rpx 24rpx 48rpx; }
.field { margin-bottom: 24rpx; } .field { margin-bottom: 24rpx; }
.lab { font-size: 26rpx; color: #374151; display: block; margin-bottom: 10rpx; } .lab { font-size: 26rpx; color: #6B7280; display: block; margin-bottom: 10rpx; }
.box { min-height: 92rpx; background: #fff; border-radius: 16rpx; padding: 22rpx 24rpx; font-size: 30rpx; border: 1rpx solid rgba(17,24,39,0.06); } .box { min-height: 92rpx; background: #fff; border-radius: 16rpx; padding: 22rpx 24rpx; font-size: 30rpx; color: #111827; border: 1rpx solid rgba(17,24,39,0.06); }
.box.tall { min-height: 180rpx; } .box.tall { min-height: 180rpx; }
.box textarea, .box input { width: 100%; font-size: 30rpx; } .box textarea, .box input { width: 100%; font-size: 30rpx; color: #111827; }
.inv { padding: 24rpx; margin-bottom: 16rpx; } .inv { padding: 24rpx; margin-bottom: 16rpx; }
.inv .box { margin-top: 12rpx; } .inv .box { margin-top: 12rpx; background: #F5F7FA; }
.link { color: #1677FF; font-size: 28rpx; display: block; margin-bottom: 20rpx; } .link { color: #1677FF; font-size: 28rpx; font-weight: 600; display: block; margin: 4rpx 8rpx 24rpx; }
.hint { font-size: 24rpx; color: #6B7280; line-height: 1.5; } .hint { font-size: 26rpx; color: #111827; line-height: 1.5; }
.submit { margin-top: 8rpx; }
</style> </style>
+10 -7
View File
@@ -16,7 +16,9 @@
<text class="lab">说明</text> <text class="lab">说明</text>
<view class="box tall"><textarea v-model="content" /></view> <view class="box tall"><textarea v-model="content" /></view>
</view> </view>
<view class="btn-primary" @click="ok">创建</view> <view class="submit">
<wd-button type="primary" block size="large" @click="ok">创建</wd-button>
</view>
</view> </view>
</view> </view>
</template> </template>
@@ -65,10 +67,11 @@ export default {
</script> </script>
<style scoped> <style scoped>
.body { padding: 24rpx; } .body { padding: 16rpx 24rpx 48rpx; }
.field { margin-bottom: 20rpx; } .field { margin-bottom: 24rpx; }
.lab { font-size: 24rpx; color: #4B5563; display: block; margin-bottom: 8rpx; } .lab { font-size: 26rpx; color: #6B7280; display: block; margin-bottom: 10rpx; }
.box { min-height: 88rpx; background: #fff; border-radius: 16rpx; padding: 20rpx 24rpx; } .box { min-height: 92rpx; background: #fff; border-radius: 16rpx; padding: 22rpx 24rpx; border: 1rpx solid rgba(17,24,39,0.06); }
.box.tall { min-height: 160rpx; } .box.tall { min-height: 180rpx; }
.box input, .box textarea { width: 100%; } .box input, .box textarea { width: 100%; font-size: 30rpx; color: #111827; }
.submit { margin-top: 8rpx; }
</style> </style>
+22 -7
View File
@@ -3,10 +3,20 @@
<fy-header title="协同详情" back /> <fy-header title="协同详情" back />
<view v-if="row" class="body"> <view v-if="row" class="body">
<view class="card"> <view class="card">
<view class="top">
<text class="type">协同</text>
<wd-tag :type="row.status === 'done' ? 'success' : 'primary'" plain>{{ row.status === 'done' ? '已办结' : '待办理' }}</wd-tag>
</view>
<text class="t">{{ row.title }}</text> <text class="t">{{ row.title }}</text>
<text class="s">发起 {{ row.assignerName || '' }} · 办理 {{ row.assigneeName || '' }}</text> <view class="kv">
<text class="s">{{ row.content || row.remark || '' }}</text> <text class="k">发起</text>
<text class="chip">{{ row.status === 'done' ? '已办结' : '待办理' }}</text> <text class="v">{{ row.assignerName || '-' }}</text>
</view>
<view class="kv">
<text class="k">办理</text>
<text class="v">{{ row.assigneeName || '-' }}</text>
</view>
<text v-if="row.content || row.remark" class="c">{{ row.content || row.remark }}</text>
</view> </view>
<view v-if="canDone" class="btn-primary" @click="done">标记已办理</view> <view v-if="canDone" class="btn-primary" @click="done">标记已办理</view>
</view> </view>
@@ -55,9 +65,14 @@ export default {
</script> </script>
<style scoped> <style scoped>
.body { padding: 24rpx; } .body { padding: 16rpx 24rpx 48rpx; }
.card { padding: 28rpx; margin-bottom: 24rpx; } .card { padding: 28rpx; margin-bottom: 24rpx; }
.t { display: block; font-size: 34rpx; font-weight: 700; } .top { display: flex; align-items: center; justify-content: space-between; }
.s { display: block; font-size: 24rpx; color: #6B7280; margin-top: 8rpx; } .type { font-size: 22rpx; color: #1677FF; background: #E8F1FF; border-radius: 8rpx; padding: 2rpx 10rpx; }
.chip { display: inline-block; margin-top: 16rpx; } .t { display: block; margin-top: 16rpx; font-size: 34rpx; font-weight: 650; color: #111827; line-height: 1.4; }
.kv { display: flex; justify-content: space-between; padding: 20rpx 0; }
.kv + .kv { border-top: 1rpx solid #F0F2F5; }
.k { color: #6B7280; font-size: 26rpx; }
.v { font-size: 26rpx; color: #111827; }
.c { display: block; margin-top: 8rpx; padding-top: 16rpx; border-top: 1rpx solid #F0F2F5; font-size: 28rpx; color: #374151; line-height: 1.65; }
</style> </style>
+17 -14
View File
@@ -3,15 +3,17 @@
<fy-header title="修改密码" back /> <fy-header title="修改密码" back />
<view class="body"> <view class="body">
<text class="hint">首次登录或管理员要求改密请设置新密码后继续</text> <text class="hint">首次登录或管理员要求改密请设置新密码后继续</text>
<view class="field"> <view class="card group">
<text class="lab">新密码</text> <view class="field">
<view class="box"><input v-model="next" password placeholder="至少 6 位" /></view> <text class="lab">新密码</text>
<view class="box"><input v-model="next" password placeholder="至少 6 位" /></view>
</view>
<view class="field">
<text class="lab">确认新密码</text>
<view class="box"><input v-model="confirm" password placeholder="再输入一次" /></view>
</view>
</view> </view>
<view class="field"> <wd-button type="primary" block size="large" @click="ok">确认修改</wd-button>
<text class="lab">确认新密码</text>
<view class="box"><input v-model="confirm" password placeholder="再输入一次" /></view>
</view>
<view class="btn-primary" @click="ok">确认修改</view>
<text v-if="error" class="err">{{ error }}</text> <text v-if="error" class="err">{{ error }}</text>
</view> </view>
</view> </view>
@@ -51,11 +53,12 @@ export default {
</script> </script>
<style scoped> <style scoped>
.body { padding: 40rpx; } .body { padding: 16rpx 24rpx 48rpx; }
.hint { font-size: 26rpx; color: #6B7280; display: block; margin-bottom: 32rpx; } .hint { font-size: 26rpx; color: #6B7280; display: block; margin: 8rpx 8rpx 20rpx; line-height: 1.5; }
.field { margin-bottom: 24rpx; } .group { padding: 8rpx 24rpx 24rpx; margin-bottom: 24rpx; }
.lab { font-size: 24rpx; color: #4B5563; display: block; margin-bottom: 8rpx; } .field { margin-top: 20rpx; }
.box { height: 96rpx; background: #fff; border-radius: 16rpx; padding: 0 24rpx; display: flex; align-items: center; } .lab { font-size: 26rpx; color: #6B7280; display: block; margin-bottom: 10rpx; }
.box input { flex: 1; } .box { height: 92rpx; background: #F5F7FA; border-radius: 16rpx; padding: 0 24rpx; display: flex; align-items: center; }
.box input { flex: 1; font-size: 30rpx; color: #111827; }
.err { color: #DC2626; font-size: 24rpx; margin-top: 16rpx; display: block; } .err { color: #DC2626; font-size: 24rpx; margin-top: 16rpx; display: block; }
</style> </style>
+24 -15
View File
@@ -1,32 +1,38 @@
<template> <template>
<view class="page"> <view class="page edge">
<fy-header title="工作汇报" back /> <fy-header title="工作汇报" back />
<view v-if="!can" class="deny">当前账号没有写汇报权限</view> <view v-if="!can" class="deny">当前账号没有写汇报权限</view>
<view v-else> <fy-scroll v-else class="edge-scroll" @refresh="load">
<view class="card form"> <view class="card form">
<text class="lab">类型</text>
<picker :range="kinds" @change="(e) => kind = kinds[e.detail.value]"> <picker :range="kinds" @change="(e) => kind = kinds[e.detail.value]">
<view class="box">{{ kind }}</view> <view class="box">{{ kind }}</view>
</picker> </picker>
<text class="lab">内容</text>
<view class="box tall"><textarea v-model="content" placeholder="今日工作内容 / 周报摘要" /></view> <view class="box tall"><textarea v-model="content" placeholder="今日工作内容 / 周报摘要" /></view>
<view class="btn-primary" @click="submit">提交汇报</view> <wd-button type="primary" block size="large" @click="submit">提交汇报</wd-button>
</view> </view>
<wd-status-tip v-if="!rows.length" image="content" tip="暂无汇报" />
<view v-for="r in rows" :key="r.id" class="card item"> <view v-for="r in rows" :key="r.id" class="card item">
<text class="t">{{ r.title || r.kind || '汇报' }}</text> <view class="top">
<text class="s">{{ r.createdAt || r.date || '' }}</text> <text class="type">{{ r.kind || r.title || '汇报' }}</text>
<text class="c">{{ r.content || r.summary || '' }}</text> <text class="s">{{ r.createdAt || r.date || '' }}</text>
</view>
<text class="c">{{ r.content || r.summary || r.title || '' }}</text>
</view> </view>
</view> </fy-scroll>
</view> </view>
</template> </template>
<script> <script>
import FyHeader from '../../components/fy-header.vue' import FyHeader from '../../components/fy-header.vue'
import FyScroll from '../../components/fy-scroll.vue'
import { store } from '../../utils/store.js' import { store } from '../../utils/store.js'
import { asList, toast } from '../../utils/format.js' import { asList, toast } from '../../utils/format.js'
import { oaGet, oaPost } from '../../utils/api.js' import { oaGet, oaPost } from '../../utils/api.js'
export default { export default {
components: { FyHeader }, components: { FyHeader, FyScroll },
data() { data() {
return { kinds: ['日报', '周报', '月报', '工时'], kind: '日报', content: '', rows: [] } return { kinds: ['日报', '周报', '月报', '工时'], kind: '日报', content: '', rows: [] }
}, },
@@ -58,12 +64,15 @@ export default {
</script> </script>
<style scoped> <style scoped>
.form { margin: 24rpx; padding: 24rpx; } .form { margin: 16rpx 24rpx; padding: 24rpx; }
.box { background: #F3F6FB; border-radius: 12rpx; padding: 20rpx; margin-bottom: 16rpx; } .lab { display: block; font-size: 26rpx; color: #6B7280; margin-bottom: 10rpx; }
.box.tall { min-height: 160rpx; } .box { background: #F5F7FA; border-radius: 16rpx; padding: 22rpx 24rpx; margin-bottom: 20rpx; font-size: 30rpx; color: #111827; }
.box.tall { min-height: 180rpx; }
.box textarea { width: 100%; font-size: 30rpx; }
.item { margin: 0 24rpx 16rpx; padding: 24rpx; } .item { margin: 0 24rpx 16rpx; padding: 24rpx; }
.t { display: block; font-weight: 600; } .top { display: flex; align-items: center; justify-content: space-between; }
.s { font-size: 22rpx; color: #6B7280; } .type { font-size: 22rpx; color: #1677FF; background: #E8F1FF; border-radius: 8rpx; padding: 2rpx 10rpx; }
.c { display: block; font-size: 26rpx; margin-top: 8rpx; } .s { font-size: 22rpx; color: #9CA3AF; }
.deny { padding: 80rpx; text-align: center; color: #6B7280; } .c { display: block; font-size: 28rpx; margin-top: 14rpx; color: #374151; line-height: 1.65; }
.deny { padding: 120rpx 40rpx; text-align: center; color: #6B7280; font-size: 28rpx; }
</style> </style>
+8 -2
View File
@@ -3,8 +3,12 @@
<fy-header title="审批详情" back /> <fy-header title="审批详情" back />
<view v-if="row" class="body"> <view v-if="row" class="body">
<view class="card"> <view class="card">
<view class="top">
<text class="type">{{ row.typeLabel || row.type || '审批' }}</text>
<wd-tag type="primary" plain>{{ row.status || '待处理' }}</wd-tag>
</view>
<text class="t">{{ row.title || row.no }}</text> <text class="t">{{ row.title || row.no }}</text>
<text class="s">{{ row.typeLabel || row.type }} · {{ row.submitter || '' }}</text> <text class="s">{{ row.submitter || '' }}</text>
<text class="s">单号 {{ row.no }}</text> <text class="s">单号 {{ row.no }}</text>
<text v-if="row.node" class="s">当前节点 {{ row.node }}</text> <text v-if="row.node" class="s">当前节点 {{ row.node }}</text>
<text v-if="row.amount != null && row.amount !== ''" class="amt">¥ {{ row.amount }}</text> <text v-if="row.amount != null && row.amount !== ''" class="amt">¥ {{ row.amount }}</text>
@@ -56,7 +60,7 @@
</view> </view>
</view> </view>
</view> </view>
<view v-else class="empty">{{ err || '加载中…' }}</view> <wd-status-tip v-else image="content" :tip="err || '加载中…'" />
</view> </view>
</template> </template>
@@ -155,6 +159,8 @@ export default {
<style scoped> <style scoped>
.body { padding: 24rpx 28rpx 200rpx; } .body { padding: 24rpx 28rpx 200rpx; }
.card { padding: 28rpx; margin-bottom: 16rpx; } .card { padding: 28rpx; margin-bottom: 16rpx; }
.top { display: flex; align-items: center; justify-content: space-between; margin-bottom: 12rpx; }
.type { font-size: 22rpx; color: #1677FF; background: #E8F1FF; border-radius: 8rpx; padding: 2rpx 10rpx; }
.block { padding: 24rpx 28rpx; } .block { padding: 24rpx 28rpx; }
.h { display: block; font-size: 30rpx; font-weight: 650; margin-bottom: 16rpx; } .h { display: block; font-size: 30rpx; font-weight: 650; margin-bottom: 16rpx; }
.t { display: block; font-size: 34rpx; font-weight: 650; line-height: 1.4; } .t { display: block; font-size: 34rpx; font-weight: 650; line-height: 1.4; }