feat:修改光芯的小程序代码 并优化界面
This commit is contained in:
parent
2cf45be6d4
commit
871d9ab0c6
|
|
@ -0,0 +1,3 @@
|
|||
- main [ref=e5]:
|
||||
- iframe [ref=e7]:
|
||||
|
||||
Binary file not shown.
|
After Width: | Height: | Size: 362 KiB |
181
App.vue
181
App.vue
|
|
@ -62,15 +62,60 @@
|
|||
/* #ifndef APP-NVUE */
|
||||
@import '@/static/customicons.css';
|
||||
/* #endif */
|
||||
// 设置整个项目的背景色
|
||||
|
||||
// ========== 浅藻绿 设计系统 ==========
|
||||
$primary: #2BA471;
|
||||
$primary-light: #48C68B;
|
||||
$primary-dark: #1F8C5E;
|
||||
$success: #2BA471;
|
||||
$warning: #E37318;
|
||||
$danger: #D54941;
|
||||
$text-primary: #1A2E25;
|
||||
$text-secondary: #3D5347;
|
||||
$text-hint: #7C9488;
|
||||
$bg-page: #F5FAF7;
|
||||
$bg-card: #FFFFFF;
|
||||
$border-color: #C4C6D0;
|
||||
$radius-sm: 8rpx;
|
||||
$radius-md: 12rpx;
|
||||
$radius-lg: 16rpx;
|
||||
$shadow-sm: 0 2rpx 8rpx rgba(25, 27, 35, 0.03);
|
||||
$shadow-md: 0 8rpx 24rpx rgba(25, 27, 35, 0.06);
|
||||
$shadow-lg: 0 12rpx 40rpx rgba(25, 27, 35, 0.08);
|
||||
|
||||
// Precision Ethereal - Tonal Surface System
|
||||
page {
|
||||
background-color: #f7f7f7;
|
||||
background-color: $bg-page;
|
||||
font-family: 'Inter', 'PingFang SC', -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Hiragino Sans GB', 'Microsoft YaHei', sans-serif;
|
||||
-webkit-font-smoothing: antialiased;
|
||||
}
|
||||
|
||||
.container {
|
||||
color: #333;
|
||||
padding: 0rpx 12rpx;
|
||||
background-color: #fff;
|
||||
color: $text-primary;
|
||||
padding: 0rpx 20rpx;
|
||||
background-color: transparent;
|
||||
min-height: 100vh;
|
||||
}
|
||||
|
||||
// ========== 卡片组件 ==========
|
||||
.card {
|
||||
background-color: $bg-card;
|
||||
border-radius: $radius-lg;
|
||||
padding: 28rpx 24rpx;
|
||||
margin-bottom: 20rpx;
|
||||
box-shadow: $shadow-sm;
|
||||
}
|
||||
|
||||
.card-title {
|
||||
font-size: 30rpx;
|
||||
font-weight: 600;
|
||||
color: $text-primary;
|
||||
margin-bottom: 16rpx;
|
||||
padding-left: 16rpx;
|
||||
border-left: 6rpx solid $primary;
|
||||
}
|
||||
|
||||
// ========== 表单美化 ==========
|
||||
.uni-forms-item {
|
||||
margin-bottom: 8rpx !important;
|
||||
}
|
||||
|
|
@ -81,72 +126,152 @@
|
|||
display: flex;
|
||||
align-items: center;
|
||||
}
|
||||
|
||||
// 表单容器卡片样式
|
||||
.form-card {
|
||||
background-color: $bg-card;
|
||||
border-radius: $radius-lg;
|
||||
padding: 20rpx 24rpx;
|
||||
margin: 16rpx 0;
|
||||
box-shadow: $shadow-sm;
|
||||
}
|
||||
|
||||
// ========== 按钮美化 ==========
|
||||
.btn-primary {
|
||||
background: linear-gradient(135deg, $primary, $primary-dark) !important;
|
||||
color: #fff !important;
|
||||
border: none !important;
|
||||
border-radius: $radius-md !important;
|
||||
font-weight: 500;
|
||||
letter-spacing: 2rpx;
|
||||
box-shadow: 0 4rpx 12rpx rgba(43, 164, 113, 0.2);
|
||||
&:active {
|
||||
opacity: 0.85;
|
||||
transform: scale(0.98);
|
||||
}
|
||||
}
|
||||
|
||||
.btn-danger {
|
||||
background: linear-gradient(135deg, $danger, #DC2626) !important;
|
||||
color: #fff !important;
|
||||
border: none !important;
|
||||
border-radius: $radius-md !important;
|
||||
font-weight: 500;
|
||||
box-shadow: 0 4rpx 12rpx rgba(239, 68, 68, 0.3);
|
||||
}
|
||||
|
||||
// ========== 对话框美化 ==========
|
||||
.dialogWrap {
|
||||
position: fixed;
|
||||
width: 100vw;
|
||||
height: 100vh;
|
||||
background-color: rgba(0, 0, 0, .3);
|
||||
background-color: rgba(28, 25, 23, 0.5);
|
||||
top: 0;
|
||||
left: 0;
|
||||
z-index: 110;
|
||||
}
|
||||
|
||||
|
||||
.dialogCont {
|
||||
width: 92vw;
|
||||
width: 88vw;
|
||||
position: absolute;
|
||||
top: 50%;
|
||||
margin: auto;
|
||||
background-color: #ffffff;
|
||||
left: 2vw;
|
||||
background-color: $bg-card;
|
||||
left: 6vw;
|
||||
transform: translateY(-50%);
|
||||
padding: 10rpx;
|
||||
border-radius: 20rpx;
|
||||
padding: 32rpx;
|
||||
border-radius: $radius-lg;
|
||||
box-shadow: $shadow-lg;
|
||||
}
|
||||
|
||||
|
||||
.dialogTitle {
|
||||
font-size: 28rpx;
|
||||
padding-bottom: 12rpx;
|
||||
border-bottom: 1upx solid #eeeeee;
|
||||
font-size: 32rpx;
|
||||
font-weight: 600;
|
||||
color: $text-primary;
|
||||
padding-bottom: 20rpx;
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
align-items: center;
|
||||
}
|
||||
|
||||
// ========== 固定头部/底部 ==========
|
||||
.header_sticky {
|
||||
position: -webkit-sticky;
|
||||
position: sticky;
|
||||
top: 90rpx;
|
||||
top: 0;
|
||||
z-index: 10;
|
||||
background-color: white;
|
||||
background-color: $bg-card;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: space-between;
|
||||
padding: 12rpx 8rpx;
|
||||
border-radius: 0 0 $radius-md $radius-md;
|
||||
box-shadow: $shadow-sm;
|
||||
}
|
||||
.header_fixed {
|
||||
position: fixed;
|
||||
width: 100%;
|
||||
top: env(safe-area-inset-top)px;
|
||||
z-index: 1;
|
||||
background-color: white;
|
||||
background-color: $bg-card;
|
||||
}
|
||||
|
||||
.footer_sticky {
|
||||
position: sticky;
|
||||
bottom: 0;
|
||||
left: 0;
|
||||
right: 0;
|
||||
background-color: #fff;
|
||||
padding: 12rpx;
|
||||
box-shadow: 0 -2rpx 8rpx rgba(0, 0, 0, 0.1);
|
||||
background-color: $bg-card;
|
||||
padding: 16rpx 24rpx;
|
||||
box-shadow: 0 -4rpx 16rpx rgba(28, 25, 23, 0.06);
|
||||
z-index: 10;
|
||||
border-radius: $radius-lg $radius-lg 0 0;
|
||||
}
|
||||
.footer_fixed{
|
||||
.footer_fixed {
|
||||
position: fixed;
|
||||
width: 100%;
|
||||
bottom: 0;
|
||||
z-index: 1;
|
||||
height: 60upx;
|
||||
padding: 12upx;
|
||||
z-index: 100;
|
||||
padding: 16rpx 24rpx;
|
||||
left: 0;
|
||||
background-color: white;
|
||||
background-color: rgba(245, 250, 247, 0.88);
|
||||
-webkit-backdrop-filter: blur(20px);
|
||||
backdrop-filter: blur(20px);
|
||||
display: flex;
|
||||
margin: auto;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
gap: 16rpx;
|
||||
box-sizing: border-box;
|
||||
padding-bottom: calc(16rpx + env(safe-area-inset-bottom));
|
||||
}
|
||||
|
||||
// ========== 状态标签美化 ==========
|
||||
.status-tag {
|
||||
display: inline-flex;
|
||||
align-items: center;
|
||||
padding: 4rpx 16rpx;
|
||||
border-radius: 20rpx;
|
||||
font-size: 22rpx;
|
||||
font-weight: 500;
|
||||
}
|
||||
|
||||
// ========== 空状态提示 ==========
|
||||
.empty-hint {
|
||||
text-align: center;
|
||||
padding: 80rpx 0;
|
||||
color: $text-hint;
|
||||
font-size: 28rpx;
|
||||
}
|
||||
|
||||
// ========== 分割线 ==========
|
||||
.divider {
|
||||
height: 1rpx;
|
||||
background-color: $border-color;
|
||||
margin: 16rpx 0;
|
||||
}
|
||||
|
||||
// ========== 段落间距 ==========
|
||||
.section-gap {
|
||||
height: 20rpx;
|
||||
}
|
||||
</style>
|
||||
|
|
|
|||
20
pages.json
20
pages.json
|
|
@ -161,21 +161,27 @@
|
|||
},
|
||||
{
|
||||
"path" : "pages/hrm/probation_form",
|
||||
"style" :
|
||||
"style" :
|
||||
{
|
||||
"navigationBarTitleText" : "劳动合同续签"
|
||||
}
|
||||
},
|
||||
{
|
||||
"path" : "pages/hrm/empcontract_form",
|
||||
"style" :
|
||||
{
|
||||
"navigationBarTitleText" : "合同变更"
|
||||
}
|
||||
}
|
||||
|
||||
],
|
||||
"globalStyle": {
|
||||
"navigationBarTextStyle": "black",
|
||||
"navigationBarTitleText": "uni-app",
|
||||
"navigationBarBackgroundColor": "#FFFFFF",
|
||||
"backgroundColor": "#FFFFFF",
|
||||
// "backgroundColor": "#F8F8F8",
|
||||
"navigationBarTextStyle": "white",
|
||||
"navigationBarTitleText": "",
|
||||
"navigationBarBackgroundColor": "#2BA471",
|
||||
"backgroundColor": "#F5FAF7",
|
||||
"app-plus": {
|
||||
"background": "#efeff4"
|
||||
"background": "#F5FAF7"
|
||||
}
|
||||
}
|
||||
// "tabBar": {
|
||||
|
|
|
|||
|
|
@ -1,11 +1,16 @@
|
|||
<template>
|
||||
<view class="container" >
|
||||
<view class="form-page" >
|
||||
<scroll-view
|
||||
scroll-y
|
||||
:scroll-top="scrollTop"
|
||||
style="height: auto; min-height: 200px;"
|
||||
class="form-scroll"
|
||||
>
|
||||
<view class="form-card" v-if="form.ticket_">
|
||||
<ticketd :ticket_="form.ticket_"></ticketd>
|
||||
</view>
|
||||
<uni-forms v-model="form" label-width="150rpx" ref="customForm" :rules="customRules" style="height: 60%;">
|
||||
<view class="form-card">
|
||||
<view class="form-card-title">资产信息</view>
|
||||
<uni-forms-item label="保管部门" required>
|
||||
<searchSelect v-model="form.keep_dept" :apiobjs="deptApiobj" v-if="mode== 'add'"/>
|
||||
<span v-else>{{form.keeper_name}}</span>
|
||||
|
|
@ -23,6 +28,7 @@
|
|||
:disabled="mode !== 'add'"
|
||||
/>
|
||||
</uni-forms-item>
|
||||
</view>
|
||||
</uni-forms>
|
||||
|
||||
<view
|
||||
|
|
@ -98,8 +104,7 @@
|
|||
</uni-forms>
|
||||
<view class="item-action">
|
||||
<button
|
||||
type="warn"
|
||||
size="mini"
|
||||
class="form-btn form-btn-danger"
|
||||
@click="removeItem(index)"
|
||||
>
|
||||
删除
|
||||
|
|
@ -110,7 +115,7 @@
|
|||
<view class="footer">
|
||||
<!-- 入库明细 -->
|
||||
<button
|
||||
type="primary"
|
||||
class="form-btn form-btn-primary"
|
||||
@click="addItem"
|
||||
style="margin-bottom: 20rpx"
|
||||
>
|
||||
|
|
@ -118,7 +123,7 @@
|
|||
</button>
|
||||
<button
|
||||
v-if="mode === 'edit'"
|
||||
type="warn"
|
||||
class="form-btn form-btn-danger"
|
||||
@click="handleDel"
|
||||
:loading="saveLoading"
|
||||
>
|
||||
|
|
@ -126,7 +131,7 @@
|
|||
</button>
|
||||
<button
|
||||
v-if="mode !== 'show'"
|
||||
type="primary"
|
||||
class="form-btn form-btn-primary"
|
||||
@click="handleSave"
|
||||
:loading="saveLoading"
|
||||
>
|
||||
|
|
@ -140,12 +145,6 @@
|
|||
@success="$emit('success', mode)"
|
||||
/>
|
||||
</view>
|
||||
|
||||
<ticketd
|
||||
v-if="form.ticket_"
|
||||
:ticket_="form.ticket_"
|
||||
@success="$emit('success')"
|
||||
/>
|
||||
</scroll-view>
|
||||
</view>
|
||||
</template>
|
||||
|
|
@ -248,7 +247,15 @@ export default {
|
|||
}
|
||||
}
|
||||
</script>
|
||||
<style scoped>
|
||||
<style lang="scss" scoped>
|
||||
.form-page { min-height: 100vh; background: #F0F2F5; }
|
||||
.form-scroll { padding: 20rpx 24rpx; padding-bottom: 180rpx; }
|
||||
.form-card { background: #fff; border-radius: 20rpx; padding: 24rpx; margin-bottom: 20rpx; box-shadow: 0 2rpx 12rpx rgba(0,0,0,0.04); }
|
||||
.form-card-title { font-size: 30rpx; font-weight: 600; color: #1F2937; margin-bottom: 16rpx; padding-left: 16rpx; border-left: 6rpx solid #2BA471; }
|
||||
.form-textarea { width: 100%; min-height: 160rpx; border: 2rpx solid #E5E7EB; border-radius: 12rpx; padding: 16rpx; font-size: 28rpx; color: #374151; box-sizing: border-box; background: #F9FAFB; }
|
||||
.form-btn { flex: 1; height: 80rpx; line-height: 80rpx; border-radius: 14rpx !important; font-size: 28rpx; font-weight: 500; border: none !important; }
|
||||
.form-btn-primary { background: linear-gradient(135deg, #2BA471, #1F8C5E) !important; color: #fff !important; box-shadow: 0 4rpx 12rpx rgba(43,164,113,0.2); }
|
||||
.form-btn-danger { background: linear-gradient(135deg, #EF4444, #DC2626) !important; color: #fff !important; box-shadow: 0 4rpx 12rpx rgba(239,68,68,0.3); }
|
||||
.items-box {
|
||||
margin: 20rpx;
|
||||
padding: 20rpx;
|
||||
|
|
@ -268,10 +275,7 @@ export default {
|
|||
margin-top: 10rpx;
|
||||
}
|
||||
|
||||
|
||||
.add-btn {
|
||||
margin-top: 20rpx;
|
||||
}
|
||||
|
||||
|
||||
</style>
|
||||
|
|
|
|||
|
|
@ -1,47 +1,61 @@
|
|||
<template>
|
||||
<view class="container">
|
||||
<image src="/static/banner_c.png" mode="widthFix" style="width:100%"></image>
|
||||
<uni-segmented-control :current="current" :values="items" styleType="button" @clickItem="onClickItem">
|
||||
</uni-segmented-control>
|
||||
<view style="height: 8rpx;"></view>
|
||||
<uni-section>
|
||||
<view v-if="current==0" style="background-color;:white">
|
||||
<uni-forms ref="form1" :modelValue="formData" label-position="left" border :rules="rules1">
|
||||
<uni-forms-item required label="用户名" name="username">
|
||||
<uni-easyinput type="text" v-model="formData.username" placeholder="请输入用户名" />
|
||||
</uni-forms-item>
|
||||
<uni-forms-item required label="密码" name="password">
|
||||
<uni-easyinput type="password" v-model="formData.password" placeholder="请输入密码" />
|
||||
</uni-forms-item>
|
||||
</uni-forms>
|
||||
<view class="login-page">
|
||||
<!-- 顶部渐变区域 -->
|
||||
<view class="login-header">
|
||||
<image src="/static/banner_c.png" mode="widthFix" class="login-banner"></image>
|
||||
<view class="login-welcome">
|
||||
<text class="login-title">欢迎回来</text>
|
||||
<text class="login-subtitle">登录您的账号以继续</text>
|
||||
</view>
|
||||
<view v-if="current==1" style="background-color;:white">
|
||||
<uni-forms ref="form2" :modelValue="formData2" label-position="left" border :rules="rules2">
|
||||
<uni-forms-item label="手机号" name="phone" required>
|
||||
<uni-easyinput type="number" v-model="formData2.phone" placeholder="请输入手机号" />
|
||||
</uni-forms-item>
|
||||
<uni-forms-item label="验证码" name="code" required>
|
||||
<view style="display: flex;">
|
||||
<view style="width: 60%;">
|
||||
<uni-easyinput type="number" v-model="formData2.code" placeholder="请输入验证码" />
|
||||
</view>
|
||||
<view style="width: 40%;display: flex;justify-content: center;align-items: center;">
|
||||
<span @click="getCode">{{content}}</span>
|
||||
</view>
|
||||
</view>
|
||||
</uni-forms-item>
|
||||
</uni-forms>
|
||||
</view>
|
||||
<!-- 登录卡片 -->
|
||||
<view class="login-card">
|
||||
<view class="login-tabs">
|
||||
<view class="login-tab" :class="{active: current===0}" @click="onClickItem({currentIndex:0})">密码登录</view>
|
||||
<view class="login-tab" :class="{active: current===1}" @click="onClickItem({currentIndex:1})">验证码登录</view>
|
||||
<view class="login-tab-indicator" :style="{left: current===0?'0%':'50%'}"></view>
|
||||
</view>
|
||||
<view class="login-form-wrap">
|
||||
<view v-if="current==0">
|
||||
<uni-forms ref="form1" :modelValue="formData" label-position="left" :rules="rules1">
|
||||
<uni-forms-item required label="用户名" name="username">
|
||||
<uni-easyinput type="text" v-model="formData.username" placeholder="请输入用户名" />
|
||||
</uni-forms-item>
|
||||
<uni-forms-item required label="密码" name="password">
|
||||
<uni-easyinput type="password" v-model="formData.password" placeholder="请输入密码" />
|
||||
</uni-forms-item>
|
||||
</uni-forms>
|
||||
</view>
|
||||
<view v-if="current==1">
|
||||
<uni-forms ref="form2" :modelValue="formData2" label-position="left" :rules="rules2">
|
||||
<uni-forms-item label="手机号" name="phone" required>
|
||||
<uni-easyinput type="number" v-model="formData2.phone" placeholder="请输入手机号" />
|
||||
</uni-forms-item>
|
||||
<uni-forms-item label="验证码" name="code" required>
|
||||
<view class="code-row">
|
||||
<view class="code-input">
|
||||
<uni-easyinput type="number" v-model="formData2.code" placeholder="请输入验证码" />
|
||||
</view>
|
||||
<view class="code-btn" @click="getCode">
|
||||
<text class="code-btn-text">{{content}}</text>
|
||||
</view>
|
||||
</view>
|
||||
</uni-forms-item>
|
||||
</uni-forms>
|
||||
</view>
|
||||
</view>
|
||||
<button class="login-btn" @click="login(current)">登 录</button>
|
||||
</view>
|
||||
<!-- 下载进度弹窗 -->
|
||||
<view v-show="dShow" class="download-mask">
|
||||
<view class="download-dialog">
|
||||
<view class="download-icon">⬇</view>
|
||||
<text class="download-text">下载中 请勿退出</text>
|
||||
<view class="download-progress-bar">
|
||||
<view class="download-progress-fill" :style="{width: percentVal+'%'}"></view>
|
||||
</view>
|
||||
<text class="download-percent">{{percentVal}}%</text>
|
||||
</view>
|
||||
</uni-section>
|
||||
<button style="background-color:#2979ff;color:white" @click="login(current)">登录</button>
|
||||
<!-- <view style="text-align: center;margin-top: 20rpx;">
|
||||
<uni-icons type="weixin" size="36" color="green" @click="wxmpLogin"></uni-icons>
|
||||
<view style="text-align: center;font-size: 32rpx;">微信登陆</view>
|
||||
</view> -->
|
||||
<view v-show="dShow" style="position: fixed;top: 0;left: 0;width: 100%;height: 100%;background: rgba(0, 0, 0, .5);z-index: 999;">
|
||||
<view style="position: absolute;padding: 50rpx;background: #ffffff;display: inline-block;margin: auto;top: 40%;left: 50%;transform: translateX(-50%);">
|
||||
下载中 请勿退出 {{percentVal}}%
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
</template>
|
||||
|
|
@ -370,8 +384,188 @@
|
|||
}
|
||||
</script>
|
||||
|
||||
<style>
|
||||
.uni-section-header {
|
||||
padding: 0px 0px !important;
|
||||
<style lang="scss" scoped>
|
||||
.login-page {
|
||||
min-height: 100vh;
|
||||
background: linear-gradient(180deg, #14694A 0%, #1F8C5E 35%, #F5FAF7 40%);
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
.login-header {
|
||||
position: relative;
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
.login-banner {
|
||||
width: 100%;
|
||||
display: block;
|
||||
opacity: 0.08;
|
||||
}
|
||||
|
||||
.login-welcome {
|
||||
position: absolute;
|
||||
bottom: 60rpx;
|
||||
left: 48rpx;
|
||||
}
|
||||
|
||||
.login-title {
|
||||
display: block;
|
||||
font-size: 48rpx;
|
||||
font-weight: 800;
|
||||
color: #FFFFFF;
|
||||
letter-spacing: 6rpx;
|
||||
}
|
||||
|
||||
.login-subtitle {
|
||||
display: block;
|
||||
font-size: 26rpx;
|
||||
color: rgba(255, 255, 255, 0.6);
|
||||
margin-top: 12rpx;
|
||||
}
|
||||
|
||||
.login-card {
|
||||
margin: -40rpx 32rpx 0;
|
||||
background: #FFFFFF;
|
||||
border-radius: 16rpx;
|
||||
padding: 44rpx 32rpx;
|
||||
box-shadow: 0 12rpx 40rpx rgba(25, 27, 35, 0.06);
|
||||
position: relative;
|
||||
z-index: 2;
|
||||
}
|
||||
|
||||
.login-tabs {
|
||||
display: flex;
|
||||
position: relative;
|
||||
margin-bottom: 40rpx;
|
||||
border-bottom: 2rpx solid #C4C6D0;
|
||||
padding-bottom: 0;
|
||||
}
|
||||
|
||||
.login-tab {
|
||||
flex: 1;
|
||||
text-align: center;
|
||||
font-size: 30rpx;
|
||||
color: #74777F;
|
||||
padding-bottom: 20rpx;
|
||||
transition: color 0.3s;
|
||||
&.active {
|
||||
color: #2BA471;
|
||||
font-weight: 600;
|
||||
}
|
||||
}
|
||||
|
||||
.login-tab-indicator {
|
||||
position: absolute;
|
||||
bottom: 0;
|
||||
width: 50%;
|
||||
height: 5rpx;
|
||||
background: linear-gradient(90deg, #2BA471, #2BA471);
|
||||
border-radius: 4rpx;
|
||||
transition: left 0.3s ease;
|
||||
}
|
||||
|
||||
.login-form-wrap {
|
||||
margin-bottom: 32rpx;
|
||||
}
|
||||
|
||||
.code-row {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
gap: 16rpx;
|
||||
}
|
||||
|
||||
.code-input {
|
||||
flex: 1;
|
||||
}
|
||||
|
||||
.code-btn {
|
||||
min-width: 180rpx;
|
||||
height: 72rpx;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
background: linear-gradient(135deg, #2BA471, #1F8C5E);
|
||||
border-radius: 12rpx;
|
||||
padding: 0 20rpx;
|
||||
}
|
||||
|
||||
.code-btn-text {
|
||||
color: #FFFFFF;
|
||||
font-size: 24rpx;
|
||||
white-space: nowrap;
|
||||
}
|
||||
|
||||
.login-btn {
|
||||
width: 100% !important;
|
||||
height: 92rpx;
|
||||
line-height: 92rpx;
|
||||
background: linear-gradient(135deg, #2BA471, #1F8C5E) !important;
|
||||
color: #FFFFFF !important;
|
||||
font-size: 33rpx;
|
||||
font-weight: 700;
|
||||
letter-spacing: 8rpx;
|
||||
border: none !important;
|
||||
border-radius: 16rpx !important;
|
||||
box-shadow: 0 8rpx 24rpx rgba(43, 164, 113, 0.2);
|
||||
margin-top: 16rpx;
|
||||
&:active {
|
||||
opacity: 0.85;
|
||||
transform: scale(0.98);
|
||||
}
|
||||
}
|
||||
|
||||
.download-mask {
|
||||
position: fixed;
|
||||
top: 0;
|
||||
left: 0;
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
background: rgba(0, 0, 0, 0.5);
|
||||
z-index: 999;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
}
|
||||
|
||||
.download-dialog {
|
||||
background: #fff;
|
||||
border-radius: 24rpx;
|
||||
padding: 48rpx 40rpx;
|
||||
width: 560rpx;
|
||||
text-align: center;
|
||||
box-shadow: 0 16rpx 48rpx rgba(0, 0, 0, 0.15);
|
||||
}
|
||||
|
||||
.download-icon {
|
||||
font-size: 64rpx;
|
||||
margin-bottom: 20rpx;
|
||||
}
|
||||
|
||||
.download-text {
|
||||
display: block;
|
||||
font-size: 30rpx;
|
||||
color: #191B23;
|
||||
margin-bottom: 24rpx;
|
||||
}
|
||||
|
||||
.download-progress-bar {
|
||||
height: 12rpx;
|
||||
background: #C4C6D0;
|
||||
border-radius: 6rpx;
|
||||
overflow: hidden;
|
||||
margin-bottom: 16rpx;
|
||||
}
|
||||
|
||||
.download-progress-fill {
|
||||
height: 100%;
|
||||
background: linear-gradient(90deg, #2BA471, #1F8C5E);
|
||||
border-radius: 6rpx;
|
||||
transition: width 0.3s;
|
||||
}
|
||||
|
||||
.download-percent {
|
||||
font-size: 28rpx;
|
||||
color: #2BA471;
|
||||
font-weight: 600;
|
||||
}
|
||||
</style>
|
||||
|
|
@ -1,9 +1,13 @@
|
|||
<!-- 离职申请 -->
|
||||
<template>
|
||||
<view class="container" style="height: 1400upx">
|
||||
<scroll-view scroll-y style="padding-bottom: 180rpx;background-color: #fff;height: 60%;">
|
||||
<view class="form-page">
|
||||
<scroll-view scroll-y class="form-scroll">
|
||||
<uni-forms v-model="form" label-width="150upx" ref="customForm" style="height: 60%;">
|
||||
<ticketd :ticket_="form.ticket_"></ticketd>
|
||||
<view class="form-card" v-if="form.ticket_">
|
||||
<ticketd :ticket_="form.ticket_"></ticketd>
|
||||
</view>
|
||||
<view class="form-card">
|
||||
<view class="form-card-title">维修信息</view>
|
||||
<uni-forms-item label="创建时间" required v-if="mode!== 'add'">
|
||||
<span>{{form.create_time}}</span>
|
||||
</uni-forms-item>
|
||||
|
|
@ -15,8 +19,8 @@
|
|||
<span v-else>{{form.equipment_fullname}}</span>
|
||||
</uni-forms-item>
|
||||
<uni-forms-item label="故障描述" required>
|
||||
<textarea placeholder-style="color:#efefef" v-model="form.fault_description" placeholder="故障描述" v-if="mode!='show'" style="width:100%; border: 2upx solid #e5e5e5;padding: 10upx;"/>
|
||||
<span v-else>{{form.fault_description}}</span>
|
||||
<textarea placeholder-style="color:#efefef" v-model="form.fault_description" placeholder="故障描述" v-if="mode!='show'" class="form-textarea"/>
|
||||
<span v-else>{{form.fault_description}}</span>
|
||||
</uni-forms-item>
|
||||
<uni-forms-item label="故障类别" required v-if="mode!== 'add'&&(form.fault_cate!==null||form.ticket && form.ticket_.state_.name == '条保负责人分派')">
|
||||
<uni-data-select
|
||||
|
|
@ -39,16 +43,17 @@
|
|||
<span v-else>{{form.repair_duration}}</span>
|
||||
</uni-forms-item>
|
||||
<uni-forms-item label="维修描述" required v-if="mode!== 'add'&&(form.repair_description!==null||form.ticket && form.ticket_.state_.name == '维修人员处理')">
|
||||
<textarea v-model="ticket_data.repair_description" placeholder="故障描述" placeholder-style="color:#efefef" v-if="form.ticket && form.ticket_.state_.name == '维修人员处理'" style="width:100%; border: 2upx solid #e5e5e5;padding: 10upx;"/>
|
||||
<span v-else>{{form.repair_description}}</span>
|
||||
<textarea v-model="ticket_data.repair_description" placeholder="故障描述" placeholder-style="color:#efefef" v-if="form.ticket && form.ticket_.state_.name == '维修人员处理'" class="form-textarea"/>
|
||||
<span v-else>{{form.repair_description}}</span>
|
||||
</uni-forms-item>
|
||||
</view>
|
||||
</uni-forms>
|
||||
</scroll-view>
|
||||
<view class="footer_fixed">
|
||||
<button v-if="mode=='edit'" size="mini" @click="handleDel" :loading="saveLoading" :disabled="saveLoading" type="warn">
|
||||
<button v-if="mode=='edit'" class="form-btn form-btn-danger" @click="handleDel" :loading="saveLoading" :disabled="saveLoading">
|
||||
删除
|
||||
</button>
|
||||
<button v-if="mode!='show'" size="mini" @click="handleSave" :loading="saveLoading" :disabled="saveLoading" type="primary">
|
||||
<button v-if="mode!='show'" class="form-btn form-btn-primary" @click="handleSave" :loading="saveLoading" :disabled="saveLoading">
|
||||
提交审批
|
||||
</button>
|
||||
<ticketd_b v-if="form.ticket_ && mode == 'show'" :t_id="form.id" :ticket_="form.ticket_"
|
||||
|
|
@ -116,15 +121,23 @@ export default {
|
|||
}
|
||||
</script>
|
||||
|
||||
<style scoped>
|
||||
.uni-data-checklist .checklist-group .checklist-box{
|
||||
margin: 10px 0!important;
|
||||
}
|
||||
.flex_file_picker>.uni-file-picker__files{
|
||||
flex-direction: row;
|
||||
}
|
||||
.flex_file_picker{
|
||||
width: 90px;
|
||||
flex: none;
|
||||
}
|
||||
<style lang="scss" scoped>
|
||||
.form-page { min-height: 100vh; background: #F0F2F5; }
|
||||
.form-scroll { padding: 20rpx 24rpx; padding-bottom: 180rpx; }
|
||||
.form-card { background: #fff; border-radius: 20rpx; padding: 24rpx; margin-bottom: 20rpx; box-shadow: 0 2rpx 12rpx rgba(0,0,0,0.04); }
|
||||
.form-card-title { font-size: 30rpx; font-weight: 600; color: #1F2937; margin-bottom: 16rpx; padding-left: 16rpx; border-left: 6rpx solid #2BA471; }
|
||||
.form-textarea { width: 100%; min-height: 160rpx; border: 2rpx solid #E5E7EB; border-radius: 12rpx; padding: 16rpx; font-size: 28rpx; color: #374151; box-sizing: border-box; background: #F9FAFB; }
|
||||
.form-btn { flex: 1; height: 80rpx; line-height: 80rpx; border-radius: 14rpx !important; font-size: 28rpx; font-weight: 500; border: none !important; }
|
||||
.form-btn-primary { background: linear-gradient(135deg, #2BA471, #1F8C5E) !important; color: #fff !important; box-shadow: 0 4rpx 12rpx rgba(43,164,113,0.2); }
|
||||
.form-btn-danger { background: linear-gradient(135deg, #EF4444, #DC2626) !important; color: #fff !important; box-shadow: 0 4rpx 12rpx rgba(239,68,68,0.3); }
|
||||
.uni-data-checklist .checklist-group .checklist-box{
|
||||
margin: 10px 0!important;
|
||||
}
|
||||
.flex_file_picker>.uni-file-picker__files{
|
||||
flex-direction: row;
|
||||
}
|
||||
.flex_file_picker{
|
||||
width: 90px;
|
||||
flex: none;
|
||||
}
|
||||
</style>
|
||||
|
|
@ -0,0 +1,343 @@
|
|||
<!-- 劳动合同续签 -->
|
||||
<template>
|
||||
<view class="form-page">
|
||||
<scroll-view scroll-y class="form-scroll">
|
||||
<uni-forms :modelValue="formData" label-width="180rpx" ref="customForm" :rules="customRules">
|
||||
<!-- 审批状态卡片 -->
|
||||
<view class="form-card" v-if="formData.ticket_">
|
||||
<ticketd :ticket_="formData.ticket_"></ticketd>
|
||||
</view>
|
||||
|
||||
<!-- 员工信息 -->
|
||||
<view class="form-card">
|
||||
<view class="form-card-title">员工信息</view>
|
||||
<uni-forms-item label="员工" required>
|
||||
<searchSelect
|
||||
v-model="formData.employee"
|
||||
:apiobjs="EmpApiobj"
|
||||
@change="handleEmpChange"
|
||||
v-if="mode == 'add'" />
|
||||
<span v-else>{{formData.employee_name}}</span>
|
||||
</uni-forms-item>
|
||||
<uni-forms-item label="部门">
|
||||
<uni-easyinput v-model="formData.belong_dept_name" disabled />
|
||||
</uni-forms-item>
|
||||
<uni-forms-item label="岗位">
|
||||
<uni-easyinput v-model="formData.post_name" disabled />
|
||||
</uni-forms-item>
|
||||
<uni-forms-item label="身份证号">
|
||||
<uni-easyinput v-model="formData.id_number" disabled />
|
||||
</uni-forms-item>
|
||||
<uni-forms-item label="联系方式">
|
||||
<uni-easyinput v-model="formData.phone" disabled />
|
||||
</uni-forms-item>
|
||||
</view>
|
||||
|
||||
<!-- 原合同信息 -->
|
||||
<view class="form-card">
|
||||
<view class="form-card-title">原合同信息</view>
|
||||
<uni-forms-item label="合同类型" required name="contract_type">
|
||||
<uni-data-select
|
||||
v-if="mode != 'show'"
|
||||
v-model="formData.contract_type"
|
||||
:localdata="contractTypeList"
|
||||
placeholder="请选择合同类型"
|
||||
/>
|
||||
<span v-else>{{getLabel(contractTypeList, formData.contract_type)}}</span>
|
||||
</uni-forms-item>
|
||||
<uni-forms-item label="原合同开始日期" required name="original_start_date">
|
||||
<uni-datetime-picker
|
||||
type="date"
|
||||
:clear-icon="false"
|
||||
v-model="formData.original_start_date"
|
||||
v-if="mode != 'show'" />
|
||||
<span v-else>{{formData.original_start_date}}</span>
|
||||
</uni-forms-item>
|
||||
<uni-forms-item label="原合同结束日期" required name="original_end_date">
|
||||
<uni-datetime-picker
|
||||
type="date"
|
||||
:clear-icon="false"
|
||||
v-model="formData.original_end_date"
|
||||
v-if="mode != 'show'" />
|
||||
<span v-else>{{formData.original_end_date}}</span>
|
||||
</uni-forms-item>
|
||||
</view>
|
||||
|
||||
<!-- 续签信息 -->
|
||||
<view class="form-card">
|
||||
<view class="form-card-title">续签信息</view>
|
||||
<uni-forms-item label="续签开始日期" required name="renew_start_date">
|
||||
<uni-datetime-picker
|
||||
type="date"
|
||||
:clear-icon="false"
|
||||
v-model="formData.renew_start_date"
|
||||
v-if="mode != 'show'" />
|
||||
<span v-else>{{formData.renew_start_date}}</span>
|
||||
</uni-forms-item>
|
||||
<uni-forms-item label="续签结束日期" required name="renew_end_date">
|
||||
<uni-datetime-picker
|
||||
type="date"
|
||||
:clear-icon="false"
|
||||
v-model="formData.renew_end_date"
|
||||
v-if="mode != 'show'" />
|
||||
<span v-else>{{formData.renew_end_date}}</span>
|
||||
</uni-forms-item>
|
||||
<uni-forms-item label="续签期限(年)" required name="renew_years">
|
||||
<uni-number-box v-model="formData.renew_years" :min="1" :max="10" v-if="mode != 'show'" />
|
||||
<span v-else>{{formData.renew_years}}年</span>
|
||||
</uni-forms-item>
|
||||
<uni-forms-item label="续签原因" required name="reason">
|
||||
<textarea
|
||||
placeholder-style="color:#c0c4cc"
|
||||
v-model="formData.reason"
|
||||
placeholder="请输入续签原因"
|
||||
class="form-textarea"
|
||||
v-if="mode != 'show'" />
|
||||
<span v-else>{{formData.reason}}</span>
|
||||
</uni-forms-item>
|
||||
<uni-forms-item label="备注" name="remark">
|
||||
<textarea
|
||||
placeholder-style="color:#c0c4cc"
|
||||
v-model="formData.remark"
|
||||
placeholder="请输入备注"
|
||||
class="form-textarea"
|
||||
v-if="mode != 'show'" />
|
||||
<span v-else>{{formData.remark}}</span>
|
||||
</uni-forms-item>
|
||||
<uni-forms-item label="上传附件">
|
||||
<xtUpload v-model="formData.file" xtype="path" :disabled="mode == 'show'"></xtUpload>
|
||||
</uni-forms-item>
|
||||
</view>
|
||||
</uni-forms>
|
||||
</scroll-view>
|
||||
|
||||
<!-- 底部操作 -->
|
||||
<view class="footer_fixed">
|
||||
<button v-if="mode == 'edit'" class="form-btn form-btn-danger" @click="handleDel" :loading="saveLoading" :disabled="saveLoading">
|
||||
删除
|
||||
</button>
|
||||
<button v-if="mode != 'show'" class="form-btn form-btn-primary" @click="handleSave" :loading="saveLoading" :disabled="saveLoading">
|
||||
提交审批
|
||||
</button>
|
||||
<ticketd_b :workflow_key="'wf_empcontract'" v-if="formData.ticket_ && mode == 'show'" :t_id="formData.id" :ticket_="formData.ticket_"
|
||||
:ticket_data="ticket_data" @success="()=>{uni.navigateBack()}" ref="ticketd_b"></ticketd_b>
|
||||
</view>
|
||||
</view>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import ticketd_b from "../wf/ticketd_b.vue"
|
||||
import ticketd from "../wf/ticketd.vue"
|
||||
import searchSelect from "@/components/searchselect.vue"
|
||||
|
||||
export default {
|
||||
components: { ticketd_b, ticketd, searchSelect },
|
||||
data() {
|
||||
return {
|
||||
saveLoading: false,
|
||||
mode: 'show',
|
||||
t_id: null,
|
||||
formData: {
|
||||
employee: '',
|
||||
employee_name: '',
|
||||
belong_dept_name: '',
|
||||
post_name: '',
|
||||
id_number: '',
|
||||
phone: '',
|
||||
contract_type: '',
|
||||
original_start_date: '',
|
||||
original_end_date: '',
|
||||
renew_start_date: '',
|
||||
renew_end_date: '',
|
||||
renew_years: 1,
|
||||
reason: '',
|
||||
remark: '',
|
||||
file: '',
|
||||
},
|
||||
ticket_data: {},
|
||||
EmpApiobj: this.$api.employeeList,
|
||||
contractTypeList: [
|
||||
{ value: 10, text: '固定期限劳动合同' },
|
||||
{ value: 20, text: '无固定期限劳动合同' },
|
||||
{ value: 30, text: '以完成一定工作任务为期限的劳动合同' },
|
||||
],
|
||||
customRules: {
|
||||
contract_type: {
|
||||
rules: [{
|
||||
required: true,
|
||||
errorMessage: '合同类型不能为空'
|
||||
}]
|
||||
},
|
||||
original_start_date: {
|
||||
rules: [{
|
||||
required: true,
|
||||
errorMessage: '原合同开始日期不能为空'
|
||||
}]
|
||||
},
|
||||
original_end_date: {
|
||||
rules: [{
|
||||
required: true,
|
||||
errorMessage: '原合同结束日期不能为空'
|
||||
}]
|
||||
},
|
||||
renew_start_date: {
|
||||
rules: [{
|
||||
required: true,
|
||||
errorMessage: '续签开始日期不能为空'
|
||||
}]
|
||||
},
|
||||
renew_end_date: {
|
||||
rules: [{
|
||||
required: true,
|
||||
errorMessage: '续签结束日期不能为空'
|
||||
}]
|
||||
},
|
||||
renew_years: {
|
||||
rules: [{
|
||||
required: true,
|
||||
errorMessage: '续签期限不能为空'
|
||||
}]
|
||||
},
|
||||
reason: {
|
||||
rules: [{
|
||||
required: true,
|
||||
errorMessage: '续签原因不能为空'
|
||||
}]
|
||||
},
|
||||
},
|
||||
}
|
||||
},
|
||||
async onLoad(options) {
|
||||
let that = this;
|
||||
that.mode = options.mode ? options.mode : 'show';
|
||||
that.t_id = options.t_id ? options.t_id : null;
|
||||
if (that.t_id) {
|
||||
const res = await that.$api.empcontractItem(that.t_id);
|
||||
Object.assign(that.formData, res);
|
||||
if (that.formData.ticket_.state_.type == 1 && that.formData.create_by == uni.getStorageSync("userInfo").id) {
|
||||
that.mode = "edit";
|
||||
} else {
|
||||
that.mode = "show";
|
||||
}
|
||||
} else {
|
||||
that.fillNames();
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
async fillNames() {
|
||||
const employee = await this.$api.employeeInfo();
|
||||
this.formData.employee_name = employee.name;
|
||||
this.formData.belong_dept_name = employee.belong_dept_name;
|
||||
this.formData.post_name = employee.post_name;
|
||||
this.formData.id_number = employee.id_number;
|
||||
this.formData.phone = employee.phone;
|
||||
this.formData.employee = employee.id;
|
||||
this.mode = "add";
|
||||
},
|
||||
async handleEmpChange(id) {
|
||||
if (!id) return;
|
||||
const obj = await this.$api.employeeItem(id);
|
||||
Object.assign(this.formData, {
|
||||
employee_name: obj.name,
|
||||
belong_dept_name: obj.belong_dept_name,
|
||||
post_name: obj.post_name,
|
||||
id_number: obj.id_number,
|
||||
phone: obj.phone,
|
||||
});
|
||||
},
|
||||
getLabel(list, value) {
|
||||
if (!list || value === undefined || value === null) return '';
|
||||
const item = list.find(i => String(i.value) === String(value));
|
||||
return item ? item.text : '';
|
||||
},
|
||||
async handleSave() {
|
||||
let that = this;
|
||||
that.saveLoading = true;
|
||||
try {
|
||||
await that.$refs.customForm.validate();
|
||||
await that.$api.empcontractCreate(that.formData);
|
||||
uni.showToast({ title: '提交成功', icon: 'success' });
|
||||
uni.navigateBack();
|
||||
} catch (err) {
|
||||
console.log('err', err);
|
||||
} finally {
|
||||
that.saveLoading = false;
|
||||
}
|
||||
},
|
||||
async handleDel() {
|
||||
let that = this;
|
||||
uni.showModal({
|
||||
title: '提示',
|
||||
content: '确定删除该续签申请吗?',
|
||||
success: async (res) => {
|
||||
if (res.confirm) {
|
||||
await that.$api.empcontractDelete(that.formData.id);
|
||||
uni.navigateBack();
|
||||
}
|
||||
}
|
||||
});
|
||||
},
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
||||
<style lang="scss" scoped>
|
||||
.form-page {
|
||||
min-height: 100vh;
|
||||
background: #F5FAF7;
|
||||
}
|
||||
|
||||
.form-scroll {
|
||||
padding: 20rpx 24rpx;
|
||||
padding-bottom: 180rpx;
|
||||
}
|
||||
|
||||
.form-card {
|
||||
background: #FFFFFF;
|
||||
border-radius: 16rpx;
|
||||
padding: 24rpx;
|
||||
margin-bottom: 20rpx;
|
||||
}
|
||||
|
||||
.form-card-title {
|
||||
font-size: 30rpx;
|
||||
font-weight: 600;
|
||||
color: #1A2E25;
|
||||
margin-bottom: 16rpx;
|
||||
padding-left: 16rpx;
|
||||
border-left: 6rpx solid #2BA471;
|
||||
}
|
||||
|
||||
.form-textarea {
|
||||
width: 100%;
|
||||
min-height: 160rpx;
|
||||
border: 2rpx solid #C4C6D0;
|
||||
border-radius: 12rpx;
|
||||
padding: 16rpx;
|
||||
font-size: 28rpx;
|
||||
color: #1A2E25;
|
||||
box-sizing: border-box;
|
||||
background: #FFFFFF;
|
||||
}
|
||||
|
||||
.form-btn {
|
||||
flex: 1;
|
||||
height: 80rpx;
|
||||
line-height: 80rpx;
|
||||
border-radius: 14rpx !important;
|
||||
font-size: 28rpx;
|
||||
font-weight: 500;
|
||||
border: none !important;
|
||||
letter-spacing: 2rpx;
|
||||
}
|
||||
|
||||
.form-btn-primary {
|
||||
background: linear-gradient(135deg, #1F8C5E, #2BA471) !important;
|
||||
color: #fff !important;
|
||||
}
|
||||
|
||||
.form-btn-danger {
|
||||
background: linear-gradient(135deg, #EF4444, #DC2626) !important;
|
||||
color: #fff !important;
|
||||
}
|
||||
</style>
|
||||
|
|
@ -1,9 +1,13 @@
|
|||
<!-- 人员交接 -->
|
||||
<template>
|
||||
<view class="container">
|
||||
<scroll-view scroll-y style="padding-bottom: 180rpx;background-color: #fff;">
|
||||
<view class="form-page">
|
||||
<scroll-view scroll-y class="form-scroll">
|
||||
<uni-forms v-model="form" label-width="190rpx" ref="customForm" :rules="customRules">
|
||||
<ticketd :ticket_="form.ticket_"></ticketd>
|
||||
<view class="form-card" v-if="form.ticket_">
|
||||
<ticketd :ticket_="form.ticket_"></ticketd>
|
||||
</view>
|
||||
<view class="form-card">
|
||||
<view class="form-card-title">交接信息</view>
|
||||
<uni-forms-item label="需求部门" required name="dept_need">
|
||||
<uni-data-picker
|
||||
v-model="form.dept_need"
|
||||
|
|
@ -24,6 +28,7 @@
|
|||
v-model="form.join_date"
|
||||
/>
|
||||
</uni-forms-item>
|
||||
</view>
|
||||
</uni-forms>
|
||||
</scroll-view>
|
||||
<!-- 人员列表 -->
|
||||
|
|
@ -86,7 +91,7 @@
|
|||
<!-- 新增人员 -->
|
||||
<button
|
||||
v-if="mode !== 'show'"
|
||||
type="primary"
|
||||
class="form-btn form-btn-primary"
|
||||
style="margin-bottom: 20rpx"
|
||||
@click="addPerson"
|
||||
>
|
||||
|
|
@ -95,10 +100,10 @@
|
|||
|
||||
<!-- 底部操作 -->
|
||||
<view class="footer_fixed">
|
||||
<button v-if="mode=='edit'" size="mini" @click="handleDel" :loading="saveLoading" :disabled="saveLoading" type="warn">
|
||||
<button v-if="mode=='edit'" class="form-btn form-btn-danger" @click="handleDel" :loading="saveLoading" :disabled="saveLoading">
|
||||
删除
|
||||
</button>
|
||||
<button v-if="mode!='show'" size="mini" @click="handleSave" :loading="saveLoading" :disabled="saveLoading" type="primary">
|
||||
<button v-if="mode!='show'" class="form-btn form-btn-primary" @click="handleSave" :loading="saveLoading" :disabled="saveLoading">
|
||||
提交审批
|
||||
</button>
|
||||
<ticketd_b :workflow_key="'wf_empjoin'" v-if="form.ticket_ && mode == 'show'" :t_id="form.id" :ticket_="form.ticket_"
|
||||
|
|
@ -202,21 +207,29 @@ export default {
|
|||
|
||||
</script>
|
||||
|
||||
<style scoped>
|
||||
.uni-data-checklist .checklist-group .checklist-box{
|
||||
margin: 10px 0!important;
|
||||
}
|
||||
.flex_file_picker>.uni-file-picker__files{
|
||||
flex-direction: row;
|
||||
}
|
||||
.flex_file_picker{
|
||||
width: 90px;
|
||||
flex: none;
|
||||
}
|
||||
.del-btn {
|
||||
height: 56rpx;
|
||||
line-height: 56rpx;
|
||||
padding: 0 20rpx;
|
||||
font-size: 24rpx;
|
||||
}
|
||||
<style lang="scss" scoped>
|
||||
.form-page { min-height: 100vh; background: #F0F2F5; }
|
||||
.form-scroll { padding: 20rpx 24rpx; padding-bottom: 180rpx; }
|
||||
.form-card { background: #fff; border-radius: 20rpx; padding: 24rpx; margin-bottom: 20rpx; box-shadow: 0 2rpx 12rpx rgba(0,0,0,0.04); }
|
||||
.form-card-title { font-size: 30rpx; font-weight: 600; color: #1F2937; margin-bottom: 16rpx; padding-left: 16rpx; border-left: 6rpx solid #2BA471; }
|
||||
.form-textarea { width: 100%; min-height: 160rpx; border: 2rpx solid #E5E7EB; border-radius: 12rpx; padding: 16rpx; font-size: 28rpx; color: #374151; box-sizing: border-box; background: #F9FAFB; }
|
||||
.form-btn { flex: 1; height: 80rpx; line-height: 80rpx; border-radius: 14rpx !important; font-size: 28rpx; font-weight: 500; border: none !important; }
|
||||
.form-btn-primary { background: linear-gradient(135deg, #2BA471, #1F8C5E) !important; color: #fff !important; box-shadow: 0 4rpx 12rpx rgba(43,164,113,0.2); }
|
||||
.form-btn-danger { background: linear-gradient(135deg, #EF4444, #DC2626) !important; color: #fff !important; box-shadow: 0 4rpx 12rpx rgba(239,68,68,0.3); }
|
||||
.uni-data-checklist .checklist-group .checklist-box{
|
||||
margin: 10px 0!important;
|
||||
}
|
||||
.flex_file_picker>.uni-file-picker__files{
|
||||
flex-direction: row;
|
||||
}
|
||||
.flex_file_picker{
|
||||
width: 90px;
|
||||
flex: none;
|
||||
}
|
||||
.del-btn {
|
||||
height: 56rpx;
|
||||
line-height: 56rpx;
|
||||
padding: 0 20rpx;
|
||||
font-size: 24rpx;
|
||||
}
|
||||
</style>
|
||||
|
|
@ -1,71 +1,79 @@
|
|||
<!-- 离职申请 -->
|
||||
<!-- 员工需求 -->
|
||||
<template>
|
||||
<view class="container">
|
||||
<scroll-view scroll-y style="padding-bottom: 180rpx;background-color: #fff;">
|
||||
<uni-forms v-model="form" label-width="150rpx" ref="customForm" :rules="customRules">
|
||||
<ticketd :ticket_="form.ticket_"></ticketd>
|
||||
<uni-forms-item label="部门">
|
||||
<uni-easyinput v-model="form.belong_dept_name" placeholder="请输入岗位" :disabled="true" v-if="mode!='show'"/>
|
||||
<span v-else>{{form.belong_dept_name}}</span>
|
||||
</uni-forms-item>
|
||||
<uni-forms-item label="员工信息">
|
||||
<span>{{form.employee_name}}</span>
|
||||
</uni-forms-item>
|
||||
<uni-forms-item label="需求岗位">
|
||||
<uni-easyinput v-model="form.post_name" placeholder="请输入需求岗位" :disabled="true" v-if="mode!='show'"/>
|
||||
<span v-else>{{form.post_name}}</span>
|
||||
</uni-forms-item>
|
||||
<uni-forms-item label="需求人数" required>
|
||||
<uni-number-box v-model="form.count_need" :min="0" v-if="mode!='show'"></uni-number-box>
|
||||
<span v-else>{{form.count_need}}</span>
|
||||
</uni-forms-item>
|
||||
<uni-forms-item label="工资报酬" required>
|
||||
<uni-number-box v-model="form.salary" :min="0" v-if="mode!='show'"></uni-number-box>
|
||||
<span v-else>{{form.salary}}</span>
|
||||
</uni-forms-item>
|
||||
<uni-forms-item label="性别要求" required>
|
||||
<uni-data-checkbox
|
||||
v-model="form.gender"
|
||||
:localdata="genderList"
|
||||
v-if="mode!='show'"/>
|
||||
<span v-else>{{ getLabel(genderList, form.gender) }}</span>
|
||||
</uni-forms-item>
|
||||
<uni-forms-item label="学历要求" required>
|
||||
<uni-data-select
|
||||
v-if="mode!='show'"
|
||||
v-model="form.education"
|
||||
:localdata="educationList"
|
||||
:disabled="mode=='show'"
|
||||
@change="educationChange"
|
||||
></uni-data-select>
|
||||
<span v-else>{{getLabel(educationList,form.education) }}</span>
|
||||
</uni-forms-item>
|
||||
<uni-forms-item label="到岗日期" required>
|
||||
<uni-datetime-picker type="date" :clear-icon="false" v-model="form.arrival_date" v-if="mode!='show'"/>
|
||||
<span v-else>{{form.arrival_date}}</span>
|
||||
</uni-forms-item>
|
||||
<uni-forms-item label="申请理由" required>
|
||||
<uni-data-checkbox v-model="form.reason" :localdata="reasonList" placeholder="请选择申请描述" v-if="mode!='show'"></uni-data-checkbox>
|
||||
<span v-else>{{getLabel(reasonList,form.reason)}}</span>
|
||||
</uni-forms-item>
|
||||
<uni-forms-item label="职责描述" required>
|
||||
<uni-easyinput v-model="form.duty" placeholder="请输入职责描述" v-if="mode!='show'"/>
|
||||
<span v-else>{{form.duty}}</span>
|
||||
</uni-forms-item>
|
||||
<uni-forms-item label="相关专业及技能要求">
|
||||
<textarea placeholder-style="color:#efefef" v-model="form.professional_requirement" placeholder="相关专业及技能要求" v-if="mode!='show'" style="width:100%; border: 2upx solid #e5e5e5;padding: 10upx;"/>
|
||||
<span v-else>{{form.professional_requirement}}</span>
|
||||
</uni-forms-item>
|
||||
<view class="form-page">
|
||||
<scroll-view scroll-y class="form-scroll">
|
||||
<uni-forms v-model="form" label-width="150rpx" ref="customForm" :rules="customRules">
|
||||
<view class="form-card" v-if="form.ticket_">
|
||||
<ticketd :ticket_="form.ticket_"></ticketd>
|
||||
</view>
|
||||
<view class="form-card">
|
||||
<view class="form-card-title">基本信息</view>
|
||||
<uni-forms-item label="部门">
|
||||
<uni-easyinput v-model="form.belong_dept_name" placeholder="请输入岗位" :disabled="true" v-if="mode!='show'"/>
|
||||
<span v-else>{{form.belong_dept_name}}</span>
|
||||
</uni-forms-item>
|
||||
<uni-forms-item label="员工信息">
|
||||
<span>{{form.employee_name}}</span>
|
||||
</uni-forms-item>
|
||||
<uni-forms-item label="需求岗位">
|
||||
<uni-easyinput v-model="form.post_name" placeholder="请输入需求岗位" :disabled="true" v-if="mode!='show'"/>
|
||||
<span v-else>{{form.post_name}}</span>
|
||||
</uni-forms-item>
|
||||
</view>
|
||||
<view class="form-card">
|
||||
<view class="form-card-title">需求详情</view>
|
||||
<uni-forms-item label="需求人数" required>
|
||||
<uni-number-box v-model="form.count_need" :min="0" v-if="mode!='show'"></uni-number-box>
|
||||
<span v-else>{{form.count_need}}</span>
|
||||
</uni-forms-item>
|
||||
<uni-forms-item label="工资报酬" required>
|
||||
<uni-number-box v-model="form.salary" :min="0" v-if="mode!='show'"></uni-number-box>
|
||||
<span v-else>{{form.salary}}</span>
|
||||
</uni-forms-item>
|
||||
<uni-forms-item label="性别要求" required>
|
||||
<uni-data-checkbox
|
||||
v-model="form.gender"
|
||||
:localdata="genderList"
|
||||
v-if="mode!='show'"/>
|
||||
<span v-else>{{ getLabel(genderList, form.gender) }}</span>
|
||||
</uni-forms-item>
|
||||
<uni-forms-item label="学历要求" required>
|
||||
<uni-data-select
|
||||
v-if="mode!='show'"
|
||||
v-model="form.education"
|
||||
:localdata="educationList"
|
||||
:disabled="mode=='show'"
|
||||
@change="educationChange"
|
||||
></uni-data-select>
|
||||
<span v-else>{{getLabel(educationList,form.education) }}</span>
|
||||
</uni-forms-item>
|
||||
<uni-forms-item label="到岗日期" required>
|
||||
<uni-datetime-picker type="date" :clear-icon="false" v-model="form.arrival_date" v-if="mode!='show'"/>
|
||||
<span v-else>{{form.arrival_date}}</span>
|
||||
</uni-forms-item>
|
||||
<uni-forms-item label="申请理由" required>
|
||||
<uni-data-checkbox v-model="form.reason" :localdata="reasonList" placeholder="请选择申请描述" v-if="mode!='show'"></uni-data-checkbox>
|
||||
<span v-else>{{getLabel(reasonList,form.reason)}}</span>
|
||||
</uni-forms-item>
|
||||
<uni-forms-item label="职责描述" required>
|
||||
<uni-easyinput v-model="form.duty" placeholder="请输入职责描述" v-if="mode!='show'"/>
|
||||
<span v-else>{{form.duty}}</span>
|
||||
</uni-forms-item>
|
||||
<uni-forms-item label="专业技能要求">
|
||||
<textarea placeholder-style="color:#c0c4cc" v-model="form.professional_requirement" placeholder="相关专业及技能要求" v-if="mode!='show'" class="form-textarea"/>
|
||||
<span v-else>{{form.professional_requirement}}</span>
|
||||
</uni-forms-item>
|
||||
</view>
|
||||
</uni-forms>
|
||||
</scroll-view>
|
||||
<view class="footer_fixed">
|
||||
<button v-if="mode=='edit'" size="mini" @click="handleDel" :loading="saveLoading" :disabled="saveLoading" type="warn">
|
||||
<button v-if="mode=='edit'" class="form-btn form-btn-danger" @click="handleDel" :loading="saveLoading" :disabled="saveLoading">
|
||||
删除
|
||||
</button>
|
||||
<button v-if="mode!='show'" size="mini" @click="handleSave" :loading="saveLoading" :disabled="saveLoading" type="primary">
|
||||
<button v-if="mode!='show'" class="form-btn form-btn-primary" @click="handleSave" :loading="saveLoading" :disabled="saveLoading">
|
||||
提交审批
|
||||
</button>
|
||||
<ticketd_b :workflow_key="'wf_empneed'" v-if="form.ticket_ && mode == 'show'" :t_id="form.id" :ticket_="form.ticket_"
|
||||
<ticketd_b :workflow_key="'wf_empneed'" v-if="form.ticket_ && mode == 'show'" :t_id="form.id" :ticket_="form.ticket_"
|
||||
:ticket_data="ticket_data" @success="()=>{uni.navigateBack()}" ref="ticketd_b"></ticketd_b>
|
||||
</view>
|
||||
</view>
|
||||
|
|
@ -180,15 +188,13 @@ import {actStateEnum} from "@/utils/enum.js"
|
|||
}
|
||||
</script>
|
||||
|
||||
<style scoped>
|
||||
.uni-data-checklist .checklist-group .checklist-box{
|
||||
margin: 10px 0!important;
|
||||
}
|
||||
.flex_file_picker>.uni-file-picker__files{
|
||||
flex-direction: row;
|
||||
}
|
||||
.flex_file_picker{
|
||||
width: 90px;
|
||||
flex: none;
|
||||
}
|
||||
<style lang="scss" scoped>
|
||||
.form-page { min-height: 100vh; background: #F0F2F5; }
|
||||
.form-scroll { padding: 20rpx 24rpx; padding-bottom: 180rpx; }
|
||||
.form-card { background: #fff; border-radius: 20rpx; padding: 24rpx; margin-bottom: 20rpx; box-shadow: 0 2rpx 12rpx rgba(0,0,0,0.04); }
|
||||
.form-card-title { font-size: 30rpx; font-weight: 600; color: #1F2937; margin-bottom: 16rpx; padding-left: 16rpx; border-left: 6rpx solid #2BA471; }
|
||||
.form-textarea { width: 100%; min-height: 160rpx; border: 2rpx solid #E5E7EB; border-radius: 12rpx; padding: 16rpx; font-size: 28rpx; color: #374151; box-sizing: border-box; background: #F9FAFB; }
|
||||
.form-btn { flex: 1; height: 80rpx; line-height: 80rpx; border-radius: 14rpx !important; font-size: 28rpx; font-weight: 500; border: none !important; }
|
||||
.form-btn-primary { background: linear-gradient(135deg, #2BA471, #1F8C5E) !important; color: #fff !important; box-shadow: 0 4rpx 12rpx rgba(43,164,113,0.2); }
|
||||
.form-btn-danger { background: linear-gradient(135deg, #EF4444, #DC2626) !important; color: #fff !important; box-shadow: 0 4rpx 12rpx rgba(239,68,68,0.3); }
|
||||
</style>
|
||||
|
|
@ -1,59 +1,71 @@
|
|||
<!-- 请假申请 -->
|
||||
<template>
|
||||
<view class="container">
|
||||
<scroll-view scroll-y style="padding-bottom: 180rpx;background-color: #fff;">
|
||||
<uni-forms v-model="form" label-width="150rpx" ref="customForm" :rules="customRules">
|
||||
<ticketd :ticket_="form.ticket_"></ticketd>
|
||||
<uni-forms-item label="部门">
|
||||
<uni-easyinput v-model="form.belong_dept_name" placeholder="请输入岗位" :disabled="true" v-if="mode!='show'"/>
|
||||
<span v-else>{{form.belong_dept_name}}</span>
|
||||
</uni-forms-item>
|
||||
<uni-forms-item label="员工信息">
|
||||
<span>{{form.employee_name}}</span>
|
||||
</uni-forms-item>
|
||||
<uni-forms-item label="人员岗位">
|
||||
<uni-easyinput v-model="form.post_name" placeholder="请输入需求岗位" :disabled="true" v-if="mode!='show'"/>
|
||||
<span v-else>{{form.post_name}}</span>
|
||||
</uni-forms-item>
|
||||
<uni-forms-item label="请假时长(一天8h计算)" required>
|
||||
<uni-number-box v-model="form.hour" :min="0" v-if="mode!='show'"></uni-number-box>
|
||||
<span v-else>{{form.hour}}小时</span>
|
||||
</uni-forms-item>
|
||||
<uni-forms-item label="开始日期" required>
|
||||
<uni-datetime-picker type="datetime" :clear-icon="false" v-model="form.start_date" v-if="mode!='show'"/>
|
||||
<span v-else>{{form.start_date}}</span>
|
||||
</uni-forms-item>
|
||||
<uni-forms-item label="结束日期" required>
|
||||
<uni-datetime-picker type="datetime" :clear-icon="false" v-model="form.end_date" v-if="mode!='show'"/>
|
||||
<span v-else>{{form.end_date}}</span>
|
||||
</uni-forms-item>
|
||||
<uni-forms-item label="请假类型" required>
|
||||
<uni-data-select
|
||||
v-if="mode!='show'"
|
||||
v-model="form.leave_type"
|
||||
:localdata="leaveList"
|
||||
:disabled="mode=='show'"
|
||||
@change="leaveChange"
|
||||
></uni-data-select>
|
||||
<span v-else>{{getLabel(leaveList,form.leave_type) }}</span>
|
||||
</uni-forms-item>
|
||||
|
||||
<uni-forms-item label-width="100" label="请假事由" required>
|
||||
<textarea placeholder-style="color:#efefef" v-model="form.reason" placeholder="" style="width:100%; border: 2upx solid #e5e5e5;padding: 10upx;"/>
|
||||
</uni-forms-item>
|
||||
<uni-forms-item label="上传附件" v-if="showUpload">
|
||||
<xtUpload v-model="form.file" xtype="path" :disabled="mode=='show'"></xtUpload>
|
||||
</uni-forms-item>
|
||||
<view class="form-page">
|
||||
<scroll-view scroll-y class="form-scroll">
|
||||
<uni-forms v-model="form" label-width="150rpx" ref="customForm" :rules="customRules">
|
||||
<!-- 审批状态卡片 -->
|
||||
<view class="form-card" v-if="form.ticket_">
|
||||
<ticketd :ticket_="form.ticket_"></ticketd>
|
||||
</view>
|
||||
|
||||
<!-- 基本信息 -->
|
||||
<view class="form-card">
|
||||
<view class="form-card-title">基本信息</view>
|
||||
<uni-forms-item label="部门">
|
||||
<uni-easyinput v-model="form.belong_dept_name" placeholder="请输入岗位" :disabled="true" v-if="mode!='show'"/>
|
||||
<span v-else>{{form.belong_dept_name}}</span>
|
||||
</uni-forms-item>
|
||||
<uni-forms-item label="员工信息">
|
||||
<span>{{form.employee_name}}</span>
|
||||
</uni-forms-item>
|
||||
<uni-forms-item label="人员岗位">
|
||||
<uni-easyinput v-model="form.post_name" placeholder="请输入需求岗位" :disabled="true" v-if="mode!='show'"/>
|
||||
<span v-else>{{form.post_name}}</span>
|
||||
</uni-forms-item>
|
||||
</view>
|
||||
|
||||
<!-- 请假详情 -->
|
||||
<view class="form-card">
|
||||
<view class="form-card-title">请假详情</view>
|
||||
<uni-forms-item label="请假时长(8h/天)" required>
|
||||
<uni-number-box v-model="form.hour" :min="0" v-if="mode!='show'"></uni-number-box>
|
||||
<span v-else>{{form.hour}}小时</span>
|
||||
</uni-forms-item>
|
||||
<uni-forms-item label="开始日期" required>
|
||||
<uni-datetime-picker type="datetime" :clear-icon="false" v-model="form.start_date" v-if="mode!='show'"/>
|
||||
<span v-else>{{form.start_date}}</span>
|
||||
</uni-forms-item>
|
||||
<uni-forms-item label="结束日期" required>
|
||||
<uni-datetime-picker type="datetime" :clear-icon="false" v-model="form.end_date" v-if="mode!='show'"/>
|
||||
<span v-else>{{form.end_date}}</span>
|
||||
</uni-forms-item>
|
||||
<uni-forms-item label="请假类型" required>
|
||||
<uni-data-select
|
||||
v-if="mode!='show'"
|
||||
v-model="form.leave_type"
|
||||
:localdata="leaveList"
|
||||
:disabled="mode=='show'"
|
||||
@change="leaveChange"
|
||||
></uni-data-select>
|
||||
<span v-else>{{getLabel(leaveList,form.leave_type) }}</span>
|
||||
</uni-forms-item>
|
||||
<uni-forms-item label-width="100" label="请假事由" required>
|
||||
<textarea placeholder-style="color:#c0c4cc" v-model="form.reason" placeholder="请输入请假事由" class="form-textarea"/>
|
||||
</uni-forms-item>
|
||||
<uni-forms-item label="上传附件" v-if="showUpload">
|
||||
<xtUpload v-model="form.file" xtype="path" :disabled="mode=='show'"></xtUpload>
|
||||
</uni-forms-item>
|
||||
</view>
|
||||
</uni-forms>
|
||||
</scroll-view>
|
||||
<view class="footer_fixed">
|
||||
<button v-if="mode=='edit'" size="mini" @click="handleDel" :loading="saveLoading" :disabled="saveLoading" type="warn">
|
||||
<button v-if="mode=='edit'" class="form-btn form-btn-danger" @click="handleDel" :loading="saveLoading" :disabled="saveLoading">
|
||||
删除
|
||||
</button>
|
||||
<button v-if="mode!='show'" size="mini" @click="handleSave" :loading="saveLoading" :disabled="saveLoading" type="primary">
|
||||
<button v-if="mode!='show'" class="form-btn form-btn-primary" @click="handleSave" :loading="saveLoading" :disabled="saveLoading">
|
||||
提交审批
|
||||
</button>
|
||||
<ticketd_b :workflow_key="'wf_leave'" v-if="form.ticket_ && mode == 'show'" :t_id="form.id" :ticket_="form.ticket_"
|
||||
<ticketd_b :workflow_key="'wf_leave'" v-if="form.ticket_ && mode == 'show'" :t_id="form.id" :ticket_="form.ticket_"
|
||||
:ticket_data="ticket_data" @success="()=>{uni.navigateBack()}" ref="ticketd_b"></ticketd_b>
|
||||
</view>
|
||||
</view>
|
||||
|
|
@ -172,15 +184,66 @@ import {actStateEnum} from "@/utils/enum.js"
|
|||
}
|
||||
</script>
|
||||
|
||||
<style scoped>
|
||||
.uni-data-checklist .checklist-group .checklist-box{
|
||||
margin: 10px 0!important;
|
||||
}
|
||||
.flex_file_picker>.uni-file-picker__files{
|
||||
flex-direction: row;
|
||||
}
|
||||
.flex_file_picker{
|
||||
width: 90px;
|
||||
flex: none;
|
||||
}
|
||||
<style lang="scss" scoped>
|
||||
.form-page {
|
||||
min-height: 100vh;
|
||||
background: #F0F2F5;
|
||||
}
|
||||
|
||||
.form-scroll {
|
||||
padding: 20rpx 24rpx;
|
||||
padding-bottom: 180rpx;
|
||||
}
|
||||
|
||||
.form-card {
|
||||
background: #fff;
|
||||
border-radius: 20rpx;
|
||||
padding: 24rpx;
|
||||
margin-bottom: 20rpx;
|
||||
box-shadow: 0 2rpx 12rpx rgba(0, 0, 0, 0.04);
|
||||
}
|
||||
|
||||
.form-card-title {
|
||||
font-size: 30rpx;
|
||||
font-weight: 600;
|
||||
color: #1F2937;
|
||||
margin-bottom: 16rpx;
|
||||
padding-left: 16rpx;
|
||||
border-left: 6rpx solid #2BA471;
|
||||
}
|
||||
|
||||
.form-textarea {
|
||||
width: 100%;
|
||||
min-height: 160rpx;
|
||||
border: 2rpx solid #E5E7EB;
|
||||
border-radius: 12rpx;
|
||||
padding: 16rpx;
|
||||
font-size: 28rpx;
|
||||
color: #374151;
|
||||
box-sizing: border-box;
|
||||
background: #F9FAFB;
|
||||
}
|
||||
|
||||
.form-btn {
|
||||
flex: 1;
|
||||
height: 80rpx;
|
||||
line-height: 80rpx;
|
||||
border-radius: 14rpx !important;
|
||||
font-size: 28rpx;
|
||||
font-weight: 500;
|
||||
border: none !important;
|
||||
letter-spacing: 2rpx;
|
||||
}
|
||||
|
||||
.form-btn-primary {
|
||||
background: linear-gradient(135deg, #2BA471, #1F8C5E) !important;
|
||||
color: #fff !important;
|
||||
box-shadow: 0 4rpx 12rpx rgba(43, 164, 113, 0.2);
|
||||
}
|
||||
|
||||
.form-btn-danger {
|
||||
background: linear-gradient(135deg, #EF4444, #DC2626) !important;
|
||||
color: #fff !important;
|
||||
box-shadow: 0 4rpx 12rpx rgba(239, 68, 68, 0.3);
|
||||
}
|
||||
</style>
|
||||
|
|
@ -1,60 +1,126 @@
|
|||
<!-- 请假申请 -->
|
||||
<!-- 劳动合同续签 -->
|
||||
<template>
|
||||
<view class="container">
|
||||
<scroll-view scroll-y style="padding-bottom: 180rpx;background-color: #fff;">
|
||||
<uni-forms v-model="form" label-width="150rpx" ref="customForm" :rules="customRules">
|
||||
<ticketd :ticket_="form.ticket_"></ticketd>
|
||||
<uni-forms-item label="部门">
|
||||
<uni-easyinput v-model="form.belong_dept_name" placeholder="请输入岗位" :disabled="true" v-if="mode!='show'"/>
|
||||
<span v-else>{{form.belong_dept_name}}</span>
|
||||
</uni-forms-item>
|
||||
<uni-forms-item label="员工信息">
|
||||
<span>{{form.employee_name}}</span>
|
||||
</uni-forms-item>
|
||||
<uni-forms-item label="人员岗位">
|
||||
<uni-easyinput v-model="form.post_name" placeholder="请输入需求岗位" :disabled="true" v-if="mode!='show'"/>
|
||||
<span v-else>{{form.post_name}}</span>
|
||||
</uni-forms-item>
|
||||
<uni-forms-item label="请假时长(一天8h计算)" required>
|
||||
<uni-number-box v-model="form.hour" :min="0" v-if="mode!='show'"></uni-number-box>
|
||||
<span v-else>{{form.hour}}小时</span>
|
||||
</uni-forms-item>
|
||||
<uni-forms-item label="开始日期" required>
|
||||
<uni-datetime-picker type="datetime" :clear-icon="false" v-model="form.start_date" v-if="mode!='show'"/>
|
||||
<span v-else>{{form.start_date}}</span>
|
||||
</uni-forms-item>
|
||||
<uni-forms-item label="结束日期" required>
|
||||
<uni-datetime-picker type="datetime" :clear-icon="false" v-model="form.end_date" v-if="mode!='show'"/>
|
||||
<span v-else>{{form.end_date}}</span>
|
||||
</uni-forms-item>
|
||||
<uni-forms-item label="请假类型" required>
|
||||
<uni-data-select
|
||||
v-if="mode!='show'"
|
||||
v-model="form.leave_type"
|
||||
:localdata="leaveList"
|
||||
:disabled="mode=='show'"
|
||||
@change="leaveChange"
|
||||
></uni-data-select>
|
||||
<span v-else>{{getLabel(leaveList,form.leave_type) }}</span>
|
||||
</uni-forms-item>
|
||||
|
||||
<uni-forms-item label-width="100" label="请假事由" required>
|
||||
<textarea placeholder-style="color:#efefef" v-model="form.reason" placeholder="" style="width:100%; border: 2upx solid #e5e5e5;padding: 10upx;"/>
|
||||
</uni-forms-item>
|
||||
<uni-forms-item label="上传附件" v-if="showUpload">
|
||||
<xtUpload v-model="form.file" xtype="path" :disabled="mode=='show'"></xtUpload>
|
||||
</uni-forms-item>
|
||||
<view class="form-page">
|
||||
<scroll-view scroll-y class="form-scroll">
|
||||
<uni-forms :modelValue="formData" label-width="180rpx" ref="customForm" :rules="customRules">
|
||||
<!-- 审批状态卡片 -->
|
||||
<view class="form-card" v-if="formData.ticket_">
|
||||
<ticketd :ticket_="formData.ticket_"></ticketd>
|
||||
</view>
|
||||
|
||||
<!-- 员工信息 -->
|
||||
<view class="form-card">
|
||||
<view class="form-card-title">员工信息</view>
|
||||
<uni-forms-item label="员工" required>
|
||||
<searchSelect
|
||||
v-model="formData.employee"
|
||||
:apiobjs="EmpApiobj"
|
||||
@change="handleEmpChange"
|
||||
v-if="mode == 'add'" />
|
||||
<span v-else>{{formData.employee_name}}</span>
|
||||
</uni-forms-item>
|
||||
<uni-forms-item label="部门">
|
||||
<uni-easyinput v-model="formData.belong_dept_name" disabled />
|
||||
</uni-forms-item>
|
||||
<uni-forms-item label="岗位">
|
||||
<uni-easyinput v-model="formData.post_name" disabled />
|
||||
</uni-forms-item>
|
||||
<uni-forms-item label="身份证号">
|
||||
<uni-easyinput v-model="formData.id_number" disabled />
|
||||
</uni-forms-item>
|
||||
<uni-forms-item label="联系方式">
|
||||
<uni-easyinput v-model="formData.phone" disabled />
|
||||
</uni-forms-item>
|
||||
</view>
|
||||
|
||||
<!-- 原合同信息 -->
|
||||
<view class="form-card">
|
||||
<view class="form-card-title">原合同信息</view>
|
||||
<uni-forms-item label="合同类型" required name="contract_type">
|
||||
<uni-data-select
|
||||
v-if="mode != 'show'"
|
||||
v-model="formData.contract_type"
|
||||
:localdata="contractTypeList"
|
||||
placeholder="请选择合同类型"
|
||||
/>
|
||||
<span v-else>{{getLabel(contractTypeList, formData.contract_type)}}</span>
|
||||
</uni-forms-item>
|
||||
<uni-forms-item label="原合同开始日期" required name="original_start_date">
|
||||
<uni-datetime-picker
|
||||
type="date"
|
||||
:clear-icon="false"
|
||||
v-model="formData.original_start_date"
|
||||
v-if="mode != 'show'" />
|
||||
<span v-else>{{formData.original_start_date}}</span>
|
||||
</uni-forms-item>
|
||||
<uni-forms-item label="原合同结束日期" required name="original_end_date">
|
||||
<uni-datetime-picker
|
||||
type="date"
|
||||
:clear-icon="false"
|
||||
v-model="formData.original_end_date"
|
||||
v-if="mode != 'show'" />
|
||||
<span v-else>{{formData.original_end_date}}</span>
|
||||
</uni-forms-item>
|
||||
</view>
|
||||
|
||||
<!-- 续签信息 -->
|
||||
<view class="form-card">
|
||||
<view class="form-card-title">续签信息</view>
|
||||
<uni-forms-item label="续签开始日期" required name="renew_start_date">
|
||||
<uni-datetime-picker
|
||||
type="date"
|
||||
:clear-icon="false"
|
||||
v-model="formData.renew_start_date"
|
||||
v-if="mode != 'show'" />
|
||||
<span v-else>{{formData.renew_start_date}}</span>
|
||||
</uni-forms-item>
|
||||
<uni-forms-item label="续签结束日期" required name="renew_end_date">
|
||||
<uni-datetime-picker
|
||||
type="date"
|
||||
:clear-icon="false"
|
||||
v-model="formData.renew_end_date"
|
||||
v-if="mode != 'show'" />
|
||||
<span v-else>{{formData.renew_end_date}}</span>
|
||||
</uni-forms-item>
|
||||
<uni-forms-item label="续签期限(年)" required name="renew_years">
|
||||
<uni-number-box v-model="formData.renew_years" :min="1" :max="10" v-if="mode != 'show'" />
|
||||
<span v-else>{{formData.renew_years}}年</span>
|
||||
</uni-forms-item>
|
||||
<uni-forms-item label="续签原因" required name="reason">
|
||||
<textarea
|
||||
placeholder-style="color:#c0c4cc"
|
||||
v-model="formData.reason"
|
||||
placeholder="请输入续签原因"
|
||||
class="form-textarea"
|
||||
v-if="mode != 'show'" />
|
||||
<span v-else>{{formData.reason}}</span>
|
||||
</uni-forms-item>
|
||||
<uni-forms-item label="备注" name="remark">
|
||||
<textarea
|
||||
placeholder-style="color:#c0c4cc"
|
||||
v-model="formData.remark"
|
||||
placeholder="请输入备注"
|
||||
class="form-textarea"
|
||||
v-if="mode != 'show'" />
|
||||
<span v-else>{{formData.remark}}</span>
|
||||
</uni-forms-item>
|
||||
<uni-forms-item label="上传附件">
|
||||
<xtUpload v-model="formData.file" xtype="path" :disabled="mode == 'show'"></xtUpload>
|
||||
</uni-forms-item>
|
||||
</view>
|
||||
</uni-forms>
|
||||
</scroll-view>
|
||||
|
||||
<!-- 底部操作 -->
|
||||
<view class="footer_fixed">
|
||||
<button v-if="mode=='edit'" size="mini" @click="handleDel" :loading="saveLoading" :disabled="saveLoading" type="warn">
|
||||
<button v-if="mode == 'edit'" class="form-btn form-btn-danger" @click="handleDel" :loading="saveLoading" :disabled="saveLoading">
|
||||
删除
|
||||
</button>
|
||||
<button v-if="mode!='show'" size="mini" @click="handleSave" :loading="saveLoading" :disabled="saveLoading" type="primary">
|
||||
<button v-if="mode != 'show'" class="form-btn form-btn-primary" @click="handleSave" :loading="saveLoading" :disabled="saveLoading">
|
||||
提交审批
|
||||
</button>
|
||||
<ticketd_b :workflow_key="'wf_leave'" v-if="form.ticket_ && mode == 'show'" :t_id="form.id" :ticket_="form.ticket_"
|
||||
:ticket_data="ticket_data" @success="()=>{uni.navigateBack()}" ref="ticketd_b"></ticketd_b>
|
||||
<ticketd_b :workflow_key="'wf_empcontract'" v-if="formData.ticket_ && mode == 'show'" :t_id="formData.id" :ticket_="formData.ticket_"
|
||||
:ticket_data="ticket_data" @success="()=>{uni.navigateBack()}" ref="ticketd_b"></ticketd_b>
|
||||
</view>
|
||||
</view>
|
||||
</template>
|
||||
|
|
@ -62,125 +128,216 @@
|
|||
<script>
|
||||
import ticketd_b from "../wf/ticketd_b.vue"
|
||||
import ticketd from "../wf/ticketd.vue"
|
||||
import {actStateEnum} from "@/utils/enum.js"
|
||||
export default {
|
||||
components: { ticketd_b, ticketd },
|
||||
data(){
|
||||
return{
|
||||
saveLoading: false,
|
||||
mode:"show",
|
||||
t_id: null,
|
||||
form:{},
|
||||
ticket_data:{},
|
||||
userInfo:{},
|
||||
type:0,
|
||||
leaveList: [
|
||||
{ value: 10, text: '事假' },
|
||||
{ value: 20, text: '病假' },
|
||||
{ value: 30, text: '婚假' },
|
||||
{ value: 40, text: '丧假' },
|
||||
{ value: 50, text: '公假' },
|
||||
{ value: 60, text: '工伤' },
|
||||
{ value: 70, text: '产假' },
|
||||
{ value: 80, text: '护理假' },
|
||||
{ value: 90, text: '其他' }
|
||||
],
|
||||
customRules: {
|
||||
start_date: {
|
||||
rules: [{
|
||||
required: true,
|
||||
errorMessage: '不能为空'
|
||||
}]
|
||||
},
|
||||
end_date: {
|
||||
rules: [{
|
||||
required: true,
|
||||
errorMessage: '不能为空'
|
||||
}]
|
||||
}
|
||||
import searchSelect from "@/components/searchselect.vue"
|
||||
|
||||
export default {
|
||||
components: { ticketd_b, ticketd, searchSelect },
|
||||
data() {
|
||||
return {
|
||||
saveLoading: false,
|
||||
mode: 'show',
|
||||
t_id: null,
|
||||
formData: {
|
||||
employee: '',
|
||||
employee_name: '',
|
||||
belong_dept_name: '',
|
||||
post_name: '',
|
||||
id_number: '',
|
||||
phone: '',
|
||||
contract_type: '',
|
||||
original_start_date: '',
|
||||
original_end_date: '',
|
||||
renew_start_date: '',
|
||||
renew_end_date: '',
|
||||
renew_years: 1,
|
||||
reason: '',
|
||||
remark: '',
|
||||
file: '',
|
||||
},
|
||||
ticket_data: {},
|
||||
EmpApiobj: this.$api.employeeList,
|
||||
contractTypeList: [
|
||||
{ value: 10, text: '固定期限劳动合同' },
|
||||
{ value: 20, text: '无固定期限劳动合同' },
|
||||
{ value: 30, text: '以完成一定工作任务为期限的劳动合同' },
|
||||
],
|
||||
customRules: {
|
||||
contract_type: {
|
||||
rules: [{
|
||||
required: true,
|
||||
errorMessage: '合同类型不能为空'
|
||||
}]
|
||||
},
|
||||
original_start_date: {
|
||||
rules: [{
|
||||
required: true,
|
||||
errorMessage: '原合同开始日期不能为空'
|
||||
}]
|
||||
},
|
||||
original_end_date: {
|
||||
rules: [{
|
||||
required: true,
|
||||
errorMessage: '原合同结束日期不能为空'
|
||||
}]
|
||||
},
|
||||
renew_start_date: {
|
||||
rules: [{
|
||||
required: true,
|
||||
errorMessage: '续签开始日期不能为空'
|
||||
}]
|
||||
},
|
||||
renew_end_date: {
|
||||
rules: [{
|
||||
required: true,
|
||||
errorMessage: '续签结束日期不能为空'
|
||||
}]
|
||||
},
|
||||
renew_years: {
|
||||
rules: [{
|
||||
required: true,
|
||||
errorMessage: '续签期限不能为空'
|
||||
}]
|
||||
},
|
||||
reason: {
|
||||
rules: [{
|
||||
required: true,
|
||||
errorMessage: '续签原因不能为空'
|
||||
}]
|
||||
},
|
||||
},
|
||||
}
|
||||
},
|
||||
async onLoad(options) {
|
||||
let that = this;
|
||||
that.mode = options.mode ? options.mode : 'show';
|
||||
that.t_id = options.t_id ? options.t_id : null;
|
||||
if (that.t_id) {
|
||||
const res = await that.$api.empcontractItem(that.t_id);
|
||||
Object.assign(that.formData, res);
|
||||
if (that.formData.ticket_.state_.type == 1 && that.formData.create_by == uni.getStorageSync("userInfo").id) {
|
||||
that.mode = "edit";
|
||||
} else {
|
||||
that.mode = "show";
|
||||
}
|
||||
} else {
|
||||
that.fillNames();
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
async fillNames() {
|
||||
const employee = await this.$api.employeeInfo();
|
||||
this.formData.employee_name = employee.name;
|
||||
this.formData.belong_dept_name = employee.belong_dept_name;
|
||||
this.formData.post_name = employee.post_name;
|
||||
this.formData.id_number = employee.id_number;
|
||||
this.formData.phone = employee.phone;
|
||||
this.formData.employee = employee.id;
|
||||
this.mode = "add";
|
||||
},
|
||||
async handleEmpChange(id) {
|
||||
if (!id) return;
|
||||
const obj = await this.$api.employeeItem(id);
|
||||
Object.assign(this.formData, {
|
||||
employee_name: obj.name,
|
||||
belong_dept_name: obj.belong_dept_name,
|
||||
post_name: obj.post_name,
|
||||
id_number: obj.id_number,
|
||||
phone: obj.phone,
|
||||
});
|
||||
},
|
||||
getLabel(list, value) {
|
||||
if (!list || value === undefined || value === null) return '';
|
||||
const item = list.find(i => String(i.value) === String(value));
|
||||
return item ? item.text : '';
|
||||
},
|
||||
async handleSave() {
|
||||
let that = this;
|
||||
that.saveLoading = true;
|
||||
try {
|
||||
await that.$refs.customForm.validate();
|
||||
await that.$api.empcontractCreate(that.formData);
|
||||
uni.showToast({ title: '提交成功', icon: 'success' });
|
||||
uni.navigateBack();
|
||||
} catch (err) {
|
||||
console.log('err', err);
|
||||
} finally {
|
||||
that.saveLoading = false;
|
||||
}
|
||||
},
|
||||
async onLoad(options) {
|
||||
async handleDel() {
|
||||
let that = this;
|
||||
that.mode = options.mode?options.mode:'show';
|
||||
that.t_id = options.t_id?options.t_id:null;
|
||||
if(that.t_id) {
|
||||
const res = await that.$api.leaveItem(that.t_id);
|
||||
this.form = res
|
||||
await this.fillNames()
|
||||
if(that.form.ticket_.state_.type == 1 && that.form.create_by == uni.getStorageSync("userInfo").id ) {
|
||||
that.mode = "edit";
|
||||
}else{
|
||||
that.mode = "show";
|
||||
uni.showModal({
|
||||
title: '提示',
|
||||
content: '确定删除该续签申请吗?',
|
||||
success: async (res) => {
|
||||
if (res.confirm) {
|
||||
await that.$api.empcontractDelete(that.formData.id);
|
||||
uni.navigateBack();
|
||||
}
|
||||
}
|
||||
else{
|
||||
that.fillNames();
|
||||
}
|
||||
});
|
||||
},
|
||||
computed: {
|
||||
showUpload() {
|
||||
return [20, 30, 40, 70].includes(this.form.leave_type)
|
||||
}
|
||||
},
|
||||
methods:{
|
||||
async fillNames(){
|
||||
const employee = await this.$api.employeeInfo()
|
||||
this.form.employee_name = employee.name
|
||||
this.form.belong_dept_name = employee.belong_dept_name
|
||||
this.form.post_name = employee.post_name
|
||||
this.form.employee = employee.id;
|
||||
this.mode = "add";
|
||||
},
|
||||
async handleDel(){
|
||||
let that = this;
|
||||
await that.$api.leaveDelete(that.form.id)
|
||||
uni.navigateBack()
|
||||
},
|
||||
async handleSave(){
|
||||
let that = this;
|
||||
that.$refs.customForm.validate().then(res => {
|
||||
|
||||
}).catch(err => {
|
||||
console.log('err', err);
|
||||
})
|
||||
await that.$api.leaveCreate(that.form)
|
||||
uni.navigateBack()
|
||||
},
|
||||
getLabel(list, value) {
|
||||
if (!list || value === undefined || value === null) return ''
|
||||
const item = list.find(i => String(i.value) === String(value))
|
||||
return item ? item.text : ''
|
||||
},
|
||||
leaveChange(val) {
|
||||
const map = {
|
||||
10: '事假',
|
||||
20: '病假',
|
||||
30: '婚假',
|
||||
40: '丧假',
|
||||
50: '公假',
|
||||
60: '工伤',
|
||||
70: '产假',
|
||||
80: '护理假',
|
||||
90: '其他',
|
||||
}
|
||||
this.form.leave_type_name = map[val] || ''
|
||||
},
|
||||
},
|
||||
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
||||
<style scoped>
|
||||
.uni-data-checklist .checklist-group .checklist-box{
|
||||
margin: 10px 0!important;
|
||||
}
|
||||
.flex_file_picker>.uni-file-picker__files{
|
||||
flex-direction: row;
|
||||
}
|
||||
.flex_file_picker{
|
||||
width: 90px;
|
||||
flex: none;
|
||||
}
|
||||
</style>
|
||||
<style lang="scss" scoped>
|
||||
.form-page {
|
||||
min-height: 100vh;
|
||||
background: #FAF8FF;
|
||||
}
|
||||
|
||||
.form-scroll {
|
||||
padding: 20rpx 24rpx;
|
||||
padding-bottom: 180rpx;
|
||||
}
|
||||
|
||||
.form-card {
|
||||
background: #FFFFFF;
|
||||
border-radius: 16rpx;
|
||||
padding: 24rpx;
|
||||
margin-bottom: 20rpx;
|
||||
}
|
||||
|
||||
.form-card-title {
|
||||
font-size: 30rpx;
|
||||
font-weight: 600;
|
||||
color: #191B23;
|
||||
margin-bottom: 16rpx;
|
||||
padding-left: 16rpx;
|
||||
border-left: 6rpx solid #2BA471;
|
||||
}
|
||||
|
||||
.form-textarea {
|
||||
width: 100%;
|
||||
min-height: 160rpx;
|
||||
border: 2rpx solid #C4C6D0;
|
||||
border-radius: 12rpx;
|
||||
padding: 16rpx;
|
||||
font-size: 28rpx;
|
||||
color: #191B23;
|
||||
box-sizing: border-box;
|
||||
background: #FFFFFF;
|
||||
}
|
||||
|
||||
.form-btn {
|
||||
flex: 1;
|
||||
height: 80rpx;
|
||||
line-height: 80rpx;
|
||||
border-radius: 14rpx !important;
|
||||
font-size: 28rpx;
|
||||
font-weight: 500;
|
||||
border: none !important;
|
||||
letter-spacing: 2rpx;
|
||||
}
|
||||
|
||||
.form-btn-primary {
|
||||
background: linear-gradient(135deg, #1F8C5E, #2BA471) !important;
|
||||
color: #fff !important;
|
||||
}
|
||||
|
||||
.form-btn-danger {
|
||||
background: linear-gradient(135deg, #EF4444, #DC2626) !important;
|
||||
color: #fff !important;
|
||||
}
|
||||
</style>
|
||||
|
|
|
|||
|
|
@ -1,41 +1,47 @@
|
|||
<!-- 离职申请 -->
|
||||
<template>
|
||||
<view class="container">
|
||||
<scroll-view scroll-y style="padding-bottom: 180rpx;background-color: #fff;">
|
||||
<uni-forms v-model="form" label-width="180rpx" ref="customForm" :rules="customRules">
|
||||
<ticketd :ticket_="form.ticket_"></ticketd>
|
||||
<uni-forms-item label="姓名">
|
||||
<uni-easyinput v-model="form.employee_name" placeholder="请输入姓名" :disabled="true"/>
|
||||
</uni-forms-item>
|
||||
<uni-forms-item label="部门">
|
||||
<uni-easyinput v-model="form.belong_dept_name" placeholder="请输入岗位" :disabled="true"/>
|
||||
</uni-forms-item>
|
||||
<uni-forms-item label="岗位">
|
||||
<uni-easyinput v-model="form.post_name" placeholder="请输入岗位" :disabled="true"/>
|
||||
</uni-forms-item>
|
||||
<uni-forms-item label="离职时间" required>
|
||||
<uni-datetime-picker type="date" :clear-icon="false" v-model="form.end_date" v-if="mode!='show'"/>
|
||||
<span v-else>{{form.end_date}}</span>
|
||||
</uni-forms-item>
|
||||
<uni-forms-item label="离职原因:" label-width="750" required>
|
||||
</uni-forms-item>
|
||||
<uni-forms-item label-width="100">
|
||||
<textarea placeholder-style="color:#efefef" v-model="form.reason" placeholder="离职原因" style="width:100%; border: 2upx solid #e5e5e5;padding: 10upx;"/>
|
||||
</uni-forms-item>
|
||||
<uni-forms-item label="办理离职交接日期" required>
|
||||
<uni-datetime-picker type="date" v-model="ticket_data.handle_date" v-if="form.ticket_?.state_?.name=='部门负责人'"/>
|
||||
<span v-else>{{form.handle_date}}</span>
|
||||
</uni-forms-item>
|
||||
<view class="form-page">
|
||||
<scroll-view scroll-y class="form-scroll">
|
||||
<uni-forms v-model="form" label-width="180rpx" ref="customForm" :rules="customRules">
|
||||
<view class="form-card" v-if="form.ticket_">
|
||||
<ticketd :ticket_="form.ticket_"></ticketd>
|
||||
</view>
|
||||
<view class="form-card">
|
||||
<view class="form-card-title">人员信息</view>
|
||||
<uni-forms-item label="姓名">
|
||||
<uni-easyinput v-model="form.employee_name" placeholder="请输入姓名" :disabled="true"/>
|
||||
</uni-forms-item>
|
||||
<uni-forms-item label="部门">
|
||||
<uni-easyinput v-model="form.belong_dept_name" placeholder="请输入岗位" :disabled="true"/>
|
||||
</uni-forms-item>
|
||||
<uni-forms-item label="岗位">
|
||||
<uni-easyinput v-model="form.post_name" placeholder="请输入岗位" :disabled="true"/>
|
||||
</uni-forms-item>
|
||||
</view>
|
||||
<view class="form-card">
|
||||
<view class="form-card-title">离职信息</view>
|
||||
<uni-forms-item label="离职时间" required>
|
||||
<uni-datetime-picker type="date" :clear-icon="false" v-model="form.end_date" v-if="mode!='show'"/>
|
||||
<span v-else>{{form.end_date}}</span>
|
||||
</uni-forms-item>
|
||||
<uni-forms-item label="离职原因" required>
|
||||
<textarea placeholder-style="color:#c0c4cc" v-model="form.reason" placeholder="请输入离职原因" class="form-textarea"/>
|
||||
</uni-forms-item>
|
||||
<uni-forms-item label="办理交接日期" required>
|
||||
<uni-datetime-picker type="date" v-model="ticket_data.handle_date" v-if="form.ticket_?.state_?.name=='部门负责人'"/>
|
||||
<span v-else>{{form.handle_date}}</span>
|
||||
</uni-forms-item>
|
||||
</view>
|
||||
</uni-forms>
|
||||
</scroll-view>
|
||||
<view class="footer_fixed">
|
||||
<button v-if="mode=='edit'" size="mini" @click="handleDel" :loading="saveLoading" :disabled="saveLoading" type="warn">
|
||||
<button v-if="mode=='edit'" class="form-btn form-btn-danger" @click="handleDel" :loading="saveLoading" :disabled="saveLoading">
|
||||
删除
|
||||
</button>
|
||||
<button v-if="mode!='show'" size="mini" @click="handleSave" :loading="saveLoading" :disabled="saveLoading" type="primary">
|
||||
<button v-if="mode!='show'" class="form-btn form-btn-primary" @click="handleSave" :loading="saveLoading" :disabled="saveLoading">
|
||||
提交审批
|
||||
</button>
|
||||
<ticketd_b v-if="form.ticket_ && mode == 'show'" :t_id="form.id" :ticket_="form.ticket_"
|
||||
<ticketd_b v-if="form.ticket_ && mode == 'show'" :t_id="form.id" :ticket_="form.ticket_"
|
||||
:ticket_data="ticket_data" @success="()=>{uni.navigateBack()}" ref="ticketd_b"></ticketd_b>
|
||||
</view>
|
||||
</view>
|
||||
|
|
@ -127,15 +133,13 @@ import {actStateEnum} from "@/utils/enum.js"
|
|||
}
|
||||
</script>
|
||||
|
||||
<style scoped>
|
||||
.uni-data-checklist .checklist-group .checklist-box{
|
||||
margin: 10px 0!important;
|
||||
}
|
||||
.flex_file_picker>.uni-file-picker__files{
|
||||
flex-direction: row;
|
||||
}
|
||||
.flex_file_picker{
|
||||
width: 90px;
|
||||
flex: none;
|
||||
}
|
||||
<style lang="scss" scoped>
|
||||
.form-page { min-height: 100vh; background: #F0F2F5; }
|
||||
.form-scroll { padding: 20rpx 24rpx; padding-bottom: 180rpx; }
|
||||
.form-card { background: #fff; border-radius: 20rpx; padding: 24rpx; margin-bottom: 20rpx; box-shadow: 0 2rpx 12rpx rgba(0,0,0,0.04); }
|
||||
.form-card-title { font-size: 30rpx; font-weight: 600; color: #1F2937; margin-bottom: 16rpx; padding-left: 16rpx; border-left: 6rpx solid #2BA471; }
|
||||
.form-textarea { width: 100%; min-height: 160rpx; border: 2rpx solid #E5E7EB; border-radius: 12rpx; padding: 16rpx; font-size: 28rpx; color: #374151; box-sizing: border-box; background: #F9FAFB; }
|
||||
.form-btn { flex: 1; height: 80rpx; line-height: 80rpx; border-radius: 14rpx !important; font-size: 28rpx; font-weight: 500; border: none !important; }
|
||||
.form-btn-primary { background: linear-gradient(135deg, #2BA471, #1F8C5E) !important; color: #fff !important; box-shadow: 0 4rpx 12rpx rgba(43,164,113,0.2); }
|
||||
.form-btn-danger { background: linear-gradient(135deg, #EF4444, #DC2626) !important; color: #fff !important; box-shadow: 0 4rpx 12rpx rgba(239,68,68,0.3); }
|
||||
</style>
|
||||
|
|
@ -1,9 +1,12 @@
|
|||
<template>
|
||||
<view class="container" style="height: 1400upx">
|
||||
<scroll-view scroll-y style="padding-bottom: 180rpx;background-color: #fff;height: 100%;">
|
||||
<uni-forms :modelValue="formData" label-width="140upx" ref="customForm" style="height: 60%;">
|
||||
<ticketd :ticket_="formData.ticket_"></ticketd>
|
||||
<!-- 员工选择 -->
|
||||
<view class="form-page">
|
||||
<scroll-view scroll-y class="form-scroll">
|
||||
<uni-forms :modelValue="formData" label-width="140upx" ref="customForm">
|
||||
<view class="form-card" v-if="formData.ticket_">
|
||||
<ticketd :ticket_="formData.ticket_"></ticketd>
|
||||
</view>
|
||||
<view class="form-card">
|
||||
<view class="form-card-title">员工信息</view>
|
||||
<uni-forms-item label="员工信息" required>
|
||||
<searchSelect
|
||||
v-model="formData.employee"
|
||||
|
|
@ -49,8 +52,11 @@
|
|||
<uni-forms-item label="入职时间">
|
||||
<uni-easyinput v-model="formData.start_date" disabled />
|
||||
</uni-forms-item>
|
||||
</view>
|
||||
|
||||
<!-- 原部门 -->
|
||||
<!-- 调岗信息 -->
|
||||
<view class="form-card">
|
||||
<view class="form-card-title">调岗信息</view>
|
||||
<uni-forms-item label="原部门" required>
|
||||
<uni-data-picker
|
||||
v-model="formData.original_dept"
|
||||
|
|
@ -173,19 +179,19 @@
|
|||
<uni-forms-item label="调岗后岗位薪资">
|
||||
<uni-number-box v-model="formData.new_slary" :min="2000"/>
|
||||
</uni-forms-item>
|
||||
</view>
|
||||
</uni-forms>
|
||||
</scroll-view>
|
||||
<!-- 底部按钮 -->
|
||||
<view class="footer_fixed">
|
||||
<button v-if="mode=='edit'" size="mini" @click="handleDel" :loading="saveLoading" :disabled="saveLoading" type="warn">
|
||||
删除
|
||||
</button>
|
||||
<button v-if="mode!='show'" size="mini" @click="handleSave" :loading="saveLoading" :disabled="saveLoading" type="primary">
|
||||
提交审批
|
||||
</button>
|
||||
<ticketd_b :workflow_key="'wf_transfer'" v-if="formData?.ticket_ && mode == 'show'" :t_id="formData.id" :ticket_="formData.ticket_"
|
||||
:ticket_data="ticket_data" @success="()=>{uni.navigateBack()}" ref="ticketd_b"></ticketd_b>
|
||||
</view>
|
||||
<button v-if="mode=='edit'" class="form-btn form-btn-danger" @click="handleDel" :loading="saveLoading" :disabled="saveLoading">
|
||||
删除
|
||||
</button>
|
||||
<button v-if="mode!='show'" class="form-btn form-btn-primary" @click="handleSave" :loading="saveLoading" :disabled="saveLoading">
|
||||
提交审批
|
||||
</button>
|
||||
<ticketd_b :workflow_key="'wf_transfer'" v-if="formData?.ticket_ && mode == 'show'" :t_id="formData.id" :ticket_="formData.ticket_"
|
||||
:ticket_data="ticket_data" @success="()=>{uni.navigateBack()}" ref="ticketd_b"></ticketd_b>
|
||||
</view>
|
||||
</view>
|
||||
</template>
|
||||
|
||||
|
|
@ -311,15 +317,12 @@ export default {
|
|||
}
|
||||
</script>
|
||||
|
||||
<style scoped>
|
||||
.uni-data-checklist .checklist-group .checklist-box{
|
||||
margin: 10px 0!important;
|
||||
}
|
||||
.flex_file_picker>.uni-file-picker__files{
|
||||
flex-direction: row;
|
||||
}
|
||||
.flex_file_picker{
|
||||
width: 90px;
|
||||
flex: none;
|
||||
}
|
||||
<style lang="scss" scoped>
|
||||
.form-page { min-height: 100vh; background: #F0F2F5; }
|
||||
.form-scroll { padding: 20rpx 24rpx; padding-bottom: 180rpx; }
|
||||
.form-card { background: #fff; border-radius: 20rpx; padding: 24rpx; margin-bottom: 20rpx; box-shadow: 0 2rpx 12rpx rgba(0,0,0,0.04); }
|
||||
.form-card-title { font-size: 30rpx; font-weight: 600; color: #1F2937; margin-bottom: 16rpx; padding-left: 16rpx; border-left: 6rpx solid #2BA471; }
|
||||
.form-btn { flex: 1; height: 80rpx; line-height: 80rpx; border-radius: 14rpx !important; font-size: 28rpx; font-weight: 500; border: none !important; }
|
||||
.form-btn-primary { background: linear-gradient(135deg, #2BA471, #1F8C5E) !important; color: #fff !important; box-shadow: 0 4rpx 12rpx rgba(43,164,113,0.2); }
|
||||
.form-btn-danger { background: linear-gradient(135deg, #EF4444, #DC2626) !important; color: #fff !important; box-shadow: 0 4rpx 12rpx rgba(239,68,68,0.3); }
|
||||
</style>
|
||||
|
|
@ -1,41 +1,61 @@
|
|||
<template>
|
||||
<view class="container container1">
|
||||
<image src="/static/banner_c.png" mode="widthFix" style="width:100%"></image>
|
||||
<uni-section :title="welTitle" type="circle" titleFontSize="15px" titleColor="#0000CD"
|
||||
@click="goUserInfo">
|
||||
<template v-slot:right>
|
||||
<span style="color:gray">{{currentDate}}</span>
|
||||
</template>
|
||||
</uni-section>
|
||||
<view style="height: 12rpx;"></view>
|
||||
<uni-row :gutter="12">
|
||||
<uni-col :span="12" style="border-radius: 20upx;">
|
||||
<navigator class="middleNavigator" url="../wf/index?category=duty">
|
||||
<span>待办</span>
|
||||
<span class="numSpan">{{duty_count}}</span>
|
||||
</navigator>
|
||||
</uni-col>
|
||||
<uni-col :span="12">
|
||||
<navigator class="middleNavigator" url="../wf/index?category=owner">
|
||||
<span>我的</span>
|
||||
<span class="numSpan">{{owner_count}}</span>
|
||||
</navigator>
|
||||
</uni-col>
|
||||
</uni-row>
|
||||
<view style="height: 12rpx;"></view>
|
||||
<uni-section title="发起申请" type="line">
|
||||
<div v-for="group in wfOptions" :key="group.category">
|
||||
<div style="padding-left:10px;color: #606266;">{{ group.category }}</div>
|
||||
<uni-grid :column="5" :show-border="false" :square="false">
|
||||
<uni-grid-item v-for="(item ,index) in group.items" :index="index" :key="index">
|
||||
<view class="grid-item-box" @click="pageEnter(item)">
|
||||
<image class="image" :src="item.icon_path?item.icon_path:'/static/yuding.png'" mode="aspectFill" />
|
||||
<text class="text">{{item.name}}</text>
|
||||
<view class="home-page">
|
||||
<!-- 顶部用户信息 -->
|
||||
<view class="home-header">
|
||||
<view class="home-user-row" @click="goUserInfo">
|
||||
<view class="home-avatar">
|
||||
<text class="home-avatar-text">{{avatarText}}</text>
|
||||
</view>
|
||||
<view class="home-user-info">
|
||||
<text class="home-user-name">{{welTitle}}</text>
|
||||
<text class="home-date">{{currentDate}}</text>
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
|
||||
<!-- 统计卡片 -->
|
||||
<view class="stat-section">
|
||||
<navigator class="stat-card" url="../wf/index?category=duty" hover-class="stat-card-hover">
|
||||
<view class="stat-card-head">
|
||||
<text class="stat-card-title tc-green">待办</text>
|
||||
<text class="stat-card-icon-r">📋</text>
|
||||
</view>
|
||||
<view class="stat-card-body">
|
||||
<text class="stat-card-num">{{duty_count}}</text>
|
||||
<text class="stat-card-unit">条</text>
|
||||
</view>
|
||||
</navigator>
|
||||
<navigator class="stat-card" url="../wf/index?category=owner" hover-class="stat-card-hover">
|
||||
<view class="stat-card-head">
|
||||
<text class="stat-card-title tc-blue">我的</text>
|
||||
<text class="stat-card-icon-r">📁</text>
|
||||
</view>
|
||||
<view class="stat-card-body">
|
||||
<text class="stat-card-num">{{owner_count}}</text>
|
||||
<text class="stat-card-unit">项</text>
|
||||
</view>
|
||||
</navigator>
|
||||
</view>
|
||||
|
||||
<!-- 常用流程 -->
|
||||
<view class="flow-section">
|
||||
<view v-for="group in wfOptions" :key="group.category" class="flow-group">
|
||||
<view class="section-header">
|
||||
<view class="section-title">
|
||||
<view class="section-dot"></view>
|
||||
<text>{{ group.category }}</text>
|
||||
</view>
|
||||
</view>
|
||||
<view class="flow-grid">
|
||||
<view class="flow-grid-item" v-for="(item, index) in group.items" :key="index" @click="pageEnter(item)" hover-class="flow-item-hover">
|
||||
<view class="flow-icon-wrap" :class="'flow-icon-c' + (index % 3)">
|
||||
<image class="flow-icon" :src="item.icon_path?item.icon_path:'/static/yuding.png'" mode="aspectFill" />
|
||||
</view>
|
||||
</uni-grid-item>
|
||||
</uni-grid>
|
||||
</div>
|
||||
</uni-section>
|
||||
<text class="flow-name">{{item.name}}</text>
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
</template>
|
||||
|
||||
|
|
@ -46,6 +66,7 @@
|
|||
data() {
|
||||
return {
|
||||
welTitle: "",
|
||||
avatarText: "",
|
||||
imageSrc:"",
|
||||
currentDate: tool.getTodayDate(),
|
||||
wfOptions: [],
|
||||
|
|
@ -96,7 +117,8 @@
|
|||
initWelTitle() {
|
||||
let userInfo = uni.getStorageSync("userInfo")
|
||||
let name = userInfo.name;
|
||||
this.welTitle = `欢迎您, ${name}!`
|
||||
this.welTitle = `${name},您好!`
|
||||
this.avatarText = name ? name.slice(-2) : '👤'
|
||||
},
|
||||
goUserInfo() {
|
||||
uni.navigateTo({
|
||||
|
|
@ -121,69 +143,196 @@
|
|||
}
|
||||
}
|
||||
</script>
|
||||
<style lang="scss">
|
||||
.container1{
|
||||
background-color: rgba(255,255,255,0);
|
||||
}
|
||||
.image {
|
||||
width: 60upx;
|
||||
height: 60upx;
|
||||
padding: 5upx;
|
||||
border-radius: 20upx;
|
||||
background-color: #2979ff;
|
||||
}
|
||||
<style lang="scss" scoped>
|
||||
.home-page {
|
||||
min-height: 100vh;
|
||||
background: #F5F7FA;
|
||||
padding-bottom: 40rpx;
|
||||
}
|
||||
|
||||
.text {
|
||||
font-size: 24upx;
|
||||
margin-top: 10upx;
|
||||
}
|
||||
// ========== 顶部用户信息 ==========
|
||||
.home-header {
|
||||
background: #FFFFFF;
|
||||
padding: 28rpx 32rpx;
|
||||
margin-bottom: 8rpx;
|
||||
}
|
||||
|
||||
.grid-item-box {
|
||||
flex: 1;
|
||||
/* #ifndef APP-NVUE */
|
||||
display: flex;
|
||||
/* #endif */
|
||||
flex-direction: column;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
padding: 15px 0;
|
||||
}
|
||||
.home-user-row {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
}
|
||||
|
||||
.grid-dot {
|
||||
position: absolute;
|
||||
top: 5px;
|
||||
right: 15px;
|
||||
}
|
||||
.middleNavigator{
|
||||
padding: 28rpx;
|
||||
background-color: white;
|
||||
display: flex;
|
||||
justify-content : space-between;
|
||||
border-radius: 10upx;
|
||||
}
|
||||
.numSpan{
|
||||
color: #2979ff;
|
||||
font-size: 36rpx;
|
||||
font-weight: bold;
|
||||
margin-left: 24rpx;
|
||||
}
|
||||
.home-avatar {
|
||||
width: 80rpx;
|
||||
height: 80rpx;
|
||||
border-radius: 50%;
|
||||
background: linear-gradient(135deg, #2BA471, #48C68B);
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
margin-right: 20rpx;
|
||||
flex-shrink: 0;
|
||||
}
|
||||
|
||||
.swiper {
|
||||
height: 420px;
|
||||
}
|
||||
.home-avatar-text {
|
||||
color: #FFFFFF;
|
||||
font-size: 28rpx;
|
||||
font-weight: 700;
|
||||
}
|
||||
|
||||
/* #ifdef H5 */
|
||||
@media screen and (min-width: 768px) and (max-width: 1425px) {
|
||||
.swiper {
|
||||
height: 630px;
|
||||
}
|
||||
}
|
||||
.home-user-info {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
}
|
||||
|
||||
@media screen and (min-width: 1425px) {
|
||||
.swiper {
|
||||
height: 830px;
|
||||
}
|
||||
}
|
||||
.home-user-name {
|
||||
font-size: 32rpx;
|
||||
font-weight: 700;
|
||||
color: #1A2E25;
|
||||
}
|
||||
|
||||
/* #endif */
|
||||
.home-date {
|
||||
font-size: 24rpx;
|
||||
color: #999;
|
||||
margin-top: 4rpx;
|
||||
}
|
||||
|
||||
// ========== 统计卡片 ==========
|
||||
.stat-section {
|
||||
display: flex;
|
||||
gap: 20rpx;
|
||||
padding: 20rpx 32rpx 0;
|
||||
}
|
||||
|
||||
.stat-card {
|
||||
flex: 1;
|
||||
background: #FFFFFF;
|
||||
border-radius: 20rpx;
|
||||
padding: 24rpx;
|
||||
text-decoration: none;
|
||||
}
|
||||
|
||||
.stat-card-hover {
|
||||
opacity: 0.96;
|
||||
transform: scale(0.98);
|
||||
}
|
||||
|
||||
.stat-card-head {
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
align-items: center;
|
||||
margin-bottom: 12rpx;
|
||||
}
|
||||
|
||||
.stat-card-title {
|
||||
font-size: 26rpx;
|
||||
font-weight: 700;
|
||||
}
|
||||
|
||||
.tc-green { color: #2BA471; }
|
||||
.tc-blue { color: #3594E6; }
|
||||
|
||||
.stat-card-icon-r {
|
||||
font-size: 36rpx;
|
||||
opacity: 0.5;
|
||||
}
|
||||
|
||||
.stat-card-body {
|
||||
display: flex;
|
||||
align-items: baseline;
|
||||
}
|
||||
|
||||
.stat-card-num {
|
||||
font-size: 60rpx;
|
||||
font-weight: 800;
|
||||
color: #1A2E25;
|
||||
line-height: 1;
|
||||
margin-right: 8rpx;
|
||||
}
|
||||
|
||||
.stat-card-unit {
|
||||
font-size: 24rpx;
|
||||
color: #999;
|
||||
}
|
||||
|
||||
// ========== 常用流程 ==========
|
||||
.flow-section {
|
||||
padding: 20rpx 32rpx 0;
|
||||
}
|
||||
|
||||
.flow-group {
|
||||
background: #FFFFFF;
|
||||
border-radius: 24rpx;
|
||||
padding: 32rpx 24rpx;
|
||||
margin-bottom: 24rpx;
|
||||
}
|
||||
|
||||
.section-header {
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
align-items: center;
|
||||
margin-bottom: 24rpx;
|
||||
padding: 0 8rpx;
|
||||
}
|
||||
|
||||
.section-title {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
font-size: 32rpx;
|
||||
font-weight: 700;
|
||||
color: #1A2E25;
|
||||
}
|
||||
|
||||
.section-dot {
|
||||
width: 8rpx;
|
||||
height: 36rpx;
|
||||
background: #2BA471;
|
||||
border-radius: 4rpx;
|
||||
margin-right: 16rpx;
|
||||
}
|
||||
|
||||
.flow-grid {
|
||||
display: flex;
|
||||
flex-wrap: wrap;
|
||||
}
|
||||
|
||||
.flow-grid-item {
|
||||
width: 33.33%;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
align-items: center;
|
||||
padding: 16rpx 0;
|
||||
margin-bottom: 8rpx;
|
||||
}
|
||||
|
||||
.flow-item-hover {
|
||||
opacity: 0.6;
|
||||
}
|
||||
|
||||
.flow-icon-wrap {
|
||||
width: 96rpx;
|
||||
height: 96rpx;
|
||||
border-radius: 24rpx;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
margin-bottom: 14rpx;
|
||||
}
|
||||
|
||||
// 三色循环
|
||||
.flow-icon-c0 { background: #C6EADA; }
|
||||
.flow-icon-c1 { background: #C4DEFF; }
|
||||
.flow-icon-c2 { background: #FFE0C8; }
|
||||
|
||||
.flow-icon {
|
||||
width: 48rpx;
|
||||
height: 48rpx;
|
||||
}
|
||||
|
||||
.flow-name {
|
||||
font-size: 24rpx;
|
||||
color: #444;
|
||||
text-align: center;
|
||||
line-height: 1.4;
|
||||
}
|
||||
</style>
|
||||
|
|
|
|||
|
|
@ -1,9 +1,13 @@
|
|||
<!-- 档案借阅 -->
|
||||
<template>
|
||||
<view class="container">
|
||||
<scroll-view scroll-y style="padding-bottom: 180rpx;background-color: #fff;">
|
||||
<view class="form-page">
|
||||
<scroll-view scroll-y class="form-scroll">
|
||||
<uni-forms v-model="form" label-width="170upx">
|
||||
<ticketd :ticket_="form.ticket_"></ticketd>
|
||||
<view class="form-card" v-if="form.ticket_">
|
||||
<ticketd :ticket_="form.ticket_"></ticketd>
|
||||
</view>
|
||||
<view class="form-card">
|
||||
<view class="form-card-title">档案借阅</view>
|
||||
<uni-forms-item label="档案名称" required>
|
||||
<uni-data-select
|
||||
v-if="mode!='show'"
|
||||
|
|
@ -38,6 +42,7 @@
|
|||
<uni-datetime-picker type="date" v-if="form.ticket_?.state_?.name=='档案管理员审批'" :clear-icon="false" v-model="ticket_data.return_date"/>
|
||||
<span v-else>{{form.ticket_.ticket_data.return_date}}</span>
|
||||
</uni-forms-item>
|
||||
</view>
|
||||
</uni-forms>
|
||||
</scroll-view>
|
||||
<view class="footer_fixed">
|
||||
|
|
@ -135,6 +140,13 @@ import {actStateEnum} from "@/utils/enum.js"
|
|||
}
|
||||
</script>
|
||||
|
||||
<style scoped>
|
||||
|
||||
<style lang="scss" scoped>
|
||||
.form-page { min-height: 100vh; background: #F0F2F5; }
|
||||
.form-scroll { padding: 20rpx 24rpx; padding-bottom: 180rpx; }
|
||||
.form-card { background: #fff; border-radius: 20rpx; padding: 24rpx; margin-bottom: 20rpx; box-shadow: 0 2rpx 12rpx rgba(0,0,0,0.04); }
|
||||
.form-card-title { font-size: 30rpx; font-weight: 600; color: #1F2937; margin-bottom: 16rpx; padding-left: 16rpx; border-left: 6rpx solid #2BA471; }
|
||||
.form-textarea { width: 100%; min-height: 160rpx; border: 2rpx solid #E5E7EB; border-radius: 12rpx; padding: 16rpx; font-size: 28rpx; color: #374151; box-sizing: border-box; background: #F9FAFB; }
|
||||
.form-btn { flex: 1; height: 80rpx; line-height: 80rpx; border-radius: 14rpx !important; font-size: 28rpx; font-weight: 500; border: none !important; }
|
||||
.form-btn-primary { background: linear-gradient(135deg, #2BA471, #1F8C5E) !important; color: #fff !important; box-shadow: 0 4rpx 12rpx rgba(43,164,113,0.2); }
|
||||
.form-btn-danger { background: linear-gradient(135deg, #EF4444, #DC2626) !important; color: #fff !important; box-shadow: 0 4rpx 12rpx rgba(239,68,68,0.3); }
|
||||
</style>
|
||||
|
|
@ -1,8 +1,12 @@
|
|||
<template>
|
||||
<view class="container">
|
||||
<scroll-view scroll-y style="padding-bottom: 180rpx;background-color: #fff;">
|
||||
<view class="form-page">
|
||||
<scroll-view scroll-y class="form-scroll">
|
||||
<uni-forms v-model="form" label-width="180upx">
|
||||
<ticketd :ticket_="form.ticket_"></ticketd>
|
||||
<view class="form-card" v-if="form.ticket_">
|
||||
<ticketd :ticket_="form.ticket_"></ticketd>
|
||||
</view>
|
||||
<view class="form-card">
|
||||
<view class="form-card-title">会议室预约</view>
|
||||
<uni-forms-item label="会议名称" required>
|
||||
<uni-easyinput v-model="form.title" placeholder="请输入会议名称" :disabled="mode=='show'"/>
|
||||
</uni-forms-item>
|
||||
|
|
@ -31,6 +35,7 @@
|
|||
<uni-forms-item label="时间段">
|
||||
<span v-for="item in form.time_ranges" :key="item">{{item}}</span>
|
||||
</uni-forms-item>
|
||||
</view>
|
||||
</uni-forms>
|
||||
<view class="timeView" v-show="mode != 'show'">
|
||||
<view style="height: 70upx;line-height: 70upx;">
|
||||
|
|
@ -283,7 +288,15 @@ import {actStateEnum} from "@/utils/enum.js"
|
|||
}
|
||||
</script>
|
||||
|
||||
<style scoped>
|
||||
<style lang="scss" scoped>
|
||||
.form-page { min-height: 100vh; background: #F0F2F5; }
|
||||
.form-scroll { padding: 20rpx 24rpx; padding-bottom: 180rpx; }
|
||||
.form-card { background: #fff; border-radius: 20rpx; padding: 24rpx; margin-bottom: 20rpx; box-shadow: 0 2rpx 12rpx rgba(0,0,0,0.04); }
|
||||
.form-card-title { font-size: 30rpx; font-weight: 600; color: #1F2937; margin-bottom: 16rpx; padding-left: 16rpx; border-left: 6rpx solid #2BA471; }
|
||||
.form-textarea { width: 100%; min-height: 160rpx; border: 2rpx solid #E5E7EB; border-radius: 12rpx; padding: 16rpx; font-size: 28rpx; color: #374151; box-sizing: border-box; background: #F9FAFB; }
|
||||
.form-btn { flex: 1; height: 80rpx; line-height: 80rpx; border-radius: 14rpx !important; font-size: 28rpx; font-weight: 500; border: none !important; }
|
||||
.form-btn-primary { background: linear-gradient(135deg, #2BA471, #1F8C5E) !important; color: #fff !important; box-shadow: 0 4rpx 12rpx rgba(43,164,113,0.2); }
|
||||
.form-btn-danger { background: linear-gradient(135deg, #EF4444, #DC2626) !important; color: #fff !important; box-shadow: 0 4rpx 12rpx rgba(239,68,68,0.3); }
|
||||
.iconsWrap{
|
||||
width: 40upx;
|
||||
height: 40upx;
|
||||
|
|
|
|||
|
|
@ -1,9 +1,13 @@
|
|||
<!-- 宣传报道 -->
|
||||
<template>
|
||||
<view class="container">
|
||||
<scroll-view scroll-y style="padding-bottom: 180rpx;background-color: #fff;">
|
||||
<view class="form-page">
|
||||
<scroll-view scroll-y class="form-scroll">
|
||||
<uni-forms v-model="form" label-width="200upx">
|
||||
<ticketd :ticket_="form.ticket_"></ticketd>
|
||||
<view class="form-card" v-if="form.ticket_">
|
||||
<ticketd :ticket_="form.ticket_"></ticketd>
|
||||
</view>
|
||||
<view class="form-card">
|
||||
<view class="form-card-title">宣传报道</view>
|
||||
<uni-forms-item label="送审稿件标题" required>
|
||||
<uni-easyinput v-model="form.title" placeholder="请输入送审稿件标题" v-if="mode!='show'"/>
|
||||
<span v-else>{{form.title}}</span>
|
||||
|
|
@ -70,7 +74,7 @@
|
|||
<uni-forms-item label="总经理审查意见" v-if="['总经理审批', '结束'].includes(form.ticket_?.state_?.name)">
|
||||
<uni-data-checkbox v-model="form.publicity_opinion" :localdata="hobby7" ></uni-data-checkbox>
|
||||
</uni-forms-item>
|
||||
|
||||
</view>
|
||||
</uni-forms>
|
||||
</scroll-view>
|
||||
<view class="footer_fixed">
|
||||
|
|
@ -209,14 +213,22 @@ import config from './../../utils/config.js'
|
|||
}
|
||||
</script>
|
||||
|
||||
<style scoped>
|
||||
.formText{
|
||||
color: #666;
|
||||
font-size: 14px;
|
||||
padding-left: 200upx;
|
||||
}
|
||||
.formInput{
|
||||
width:170upx;
|
||||
display: inline-block;
|
||||
}
|
||||
<style lang="scss" scoped>
|
||||
.form-page { min-height: 100vh; background: #F0F2F5; }
|
||||
.form-scroll { padding: 20rpx 24rpx; padding-bottom: 180rpx; }
|
||||
.form-card { background: #fff; border-radius: 20rpx; padding: 24rpx; margin-bottom: 20rpx; box-shadow: 0 2rpx 12rpx rgba(0,0,0,0.04); }
|
||||
.form-card-title { font-size: 30rpx; font-weight: 600; color: #1F2937; margin-bottom: 16rpx; padding-left: 16rpx; border-left: 6rpx solid #2BA471; }
|
||||
.form-textarea { width: 100%; min-height: 160rpx; border: 2rpx solid #E5E7EB; border-radius: 12rpx; padding: 16rpx; font-size: 28rpx; color: #374151; box-sizing: border-box; background: #F9FAFB; }
|
||||
.form-btn { flex: 1; height: 80rpx; line-height: 80rpx; border-radius: 14rpx !important; font-size: 28rpx; font-weight: 500; border: none !important; }
|
||||
.form-btn-primary { background: linear-gradient(135deg, #2BA471, #1F8C5E) !important; color: #fff !important; box-shadow: 0 4rpx 12rpx rgba(43,164,113,0.2); }
|
||||
.form-btn-danger { background: linear-gradient(135deg, #EF4444, #DC2626) !important; color: #fff !important; box-shadow: 0 4rpx 12rpx rgba(239,68,68,0.3); }
|
||||
.formText{
|
||||
color: #666;
|
||||
font-size: 14px;
|
||||
padding-left: 200upx;
|
||||
}
|
||||
.formInput{
|
||||
width:170upx;
|
||||
display: inline-block;
|
||||
}
|
||||
</style>
|
||||
|
|
@ -1,48 +1,70 @@
|
|||
<!-- 印章申请 -->
|
||||
<template>
|
||||
<view class="container">
|
||||
<scroll-view scroll-y style="padding-bottom: 180rpx;background-color: #fff;">
|
||||
<view class="form-page">
|
||||
<scroll-view scroll-y class="form-scroll">
|
||||
<uni-forms v-model="form" label-width="170upx">
|
||||
<ticketd :ticket_="form.ticket_"></ticketd>
|
||||
<uni-forms-item label="使用类型">
|
||||
<uni-data-checkbox v-model="form.is_lending" :localdata="hobby1" :disabled="mode=='show'"></uni-data-checkbox>
|
||||
</uni-forms-item>
|
||||
<uni-forms-item label="文件名称" required>
|
||||
<uni-easyinput v-model="form.filename" placeholder="请输入文件名称" v-if="mode!='show'"/>
|
||||
<span v-else>{{form.filename}}</span>
|
||||
</uni-forms-item>
|
||||
<uni-forms-item label="联系电话">
|
||||
<uni-easyinput v-model="form.contacts" v-if="mode!='show'"/>
|
||||
<span v-else>{{form.contacts}}</span>
|
||||
</uni-forms-item>
|
||||
<uni-forms-item label="印章类型">
|
||||
<uni-data-checkbox multiple v-model="form.seal" :localdata="hobby" :disabled="mode=='show'"></uni-data-checkbox>
|
||||
</uni-forms-item>
|
||||
<uni-forms-item label="" v-if="form.seal=='其他'">
|
||||
<uni-easyinput v-model="form.seal_other" placeholder="请输入印章名称" v-if="mode!='show'"/>
|
||||
<span v-else>{{form.seal_other}}</span>
|
||||
</uni-forms-item>
|
||||
<uni-forms-item label="借出时间" v-if="form.is_lending">
|
||||
<uni-datetime-picker v-model="timeRange" type="daterange" @change="timeRangeChange(timeRange)" v-if="mode!='show'"/>
|
||||
<span v-else>{{form.lending_date}}-{{form.return_date}}</span>
|
||||
</uni-forms-item>
|
||||
<uni-forms-item label="借用理由" v-if="form.is_lending">
|
||||
<uni-easyinput v-model="form.note" v-if="mode!='show'"/>
|
||||
<span v-else>{{form.note}}</span>
|
||||
</uni-forms-item>
|
||||
<uni-forms-item label="文件内容" required>
|
||||
<xtUpload v-model="form.file" xtype="path" v-if="mode!='show'"></xtUpload>
|
||||
<!-- <view v-else style="color:blue" @click="preview(form.file)">{{ form.file}}</view> -->
|
||||
<filePreview v-else :filePath="form.file" style="padding-left:145upx;width: 100%;height: 30upx;"></filePreview>
|
||||
</uni-forms-item>
|
||||
<uni-forms-item label="用印份数" required>
|
||||
<uni-number-box v-model="form.file_count" v-if="mode!='show'"></uni-number-box>
|
||||
<span v-else>{{form.file_count}}</span>
|
||||
</uni-forms-item>
|
||||
<uni-forms-item label="实际归还日期" v-if="form.ticket_&&form.ticket_.state_&&(form.ticket_.state_.name=='借用中'||form.ticket_.state_.name=='结束')">
|
||||
<uni-datetime-picker v-model="ticket_data.actual_return_date" type="date" v-if="form.ticket_?.state_?.name=='借用中'"/>
|
||||
<span v-else>{{form.actual_return_date}}</span>
|
||||
</uni-forms-item>
|
||||
<!-- 审批状态 -->
|
||||
<view class="form-card" v-if="form.ticket_">
|
||||
<ticketd :ticket_="form.ticket_"></ticketd>
|
||||
</view>
|
||||
|
||||
<!-- 申请信息 -->
|
||||
<view class="form-card">
|
||||
<view class="form-card-title">申请信息</view>
|
||||
<uni-forms-item label="使用类型">
|
||||
<uni-data-checkbox v-model="form.is_lending" :localdata="hobby1" :disabled="mode=='show'"></uni-data-checkbox>
|
||||
</uni-forms-item>
|
||||
<uni-forms-item label="文件名称" required>
|
||||
<uni-easyinput v-model="form.filename" placeholder="请输入文件名称" v-if="mode!='show'"/>
|
||||
<span v-else>{{form.filename}}</span>
|
||||
</uni-forms-item>
|
||||
<uni-forms-item label="联系电话">
|
||||
<uni-easyinput v-model="form.contacts" v-if="mode!='show'"/>
|
||||
<span v-else>{{form.contacts}}</span>
|
||||
</uni-forms-item>
|
||||
</view>
|
||||
|
||||
<!-- 印章信息 -->
|
||||
<view class="form-card">
|
||||
<view class="form-card-title">印章信息</view>
|
||||
<uni-forms-item label="印章类型">
|
||||
<uni-data-checkbox multiple v-model="form.seal" :localdata="hobby" :disabled="mode=='show'"></uni-data-checkbox>
|
||||
</uni-forms-item>
|
||||
<uni-forms-item label="" v-if="form.seal=='其他'">
|
||||
<uni-easyinput v-model="form.seal_other" placeholder="请输入印章名称" v-if="mode!='show'"/>
|
||||
<span v-else>{{form.seal_other}}</span>
|
||||
</uni-forms-item>
|
||||
<uni-forms-item label="文件内容" required>
|
||||
<xtUpload v-model="form.file" xtype="path" v-if="mode!='show'"></xtUpload>
|
||||
<filePreview v-else :filePath="form.file" style="padding-left:145upx;width: 100%;height: 30upx;"></filePreview>
|
||||
</uni-forms-item>
|
||||
<uni-forms-item label="用印份数" required>
|
||||
<uni-number-box v-model="form.file_count" v-if="mode!='show'"></uni-number-box>
|
||||
<span v-else>{{form.file_count}}</span>
|
||||
</uni-forms-item>
|
||||
</view>
|
||||
|
||||
<!-- 借用信息 -->
|
||||
<view class="form-card" v-if="form.is_lending">
|
||||
<view class="form-card-title">借用信息</view>
|
||||
<uni-forms-item label="借出时间">
|
||||
<uni-datetime-picker v-model="timeRange" type="daterange" @change="timeRangeChange(timeRange)" v-if="mode!='show'"/>
|
||||
<span v-else>{{form.lending_date}}-{{form.return_date}}</span>
|
||||
</uni-forms-item>
|
||||
<uni-forms-item label="借用理由">
|
||||
<uni-easyinput v-model="form.note" v-if="mode!='show'"/>
|
||||
<span v-else>{{form.note}}</span>
|
||||
</uni-forms-item>
|
||||
</view>
|
||||
|
||||
<!-- 归还信息 -->
|
||||
<view class="form-card" v-if="form.ticket_&&form.ticket_.state_&&(form.ticket_.state_.name=='借用中'||form.ticket_.state_.name=='结束')">
|
||||
<view class="form-card-title">归还信息</view>
|
||||
<uni-forms-item label="实际归还日期">
|
||||
<uni-datetime-picker v-model="ticket_data.actual_return_date" type="date" v-if="form.ticket_?.state_?.name=='借用中'"/>
|
||||
<span v-else>{{form.actual_return_date}}</span>
|
||||
</uni-forms-item>
|
||||
</view>
|
||||
</uni-forms>
|
||||
</scroll-view>
|
||||
<view class="footer_fixed">
|
||||
|
|
@ -144,5 +166,31 @@ import config from './../../utils/config.js'
|
|||
}
|
||||
</script>
|
||||
|
||||
<style scoped>
|
||||
<style lang="scss" scoped>
|
||||
.form-page {
|
||||
min-height: 100vh;
|
||||
background: #F0F2F5;
|
||||
}
|
||||
|
||||
.form-scroll {
|
||||
padding: 20rpx 24rpx;
|
||||
padding-bottom: 180rpx;
|
||||
}
|
||||
|
||||
.form-card {
|
||||
background: #fff;
|
||||
border-radius: 20rpx;
|
||||
padding: 24rpx;
|
||||
margin-bottom: 20rpx;
|
||||
box-shadow: 0 2rpx 12rpx rgba(0, 0, 0, 0.04);
|
||||
}
|
||||
|
||||
.form-card-title {
|
||||
font-size: 30rpx;
|
||||
font-weight: 600;
|
||||
color: #1F2937;
|
||||
margin-bottom: 16rpx;
|
||||
padding-left: 16rpx;
|
||||
border-left: 6rpx solid #2BA471;
|
||||
}
|
||||
</style>
|
||||
|
|
@ -1,9 +1,13 @@
|
|||
<!-- 用车管理 -->
|
||||
<template>
|
||||
<view class="container">
|
||||
<scroll-view scroll-y style="padding-bottom: 180rpx;background-color: #fff;">
|
||||
<view class="form-page">
|
||||
<scroll-view scroll-y class="form-scroll">
|
||||
<uni-forms v-model="form" label-width="180upx">
|
||||
<ticketd :ticket_="form.ticket_"></ticketd>
|
||||
<view class="form-card" v-if="form.ticket_">
|
||||
<ticketd :ticket_="form.ticket_"></ticketd>
|
||||
</view>
|
||||
<view class="form-card">
|
||||
<view class="form-card-title">用车信息</view>
|
||||
<uni-forms-item label="用车事由" required>
|
||||
<uni-easyinput v-model="form.reason" placeholder="请输入用车事由" v-if="mode!='show'"/>
|
||||
<span v-else>{{form.location}}</span>
|
||||
|
|
@ -56,8 +60,11 @@
|
|||
<span v-if="index1<(form.time_ranges.length-1)">、</span>
|
||||
</span>
|
||||
</uni-forms-item>
|
||||
</view>
|
||||
</uni-forms>
|
||||
<view class="timeView" v-if="mode!='show'">
|
||||
<view class="form-card time-card" v-if="mode!='show'">
|
||||
<view class="form-card-title">选择时间段</view>
|
||||
<view class="timeView">
|
||||
<view style="height: 70upx;line-height: 70upx;">
|
||||
<text>凌晨:</text>
|
||||
<view class="iconsWrap" @click="showAmChange">
|
||||
|
|
@ -74,6 +81,7 @@
|
|||
<view :class="{'isSelected':item.isSelect,'isSloted':item.sloted,'timeItem': true}" @click="timeItemClickPm(index)">{{item.label}}</view>
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
</scroll-view>
|
||||
<view class="footer_fixed">
|
||||
<ticketd_b :workflow_key="'wf_vehicle'" :title="'用车申请'" :t_id="form.id" :ticket_="form.ticket_" :ticket_data="ticket_data"
|
||||
|
|
@ -314,51 +322,63 @@ import {actStateEnum} from "@/utils/enum.js"
|
|||
}
|
||||
</script>
|
||||
|
||||
<style scoped>
|
||||
.iconsWrap{
|
||||
width: 40upx;
|
||||
height: 40upx;
|
||||
display: inline-block;
|
||||
line-height: 40upx;
|
||||
border-radius: 25upx;
|
||||
text-align: center;
|
||||
background-color: #74ddfc;
|
||||
border: 1px solid #74ddfc;
|
||||
}
|
||||
.timeView{
|
||||
width: 100%;
|
||||
padding: 10upx;
|
||||
box-sizing: border-box;
|
||||
}
|
||||
.amBlock{
|
||||
display: block;
|
||||
}
|
||||
.amBlockHide{
|
||||
display: none;
|
||||
}
|
||||
.timeBlock{
|
||||
width: 25%;
|
||||
padding: 6upx;
|
||||
height: 70upx;
|
||||
margin: 10upx 0;
|
||||
font-size: 28upx;
|
||||
line-height: 70upx;
|
||||
display: inline-block;
|
||||
box-sizing: border-box;
|
||||
}
|
||||
.timeItem{
|
||||
color: #666666;
|
||||
text-align: center;
|
||||
border-radius: 10upx;
|
||||
background-color: #b9f0cb;
|
||||
border: 1upx solid #eeeeee;
|
||||
}
|
||||
.timeItem.isSelected{
|
||||
background-color: #00a870;
|
||||
color: #fff;
|
||||
}
|
||||
.timeItem.isSloted{
|
||||
background-color: #fac275!important;
|
||||
color: #fff;
|
||||
}
|
||||
<style lang="scss" scoped>
|
||||
.form-page { min-height: 100vh; background: #F0F2F5; }
|
||||
.form-scroll { padding: 20rpx 24rpx; padding-bottom: 180rpx; }
|
||||
.form-card { background: #fff; border-radius: 20rpx; padding: 24rpx; margin-bottom: 20rpx; box-shadow: 0 2rpx 12rpx rgba(0,0,0,0.04); }
|
||||
.form-card-title { font-size: 30rpx; font-weight: 600; color: #1F2937; margin-bottom: 16rpx; padding-left: 16rpx; border-left: 6rpx solid #2BA471; }
|
||||
|
||||
.time-card { padding: 24rpx 16rpx; }
|
||||
|
||||
.iconsWrap {
|
||||
width: 48rpx;
|
||||
height: 48rpx;
|
||||
display: inline-flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
border-radius: 50%;
|
||||
background: linear-gradient(135deg, #2BA471, #60A5FA);
|
||||
vertical-align: middle;
|
||||
}
|
||||
|
||||
.timeView {
|
||||
width: 100%;
|
||||
box-sizing: border-box;
|
||||
}
|
||||
|
||||
.amBlock { display: block; }
|
||||
.amBlockHide { display: none; }
|
||||
|
||||
.timeBlock {
|
||||
width: 25%;
|
||||
padding: 6rpx;
|
||||
height: 70rpx;
|
||||
margin: 8rpx 0;
|
||||
font-size: 24rpx;
|
||||
line-height: 70rpx;
|
||||
display: inline-block;
|
||||
box-sizing: border-box;
|
||||
}
|
||||
|
||||
.timeItem {
|
||||
color: #4B5563;
|
||||
text-align: center;
|
||||
border-radius: 12rpx;
|
||||
background-color: #D1FAE5;
|
||||
border: 2rpx solid #A7F3D0;
|
||||
font-weight: 500;
|
||||
}
|
||||
|
||||
.timeItem.isSelected {
|
||||
background: linear-gradient(135deg, #10B981, #059669);
|
||||
color: #fff;
|
||||
border-color: #059669;
|
||||
box-shadow: 0 2rpx 8rpx rgba(16, 185, 129, 0.3);
|
||||
}
|
||||
|
||||
.timeItem.isSloted {
|
||||
background: #FDE68A !important;
|
||||
color: #92400E !important;
|
||||
border-color: #F59E0B !important;
|
||||
}
|
||||
</style>
|
||||
|
|
@ -1,9 +1,13 @@
|
|||
<!-- 供应商 -->
|
||||
<template>
|
||||
<view class="container">
|
||||
<scroll-view scroll-y style="padding-bottom: 180rpx;background-color: #fff;">
|
||||
<view class="form-page">
|
||||
<scroll-view scroll-y class="form-scroll">
|
||||
<uni-forms v-model="form" label-width="210rpx" ref="customForm" :rules="customRules">
|
||||
<ticketd :ticket_="form.ticket_"></ticketd>
|
||||
<view class="form-card" v-if="form.ticket_">
|
||||
<ticketd :ticket_="form.ticket_"></ticketd>
|
||||
</view>
|
||||
<view class="form-card">
|
||||
<view class="form-card-title">报价信息</view>
|
||||
<uni-forms-item label="客户名称" required>
|
||||
<uni-easyinput
|
||||
v-model="form.customer_name"
|
||||
|
|
@ -83,13 +87,14 @@
|
|||
:disabled="localMode === 'show'"
|
||||
/>
|
||||
</uni-forms-item>
|
||||
</view>
|
||||
</uni-forms>
|
||||
</scroll-view>
|
||||
<view class="footer_fixed">
|
||||
<button v-if="mode=='edit'" size="mini" @click="handleDel" :loading="saveLoading" :disabled="saveLoading" type="warn">
|
||||
<button v-if="mode=='edit'" class="form-btn form-btn-danger" @click="handleDel" :loading="saveLoading" :disabled="saveLoading">
|
||||
删除
|
||||
</button>
|
||||
<button v-if="mode!='show'" size="mini" @click="handleSave" :loading="saveLoading" :disabled="saveLoading" type="primary">
|
||||
<button v-if="mode!='show'" class="form-btn form-btn-primary" @click="handleSave" :loading="saveLoading" :disabled="saveLoading">
|
||||
提交审批
|
||||
</button>
|
||||
<ticketd_b v-if="form.ticket_ && mode == 'show'" :t_id="form.id" :ticket_="form.ticket_"
|
||||
|
|
@ -161,15 +166,23 @@ import ticketd from "../wf/ticketd.vue"
|
|||
}
|
||||
</script>
|
||||
|
||||
<style scoped>
|
||||
.uni-data-checklist .checklist-group .checklist-box{
|
||||
margin: 10px 0!important;
|
||||
}
|
||||
.flex_file_picker>.uni-file-picker__files{
|
||||
flex-direction: row;
|
||||
}
|
||||
.flex_file_picker{
|
||||
width: 90px;
|
||||
flex: none;
|
||||
}
|
||||
<style lang="scss" scoped>
|
||||
.form-page { min-height: 100vh; background: #F0F2F5; }
|
||||
.form-scroll { padding: 20rpx 24rpx; padding-bottom: 180rpx; }
|
||||
.form-card { background: #fff; border-radius: 20rpx; padding: 24rpx; margin-bottom: 20rpx; box-shadow: 0 2rpx 12rpx rgba(0,0,0,0.04); }
|
||||
.form-card-title { font-size: 30rpx; font-weight: 600; color: #1F2937; margin-bottom: 16rpx; padding-left: 16rpx; border-left: 6rpx solid #2BA471; }
|
||||
.form-textarea { width: 100%; min-height: 160rpx; border: 2rpx solid #E5E7EB; border-radius: 12rpx; padding: 16rpx; font-size: 28rpx; color: #374151; box-sizing: border-box; background: #F9FAFB; }
|
||||
.form-btn { flex: 1; height: 80rpx; line-height: 80rpx; border-radius: 14rpx !important; font-size: 28rpx; font-weight: 500; border: none !important; }
|
||||
.form-btn-primary { background: linear-gradient(135deg, #2BA471, #1F8C5E) !important; color: #fff !important; box-shadow: 0 4rpx 12rpx rgba(43,164,113,0.2); }
|
||||
.form-btn-danger { background: linear-gradient(135deg, #EF4444, #DC2626) !important; color: #fff !important; box-shadow: 0 4rpx 12rpx rgba(239,68,68,0.3); }
|
||||
.uni-data-checklist .checklist-group .checklist-box{
|
||||
margin: 10px 0!important;
|
||||
}
|
||||
.flex_file_picker>.uni-file-picker__files{
|
||||
flex-direction: row;
|
||||
}
|
||||
.flex_file_picker{
|
||||
width: 90px;
|
||||
flex: none;
|
||||
}
|
||||
</style>
|
||||
|
|
@ -1,9 +1,13 @@
|
|||
<!-- 供应商 -->
|
||||
<template>
|
||||
<view class="container">
|
||||
<scroll-view scroll-y style="padding-bottom: 180rpx;background-color: #fff;">
|
||||
<view class="form-page">
|
||||
<scroll-view scroll-y class="form-scroll">
|
||||
<uni-forms v-model="form" label-width="150rpx" ref="customForm" :rules="customRules">
|
||||
<ticketd :ticket_="form.ticket_"></ticketd>
|
||||
<view class="form-card" v-if="form.ticket_">
|
||||
<ticketd :ticket_="form.ticket_"></ticketd>
|
||||
</view>
|
||||
<view class="form-card">
|
||||
<view class="form-card-title">供应商信息</view>
|
||||
<uni-forms-item label="供应商名称" required>
|
||||
<uni-easyinput v-model="form.name" placeholder="请输入供应商名称" :disabled="mode=='show'"/>
|
||||
</uni-forms-item>
|
||||
|
|
@ -22,13 +26,14 @@
|
|||
<uni-forms-item label="质量证书" required>
|
||||
<xtUpload v-model="form.quality_certificate" v-model:obj="form.quality_certificate_" xtype="id" :disabled="mode=='show'"></xtUpload>
|
||||
</uni-forms-item>
|
||||
</view>
|
||||
</uni-forms>
|
||||
</scroll-view>
|
||||
<view class="footer_fixed">
|
||||
<button v-if="mode=='edit'" size="mini" @click="handleDel" :loading="saveLoading" :disabled="saveLoading" type="warn">
|
||||
<button v-if="mode=='edit'" class="form-btn form-btn-danger" @click="handleDel" :loading="saveLoading" :disabled="saveLoading">
|
||||
删除
|
||||
</button>
|
||||
<button v-if="mode!='show'" size="mini" @click="handleSave" :loading="saveLoading" :disabled="saveLoading" type="primary">
|
||||
<button v-if="mode!='show'" class="form-btn form-btn-primary" @click="handleSave" :loading="saveLoading" :disabled="saveLoading">
|
||||
提交审批
|
||||
</button>
|
||||
<ticketd_b v-if="form.ticket_ && mode == 'show'" :t_id="form.id" :ticket_="form.ticket_"
|
||||
|
|
@ -114,15 +119,23 @@ import xtUpload from "@/components/xtUpload.vue"
|
|||
}
|
||||
</script>
|
||||
|
||||
<style scoped>
|
||||
.uni-data-checklist .checklist-group .checklist-box{
|
||||
margin: 10px 0!important;
|
||||
}
|
||||
.flex_file_picker>.uni-file-picker__files{
|
||||
flex-direction: row;
|
||||
}
|
||||
.flex_file_picker{
|
||||
width: 90px;
|
||||
flex: none;
|
||||
}
|
||||
<style lang="scss" scoped>
|
||||
.form-page { min-height: 100vh; background: #F0F2F5; }
|
||||
.form-scroll { padding: 20rpx 24rpx; padding-bottom: 180rpx; }
|
||||
.form-card { background: #fff; border-radius: 20rpx; padding: 24rpx; margin-bottom: 20rpx; box-shadow: 0 2rpx 12rpx rgba(0,0,0,0.04); }
|
||||
.form-card-title { font-size: 30rpx; font-weight: 600; color: #1F2937; margin-bottom: 16rpx; padding-left: 16rpx; border-left: 6rpx solid #2BA471; }
|
||||
.form-textarea { width: 100%; min-height: 160rpx; border: 2rpx solid #E5E7EB; border-radius: 12rpx; padding: 16rpx; font-size: 28rpx; color: #374151; box-sizing: border-box; background: #F9FAFB; }
|
||||
.form-btn { flex: 1; height: 80rpx; line-height: 80rpx; border-radius: 14rpx !important; font-size: 28rpx; font-weight: 500; border: none !important; }
|
||||
.form-btn-primary { background: linear-gradient(135deg, #2BA471, #1F8C5E) !important; color: #fff !important; box-shadow: 0 4rpx 12rpx rgba(43,164,113,0.2); }
|
||||
.form-btn-danger { background: linear-gradient(135deg, #EF4444, #DC2626) !important; color: #fff !important; box-shadow: 0 4rpx 12rpx rgba(239,68,68,0.3); }
|
||||
.uni-data-checklist .checklist-group .checklist-box{
|
||||
margin: 10px 0!important;
|
||||
}
|
||||
.flex_file_picker>.uni-file-picker__files{
|
||||
flex-direction: row;
|
||||
}
|
||||
.flex_file_picker{
|
||||
width: 90px;
|
||||
flex: none;
|
||||
}
|
||||
</style>
|
||||
|
|
@ -1,9 +1,13 @@
|
|||
<!-- 论文申密 -->
|
||||
<template>
|
||||
<view class="container">
|
||||
<scroll-view scroll-y style="padding-bottom: 180rpx;background-color: #fff;">
|
||||
<view class="form-page">
|
||||
<scroll-view scroll-y class="form-scroll">
|
||||
<uni-forms v-model="form" label-width="180upx" ref="customForm" :rules="customRules">
|
||||
<ticketd :ticket_="form.ticket_"></ticketd>
|
||||
<view class="form-card" v-if="form.ticket_">
|
||||
<ticketd :ticket_="form.ticket_"></ticketd>
|
||||
</view>
|
||||
<view class="form-card">
|
||||
<view class="form-card-title">论文信息</view>
|
||||
<uni-forms-item label="拟发表论文名称" required name="name">
|
||||
<uni-easyinput v-model="form.paper_name" placeholder="请输入拟发表论文名称" v-if="mode!='show'"/>
|
||||
<text v-else>{{form.paper_name}}</text>
|
||||
|
|
@ -44,6 +48,7 @@
|
|||
<uni-number-box v-model="item[0].pages" :disabled="mode=='show'||item[0].name.length<1"></uni-number-box>
|
||||
</view>
|
||||
</template>
|
||||
</view>
|
||||
</uni-forms>
|
||||
</scroll-view>
|
||||
<view class="footer_fixed">
|
||||
|
|
@ -205,15 +210,23 @@ import filePreview from "@/components/filePreview.vue"
|
|||
}
|
||||
</script>
|
||||
|
||||
<style scoped>
|
||||
.uni-data-checklist .checklist-group .checklist-box{
|
||||
margin: 10px 0!important;
|
||||
}
|
||||
.flex_file_picker>.uni-file-picker__files{
|
||||
flex-direction: row;
|
||||
}
|
||||
.flex_file_picker{
|
||||
width: 100%;
|
||||
flex: none;
|
||||
}
|
||||
<style lang="scss" scoped>
|
||||
.form-page { min-height: 100vh; background: #F0F2F5; }
|
||||
.form-scroll { padding: 20rpx 24rpx; padding-bottom: 180rpx; }
|
||||
.form-card { background: #fff; border-radius: 20rpx; padding: 24rpx; margin-bottom: 20rpx; box-shadow: 0 2rpx 12rpx rgba(0,0,0,0.04); }
|
||||
.form-card-title { font-size: 30rpx; font-weight: 600; color: #1F2937; margin-bottom: 16rpx; padding-left: 16rpx; border-left: 6rpx solid #2BA471; }
|
||||
.form-textarea { width: 100%; min-height: 160rpx; border: 2rpx solid #E5E7EB; border-radius: 12rpx; padding: 16rpx; font-size: 28rpx; color: #374151; box-sizing: border-box; background: #F9FAFB; }
|
||||
.form-btn { flex: 1; height: 80rpx; line-height: 80rpx; border-radius: 14rpx !important; font-size: 28rpx; font-weight: 500; border: none !important; }
|
||||
.form-btn-primary { background: linear-gradient(135deg, #2BA471, #1F8C5E) !important; color: #fff !important; box-shadow: 0 4rpx 12rpx rgba(43,164,113,0.2); }
|
||||
.form-btn-danger { background: linear-gradient(135deg, #EF4444, #DC2626) !important; color: #fff !important; box-shadow: 0 4rpx 12rpx rgba(239,68,68,0.3); }
|
||||
.uni-data-checklist .checklist-group .checklist-box{
|
||||
margin: 10px 0!important;
|
||||
}
|
||||
.flex_file_picker>.uni-file-picker__files{
|
||||
flex-direction: row;
|
||||
}
|
||||
.flex_file_picker{
|
||||
width: 100%;
|
||||
flex: none;
|
||||
}
|
||||
</style>
|
||||
|
|
@ -1,9 +1,13 @@
|
|||
<!-- 专利申请 -->
|
||||
<template>
|
||||
<view class="container">
|
||||
<scroll-view scroll-y style="padding-bottom: 180rpx;background-color: #fff;">
|
||||
<view class="form-page">
|
||||
<scroll-view scroll-y class="form-scroll">
|
||||
<uni-forms v-model="form" label-width="150upx" ref="customForm" :rules="customRules">
|
||||
<ticketd :ticket_="form.ticket_"></ticketd>
|
||||
<view class="form-card" v-if="form.ticket_">
|
||||
<ticketd :ticket_="form.ticket_"></ticketd>
|
||||
</view>
|
||||
<view class="form-card">
|
||||
<view class="form-card-title">专利信息</view>
|
||||
<uni-forms-item label="专利名称" required name="name">
|
||||
<uni-easyinput v-model="form.name" placeholder="请输入专利名称" v-if="mode!='show'"/>
|
||||
<span v-else>{{form.name}}</span>
|
||||
|
|
@ -44,6 +48,7 @@
|
|||
<uni-number-box v-model="item[0].pages" :disabled="mode=='show'||item[0].name.length<1"></uni-number-box>
|
||||
</view>
|
||||
</template>
|
||||
</view>
|
||||
</uni-forms>
|
||||
</scroll-view>
|
||||
<view class="footer_fixed">
|
||||
|
|
@ -223,15 +228,23 @@ import filePreview from "@/components/filePreview.vue"
|
|||
}
|
||||
</script>
|
||||
|
||||
<style scoped>
|
||||
.uni-data-checklist .checklist-group .checklist-box{
|
||||
margin: 10px 0!important;
|
||||
}
|
||||
.flex_file_picker>.uni-file-picker__files{
|
||||
flex-direction: row;
|
||||
}
|
||||
.flex_file_picker{
|
||||
width: 100%;
|
||||
flex: none;
|
||||
}
|
||||
<style lang="scss" scoped>
|
||||
.form-page { min-height: 100vh; background: #F0F2F5; }
|
||||
.form-scroll { padding: 20rpx 24rpx; padding-bottom: 180rpx; }
|
||||
.form-card { background: #fff; border-radius: 20rpx; padding: 24rpx; margin-bottom: 20rpx; box-shadow: 0 2rpx 12rpx rgba(0,0,0,0.04); }
|
||||
.form-card-title { font-size: 30rpx; font-weight: 600; color: #1F2937; margin-bottom: 16rpx; padding-left: 16rpx; border-left: 6rpx solid #2BA471; }
|
||||
.form-textarea { width: 100%; min-height: 160rpx; border: 2rpx solid #E5E7EB; border-radius: 12rpx; padding: 16rpx; font-size: 28rpx; color: #374151; box-sizing: border-box; background: #F9FAFB; }
|
||||
.form-btn { flex: 1; height: 80rpx; line-height: 80rpx; border-radius: 14rpx !important; font-size: 28rpx; font-weight: 500; border: none !important; }
|
||||
.form-btn-primary { background: linear-gradient(135deg, #2BA471, #1F8C5E) !important; color: #fff !important; box-shadow: 0 4rpx 12rpx rgba(43,164,113,0.2); }
|
||||
.form-btn-danger { background: linear-gradient(135deg, #EF4444, #DC2626) !important; color: #fff !important; box-shadow: 0 4rpx 12rpx rgba(239,68,68,0.3); }
|
||||
.uni-data-checklist .checklist-group .checklist-box{
|
||||
margin: 10px 0!important;
|
||||
}
|
||||
.flex_file_picker>.uni-file-picker__files{
|
||||
flex-direction: row;
|
||||
}
|
||||
.flex_file_picker{
|
||||
width: 100%;
|
||||
flex: none;
|
||||
}
|
||||
</style>
|
||||
|
|
@ -1,9 +1,13 @@
|
|||
<!-- 平台审批 -->
|
||||
<template>
|
||||
<view class="container">
|
||||
<scroll-view scroll-y style="padding-bottom: 180rpx;background-color: #fff;">
|
||||
<view class="form-page">
|
||||
<scroll-view scroll-y class="form-scroll">
|
||||
<uni-forms v-model="form" label-width="150rpx" ref="customForm" :rules="customRules">
|
||||
<ticketd :ticket_="form.ticket_"></ticketd>
|
||||
<view class="form-card" v-if="form.ticket_">
|
||||
<ticketd :ticket_="form.ticket_"></ticketd>
|
||||
</view>
|
||||
<view class="form-card">
|
||||
<view class="form-card-title">平台信息</view>
|
||||
<uni-forms-item label="名称" required>
|
||||
<uni-easyinput v-model="form.name" placeholder="请输入名称" v-if="mode!='show'"/>
|
||||
<span v-else>{{form.name}}</span>
|
||||
|
|
@ -33,9 +37,10 @@
|
|||
<uni-forms-item label="平台基本情况与目标绩效" label-width="750" required>
|
||||
</uni-forms-item>
|
||||
<uni-forms-item label-width="100">
|
||||
<textarea v-model="form.condition" v-if="mode!='show'" placeholder-style="color:#efefef" placeholder="平台基本情况与目标绩效" style="width:100%; border: 2upx solid #e5e5e5;padding: 10upx;"/>
|
||||
<textarea v-model="form.condition" v-if="mode!='show'" placeholder-style="color:#efefef" placeholder="平台基本情况与目标绩效" class="form-textarea"/>
|
||||
<span v-else>{{form.condition}}</span>
|
||||
</uni-forms-item>
|
||||
</view>
|
||||
</uni-forms>
|
||||
</scroll-view>
|
||||
<view class="footer_fixed">
|
||||
|
|
@ -138,15 +143,23 @@ import {actStateEnum} from "@/utils/enum.js"
|
|||
}
|
||||
</script>
|
||||
|
||||
<style scoped>
|
||||
.uni-data-checklist .checklist-group .checklist-box{
|
||||
margin: 10px 0!important;
|
||||
}
|
||||
.flex_file_picker>.uni-file-picker__files{
|
||||
flex-direction: row;
|
||||
}
|
||||
.flex_file_picker{
|
||||
width: 90px;
|
||||
flex: none;
|
||||
}
|
||||
<style lang="scss" scoped>
|
||||
.form-page { min-height: 100vh; background: #F0F2F5; }
|
||||
.form-scroll { padding: 20rpx 24rpx; padding-bottom: 180rpx; }
|
||||
.form-card { background: #fff; border-radius: 20rpx; padding: 24rpx; margin-bottom: 20rpx; box-shadow: 0 2rpx 12rpx rgba(0,0,0,0.04); }
|
||||
.form-card-title { font-size: 30rpx; font-weight: 600; color: #1F2937; margin-bottom: 16rpx; padding-left: 16rpx; border-left: 6rpx solid #2BA471; }
|
||||
.form-textarea { width: 100%; min-height: 160rpx; border: 2rpx solid #E5E7EB; border-radius: 12rpx; padding: 16rpx; font-size: 28rpx; color: #374151; box-sizing: border-box; background: #F9FAFB; }
|
||||
.form-btn { flex: 1; height: 80rpx; line-height: 80rpx; border-radius: 14rpx !important; font-size: 28rpx; font-weight: 500; border: none !important; }
|
||||
.form-btn-primary { background: linear-gradient(135deg, #2BA471, #1F8C5E) !important; color: #fff !important; box-shadow: 0 4rpx 12rpx rgba(43,164,113,0.2); }
|
||||
.form-btn-danger { background: linear-gradient(135deg, #EF4444, #DC2626) !important; color: #fff !important; box-shadow: 0 4rpx 12rpx rgba(239,68,68,0.3); }
|
||||
.uni-data-checklist .checklist-group .checklist-box{
|
||||
margin: 10px 0!important;
|
||||
}
|
||||
.flex_file_picker>.uni-file-picker__files{
|
||||
flex-direction: row;
|
||||
}
|
||||
.flex_file_picker{
|
||||
width: 90px;
|
||||
flex: none;
|
||||
}
|
||||
</style>
|
||||
|
|
@ -1,9 +1,13 @@
|
|||
<!-- 立项审批 -->
|
||||
<template>
|
||||
<view class="container">
|
||||
<scroll-view scroll-y style="padding-bottom: 180rpx;background-color: #fff;">
|
||||
<view class="form-page">
|
||||
<scroll-view scroll-y class="form-scroll">
|
||||
<uni-forms v-model="form" label-width="150rpx" ref="customForm" :rules="customRules">
|
||||
<ticketd :ticket_="form.ticket_"></ticketd>
|
||||
<view class="form-card" v-if="form.ticket_">
|
||||
<ticketd :ticket_="form.ticket_"></ticketd>
|
||||
</view>
|
||||
<view class="form-card">
|
||||
<view class="form-card-title">立项信息</view>
|
||||
<uni-forms-item label="立项日期" required>
|
||||
<uni-datetime-picker type="date" :clear-icon="false" v-model="form.date" @change="dateChange"
|
||||
v-if="mode!='show'"/>
|
||||
|
|
@ -35,8 +39,9 @@
|
|||
<uni-forms-item label="平台基本情况与目标绩效" label-width="750" required>
|
||||
</uni-forms-item>
|
||||
<uni-forms-item label-width="100">
|
||||
<textarea placeholder-style="color:#efefef" placeholder="平台基本情况与目标绩效" style="width:100%; border: 2upx solid #e5e5e5;padding: 10upx;"/>
|
||||
<textarea placeholder-style="color:#efefef" placeholder="平台基本情况与目标绩效" class="form-textarea"/>
|
||||
</uni-forms-item>
|
||||
</view>
|
||||
</uni-forms>
|
||||
</scroll-view>
|
||||
<view class="footer_fixed">
|
||||
|
|
@ -136,15 +141,23 @@ import {actStateEnum} from "@/utils/enum.js"
|
|||
}
|
||||
</script>
|
||||
|
||||
<style scoped>
|
||||
.uni-data-checklist .checklist-group .checklist-box{
|
||||
margin: 10px 0!important;
|
||||
}
|
||||
.flex_file_picker>.uni-file-picker__files{
|
||||
flex-direction: row;
|
||||
}
|
||||
.flex_file_picker{
|
||||
width: 90px;
|
||||
flex: none;
|
||||
}
|
||||
<style lang="scss" scoped>
|
||||
.form-page { min-height: 100vh; background: #F0F2F5; }
|
||||
.form-scroll { padding: 20rpx 24rpx; padding-bottom: 180rpx; }
|
||||
.form-card { background: #fff; border-radius: 20rpx; padding: 24rpx; margin-bottom: 20rpx; box-shadow: 0 2rpx 12rpx rgba(0,0,0,0.04); }
|
||||
.form-card-title { font-size: 30rpx; font-weight: 600; color: #1F2937; margin-bottom: 16rpx; padding-left: 16rpx; border-left: 6rpx solid #2BA471; }
|
||||
.form-textarea { width: 100%; min-height: 160rpx; border: 2rpx solid #E5E7EB; border-radius: 12rpx; padding: 16rpx; font-size: 28rpx; color: #374151; box-sizing: border-box; background: #F9FAFB; }
|
||||
.form-btn { flex: 1; height: 80rpx; line-height: 80rpx; border-radius: 14rpx !important; font-size: 28rpx; font-weight: 500; border: none !important; }
|
||||
.form-btn-primary { background: linear-gradient(135deg, #2BA471, #1F8C5E) !important; color: #fff !important; box-shadow: 0 4rpx 12rpx rgba(43,164,113,0.2); }
|
||||
.form-btn-danger { background: linear-gradient(135deg, #EF4444, #DC2626) !important; color: #fff !important; box-shadow: 0 4rpx 12rpx rgba(239,68,68,0.3); }
|
||||
.uni-data-checklist .checklist-group .checklist-box{
|
||||
margin: 10px 0!important;
|
||||
}
|
||||
.flex_file_picker>.uni-file-picker__files{
|
||||
flex-direction: row;
|
||||
}
|
||||
.flex_file_picker{
|
||||
width: 90px;
|
||||
flex: none;
|
||||
}
|
||||
</style>
|
||||
|
|
@ -1,40 +1,67 @@
|
|||
<template>
|
||||
<view>
|
||||
<uni-list>
|
||||
<uni-list-item title="姓名" :rightText="userInfo.name"></uni-list-item>
|
||||
<uni-list-item title="账户名" :rightText="userInfo.username"></uni-list-item>
|
||||
<uni-list-item title="主部门" :rightText="userInfo.belong_dept_name"></uni-list-item>
|
||||
<uni-list-item title="主岗位" :rightText="userInfo.post_name"></uni-list-item>
|
||||
</uni-list>
|
||||
<view style="height: 4rpx;"></view>
|
||||
<view style="display: flex;">
|
||||
<button size="mini" type="primary" @click="changePw">修改密码</button>
|
||||
<button size="mini" type="warn" @click="logout">退出登录</button>
|
||||
<view class="profile-page">
|
||||
<!-- 头部卡片 -->
|
||||
<view class="profile-header">
|
||||
<view class="profile-avatar">
|
||||
<text class="profile-avatar-text">{{userInfo.name ? userInfo.name.slice(-2) : ''}}</text>
|
||||
</view>
|
||||
<text class="profile-name">{{userInfo.name}}</text>
|
||||
<text class="profile-dept">{{userInfo.belong_dept_name}} · {{userInfo.post_name}}</text>
|
||||
</view>
|
||||
|
||||
<!-- 信息卡片 -->
|
||||
<view class="profile-card">
|
||||
<view class="profile-card-title">账户信息</view>
|
||||
<view class="profile-info-row">
|
||||
<text class="profile-info-label">姓名</text>
|
||||
<text class="profile-info-value">{{userInfo.name}}</text>
|
||||
</view>
|
||||
<view class="profile-info-divider"></view>
|
||||
<view class="profile-info-row">
|
||||
<text class="profile-info-label">账户名</text>
|
||||
<text class="profile-info-value">{{userInfo.username}}</text>
|
||||
</view>
|
||||
<view class="profile-info-divider"></view>
|
||||
<view class="profile-info-row">
|
||||
<text class="profile-info-label">主部门</text>
|
||||
<text class="profile-info-value">{{userInfo.belong_dept_name}}</text>
|
||||
</view>
|
||||
<view class="profile-info-divider"></view>
|
||||
<view class="profile-info-row">
|
||||
<text class="profile-info-label">主岗位</text>
|
||||
<text class="profile-info-value">{{userInfo.post_name}}</text>
|
||||
</view>
|
||||
</view>
|
||||
|
||||
<!-- 操作按钮 -->
|
||||
<view class="profile-actions">
|
||||
<button class="profile-btn profile-btn-primary" @click="changePw">修改密码</button>
|
||||
<button class="profile-btn profile-btn-logout" @click="logout">退出登录</button>
|
||||
</view>
|
||||
</view>
|
||||
|
||||
<!-- 修改密码弹窗 -->
|
||||
<view class="dialogWrap" v-if="dialogV">
|
||||
<view class="dialogCont">
|
||||
<view class="dialogTitle">
|
||||
<view>修改密码</view>
|
||||
<view @click="closeDialog">×</view>
|
||||
<view class="dialog-close" @click="closeDialog">✕</view>
|
||||
</view>
|
||||
<view style="height: 4rpx;"></view>
|
||||
<view style="height: 20rpx;"></view>
|
||||
<view>
|
||||
<uni-forms v-model="formData">
|
||||
<uni-forms-item label="原密码" required>
|
||||
<uni-easyinput type="password" v-model="formData.old_password"></uni-easyinput>
|
||||
</uni-forms-item>
|
||||
<uni-forms-item label="新密码" >
|
||||
<uni-forms-item label="新密码">
|
||||
<uni-easyinput type="password" v-model="formData.new_password1"></uni-easyinput>
|
||||
</uni-forms-item>
|
||||
<uni-forms-item label="新密码/">
|
||||
<uni-forms-item label="确认密码">
|
||||
<uni-easyinput type="password" v-model="formData.new_password2"></uni-easyinput>
|
||||
</uni-forms-item>
|
||||
</uni-forms>
|
||||
<view style="height: 4rpx;"></view>
|
||||
<view style="text-align: center;">
|
||||
<button size="mini" type="primary" @click="save">保存</button>
|
||||
</view>
|
||||
<view style="height: 16rpx;"></view>
|
||||
<button class="profile-btn profile-btn-primary" @click="save" style="width:100%">保存</button>
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
|
|
@ -92,8 +119,134 @@
|
|||
}
|
||||
</script>
|
||||
|
||||
<style>
|
||||
.uni-forms-item {
|
||||
margin-bottom: 8px;
|
||||
}
|
||||
<style lang="scss" scoped>
|
||||
.profile-page {
|
||||
min-height: 100vh;
|
||||
background: #F5FAF7;
|
||||
padding-bottom: 40rpx;
|
||||
}
|
||||
|
||||
.profile-header {
|
||||
background: linear-gradient(135deg, #14694A, #1F8C5E, #2BA471);
|
||||
padding: 60rpx 32rpx 48rpx;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
align-items: center;
|
||||
}
|
||||
|
||||
.profile-avatar {
|
||||
width: 128rpx;
|
||||
height: 128rpx;
|
||||
border-radius: 50%;
|
||||
background: linear-gradient(135deg, rgba(255, 255, 255, 0.25), rgba(255, 255, 255, 0.15));
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
border: 4rpx solid rgba(255, 255, 255, 0.4);
|
||||
margin-bottom: 20rpx;
|
||||
box-shadow: 0 8rpx 24rpx rgba(0, 0, 0, 0.2);
|
||||
}
|
||||
|
||||
.profile-avatar-text {
|
||||
font-size: 44rpx;
|
||||
color: #FFFFFF;
|
||||
font-weight: 700;
|
||||
}
|
||||
|
||||
.profile-name {
|
||||
font-size: 38rpx;
|
||||
color: #FFFFFF;
|
||||
font-weight: 700;
|
||||
margin-bottom: 10rpx;
|
||||
letter-spacing: 4rpx;
|
||||
}
|
||||
|
||||
.profile-dept {
|
||||
font-size: 24rpx;
|
||||
color: rgba(255, 255, 255, 0.65);
|
||||
letter-spacing: 2rpx;
|
||||
}
|
||||
|
||||
.profile-card {
|
||||
margin: -20rpx 24rpx 0;
|
||||
background: #fff;
|
||||
border-radius: 20rpx;
|
||||
padding: 28rpx;
|
||||
box-shadow: 0 4rpx 20rpx rgba(0, 0, 0, 0.08);
|
||||
position: relative;
|
||||
z-index: 2;
|
||||
}
|
||||
|
||||
.profile-card-title {
|
||||
font-size: 30rpx;
|
||||
font-weight: 700;
|
||||
color: #191B23;
|
||||
margin-bottom: 24rpx;
|
||||
padding-left: 16rpx;
|
||||
border-left: 6rpx solid #2BA471;
|
||||
letter-spacing: 2rpx;
|
||||
}
|
||||
|
||||
.profile-info-row {
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
align-items: center;
|
||||
padding: 20rpx 0;
|
||||
}
|
||||
|
||||
.profile-info-label {
|
||||
font-size: 28rpx;
|
||||
color: #74777F;
|
||||
}
|
||||
|
||||
.profile-info-value {
|
||||
font-size: 28rpx;
|
||||
color: #191B23;
|
||||
font-weight: 500;
|
||||
}
|
||||
|
||||
.profile-info-divider {
|
||||
height: 1rpx;
|
||||
background: #DCF0E4;
|
||||
}
|
||||
|
||||
.profile-actions {
|
||||
padding: 32rpx 24rpx;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
gap: 20rpx;
|
||||
}
|
||||
|
||||
.profile-btn {
|
||||
width: 100%;
|
||||
height: 88rpx;
|
||||
line-height: 88rpx;
|
||||
border-radius: 16rpx !important;
|
||||
font-size: 30rpx;
|
||||
font-weight: 500;
|
||||
border: none !important;
|
||||
letter-spacing: 4rpx;
|
||||
}
|
||||
|
||||
.profile-btn-primary {
|
||||
background: linear-gradient(135deg, #2BA471, #1F8C5E) !important;
|
||||
color: #FFFFFF !important;
|
||||
box-shadow: 0 6rpx 20rpx rgba(0, 61, 166, 0.25);
|
||||
}
|
||||
|
||||
.profile-btn-logout {
|
||||
background: #fff !important;
|
||||
color: #EF4444 !important;
|
||||
border: 2rpx solid #FCA5A5 !important;
|
||||
}
|
||||
|
||||
.dialog-close {
|
||||
width: 48rpx;
|
||||
height: 48rpx;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
color: #74777F;
|
||||
font-size: 32rpx;
|
||||
}
|
||||
</style>
|
||||
|
|
|
|||
|
|
@ -1,35 +1,57 @@
|
|||
<template>
|
||||
<view class="container">
|
||||
<view class="header_sticky">
|
||||
<uni-segmented-control :current="current" :values="items" styleType="button" @clickItem="onClickItem" style="flex:1;">
|
||||
</uni-segmented-control>
|
||||
<view @click="openDg" style="text-align: center; width: 100rpx;">
|
||||
筛选
|
||||
<view class="wf-page">
|
||||
<!-- 顶部标签栏 -->
|
||||
<view class="wf-tabs-wrap">
|
||||
<view class="wf-tabs">
|
||||
<view v-for="(tab, idx) in items" :key="idx"
|
||||
class="wf-tab" :class="{active: current===idx}"
|
||||
@click="onClickItem({currentIndex:idx})">
|
||||
<text>{{tab}}</text>
|
||||
<view v-if="current===idx" class="wf-tab-bar"></view>
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
<view style="height:8rpx"></view>
|
||||
<view>
|
||||
<uni-list :border="true">
|
||||
<uni-list-item v-for="(item ,index) in tlist" :index="index" :key="index" direction="column" @click="itemClick(item)" :clickable="true">
|
||||
<template v-slot:header>{{item.title}}</template>
|
||||
<template v-slot:body>
|
||||
<view style="color: gray; font-size: 26rpx;">工作流: {{item.workflow_.name}}</view>
|
||||
<view style="color: gray; font-size: 26rpx;">工单状态:
|
||||
<uni-tag :text="actStateEnum[item.act_state]?.text" :circle="true" size="small" :type="actStateEnum[item.act_state]?.type" :inverted="true"
|
||||
style="font-weight: 460;"></uni-tag>
|
||||
{{item.state_.name}}
|
||||
|
||||
<!-- 工单列表 -->
|
||||
<view class="wf-list">
|
||||
<view v-for="(item, index) in tlist" :key="index" class="wf-card" @click="itemClick(item)" hover-class="wf-card-hover">
|
||||
<view class="wf-card-header">
|
||||
<text class="wf-card-title">{{item.title}}</text>
|
||||
<uni-tag :text="actStateEnum[item.act_state]?.text" :circle="true" size="small" :type="actStateEnum[item.act_state]?.type" :inverted="true"
|
||||
style="font-weight: 500;"></uni-tag>
|
||||
</view>
|
||||
<view class="wf-card-body">
|
||||
<view class="wf-card-row">
|
||||
<text class="wf-card-label">工作流</text>
|
||||
<text class="wf-card-value">{{item.workflow_.name}}</text>
|
||||
</view>
|
||||
<view style="color: gray; font-size: 26rpx;">提交时间: {{item.create_time}}</view>
|
||||
<view style="color: gray; font-size: 26rpx;">最近更新: {{item.update_time}}</view>
|
||||
</template>
|
||||
</uni-list-item>
|
||||
</uni-list>
|
||||
<uni-load-more :status="status" />
|
||||
<view class="wf-card-row">
|
||||
<text class="wf-card-label">当前节点</text>
|
||||
<text class="wf-card-value">{{item.state_.name}}</text>
|
||||
</view>
|
||||
<view class="wf-card-row">
|
||||
<text class="wf-card-label">提交时间</text>
|
||||
<text class="wf-card-value">{{item.create_time}}</text>
|
||||
</view>
|
||||
<view class="wf-card-row">
|
||||
<text class="wf-card-label">最近更新</text>
|
||||
<text class="wf-card-value">{{item.update_time}}</text>
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
|
||||
<!-- 空状态 -->
|
||||
<view v-if="tlist.length === 0 && status === 'noMore'" class="wf-empty">
|
||||
<text class="wf-empty-text">暂无工单</text>
|
||||
</view>
|
||||
|
||||
<uni-load-more :status="status" />
|
||||
</view>
|
||||
|
||||
<uni-popup ref="popup" background-color="#fff" @change="change">
|
||||
<view style="height: 188rpx;"></view>
|
||||
</uni-popup>
|
||||
</view>
|
||||
</view>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
|
|
@ -120,6 +142,122 @@ import {actStateEnum} from "@/utils/enum.js"
|
|||
}
|
||||
</script>
|
||||
|
||||
<style>
|
||||
<style lang="scss" scoped>
|
||||
.wf-page {
|
||||
min-height: 100vh;
|
||||
background: #F5FAF7;
|
||||
}
|
||||
|
||||
// ========== 标签栏 ==========
|
||||
.wf-tabs-wrap {
|
||||
position: sticky;
|
||||
top: 0;
|
||||
z-index: 10;
|
||||
background: #fff;
|
||||
box-shadow: 0 2rpx 12rpx rgba(0, 0, 0, 0.06);
|
||||
}
|
||||
|
||||
.wf-tabs {
|
||||
display: flex;
|
||||
padding: 0 16rpx;
|
||||
}
|
||||
|
||||
.wf-tab {
|
||||
flex: 1;
|
||||
text-align: center;
|
||||
padding: 26rpx 0;
|
||||
font-size: 28rpx;
|
||||
color: #74777F;
|
||||
position: relative;
|
||||
transition: color 0.3s;
|
||||
letter-spacing: 2rpx;
|
||||
&.active {
|
||||
color: #1F8C5E;
|
||||
font-weight: 700;
|
||||
}
|
||||
}
|
||||
|
||||
.wf-tab-bar {
|
||||
position: absolute;
|
||||
bottom: 0;
|
||||
left: 50%;
|
||||
transform: translateX(-50%);
|
||||
width: 48rpx;
|
||||
height: 6rpx;
|
||||
background: linear-gradient(90deg, #2BA471, #2BA471);
|
||||
border-radius: 3rpx;
|
||||
}
|
||||
|
||||
// ========== 工单卡片 ==========
|
||||
.wf-list {
|
||||
padding: 20rpx 24rpx;
|
||||
}
|
||||
|
||||
.wf-card {
|
||||
background: #fff;
|
||||
border-radius: 20rpx;
|
||||
padding: 28rpx;
|
||||
margin-bottom: 20rpx;
|
||||
box-shadow: 0 2rpx 12rpx rgba(0, 0, 0, 0.05);
|
||||
border-left: 5rpx solid #2BA471;
|
||||
}
|
||||
|
||||
.wf-card-hover {
|
||||
background: #E8F5EE;
|
||||
transform: scale(0.99);
|
||||
}
|
||||
|
||||
.wf-card-header {
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
align-items: center;
|
||||
margin-bottom: 16rpx;
|
||||
padding-bottom: 16rpx;
|
||||
border-bottom: 1rpx solid #DCF0E4;
|
||||
}
|
||||
|
||||
.wf-card-title {
|
||||
font-size: 30rpx;
|
||||
font-weight: 700;
|
||||
color: #191B23;
|
||||
flex: 1;
|
||||
margin-right: 16rpx;
|
||||
overflow: hidden;
|
||||
text-overflow: ellipsis;
|
||||
white-space: nowrap;
|
||||
}
|
||||
|
||||
.wf-card-body {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
gap: 10rpx;
|
||||
}
|
||||
|
||||
.wf-card-row {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
}
|
||||
|
||||
.wf-card-label {
|
||||
font-size: 24rpx;
|
||||
color: #74777F;
|
||||
width: 140rpx;
|
||||
flex-shrink: 0;
|
||||
}
|
||||
|
||||
.wf-card-value {
|
||||
font-size: 24rpx;
|
||||
color: #44474F;
|
||||
flex: 1;
|
||||
}
|
||||
|
||||
.wf-empty {
|
||||
text-align: center;
|
||||
padding: 120rpx 0;
|
||||
}
|
||||
|
||||
.wf-empty-text {
|
||||
font-size: 28rpx;
|
||||
color: #74777F;
|
||||
}
|
||||
</style>
|
||||
|
|
|
|||
|
|
@ -1,70 +1,89 @@
|
|||
<template>
|
||||
<view v-if="ticket_">
|
||||
<uni-forms-item label="审批状态">
|
||||
<uni-tag :text="actStateEnum[ticket_?.act_state]?.text" :circle="true" size="small"
|
||||
:type="actStateEnum[ticket_?.act_state]?.type" :inverted="true" style="font-weight: 460;"></uni-tag>
|
||||
<span style="margin-left: 12rpx" @click="handleDetail">{{ticket_?.state_.name}}</span>
|
||||
<span style="margin-left: 12rpx;color:blue" @click="handleDetail">更多</span>
|
||||
</uni-forms-item>
|
||||
<uni-forms-item label="操作" v-if="ticket_?.state_.enable_retreat && isOwn">
|
||||
<button type="warn" size="mini" @click="handleRetreat" style="margin-left:0px">撤回</button>
|
||||
</uni-forms-item>
|
||||
<uni-forms-item label="可处理人" v-if="ticket_.participant_">
|
||||
<span v-if="
|
||||
ticket_.participant_type == 2 ||
|
||||
ticket_.participant_type == 1
|
||||
">
|
||||
<span v-for="item in ticket_.participant_" :key="item.id">{{ item.name }}/</span>
|
||||
</span>
|
||||
<span v-else> 无 </span>
|
||||
</uni-forms-item>
|
||||
<view v-if="ticket_" class="ticket-status-wrap">
|
||||
<!-- 审批状态摘要 -->
|
||||
<view class="ticket-status-row">
|
||||
<view class="ticket-status-left">
|
||||
<text class="ticket-label">审批状态</text>
|
||||
<uni-tag :text="actStateEnum[ticket_?.act_state]?.text" :circle="true" size="small"
|
||||
:type="actStateEnum[ticket_?.act_state]?.type" :inverted="true" style="font-weight: 500;"></uni-tag>
|
||||
<text class="ticket-state-name">{{ticket_?.state_.name}}</text>
|
||||
</view>
|
||||
<view class="ticket-detail-btn" @click="handleDetail">
|
||||
<text class="ticket-detail-text">详情</text>
|
||||
<text class="ticket-detail-arrow">›</text>
|
||||
</view>
|
||||
</view>
|
||||
|
||||
<!-- 撤回操作 -->
|
||||
<view v-if="ticket_?.state_.enable_retreat && isOwn" class="ticket-action-row">
|
||||
<button class="ticket-retreat-btn" @click="handleRetreat">撤回申请</button>
|
||||
</view>
|
||||
|
||||
<!-- 可处理人 -->
|
||||
<view v-if="ticket_.participant_" class="ticket-participant-row">
|
||||
<text class="ticket-label">处理人</text>
|
||||
<view class="ticket-participant-list" v-if="ticket_.participant_type == 2 || ticket_.participant_type == 1">
|
||||
<text v-for="item in ticket_.participant_" :key="item.id" class="ticket-participant-tag">{{ item.name }}</text>
|
||||
</view>
|
||||
<text v-else class="ticket-participant-none">无</text>
|
||||
</view>
|
||||
|
||||
<!-- 审批详情弹窗 -->
|
||||
<uni-popup ref="popup" background-color="#fff">
|
||||
<scroll-view scroll-y="true" style="height: 600rpx;padding: 20rpx">
|
||||
<uni-forms-item label="审批状态">
|
||||
<uni-tag :text="actStateEnum[ticket_f?.act_state]?.text" :circle="true" size="small"
|
||||
:type="actStateEnum[ticket_f?.act_state]?.type" :inverted="true" style="font-weight: 460;"></uni-tag>
|
||||
<span style="margin-left: 12rpx">{{ticket_f?.state_.name}}</span>
|
||||
<button v-if="ticket_f?.state_.enable_retreat && isOwn" type="warn" size="mini" plain="true"
|
||||
@click="handleRetreat">撤回</button>
|
||||
</uni-forms-item>
|
||||
<uni-forms-item label="可处理人" v-if="ticket_f.participant_">
|
||||
<span v-if="
|
||||
ticket_f.participant_type == 2 ||
|
||||
ticket_f.participant_type == 1
|
||||
">
|
||||
<span v-for="item in ticket_f.participant_" :key="item.id">{{ item.name }}/</span>
|
||||
</span>
|
||||
<span v-else> 无 </span>
|
||||
</uni-forms-item>
|
||||
<div style="font-size: 28rpx;">
|
||||
<div v-for="item in flowsteps" :key="item.id" style="margin-bottom: 16rpx;border-top: 1px solid #000;">
|
||||
<div>
|
||||
<strong>{{ item.state_?.name || "未知状态" }}</strong>
|
||||
</div>
|
||||
<div>
|
||||
<span style="font-size: 22rpx">{{item.create_time}}-</span>
|
||||
<span v-if="item.intervene_type != 0"><uni-tag
|
||||
:type="interveneTypeEnum[item.intervene_type]?.type" :inverted="true" :circle="true"
|
||||
:text="interveneTypeEnum[item.intervene_type]?.text" style="font-weight: 460;">
|
||||
</uni-tag></span>
|
||||
<span v-if="item.transition_"
|
||||
:style="{ color: item.transition_.attribute_type === 1 ? '#67C23A' : '#F56C6C' }">
|
||||
{{ item.transition_.name }}
|
||||
</span>
|
||||
<span v-if="item.participant_">-{{ item.participant_.name }}</span>
|
||||
</div>
|
||||
<div v-if="item.suggestion">
|
||||
<span v-if="item.suggestion.length > 20">{{ item.suggestion.slice(0, 20) + "..." }}</span>
|
||||
<span v-else>
|
||||
{{ item.suggestion }}
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</scroll-view>
|
||||
<view class="ticket-popup">
|
||||
<view class="ticket-popup-header">
|
||||
<text class="ticket-popup-title">审批流程</text>
|
||||
<view class="ticket-popup-status">
|
||||
<uni-tag :text="actStateEnum[ticket_f?.act_state]?.text" :circle="true" size="small"
|
||||
:type="actStateEnum[ticket_f?.act_state]?.type" :inverted="true" style="font-weight: 500;"></uni-tag>
|
||||
<text class="ticket-state-name">{{ticket_f?.state_.name}}</text>
|
||||
<button v-if="ticket_f?.state_.enable_retreat && isOwn" class="ticket-retreat-btn-sm" @click="handleRetreat">撤回</button>
|
||||
</view>
|
||||
</view>
|
||||
|
||||
<!-- 可处理人 -->
|
||||
<view v-if="ticket_f.participant_" class="ticket-participant-row" style="margin-bottom: 24rpx;">
|
||||
<text class="ticket-label">当前处理人</text>
|
||||
<view class="ticket-participant-list" v-if="ticket_f.participant_type == 2 || ticket_f.participant_type == 1">
|
||||
<text v-for="item in ticket_f.participant_" :key="item.id" class="ticket-participant-tag">{{ item.name }}</text>
|
||||
</view>
|
||||
<text v-else class="ticket-participant-none">无</text>
|
||||
</view>
|
||||
|
||||
<!-- 时间线 -->
|
||||
<scroll-view scroll-y="true" class="ticket-timeline-scroll">
|
||||
<view class="ticket-timeline">
|
||||
<view v-for="(item, idx) in flowsteps" :key="item.id" class="timeline-item">
|
||||
<view class="timeline-dot-wrap">
|
||||
<view class="timeline-dot" :class="{'timeline-dot-success': item.transition_?.attribute_type === 1, 'timeline-dot-reject': item.transition_?.attribute_type === 2}"></view>
|
||||
<view v-if="idx < flowsteps.length - 1" class="timeline-line"></view>
|
||||
</view>
|
||||
<view class="timeline-content">
|
||||
<view class="timeline-header">
|
||||
<text class="timeline-state">{{ item.state_?.name || "未知状态" }}</text>
|
||||
<text v-if="item.transition_" class="timeline-transition"
|
||||
:class="{'text-success': item.transition_.attribute_type === 1, 'text-danger': item.transition_.attribute_type !== 1}">
|
||||
{{ item.transition_.name }}
|
||||
</text>
|
||||
</view>
|
||||
<view class="timeline-meta">
|
||||
<text class="timeline-time">{{item.create_time}}</text>
|
||||
<text v-if="item.participant_" class="timeline-person">{{ item.participant_.name }}</text>
|
||||
<uni-tag v-if="item.intervene_type != 0"
|
||||
:type="interveneTypeEnum[item.intervene_type]?.type" :inverted="true" :circle="true"
|
||||
:text="interveneTypeEnum[item.intervene_type]?.text" size="small" style="font-weight: 500;">
|
||||
</uni-tag>
|
||||
</view>
|
||||
<view v-if="item.suggestion" class="timeline-suggestion">
|
||||
<text>{{ item.suggestion.length > 40 ? item.suggestion.slice(0, 40) + '...' : item.suggestion }}</text>
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
</scroll-view>
|
||||
</view>
|
||||
</uni-popup>
|
||||
</view>
|
||||
|
||||
</template>
|
||||
|
||||
<script setup>
|
||||
|
|
@ -123,7 +142,242 @@
|
|||
uni.navigateBack()
|
||||
})
|
||||
}
|
||||
}
|
||||
}
|
||||
})
|
||||
}
|
||||
</script>
|
||||
</script>
|
||||
|
||||
<style lang="scss" scoped>
|
||||
.ticket-status-wrap {
|
||||
padding: 4rpx 0;
|
||||
}
|
||||
|
||||
.ticket-status-row {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: space-between;
|
||||
padding: 16rpx 0;
|
||||
}
|
||||
|
||||
.ticket-status-left {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
gap: 12rpx;
|
||||
}
|
||||
|
||||
.ticket-label {
|
||||
font-size: 26rpx;
|
||||
color: #9CA3AF;
|
||||
margin-right: 8rpx;
|
||||
}
|
||||
|
||||
.ticket-state-name {
|
||||
font-size: 26rpx;
|
||||
color: #4B5563;
|
||||
margin-left: 8rpx;
|
||||
}
|
||||
|
||||
.ticket-detail-btn {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
padding: 8rpx 16rpx;
|
||||
background: #E0F5EA;
|
||||
border-radius: 24rpx;
|
||||
}
|
||||
|
||||
.ticket-detail-text {
|
||||
font-size: 24rpx;
|
||||
color: #2BA471;
|
||||
}
|
||||
|
||||
.ticket-detail-arrow {
|
||||
font-size: 28rpx;
|
||||
color: #2BA471;
|
||||
margin-left: 4rpx;
|
||||
}
|
||||
|
||||
.ticket-action-row {
|
||||
padding: 8rpx 0;
|
||||
}
|
||||
|
||||
.ticket-retreat-btn {
|
||||
display: inline-block;
|
||||
font-size: 24rpx;
|
||||
color: #EF4444;
|
||||
background: #FEF2F2;
|
||||
border: 1rpx solid #FECACA;
|
||||
border-radius: 12rpx;
|
||||
padding: 8rpx 24rpx;
|
||||
line-height: 1.5;
|
||||
}
|
||||
|
||||
.ticket-retreat-btn-sm {
|
||||
display: inline-block;
|
||||
font-size: 22rpx;
|
||||
color: #EF4444;
|
||||
background: #FEF2F2;
|
||||
border: 1rpx solid #FECACA;
|
||||
border-radius: 10rpx;
|
||||
padding: 4rpx 16rpx;
|
||||
margin-left: 12rpx;
|
||||
line-height: 1.5;
|
||||
}
|
||||
|
||||
.ticket-participant-row {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
padding: 12rpx 0;
|
||||
flex-wrap: wrap;
|
||||
gap: 8rpx;
|
||||
}
|
||||
|
||||
.ticket-participant-list {
|
||||
display: flex;
|
||||
flex-wrap: wrap;
|
||||
gap: 8rpx;
|
||||
}
|
||||
|
||||
.ticket-participant-tag {
|
||||
font-size: 24rpx;
|
||||
color: #2BA471;
|
||||
background: #C4EACF;
|
||||
padding: 4rpx 16rpx;
|
||||
border-radius: 16rpx;
|
||||
border: 1rpx solid #6CC294;
|
||||
}
|
||||
|
||||
.ticket-participant-none {
|
||||
font-size: 24rpx;
|
||||
color: #9CA3AF;
|
||||
}
|
||||
|
||||
// ========== 弹窗样式 ==========
|
||||
.ticket-popup {
|
||||
padding: 32rpx 28rpx;
|
||||
max-height: 70vh;
|
||||
}
|
||||
|
||||
.ticket-popup-header {
|
||||
margin-bottom: 24rpx;
|
||||
padding-bottom: 20rpx;
|
||||
border-bottom: 1rpx solid #F3F4F6;
|
||||
}
|
||||
|
||||
.ticket-popup-title {
|
||||
font-size: 34rpx;
|
||||
font-weight: 600;
|
||||
color: #1F2937;
|
||||
display: block;
|
||||
margin-bottom: 16rpx;
|
||||
}
|
||||
|
||||
.ticket-popup-status {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
gap: 8rpx;
|
||||
}
|
||||
|
||||
// ========== 时间线 ==========
|
||||
.ticket-timeline-scroll {
|
||||
max-height: 480rpx;
|
||||
}
|
||||
|
||||
.ticket-timeline {
|
||||
padding-left: 8rpx;
|
||||
}
|
||||
|
||||
.timeline-item {
|
||||
display: flex;
|
||||
min-height: 100rpx;
|
||||
}
|
||||
|
||||
.timeline-dot-wrap {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
align-items: center;
|
||||
width: 40rpx;
|
||||
flex-shrink: 0;
|
||||
}
|
||||
|
||||
.timeline-dot {
|
||||
width: 20rpx;
|
||||
height: 20rpx;
|
||||
border-radius: 50%;
|
||||
background: #D1D5DB;
|
||||
border: 3rpx solid #E5E7EB;
|
||||
flex-shrink: 0;
|
||||
}
|
||||
|
||||
.timeline-dot-success {
|
||||
background: #10B981;
|
||||
border-color: #A7F3D0;
|
||||
}
|
||||
|
||||
.timeline-dot-reject {
|
||||
background: #EF4444;
|
||||
border-color: #FECACA;
|
||||
}
|
||||
|
||||
.timeline-line {
|
||||
width: 2rpx;
|
||||
flex: 1;
|
||||
background: #E5E7EB;
|
||||
margin: 4rpx 0;
|
||||
}
|
||||
|
||||
.timeline-content {
|
||||
flex: 1;
|
||||
padding: 0 0 24rpx 16rpx;
|
||||
}
|
||||
|
||||
.timeline-header {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
gap: 12rpx;
|
||||
margin-bottom: 6rpx;
|
||||
}
|
||||
|
||||
.timeline-state {
|
||||
font-size: 28rpx;
|
||||
font-weight: 600;
|
||||
color: #1F2937;
|
||||
}
|
||||
|
||||
.timeline-transition {
|
||||
font-size: 24rpx;
|
||||
font-weight: 500;
|
||||
}
|
||||
|
||||
.text-success { color: #10B981; }
|
||||
.text-danger { color: #EF4444; }
|
||||
|
||||
.timeline-meta {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
gap: 12rpx;
|
||||
flex-wrap: wrap;
|
||||
}
|
||||
|
||||
.timeline-time {
|
||||
font-size: 22rpx;
|
||||
color: #9CA3AF;
|
||||
}
|
||||
|
||||
.timeline-person {
|
||||
font-size: 22rpx;
|
||||
color: #6B7280;
|
||||
background: #F3F4F6;
|
||||
padding: 2rpx 12rpx;
|
||||
border-radius: 8rpx;
|
||||
}
|
||||
|
||||
.timeline-suggestion {
|
||||
margin-top: 8rpx;
|
||||
padding: 12rpx 16rpx;
|
||||
background: #F9FAFB;
|
||||
border-radius: 10rpx;
|
||||
border-left: 4rpx solid #D1D5DB;
|
||||
font-size: 24rpx;
|
||||
color: #6B7280;
|
||||
}
|
||||
</style>
|
||||
|
|
@ -1,13 +1,15 @@
|
|||
<template>
|
||||
<button
|
||||
v-for="item in transitions"
|
||||
:key="item.id"
|
||||
:type="item.attribute_type === 2 ? 'warn' : 'primary'"
|
||||
:loading="isSaveing"
|
||||
:disabled="isSaveing"
|
||||
@click="handleTransition(item)"
|
||||
size="mini"
|
||||
>{{ item.name }}</button>
|
||||
<view class="action-btn-group">
|
||||
<button
|
||||
v-for="item in transitions"
|
||||
:key="item.id"
|
||||
class="action-btn"
|
||||
:class="item.attribute_type === 2 ? 'action-btn-reject' : 'action-btn-approve'"
|
||||
:loading="isSaveing"
|
||||
:disabled="isSaveing"
|
||||
@click="handleTransition(item)"
|
||||
>{{ item.name }}</button>
|
||||
</view>
|
||||
</template>
|
||||
<script setup>
|
||||
import { ref, reactive, onMounted, defineEmits, watch } from 'vue'
|
||||
|
|
@ -151,10 +153,42 @@ const handleTransition = async (item) =>{
|
|||
suggestion.value = res.content?res.content:"";
|
||||
submit(item.id);
|
||||
}
|
||||
}
|
||||
}
|
||||
})
|
||||
} else {
|
||||
submit(item.id);
|
||||
}
|
||||
}
|
||||
</script>
|
||||
</script>
|
||||
|
||||
<style lang="scss" scoped>
|
||||
.action-btn-group {
|
||||
display: flex;
|
||||
gap: 16rpx;
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
.action-btn {
|
||||
flex: 1;
|
||||
height: 80rpx;
|
||||
line-height: 80rpx;
|
||||
border-radius: 14rpx !important;
|
||||
font-size: 28rpx;
|
||||
font-weight: 500;
|
||||
border: none !important;
|
||||
letter-spacing: 2rpx;
|
||||
padding: 0 !important;
|
||||
margin: 0 !important;
|
||||
}
|
||||
|
||||
.action-btn-approve {
|
||||
background: linear-gradient(135deg, #1F8C5E, #2BA471) !important;
|
||||
color: #FFFFFF !important;
|
||||
}
|
||||
|
||||
.action-btn-reject {
|
||||
background: linear-gradient(135deg, #EF4444, #DC2626) !important;
|
||||
color: #fff !important;
|
||||
box-shadow: 0 4rpx 12rpx rgba(239, 68, 68, 0.3);
|
||||
}
|
||||
</style>
|
||||
|
|
@ -133,5 +133,11 @@ export default {
|
|||
transferItem:(id,data) => http(`/hrm/transfer/${id}/`, 'GET', data),
|
||||
transferUpdate:(id,data) => http(`/hrm/transfer/${id}/`, 'PUT', data),
|
||||
transferDelete:(id) => http(`/hrm/transfer/${id}/`, 'DELETE'),
|
||||
//劳动合同续签
|
||||
empcontractList:(data) => http(`/hrm/empcontract/`, 'GET' , data),
|
||||
empcontractCreate:(data) => http(`/hrm/empcontract/`, 'POST' , data),
|
||||
empcontractItem:(id,data) => http(`/hrm/empcontract/${id}/`, 'GET', data),
|
||||
empcontractUpdate:(id,data) => http(`/hrm/empcontract/${id}/`, 'PUT', data),
|
||||
empcontractDelete:(id) => http(`/hrm/empcontract/${id}/`, 'DELETE'),
|
||||
|
||||
}
|
||||
Loading…
Reference in New Issue