Commit e50ee0c4 by pangchong

feat: 去掉uni相关

parent a4d2a833
...@@ -8,6 +8,7 @@ export {} ...@@ -8,6 +8,7 @@ export {}
declare module 'vue' { declare module 'vue' {
export interface GlobalComponents { export interface GlobalComponents {
// 全局组件 // 全局组件
GlobalAlbum: typeof import('./src/mocp/components/global-album/global-album.vue')['default']
GlobalButton: typeof import('./src/mocp/components/global-button/global-button.vue')['default'] GlobalButton: typeof import('./src/mocp/components/global-button/global-button.vue')['default']
GlobalDate: typeof import('./src/mocp/components/global-date/global-date.vue')['default'] GlobalDate: typeof import('./src/mocp/components/global-date/global-date.vue')['default']
GlobalEmpty: typeof import('./src/mocp/components/global-empty/global-empty.vue')['default'] GlobalEmpty: typeof import('./src/mocp/components/global-empty/global-empty.vue')['default']
......
<template>
<!-- 全局图片预览 -->
<up-album
v-if="fileList.length"
:urls="fileList"
:keyName="keyName"
:singleSize="getSingleSize"
:multipleSize="getMultipleSize"
:singleMode="singleMode"
:multipleMode="multipleMode"
></up-album>
</template>
<script setup>
import { computed } from 'vue'
const ps = defineProps({
fileList: {
type: Array,
default: () => {
return []
}
},
keyName: {
type: String,
default: 'fileUrl'
},
singleSize: {
type: Number,
default: 654
},
multipleSize: {
type: Number,
default: 654
},
singleMode: {
type: String,
default: 'widthFix'
},
multipleMode: {
type: String,
default: 'widthFix'
}
})
const getSingleSize = computed(() => {
return ps.singleSize + 'rpx'
})
const getMultipleSize = computed(() => {
return ps.multipleSize + 'rpx'
})
</script>
<style lang="scss" scoped></style>
<template> <template>
<!-- 全局自定义navbar --> <!-- 全局自定义navbar -->
<view class="navbar"> <view class="mocp-navbar">
<up-navbar :title="title" :fixed="false" :bgColor="bgColor" :safeAreaInsetTop="false"> <up-navbar :title="title" :fixed="false" :bgColor="bgColor" :safeAreaInsetTop="false" :titleStyle="getTitleStyle">
<template #left> <template #left>
<slot name="left"></slot> <slot name="left"></slot>
</template> </template>
...@@ -13,6 +13,8 @@ ...@@ -13,6 +13,8 @@
</template> </template>
<script setup> <script setup>
import { computed } from 'vue'
const ps = defineProps({ const ps = defineProps({
title: { title: {
type: String, type: String,
...@@ -21,6 +23,19 @@ const ps = defineProps({ ...@@ -21,6 +23,19 @@ const ps = defineProps({
bgColor: { bgColor: {
type: String, type: String,
default: '#f7f8fa' default: '#f7f8fa'
},
titleStyle: {
type: Object,
default: () => {
return {}
}
}
})
const getTitleStyle = computed(() => {
return {
...ps.titleStyle,
color: '#4e5969',
fontSize: '34rpx'
} }
}) })
</script> </script>
......
...@@ -7,7 +7,7 @@ ...@@ -7,7 +7,7 @@
<!-- 自定义导航栏 --> <!-- 自定义导航栏 -->
<global-navbar :title="title" v-if="showNavbar"> <global-navbar :title="title" v-if="showNavbar">
<template #left> <template #left>
<uni-icons type="left" size="16" @tap="goBack"></uni-icons> <up-icon name="arrow-left" size="16" @tap="goBack"></up-icon>
</template> </template>
</global-navbar> </global-navbar>
<!-- tab切换 --> <!-- tab切换 -->
......
...@@ -23,7 +23,7 @@ ...@@ -23,7 +23,7 @@
<!-- 自定义导航栏 --> <!-- 自定义导航栏 -->
<global-navbar :title="title" v-if="showNavbar"> <global-navbar :title="title" v-if="showNavbar">
<template #left v-if="pages.length > 1"> <template #left v-if="pages.length > 1">
<uni-icons v-if="navLeftType == 'icon'" :type="navLeftIcon" size="16" @tap="handleLeftClick"></uni-icons> <up-icon v-if="navLeftType == 'icon'" :name="navLeftIcon" size="16" @tap="handleLeftClick"></up-icon>
<view v-if="navLeftType == 'text'" class="cancel" @tap="handleLeftClick">{{ navLeftText }}</view> <view v-if="navLeftType == 'text'" class="cancel" @tap="handleLeftClick">{{ navLeftText }}</view>
</template> </template>
<template #right v-if="showNavRight"> <template #right v-if="showNavRight">
...@@ -89,7 +89,7 @@ const ps = defineProps({ ...@@ -89,7 +89,7 @@ const ps = defineProps({
//nav左边插槽图标 //nav左边插槽图标
navLeftIcon: { navLeftIcon: {
type: String, type: String,
default: 'left' default: 'arrow-left'
}, },
//nav左边插槽文字 //nav左边插槽文字
navLeftText: { navLeftText: {
......
...@@ -12,7 +12,7 @@ ...@@ -12,7 +12,7 @@
> >
<slot> <slot>
<view class="upload-button" :style="getUploadButtonSize"> <view class="upload-button" :style="getUploadButtonSize">
<uni-icons :type="uploadIcon" :size="24" color="rgba(0, 0, 0, 0.4)"></uni-icons> <up-icon :name="uploadIcon" size="24" color="rgba(0, 0, 0, 0.4)"></up-icon>
</view> </view>
</slot> </slot>
</up-upload> </up-upload>
...@@ -21,6 +21,7 @@ ...@@ -21,6 +21,7 @@
<script setup> <script setup>
import { computed, ref, watch } from 'vue' import { computed, ref, watch } from 'vue'
import { cloneDeep } from 'lodash' import { cloneDeep } from 'lodash'
import { upload } from 'mocp/utils/http'
const es = defineEmits(['handleUpload']) const es = defineEmits(['handleUpload'])
const ps = defineProps({ const ps = defineProps({
...@@ -42,7 +43,7 @@ const ps = defineProps({ ...@@ -42,7 +43,7 @@ const ps = defineProps({
}, },
uploadIcon: { uploadIcon: {
type: String, type: String,
default: 'plusempty' default: 'plus'
} }
}) })
const getUploadButtonSize = computed(() => { const getUploadButtonSize = computed(() => {
...@@ -76,7 +77,7 @@ const afterRead = async (event) => { ...@@ -76,7 +77,7 @@ const afterRead = async (event) => {
}) })
for (let i = 0; i < lists.length; i++) { for (let i = 0; i < lists.length; i++) {
try { try {
const res = await uploadFilePromise(lists[i].url) const res = await upload({ url: ps.url, filePath: lists[i].url, name: 'file' })
if (res.code == 200) { if (res.code == 200) {
fileList.value.splice(fileListLen, 1, { fileList.value.splice(fileListLen, 1, {
...res.data, ...res.data,
...@@ -114,22 +115,6 @@ watch( ...@@ -114,22 +115,6 @@ watch(
}, },
{ deep: true } { deep: true }
) )
const uploadFilePromise = (url) => {
return new Promise((resolve, reject) => {
uni.uploadFile({
url: ps.url,
name: 'file',
filePath: url,
success: (res) => {
resolve(JSON.parse(res.data))
},
fail: (res) => {
console.error(JSON.parse(res.data))
reject(false)
}
})
})
}
</script> </script>
<style lang="scss" scoped> <style lang="scss" scoped>
.upload-button { .upload-button {
......
/**
* 添加拦截器:
* 拦截 request 请求
* 拦截 uploadFile 文件上传
*
* TODO:
* 1. 非 http 开头需拼接地址
* 2. 请求超时
* 3. 添加小程序端请求头标识
* 4. 添加 token 请求头标识
*/
import useUserStore from 'mocp/store/user' import useUserStore from 'mocp/store/user'
const baseURL = 'https://hna-platform.anyremote.cn' const baseURL = 'https://hna-platform.anyremote.cn'
...@@ -42,87 +30,67 @@ class ServiceLoading { ...@@ -42,87 +30,67 @@ class ServiceLoading {
} }
} }
const serviceLoading = new ServiceLoading() const serviceLoading = new ServiceLoading()
//请求拦截器
// 添加拦截器 const httpInterceptor = (options) => {
const httpInterceptor = { const userStore = useUserStore()
// 拦截前触发 //responseType
invoke(options) { if (options.config?.arraybuffer) {
const userStore = useUserStore() options.responseType = 'arraybuffer'
//responseType }
if (options.config?.arraybuffer) { //loading
options.responseType = 'arraybuffer' const loading = options.config?.loading
} serviceLoading.open(loading)
//loading //重组提交数据
const loading = options.config?.loading if (options.data) {
serviceLoading.open(loading) options.data = {
//重组提交数据 ...options.data,
if (options.data) { apiPwd: 'Ifar$2_0160_525_Mocp',
options.data = { requestFrom: '3',
...options.data, realUserId: userStore.userInfo?.id
apiPwd: 'Ifar$2_0160_525_Mocp',
requestFrom: '3',
realUserId: userStore.userInfo?.id
}
} }
// 非 http 开头需拼接地址 }
if (!options.url.startsWith('http')) { // 非 http 开头需拼接地址
options.url = baseURL + options.url if (!options.url.startsWith('http')) {
options.url = baseURL + options.url
}
// 请求超时, 默认 60s
options.timeout = 10000
// 添加小程序端请求头标识
if (options.name == 'file') {
options.formData = {
...options.formData,
apiPwd: 'Ifar$2_0160_525_Mocp',
requestFrom: '6',
uid: userStore.userInfo?.id
} }
// 请求超时, 默认 60s options.header = {
options.timeout = 10000 ...options.header
// 添加小程序端请求头标识
if (options.name == 'file') {
options.formData = {
...options.formData,
apiPwd: 'Ifar$2_0160_525_Mocp',
requestFrom: '6',
uid: userStore.userInfo?.id
}
options.header = {
...options.header
}
} else {
options.header = {
'Content-Type': 'application/x-www-form-urlencoded',
...options.header
}
} }
// 添加 token 请求头标识 } else {
if (userStore.token) { options.header = {
options.header.Authorization = `Bearer ${userStore.token}` 'Content-Type': 'application/x-www-form-urlencoded',
...options.header
} }
console.log('接口请求信息:', options)
} }
// 添加 token 请求头标识
if (userStore.token) {
options.header.Authorization = `Bearer ${userStore.token}`
}
console.log('接口请求信息:', options)
return options
} }
uni.addInterceptor('request', httpInterceptor) //http请求
uni.addInterceptor('uploadFile', httpInterceptor)
/**
* 请求函数
* @returns Promise
* 1. 返回 Promise 对象
* 2. 获取数据成功
* 2.1 提取核心数据 res.data
* 2.2 添加类型,支持泛型
* 3. 获取数据失败
* 3.1 401错误 -> 清理用户信息,跳转到登录页
* 3.2 其他错误 -> 根据后端错误信息轻提示
* 3.3 网络错误 -> 提示用户换网络
*/
// 2.2 添加类型
export const http = (options) => { export const http = (options) => {
options = httpInterceptor(options)
// 1. 返回 Promise 对象 // 1. 返回 Promise 对象
return new Promise((resolve, reject) => { return new Promise((resolve, reject) => {
uni.request({ uni.request({
...options, ...options,
// 响应成功
success(res) { success(res) {
console.log('接口响应结果:', res) console.log('接口响应结果:', res)
serviceLoading.close() serviceLoading.close()
// 状态码 2xx, axios 就是这样设计的 const statusCode = res.statusCode
const statusCode = parseInt(res.statusCode)
if (statusCode >= 200 && statusCode < 300) { if (statusCode >= 200 && statusCode < 300) {
// 2.1 提取核心数据 res.data
if (res.data.code == 403) { if (res.data.code == 403) {
const userStore = useUserStore() const userStore = useUserStore()
uni.$mocpMessage.showToast(res.data.message) uni.$mocpMessage.showToast(res.data.message)
...@@ -134,7 +102,6 @@ export const http = (options) => { ...@@ -134,7 +102,6 @@ export const http = (options) => {
resolve(res.data) resolve(res.data)
} }
} else if (statusCode == 401) { } else if (statusCode == 401) {
// 401错误 -> 清理用户信息,跳转到登录页
const userStore = useUserStore() const userStore = useUserStore()
uni.$mocpMessage.showToast(res.data.message) uni.$mocpMessage.showToast(res.data.message)
setTimeout(() => { setTimeout(() => {
...@@ -142,12 +109,10 @@ export const http = (options) => { ...@@ -142,12 +109,10 @@ export const http = (options) => {
}, 500) }, 500)
reject(res) reject(res)
} else { } else {
// 其他错误 -> 根据后端错误信息轻提示
uni.$mocpMessage.showToast(res.data.message || '请求错误') uni.$mocpMessage.showToast(res.data.message || '请求错误')
reject(res) reject(res)
} }
}, },
// 响应失败
fail(err) { fail(err) {
serviceLoading.close() serviceLoading.close()
uni.$mocpMessage.showToast('网络错误,换个网络试试') uni.$mocpMessage.showToast('网络错误,换个网络试试')
...@@ -156,3 +121,44 @@ export const http = (options) => { ...@@ -156,3 +121,44 @@ export const http = (options) => {
}) })
}) })
} }
//upload请求
export const upload = (options) => {
options = httpInterceptor(options)
return new Promise((resolve, reject) => {
uni.uploadFile({
...options,
success: (res) => {
console.log('接口响应结果:', res)
serviceLoading.close()
const statusCode = res.statusCode
if (statusCode >= 200 && statusCode < 300) {
if (res.data.code == 403) {
const userStore = useUserStore()
uni.$mocpMessage.showToast(res.data.message)
setTimeout(() => {
userStore.handleLogOut()
}, 500)
reject(res)
} else {
resolve(JSON.parse(res.data))
}
} else if (statusCode == 401) {
const userStore = useUserStore()
uni.$mocpMessage.showToast(res.data.message)
setTimeout(() => {
userStore.handleLogOut()
}, 500)
reject(res)
} else {
uni.$mocpMessage.showToast(res.data.message || '请求错误')
reject(res)
}
},
fail: (err) => {
serviceLoading.close()
uni.$mocpMessage.showToast('上传失败')
reject(err)
}
})
})
}
...@@ -9,28 +9,25 @@ export const loginForm = reactive({ ...@@ -9,28 +9,25 @@ export const loginForm = reactive({
export const loginCode = ref('') export const loginCode = ref('')
//表单规则 //表单规则
export const rules = reactive({ export const rules = reactive({
username: { username: [
rules: [ {
{ required: true,
required: true, message: '请输入账号',
errorMessage: '请输入账号' trigger: ['blur', 'change']
} }
] ],
}, password: [
password: { {
rules: [ required: true,
{ message: '请输入密码',
required: true, trigger: ['blur', 'change']
errorMessage: '请输入密码' }
} ],
] verifyCode: [
}, {
verifyCode: { required: true,
rules: [ message: '请输入验证码',
{ trigger: ['blur', 'change']
required: true, }
errorMessage: '请输入验证码' ]
}
]
}
}) })
...@@ -32,11 +32,12 @@ ...@@ -32,11 +32,12 @@
&-image { &-image {
margin-left: 20rpx; margin-left: 20rpx;
width: 200rpx; width: 200rpx;
height: 70rpx; height: 76rpx;
background: #d9d9d9; background: #d9d9d9;
} }
} }
.login-btn { .login-btn {
margin-top: 20rpx;
width: 100%; width: 100%;
} }
} }
...@@ -9,28 +9,32 @@ ...@@ -9,28 +9,32 @@
<view class="p">登录你的账户</view> <view class="p">登录你的账户</view>
<view class="txt">请输入账号密码登录</view> <view class="txt">请输入账号密码登录</view>
</view> </view>
<uni-forms ref="loginFormRef" :modelValue="loginForm" :rules="rules" label-position="top"> <view class="mocp-form">
<uni-forms-item label="账号" name="username"> <up-form ref="loginFormRef" labelWidth="auto" :model="loginForm" :rules="rules" label-position="top">
<uni-easyinput v-model="loginForm.username" placeholder="请输入账号" type="text" /> <up-form-item label="账号" prop="username">
</uni-forms-item> <up-input v-model="loginForm.username" placeholder="请输入账号" clearable />
<uni-forms-item label="密码" name="password"> </up-form-item>
<uni-easyinput v-model="loginForm.password" placeholder="请输入密码" type="password" /> <up-form-item label="密码" prop="password">
</uni-forms-item> <up-input v-model="loginForm.password" placeholder="请输入密码" clearable type="password" />
<uni-forms-item label="验证码" name="verifyCode"> </up-form-item>
<view class="verify-code"> <up-form-item label="验证码" prop="verifyCode">
<uni-easyinput v-model="loginForm.verifyCode" placeholder="请输入验证码" type="text" style="flex: auto" /> <view class="verify-code">
<image <up-input v-model="loginForm.verifyCode" placeholder="请输入验证码" style="flex: auto" />
class="verify-code-image" <image
v-if="loginCode && loginForm.username" class="verify-code-image"
:src="loginCode" v-if="loginCode && loginForm.username"
mode="scaleToFill" :src="loginCode"
@tap="getGifCaptcha" mode="scaleToFill"
/> @tap="getGifCaptcha"
<view class="verify-code-image" v-else></view> />
</view> <view class="verify-code-image" v-else></view>
</uni-forms-item> </view>
</uni-forms> </up-form-item>
<global-button class="login-btn" size="large" type="primary" @tap="handleLogin" :loading="loading">登录</global-button> </up-form>
</view>
<view class="login-btn">
<global-button size="large" type="primary" @tap="handleLogin" :loading="loading">登录</global-button>
</view>
</view> </view>
</global-page> </global-page>
</template> </template>
......
...@@ -7,7 +7,7 @@ ...@@ -7,7 +7,7 @@
navRightText="保存" navRightText="保存"
@handleRightClick="handleRightClick" @handleRightClick="handleRightClick"
> >
<view class="form"> <view class="mocp-form">
<up-form labelPosition="left" labelWidth="auto"> <up-form labelPosition="left" labelWidth="auto">
<up-form-item :label="formData.isDuty == 0 ? '公司值班经理' : '品质中心经理'" :borderBottom="true"> <up-form-item :label="formData.isDuty == 0 ? '公司值班经理' : '品质中心经理'" :borderBottom="true">
<global-picker pickAlign="right" clearable v-model="formData.mid" :options="selectList" emptyValue="-1"></global-picker> <global-picker pickAlign="right" clearable v-model="formData.mid" :options="selectList" emptyValue="-1"></global-picker>
...@@ -88,7 +88,7 @@ const handleRightClick = async () => { ...@@ -88,7 +88,7 @@ const handleRightClick = async () => {
</script> </script>
<style lang="scss" scoped> <style lang="scss" scoped>
.form { .mocp-form {
background: #fff; background: #fff;
padding: 0 32rpx; padding: 0 32rpx;
} }
......
.content { .content {
padding-bottom: 140rpx; padding-bottom: 140rpx;
.form { .mocp-form {
background: #fff; background: #fff;
padding: 0 32rpx; padding: 0 32rpx;
} }
......
...@@ -70,14 +70,7 @@ ...@@ -70,14 +70,7 @@
</card-details> </card-details>
<card-details type="appeal" title="申诉状态" titleIcon="email"> <card-details type="appeal" title="申诉状态" titleIcon="email">
<view class="appeal-status">{{ useGetDictByValue('appealInfo', details.appealInfo) }}</view> <view class="appeal-status">{{ useGetDictByValue('appealInfo', details.appealInfo) }}</view>
<up-album <global-album :fileList="getFileList"></global-album>
:urls="getFileList"
keyName="fileUrl"
singleSize="654rpx"
multipleSize="654rpx"
singleMode="widthFix"
multipleMode="widthFix"
></up-album>
</card-details> </card-details>
</template> </template>
</global-page> </global-page>
......
<template> <template>
<global-page title="考核记录登记" showFooterBtn @handleFooterClick="handleSubmit"> <global-page title="考核记录登记" showFooterBtn @handleFooterClick="handleSubmit">
<view class="content"> <view class="content">
<view class="form"> <view class="mocp-form">
<up-form labelPosition="left" labelWidth="auto" :model="formData" ref="formRef" :rules="rules"> <up-form labelPosition="left" labelWidth="auto" :model="formData" ref="formRef" :rules="rules">
<up-form-item label="事件来源" :borderBottom="true"> <up-form-item label="事件来源" :borderBottom="true">
<up-input border="none" inputAlign="right" placeholder="请输入" clearable v-model="formData.eventSource"></up-input> <up-input border="none" inputAlign="right" placeholder="请输入" clearable v-model="formData.eventSource"></up-input>
......
.content { .mocp-form {
background: #fff; background: #fff;
.form { .form {
&-title { &-title {
......
<template> <template>
<global-page title="添加领导批示" navLeftType="text" :showNavRight="true" navRightType="button" navRightText="保存"> <global-page title="添加领导批示" navLeftType="text" :showNavRight="true" navRightType="button" navRightText="保存">
<up-form labelPosition="left" labelWidth="auto" ref="formRef"> <view class="mocp-form">
<view class="form"> <up-form labelPosition="left" labelWidth="auto" ref="formRef">
<up-form-item label="领导批示意见" :borderBottom="true"> <up-form-item label="领导批示意见" :borderBottom="true">
<global-picker pickAlign="right" clearable></global-picker> <global-picker pickAlign="right" clearable></global-picker>
</up-form-item> </up-form-item>
...@@ -12,14 +12,14 @@ ...@@ -12,14 +12,14 @@
border="none" border="none"
></up-textarea> ></up-textarea>
</up-form-item> </up-form-item>
</view> </up-form>
</up-form> </view>
</global-page> </global-page>
</template> </template>
<script setup></script> <script setup></script>
<style lang="scss" scoped> <style lang="scss" scoped>
.form { .mocp-form {
background: #fff; background: #fff;
margin-bottom: 24rpx; margin-bottom: 24rpx;
padding: 0 32rpx; padding: 0 32rpx;
......
...@@ -9,34 +9,36 @@ ...@@ -9,34 +9,36 @@
footerBtnText="添加分解计划" footerBtnText="添加分解计划"
@handleFooterClick="handleFooterClick" @handleFooterClick="handleFooterClick"
> >
<up-form labelPosition="left" labelWidth="auto" ref="formRef"> <view class="mocp-form">
<view class="form"> <up-form labelPosition="left" labelWidth="auto" ref="formRef">
<up-form-item label="分解计划1" :borderBottom="true" labelPosition="top"> <view class="form">
<view class="delete" @tap="handleDelete"><global-icon icon="delete-01" color="#F53F3F"></global-icon></view> <up-form-item label="分解计划1" :borderBottom="true" labelPosition="top">
<up-textarea <view class="delete" @tap="handleDelete"><global-icon icon="delete-01" color="#F53F3F"></global-icon></view>
placeholder="一段很长很长的内容文字,长文本自动换行,该选项的描述是一段很长的内容" <up-textarea
:height="40" placeholder="一段很长很长的内容文字,长文本自动换行,该选项的描述是一段很长的内容"
border="none" :height="40"
></up-textarea> border="none"
</up-form-item> ></up-textarea>
<up-form-item label="完成时限" :borderBottom="true"> </up-form-item>
<global-date pickAlign="right" clearable :emptyValue="-1" placeholder="请选择日期"></global-date> <up-form-item label="完成时限" :borderBottom="true">
</up-form-item> <global-date pickAlign="right" clearable :emptyValue="-1" placeholder="请选择日期"></global-date>
</view> </up-form-item>
<view class="form"> </view>
<up-form-item label="分解计划2" :borderBottom="true" labelPosition="top"> <view class="form">
<view class="delete" @tap="handleDelete"><global-icon icon="delete-01" color="#F53F3F"></global-icon></view> <up-form-item label="分解计划2" :borderBottom="true" labelPosition="top">
<up-textarea <view class="delete" @tap="handleDelete"><global-icon icon="delete-01" color="#F53F3F"></global-icon></view>
placeholder="一段很长很长的内容文字,长文本自动换行,该选项的描述是一段很长的内容" <up-textarea
:height="40" placeholder="一段很长很长的内容文字,长文本自动换行,该选项的描述是一段很长的内容"
border="none" :height="40"
></up-textarea> border="none"
</up-form-item> ></up-textarea>
<up-form-item label="完成时限" :borderBottom="true"> </up-form-item>
<global-date pickAlign="right" clearable :emptyValue="-1" placeholder="请选择日期"></global-date> <up-form-item label="完成时限" :borderBottom="true">
</up-form-item> <global-date pickAlign="right" clearable :emptyValue="-1" placeholder="请选择日期"></global-date>
</view> </up-form-item>
</up-form> </view>
</up-form>
</view>
<up-modal <up-modal
:width="250" :width="250"
content="确认删除吗?删除后不可恢复!" content="确认删除吗?删除后不可恢复!"
......
<template> <template>
<global-page title="后续措施反馈" navLeftType="text" :showNavRight="true" navRightType="button" navRightText="保存"> <global-page title="后续措施反馈" navLeftType="text" :showNavRight="true" navRightType="button" navRightText="保存">
<up-form labelPosition="left" labelWidth="auto" ref="formRef"> <view class="mocp-form">
<view class="form"> <up-form labelPosition="left" labelWidth="auto" ref="formRef">
<up-form-item label="反馈内容" :borderBottom="true" labelPosition="top"> <up-form-item label="反馈内容" :borderBottom="true" labelPosition="top">
<up-textarea <up-textarea
placeholder="一段很长很长的内容文字,长文本自动换行,该选项的描述是一段很长的内容" placeholder="一段很长很长的内容文字,长文本自动换行,该选项的描述是一段很长的内容"
...@@ -17,14 +17,14 @@ ...@@ -17,14 +17,14 @@
<up-form-item label="应用分类" :borderBottom="true"> <up-form-item label="应用分类" :borderBottom="true">
<global-picker pickAlign="right" clearable></global-picker> <global-picker pickAlign="right" clearable></global-picker>
</up-form-item> </up-form-item>
</view> </up-form>
</up-form> </view>
</global-page> </global-page>
</template> </template>
<script setup></script> <script setup></script>
<style lang="scss" scoped> <style lang="scss" scoped>
.form { .mocp-form {
background: #fff; background: #fff;
margin-bottom: 24rpx; margin-bottom: 24rpx;
padding: 0 32rpx; padding: 0 32rpx;
......
<template> <template>
<global-page title="跟踪反馈" navLeftType="text" :showNavRight="true" navRightType="button" navRightText="保存"> <global-page title="跟踪反馈" navLeftType="text" :showNavRight="true" navRightType="button" navRightText="保存">
<up-form labelPosition="left" labelWidth="auto" ref="formRef"> <view class="mocp-form">
<view class="form"> <up-form labelPosition="left" labelWidth="auto" ref="formRef">
<up-form-item label="跟踪反馈" :borderBottom="true" labelPosition="top"> <up-form-item label="跟踪反馈" :borderBottom="true" labelPosition="top">
<up-textarea <up-textarea
placeholder="一段很长很长的内容文字,长文本自动换行,该选项的描述是一段很长的内容" placeholder="一段很长很长的内容文字,长文本自动换行,该选项的描述是一段很长的内容"
...@@ -9,16 +9,10 @@ ...@@ -9,16 +9,10 @@
border="none" border="none"
></up-textarea> ></up-textarea>
</up-form-item> </up-form-item>
</view> </up-form>
</up-form> </view>
</global-page> </global-page>
</template> </template>
<script setup></script> <script setup></script>
<style lang="scss" scoped> <style lang="scss" scoped></style>
.form {
background: #fff;
margin-bottom: 24rpx;
padding: 0 32rpx;
}
</style>
<template> <template>
<global-page title="工作验证" navLeftType="text" :showNavRight="true" navRightType="button" navRightText="保存"> <global-page title="工作验证" navLeftType="text" :showNavRight="true" navRightType="button" navRightText="保存">
<up-form labelPosition="left" labelWidth="auto" ref="formRef"> <view class="mocp-form">
<view class="form"> <up-form labelPosition="left" labelWidth="auto" ref="formRef">
<up-form-item label="跟踪要点" :borderBottom="true" labelPosition="top"> <up-form-item label="跟踪要点" :borderBottom="true" labelPosition="top">
<up-textarea <up-textarea
placeholder="一段很长很长的内容文字,长文本自动换行,该选项的描述是一段很长的内容" placeholder="一段很长很长的内容文字,长文本自动换行,该选项的描述是一段很长的内容"
...@@ -23,14 +23,14 @@ ...@@ -23,14 +23,14 @@
<up-form-item label="工作验证状态" :borderBottom="true"> <up-form-item label="工作验证状态" :borderBottom="true">
<global-picker pickAlign="right" clearable></global-picker> <global-picker pickAlign="right" clearable></global-picker>
</up-form-item> </up-form-item>
</view> </up-form>
</up-form> </view>
</global-page> </global-page>
</template> </template>
<script setup></script> <script setup></script>
<style lang="scss" scoped> <style lang="scss" scoped>
.form { .mocp-form {
background: #fff; background: #fff;
margin-bottom: 24rpx; margin-bottom: 24rpx;
padding: 0 32rpx; padding: 0 32rpx;
......
<template> <template>
<global-page title="添加工作反馈" navLeftType="text" :showNavRight="true" navRightType="button" navRightText="保存"> <global-page title="添加工作反馈" navLeftType="text" :showNavRight="true" navRightType="button" navRightText="保存">
<view class="content"> <view class="mocp-form">
<up-form labelPosition="left" labelWidth="auto" ref="formRef"> <up-form labelPosition="left" labelWidth="auto" ref="formRef">
<view class="form"> <view class="form">
<view class="form-item"> <view class="form-item">
......
// 表单 // 表单
.u-form-item__body { .mocp-form {
padding: 24rpx 0 !important; .u-form-item__body {
.u-form-item__body__left__content__label { padding: 24rpx 0 !important;
color: $mocp-text-5 !important; .u-form-item__body__left__content__label {
font-size: 28rpx !important; color: $mocp-text-5 !important;
}
.u-input__content__field-wrapper__field {
color: $mocp-text-4 !important;
}
.u-textarea {
margin-top: 8rpx;
.u-textarea__field {
font-size: 28rpx !important; font-size: 28rpx !important;
}
.u-input__content__field-wrapper__field {
color: $mocp-text-4 !important; color: $mocp-text-4 !important;
} }
.u-textarea {
margin-top: 8rpx;
.u-textarea__field {
font-size: 28rpx !important;
color: $mocp-text-4 !important;
}
}
} }
} }
// 头部导航
.u-navbar__content__title {
color: $mocp-text-5 !important;
font-size: 34rpx !important;
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment