Compare commits
2 Commits
5e77d4fdb1
...
471cfe6188
| Author | SHA1 | Date | |
|---|---|---|---|
| 471cfe6188 | |||
| 892acc6d23 |
+10
-7
@@ -51,9 +51,11 @@
|
||||
<text class="lab">审批链</text>
|
||||
<text class="hint">{{ suggestedLabel || '将按固定审批链流转' }}</text>
|
||||
</view>
|
||||
<view class="submit">
|
||||
<wd-button type="primary" block size="large" @click="submit">提交申请</wd-button>
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
@@ -164,14 +166,15 @@ export default {
|
||||
</script>
|
||||
|
||||
<style scoped>
|
||||
.body { padding: 24rpx 28rpx 48rpx; }
|
||||
.body { padding: 16rpx 24rpx 48rpx; }
|
||||
.field { margin-bottom: 24rpx; }
|
||||
.lab { font-size: 26rpx; color: #374151; 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); }
|
||||
.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; color: #111827; border: 1rpx solid rgba(17,24,39,0.06); }
|
||||
.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 .box { margin-top: 12rpx; }
|
||||
.link { color: #1677FF; font-size: 28rpx; display: block; margin-bottom: 20rpx; }
|
||||
.hint { font-size: 24rpx; color: #6B7280; line-height: 1.5; }
|
||||
.inv .box { margin-top: 12rpx; background: #F5F7FA; }
|
||||
.link { color: #1677FF; font-size: 28rpx; font-weight: 600; display: block; margin: 4rpx 8rpx 24rpx; }
|
||||
.hint { font-size: 26rpx; color: #111827; line-height: 1.5; }
|
||||
.submit { margin-top: 8rpx; }
|
||||
</style>
|
||||
|
||||
+21
-12
@@ -2,14 +2,20 @@
|
||||
<view class="page edge">
|
||||
<fy-header :title="title" back />
|
||||
<fy-scroll class="edge-scroll" @refresh="load">
|
||||
<view v-if="loading" class="empty">加载中…</view>
|
||||
<view v-else-if="!rows.length" class="empty">暂无记录</view>
|
||||
<view v-for="r in rows" :key="r.id || r.no" class="card item" @click="open(r)">
|
||||
<view>
|
||||
<text class="t">{{ r.title || r.no || r.typeLabel }}</text>
|
||||
<text class="s">{{ r.status || '' }} · {{ r.createdAt || r.date || '' }}</text>
|
||||
<view v-if="loading" class="empty">
|
||||
<wd-skeleton theme="paragraph" />
|
||||
</view>
|
||||
<text class="amt">{{ r.amount != null ? '¥' + r.amount : '' }}</text>
|
||||
<wd-status-tip v-else-if="!rows.length" image="content" tip="暂无记录" />
|
||||
<view v-for="r in rows" :key="r.id || r.no" class="card item" @click="open(r)">
|
||||
<view class="main">
|
||||
<text class="t">{{ r.title || r.no || r.typeLabel }}</text>
|
||||
<text class="s">{{ r.createdAt || r.date || '' }}</text>
|
||||
</view>
|
||||
<view class="side">
|
||||
<text v-if="r.amount != null" class="amt">¥{{ r.amount }}</text>
|
||||
<wd-tag v-if="r.status" type="primary" plain>{{ r.status }}</wd-tag>
|
||||
</view>
|
||||
<text class="arr">›</text>
|
||||
</view>
|
||||
</fy-scroll>
|
||||
</view>
|
||||
@@ -54,9 +60,12 @@ export default {
|
||||
</script>
|
||||
|
||||
<style scoped>
|
||||
.item { margin: 16rpx 24rpx; padding: 24rpx; display: flex; justify-content: space-between; }
|
||||
.t { display: block; font-size: 28rpx; font-weight: 600; }
|
||||
.s { font-size: 22rpx; color: #6B7280; }
|
||||
.amt { color: #1677FF; font-weight: 700; }
|
||||
.empty { padding: 80rpx; text-align: center; color: #6B7280; }
|
||||
.item { margin: 16rpx 24rpx; padding: 24rpx; display: flex; align-items: center; }
|
||||
.main { flex: 1; min-width: 0; }
|
||||
.t { display: block; font-size: 28rpx; font-weight: 650; color: #111827; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
|
||||
.s { display: block; margin-top: 8rpx; font-size: 24rpx; color: #6B7280; }
|
||||
.side { display: flex; flex-direction: column; align-items: flex-end; gap: 8rpx; margin-left: 16rpx; }
|
||||
.amt { color: #1677FF; font-weight: 700; font-size: 28rpx; }
|
||||
.arr { color: #C4C9D4; font-size: 32rpx; margin-left: 8rpx; }
|
||||
.empty { padding: 80rpx 40rpx; }
|
||||
</style>
|
||||
|
||||
+24
-26
@@ -1,36 +1,33 @@
|
||||
<template>
|
||||
<view class="page">
|
||||
<view class="page edge">
|
||||
<fy-header title="工作通知" back />
|
||||
<fy-scroll class="edge-scroll" @refresh="load">
|
||||
<view class="bar">
|
||||
<text>审批 · 协同 · 投标 · 用章 · 公告</text>
|
||||
<text class="badge">{{ items.length }} 项待办</text>
|
||||
<text class="count">{{ items.length }} 项待办</text>
|
||||
</view>
|
||||
<view v-if="!items.length" class="empty">暂无待办通知</view>
|
||||
<wd-status-tip v-if="!items.length" image="content" tip="暂无待办通知" />
|
||||
<view v-for="t in items" :key="t.no || t.id" class="card item" @click="open(t)">
|
||||
<view class="stripe" />
|
||||
<view class="body">
|
||||
<view class="top">
|
||||
<text class="kind">{{ t.typeLabel || t.tag || t.type || '待办' }}</text>
|
||||
<text class="time">{{ t.createdAt || t.time || '' }}</text>
|
||||
</view>
|
||||
<view class="main">
|
||||
<text class="type">{{ t.typeLabel || t.tag || t.type || '待办' }}</text>
|
||||
<text class="title">{{ t.title || t.summary || t.no }}</text>
|
||||
<text class="sub">{{ t.submitter || t.applicant || '' }}{{ t.dept ? ' · ' + t.dept : '' }}</text>
|
||||
<view class="acts">
|
||||
<text class="go">去办理</text>
|
||||
</view>
|
||||
<text class="sub">{{ metaOf(t) }}</text>
|
||||
</view>
|
||||
<text class="arr">›</text>
|
||||
</view>
|
||||
</fy-scroll>
|
||||
</view>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import FyHeader from '../../components/fy-header.vue'
|
||||
import FyScroll from '../../components/fy-scroll.vue'
|
||||
import { store } from '../../utils/store.js'
|
||||
import { asList, fmtTime } from '../../utils/format.js'
|
||||
import { oaGet } from '../../utils/api.js'
|
||||
|
||||
export default {
|
||||
components: { FyHeader },
|
||||
components: { FyHeader, FyScroll },
|
||||
data() {
|
||||
return { items: [] }
|
||||
},
|
||||
@@ -51,6 +48,11 @@ export default {
|
||||
const conv = store.conversations.find((c) => c.type === 'work')
|
||||
if (conv) conv.unread = 0
|
||||
},
|
||||
metaOf(t) {
|
||||
const who = [t.submitter || t.applicant, t.dept].filter(Boolean).join(' · ')
|
||||
const time = t.createdAt || t.time || ''
|
||||
return [who, time].filter(Boolean).join(' · ')
|
||||
},
|
||||
open(t) {
|
||||
const no = t.no || t.id || ''
|
||||
if (String(t.source || t.type || '') === 'work' || t.taskId) {
|
||||
@@ -64,16 +66,12 @@ export default {
|
||||
</script>
|
||||
|
||||
<style scoped>
|
||||
.bar { margin: 16rpx 24rpx; background: #F3F6FB; border-radius: 16rpx; padding: 16rpx 20rpx; display: flex; justify-content: space-between; font-size: 22rpx; color: #4B5563; }
|
||||
.item { margin: 0 24rpx 20rpx; display: flex; overflow: hidden; }
|
||||
.stripe { width: 8rpx; background: #1677FF; }
|
||||
.body { flex: 1; padding: 24rpx; }
|
||||
.top { display: flex; justify-content: space-between; }
|
||||
.kind { font-size: 28rpx; font-weight: 700; }
|
||||
.time { font-size: 22rpx; color: #6B7280; }
|
||||
.title { display: block; font-size: 28rpx; font-weight: 600; margin: 12rpx 0 6rpx; }
|
||||
.sub { font-size: 22rpx; color: #6B7280; }
|
||||
.acts { margin-top: 16rpx; }
|
||||
.go { color: #1677FF; font-size: 24rpx; font-weight: 600; }
|
||||
.empty { text-align: center; color: #6B7280; padding: 80rpx; }
|
||||
.bar { margin: 16rpx 24rpx 8rpx; padding: 0 8rpx; display: flex; justify-content: space-between; align-items: center; font-size: 22rpx; color: #6B7280; }
|
||||
.count { color: #1677FF; font-weight: 600; }
|
||||
.item { margin: 16rpx 24rpx; padding: 24rpx; display: flex; align-items: center; }
|
||||
.main { flex: 1; min-width: 0; }
|
||||
.type { display: inline-block; font-size: 22rpx; color: #1677FF; background: #E8F1FF; border-radius: 8rpx; padding: 2rpx 10rpx; }
|
||||
.title { display: block; margin-top: 10rpx; font-size: 28rpx; font-weight: 650; color: #111827; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
|
||||
.sub { display: block; margin-top: 6rpx; font-size: 24rpx; color: #6B7280; }
|
||||
.arr { color: #C4C9D4; font-size: 32rpx; margin-left: 8rpx; }
|
||||
</style>
|
||||
|
||||
+10
-7
@@ -16,7 +16,9 @@
|
||||
<text class="lab">说明</text>
|
||||
<view class="box tall"><textarea v-model="content" /></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>
|
||||
</template>
|
||||
@@ -65,10 +67,11 @@ export default {
|
||||
</script>
|
||||
|
||||
<style scoped>
|
||||
.body { padding: 24rpx; }
|
||||
.field { margin-bottom: 20rpx; }
|
||||
.lab { font-size: 24rpx; color: #4B5563; display: block; margin-bottom: 8rpx; }
|
||||
.box { min-height: 88rpx; background: #fff; border-radius: 16rpx; padding: 20rpx 24rpx; }
|
||||
.box.tall { min-height: 160rpx; }
|
||||
.box input, .box textarea { width: 100%; }
|
||||
.body { padding: 16rpx 24rpx 48rpx; }
|
||||
.field { margin-bottom: 24rpx; }
|
||||
.lab { font-size: 26rpx; color: #6B7280; display: block; margin-bottom: 10rpx; }
|
||||
.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: 180rpx; }
|
||||
.box input, .box textarea { width: 100%; font-size: 30rpx; color: #111827; }
|
||||
.submit { margin-top: 8rpx; }
|
||||
</style>
|
||||
|
||||
+22
-7
@@ -3,10 +3,20 @@
|
||||
<fy-header title="协同详情" back />
|
||||
<view v-if="row" class="body">
|
||||
<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="s">发起 {{ row.assignerName || '' }} · 办理 {{ row.assigneeName || '' }}</text>
|
||||
<text class="s">{{ row.content || row.remark || '' }}</text>
|
||||
<text class="chip">{{ row.status === 'done' ? '已办结' : '待办理' }}</text>
|
||||
<view class="kv">
|
||||
<text class="k">发起</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 v-if="canDone" class="btn-primary" @click="done">标记已办理</view>
|
||||
</view>
|
||||
@@ -55,9 +65,14 @@ export default {
|
||||
</script>
|
||||
|
||||
<style scoped>
|
||||
.body { padding: 24rpx; }
|
||||
.body { padding: 16rpx 24rpx 48rpx; }
|
||||
.card { padding: 28rpx; margin-bottom: 24rpx; }
|
||||
.t { display: block; font-size: 34rpx; font-weight: 700; }
|
||||
.s { display: block; font-size: 24rpx; color: #6B7280; margin-top: 8rpx; }
|
||||
.chip { display: inline-block; margin-top: 16rpx; }
|
||||
.top { display: flex; align-items: center; justify-content: space-between; }
|
||||
.type { font-size: 22rpx; color: #1677FF; background: #E8F1FF; border-radius: 8rpx; padding: 2rpx 10rpx; }
|
||||
.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>
|
||||
|
||||
+25
-15
@@ -1,23 +1,28 @@
|
||||
<template>
|
||||
<view class="page">
|
||||
<view class="page edge">
|
||||
<fy-header :title="title" back />
|
||||
<view v-if="!allowed" class="deny">当前账号没有「{{ title }}」查看权限</view>
|
||||
<view v-else>
|
||||
<scroll-view scroll-x class="tabs">
|
||||
<text v-for="t in tabs" :key="t.id" class="tab" :class="{ on: tab === t.id }" @click="switchTab(t)">{{ t.title }}</text>
|
||||
</scroll-view>
|
||||
<view v-if="loading" class="empty">加载中…</view>
|
||||
<view v-else-if="!rows.length" class="empty">暂无数据</view>
|
||||
<fy-scroll v-else class="edge-scroll" @refresh="load">
|
||||
<wd-tabs v-if="tabs.length" v-model="tab" slidable="always" @change="onTab">
|
||||
<wd-tab v-for="t in tabs" :key="t.id" :title="t.title" :name="t.id" />
|
||||
</wd-tabs>
|
||||
<view v-if="loading" class="empty">
|
||||
<wd-skeleton theme="paragraph" />
|
||||
</view>
|
||||
<wd-status-tip v-else-if="!rows.length" image="content" tip="暂无数据" />
|
||||
<view v-for="r in rows" :key="r.id || r.no || r.code" class="card item">
|
||||
<view class="main">
|
||||
<text class="t">{{ titleOf(r) }}</text>
|
||||
<text class="s">{{ subOf(r) }}</text>
|
||||
<text v-if="subOf(r)" class="s">{{ subOf(r) }}</text>
|
||||
</view>
|
||||
</view>
|
||||
</fy-scroll>
|
||||
</view>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import FyHeader from '../../components/fy-header.vue'
|
||||
import FyScroll from '../../components/fy-scroll.vue'
|
||||
import { store } from '../../utils/store.js'
|
||||
import { ERP_MODULES, ERP_TABS } from '../../utils/catalog.js'
|
||||
import { asList, firstText } from '../../utils/format.js'
|
||||
@@ -25,7 +30,7 @@ import { oaGet } from '../../utils/api.js'
|
||||
import { canMenu } from '../../utils/perms.js'
|
||||
|
||||
export default {
|
||||
components: { FyHeader },
|
||||
components: { FyHeader, FyScroll },
|
||||
data() {
|
||||
return { id: '', tab: '', rows: [], loading: false }
|
||||
},
|
||||
@@ -45,6 +50,12 @@ export default {
|
||||
if (this.allowed) this.load()
|
||||
},
|
||||
methods: {
|
||||
onTab(e) {
|
||||
const id = (e && e.name) || this.tab
|
||||
if (id === this.tab && this.rows.length) return
|
||||
this.tab = id
|
||||
this.load()
|
||||
},
|
||||
switchTab(t) {
|
||||
this.tab = t.id
|
||||
this.load()
|
||||
@@ -110,11 +121,10 @@ export default {
|
||||
</script>
|
||||
|
||||
<style scoped>
|
||||
.tabs { white-space: nowrap; padding: 16rpx 16rpx 0; }
|
||||
.tab { display: inline-block; padding: 12rpx 20rpx; font-size: 24rpx; color: #6B7280; }
|
||||
.tab.on { color: #1677FF; font-weight: 700; border-bottom: 4rpx solid #1677FF; }
|
||||
.item { margin: 16rpx 24rpx; padding: 24rpx; }
|
||||
.t { display: block; font-weight: 600; font-size: 28rpx; }
|
||||
.s { font-size: 22rpx; color: #6B7280; }
|
||||
.empty, .deny { padding: 80rpx 40rpx; text-align: center; color: #6B7280; }
|
||||
.main { min-width: 0; }
|
||||
.t { display: block; font-weight: 650; font-size: 28rpx; color: #111827; }
|
||||
.s { display: block; margin-top: 8rpx; font-size: 24rpx; color: #6B7280; }
|
||||
.empty { padding: 40rpx 28rpx; }
|
||||
.deny { padding: 120rpx 40rpx; text-align: center; color: #6B7280; font-size: 28rpx; }
|
||||
</style>
|
||||
|
||||
@@ -4,8 +4,11 @@
|
||||
<fy-scroll class="edge-scroll" @refresh="load">
|
||||
<wd-status-tip v-if="!rows.length" image="content" tip="暂无公告" />
|
||||
<view v-for="r in rows" :key="r.id" class="card item">
|
||||
<text class="t">{{ r.title }}</text>
|
||||
<view class="top">
|
||||
<text class="chip">公告</text>
|
||||
<text class="s">{{ r.createdAt || r.publishAt || '' }}</text>
|
||||
</view>
|
||||
<text class="t">{{ r.title }}</text>
|
||||
<text class="c">{{ r.content || r.summary || '' }}</text>
|
||||
</view>
|
||||
</fy-scroll>
|
||||
@@ -32,9 +35,9 @@ export default {
|
||||
</script>
|
||||
|
||||
<style scoped>
|
||||
.item { margin: 16rpx 28rpx; padding: 28rpx; }
|
||||
.t { display: block; font-weight: 650; font-size: 30rpx; line-height: 1.45; }
|
||||
.s { display: block; font-size: 24rpx; color: #6B7280; margin-top: 10rpx; }
|
||||
.c { display: block; font-size: 28rpx; margin-top: 16rpx; color: #374151; line-height: 1.65; }
|
||||
.empty { padding: 120rpx 40rpx; text-align: center; color: #6B7280; font-size: 28rpx; }
|
||||
.item { margin: 16rpx 24rpx; padding: 28rpx 24rpx; }
|
||||
.top { display: flex; align-items: center; justify-content: space-between; }
|
||||
.s { font-size: 22rpx; color: #9CA3AF; }
|
||||
.t { display: block; margin-top: 16rpx; font-weight: 650; font-size: 30rpx; line-height: 1.45; color: #111827; }
|
||||
.c { display: block; font-size: 26rpx; margin-top: 12rpx; color: #4B5563; line-height: 1.65; }
|
||||
</style>
|
||||
|
||||
@@ -3,6 +3,7 @@
|
||||
<fy-header title="修改密码" back />
|
||||
<view class="body">
|
||||
<text class="hint">首次登录或管理员要求改密,请设置新密码后继续。</text>
|
||||
<view class="card group">
|
||||
<view class="field">
|
||||
<text class="lab">新密码</text>
|
||||
<view class="box"><input v-model="next" password placeholder="至少 6 位" /></view>
|
||||
@@ -11,7 +12,8 @@
|
||||
<text class="lab">确认新密码</text>
|
||||
<view class="box"><input v-model="confirm" password placeholder="再输入一次" /></view>
|
||||
</view>
|
||||
<view class="btn-primary" @click="ok">确认修改</view>
|
||||
</view>
|
||||
<wd-button type="primary" block size="large" @click="ok">确认修改</wd-button>
|
||||
<text v-if="error" class="err">{{ error }}</text>
|
||||
</view>
|
||||
</view>
|
||||
@@ -51,11 +53,12 @@ export default {
|
||||
</script>
|
||||
|
||||
<style scoped>
|
||||
.body { padding: 40rpx; }
|
||||
.hint { font-size: 26rpx; color: #6B7280; display: block; margin-bottom: 32rpx; }
|
||||
.field { margin-bottom: 24rpx; }
|
||||
.lab { font-size: 24rpx; color: #4B5563; display: block; margin-bottom: 8rpx; }
|
||||
.box { height: 96rpx; background: #fff; border-radius: 16rpx; padding: 0 24rpx; display: flex; align-items: center; }
|
||||
.box input { flex: 1; }
|
||||
.body { padding: 16rpx 24rpx 48rpx; }
|
||||
.hint { font-size: 26rpx; color: #6B7280; display: block; margin: 8rpx 8rpx 20rpx; line-height: 1.5; }
|
||||
.group { padding: 8rpx 24rpx 24rpx; margin-bottom: 24rpx; }
|
||||
.field { margin-top: 20rpx; }
|
||||
.lab { font-size: 26rpx; color: #6B7280; display: block; margin-bottom: 10rpx; }
|
||||
.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; }
|
||||
</style>
|
||||
|
||||
+22
-13
@@ -1,32 +1,38 @@
|
||||
<template>
|
||||
<view class="page">
|
||||
<view class="page edge">
|
||||
<fy-header title="工作汇报" back />
|
||||
<view v-if="!can" class="deny">当前账号没有写汇报权限</view>
|
||||
<view v-else>
|
||||
<fy-scroll v-else class="edge-scroll" @refresh="load">
|
||||
<view class="card form">
|
||||
<text class="lab">类型</text>
|
||||
<picker :range="kinds" @change="(e) => kind = kinds[e.detail.value]">
|
||||
<view class="box">{{ kind }}</view>
|
||||
</picker>
|
||||
<text class="lab">内容</text>
|
||||
<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>
|
||||
<wd-status-tip v-if="!rows.length" image="content" tip="暂无汇报" />
|
||||
<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="type">{{ r.kind || r.title || '汇报' }}</text>
|
||||
<text class="s">{{ r.createdAt || r.date || '' }}</text>
|
||||
<text class="c">{{ r.content || r.summary || '' }}</text>
|
||||
</view>
|
||||
<text class="c">{{ r.content || r.summary || r.title || '' }}</text>
|
||||
</view>
|
||||
</fy-scroll>
|
||||
</view>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import FyHeader from '../../components/fy-header.vue'
|
||||
import FyScroll from '../../components/fy-scroll.vue'
|
||||
import { store } from '../../utils/store.js'
|
||||
import { asList, toast } from '../../utils/format.js'
|
||||
import { oaGet, oaPost } from '../../utils/api.js'
|
||||
|
||||
export default {
|
||||
components: { FyHeader },
|
||||
components: { FyHeader, FyScroll },
|
||||
data() {
|
||||
return { kinds: ['日报', '周报', '月报', '工时'], kind: '日报', content: '', rows: [] }
|
||||
},
|
||||
@@ -58,12 +64,15 @@ export default {
|
||||
</script>
|
||||
|
||||
<style scoped>
|
||||
.form { margin: 24rpx; padding: 24rpx; }
|
||||
.box { background: #F3F6FB; border-radius: 12rpx; padding: 20rpx; margin-bottom: 16rpx; }
|
||||
.box.tall { min-height: 160rpx; }
|
||||
.form { margin: 16rpx 24rpx; padding: 24rpx; }
|
||||
.lab { display: block; font-size: 26rpx; color: #6B7280; margin-bottom: 10rpx; }
|
||||
.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; }
|
||||
.t { display: block; font-weight: 600; }
|
||||
.s { font-size: 22rpx; color: #6B7280; }
|
||||
.c { display: block; font-size: 26rpx; margin-top: 8rpx; }
|
||||
.deny { padding: 80rpx; text-align: center; color: #6B7280; }
|
||||
.top { display: flex; align-items: center; justify-content: space-between; }
|
||||
.type { font-size: 22rpx; color: #1677FF; background: #E8F1FF; border-radius: 8rpx; padding: 2rpx 10rpx; }
|
||||
.s { font-size: 22rpx; color: #9CA3AF; }
|
||||
.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>
|
||||
|
||||
@@ -3,8 +3,12 @@
|
||||
<fy-header title="审批详情" back />
|
||||
<view v-if="row" class="body">
|
||||
<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="s">{{ row.typeLabel || row.type }} · {{ row.submitter || '' }}</text>
|
||||
<text class="s">{{ row.submitter || '' }}</text>
|
||||
<text class="s">单号 {{ row.no }}</text>
|
||||
<text v-if="row.node" class="s">当前节点 {{ row.node }}</text>
|
||||
<text v-if="row.amount != null && row.amount !== ''" class="amt">¥ {{ row.amount }}</text>
|
||||
@@ -56,7 +60,7 @@
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
<view v-else class="empty">{{ err || '加载中…' }}</view>
|
||||
<wd-status-tip v-else image="content" :tip="err || '加载中…'" />
|
||||
</view>
|
||||
</template>
|
||||
|
||||
@@ -155,6 +159,8 @@ export default {
|
||||
<style scoped>
|
||||
.body { padding: 24rpx 28rpx 200rpx; }
|
||||
.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; }
|
||||
.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; }
|
||||
|
||||
Reference in New Issue
Block a user