移动端审批提交

jg-waiwang-pro
XI_TENG\xixi_ 5 months ago
parent 9161c10f9d
commit 164fcc8de1

@ -496,6 +496,18 @@
"style": {
"navigationBarTitleText": ""
}
},
{
"path": "cwpaymentreceipt/index",
"style": {
"navigationBarTitleText": ""
}
},
{
"path": "cwsettlement/index",
"style": {
"navigationBarTitleText": ""
}
}
]
},

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

@ -0,0 +1,539 @@
<template>
<view class="dynamicModel-list-v">
<view class="head-warp com-dropdown">
<u-dropdown class="u-dropdown" ref="uDropdown" @open="openData" >
<u-dropdown-item title="排序">
<view class="dropdown-slot-content">
<view class="dropdown-slot-content-main">
<u-cell-group>
<u-cell-item @click="cellClick(item)" :arrow="false" :title="item.label"
v-for="(item, index) in sortOptions" :key="index" :title-style="{color: sortValue == item.value ? '#2979ff' : '#606266' }">
<u-icon v-if="sortValue == item.value" name="checkbox-mark" color="#2979ff" size="32"></u-icon>
</u-cell-item>
</u-cell-group>
</view>
</view>
</u-dropdown-item>
<u-dropdown-item title="筛选" >
<view class="dropdown-slot-content">
<view class="dropdown-slot-content-main search-main">
<scroll-view scroll-y="true" style="height: 1000rpx;">
<view class="u-p-l-20 u-p-r-20 search-form">
<u-form :model="searchForm" ref="searchForm" :errorType="['toast']" label-position="left" label-width="150">
</u-form>
</view>
</scroll-view>
<view class="buttom-actions">
<u-button class="buttom-btn" @click="reset"></u-button>
<u-button class="buttom-btn" type="primary" @click="closeDropdown"></u-button>
</view>
<view class="dropdown-slot-bg" @click="$refs.uDropdown.close()"></view>
</view>
</view>
</u-dropdown-item>
</u-dropdown>
</view>
<view class="list-warp">
<mescroll-uni ref="mescrollRef" @init="mescrollInit" @down="downCallback" @up="upCallback" :up="upOption" top="100">
<view class="list">
<view class="list-box">
<uni-swipe-action ref="swipeAction">
<uni-swipe-action-item v-for="(item, index) in list" :key="item.id" :threshold="0" :right-options="options">
<view class="item" @click="goDetail(item.id,item)">
<view class="u-line-1 item-cell" v-for="(column,i) in columnList" :key="i">
<view v-if="column.jnpfKey != 'table'">
<view class="" v-if="column.jnpfKey == 'relationForm'">
<text class="listTit u-line-1">{{column.label}}:</text>
<text class="listContent"
@click.stop="relationFormClick(item,column)"
style="color: blue;">{{item[column.prop]}}</text>
</view>
<view v-else class="u-line-1">
<text class="listTit u-line-1">{{column.label}}:</text>
<text class="listContent" v-if="['calculate','inputNumber'].includes(column.jnpfKey) && column.thousands">{{toThousands(item[column.prop],column)}}</text>
<text class="listContent" v-else>{{item[column.prop]}}</text>
</view>
</view>
<view class="collapse-box u-flex" v-else>
<tableCell :label="column.label" :childList="item[column.prop]" @cRelationForm="relationFormClick"
:children="column.children" ref="tableCell" :pageLen="3"></tableCell>
</view>
</view>
<view class="item-cell">
<text>审批状态</text>
<text :class="getFlowStatus(item.flowState).statusCss">
{{getFlowStatus(item.flowState).text}}
</text>
</view>
</view>
<template v-slot:right>
<view class="right-option-box">
<view class="right-option" v-for="(it,i) in options" @click="handleClick(index)"
:key="i">
<text>{{it.text}}</text>
</view>
</view>
</template>
</uni-swipe-action-item>
</uni-swipe-action>
</view>
</view>
</mescroll-uni>
</view>
<view class="com-addBtn" @click="addPage()" >
<u-icon name="plus" size="60" color="#fff" />
</view>
<u-picker mode="selector" v-model="show" :default-selector="[0]" title="请选择流程" :range="templateList" range-key="fullName" @confirm="confirm"></u-picker>
</view>
</template>
<script>
import {
FlowJsonList
} from '@/api/workFlow/flowEngine'
import resources from '@/libs/resources.js'
import MescrollMixin from "@/uni_modules/mescroll-uni/components/mescroll-uni/mescroll-mixins.js";
import tableCell from '../dynamicModel/components/tableCell.vue'
import {getFormById} from '@/api/workFlow/workFlowForm'
import {
getDictionaryDataSelector,
getDataInterfaceRes,
getDefaultCurrentValueUserIdAsync,
getDefaultCurrentValueDepartmentIdAsync
} from '@/api/common'
import request from '@/utils/request'
export default {
mixins: [MescrollMixin],
components: {
tableCell
},
data() {
return {
show: false,
templateList: [],
sortValue: '',
searchForm: {
},
downOption: {
use: true,
auto: false
},
dataOptions:{
},
upOption: {
page: {
num: 0,
size: 20,
time: null,
},
empty: {
use: true,
icon: resources.message.nodata,
tip: "暂无数据",
fixed: true,
top: "300rpx",
zIndex: 5,
},
textNoMore: '没有更多数据',
toTop: {
bottom: 250
}
},
list: [],
appColumnList:[{"border":false,"jnpfKey":"radio","fullName":"类型","label":"类型","sortable":false,"align":"left","props":{"label":"fullName","value":"id"},"optionType":"button","__config__":{"formId":104,"visibility":["pc","app"],"jnpfKey":"radio","noShow":false,"defaultValue":"1","dataType":"static","dictionaryType":"","tipLabel":"","dragDisabled":false,"className":[],"label":"类型","trigger":"change","propsUrl":"","templateJson":[],"showLabel":true,"required":true,"tableName":"jg_cw_payment_receipt","renderKey":1711516362983,"layout":"colFormItem","tagIcon":"icon-ym icon-ym-generator-radio","propsName":"","tag":"JnpfRadio","regList":[],"span":24},"size":"medium","prop":"type","width":0,"options":[{"fullName":"采购付款","id":"1"},{"fullName":"销售付款","id":"2"},{"fullName":"其他付款","id":"3"}],"__vModel__":"type","style":{},"disabled":false,"interfaceHasPage":false,"fixed":"none","id":"type","on":{"change":"({ data, formData, setFormData, setShowOrHide, setRequired, setDisabled, onlineUtils }) => {\n // 在此编写代码\n \n}"},"direction":"horizontal"}],
listQuery: {
moduleId:'547733293450172677',
sort: 'desc',
sidx: '',
keyword: '',
json: ''
},
options: [
{
text: '删除',
style: {
backgroundColor: '#dd524d'
}
}
],
sortOptions:[
],
ableAll:{
},
interfaceRes:{
},
menuId:'',
enCode: 'cwPaymentReceipt',
formId: '547733293450172677',
columnList:[],
isTree:false,
type:'1',
key:new Date(),
dataValue:{},
userInfo:{},
firstInitSearchData:false,
thousandsField:[],
formatType:{"yyyy":"yyyy","yyyy-MM":"yyyy-mm","yyyy-MM-dd":"yyyy-mm-dd","yyyy-MM-dd HH:mm":"yyyy-mm-dd hh:MM","yyyy-MM-dd HH:mm:ss":"yyyy-mm-dd hh:MM:ss","HH:mm:ss":"hh:MM:ss","HH:mm":"hh:MM"},
}
},
onLoad(e){
this.userInfo = uni.getStorageSync('userInfo') || {}
this.menuId = e.menuId
uni.$on('refresh', () => {
this.list = [];
this.mescroll.resetUpScroll();
})
this.dataAll()
this.getColumnList()
this.getFormById()
},
onUnload() {
uni.$off('refresh')
},
methods:{
toThousands(val, column) {
let num = Number(val)
let newVal = this.thousandsField.includes(column.__vModel__) ? num.toLocaleString('zh', {maximumFractionDigits: '2',minimumFractionDigits: '2'}): num.toFixed(2);
return newVal
},
getJsonList() {
FlowJsonList(this.flowId,'1').then(res => {
this.templateList = res.data;
})
},
getFormById() {
getFormById(this.formId).then(res => {
this.flowId = res.data&&res.data.id
this.enCode = res.data&&res.data.enCode
this.getJsonList()
})
},
dataAll(){
},
openData(e){
if(e==1){
//this.reset()
}
},
//
async initSearchData() {
this.dataValue = JSON.parse(JSON.stringify(this.searchForm))
},
relationFormClick(item,column) {
let vModel = column.__vModel__?column.__vModel__+"_id":column.__vModel__
let id = item[vModel]
if(vModel){
let [attr,attr1]=vModel.split("_jnpf_")
if(attr&&attr1){
attr = attr.replace('jnpf_','')
id = item[attr]&&item[attr][attr1]
}
}
let modelId = column.modelId
if (!id || !modelId) return
let config = {
modelId: modelId,
id: id,
formTitle: '详情',
noShowBtn: 1
}
this.$nextTick(() => {
const url ='/pages/apply/dynamicModel/detail?config=' + this.base64.encode(JSON.stringify(config),"UTF-8")
uni.navigateTo({
url: url
})
})
},
async upCallback(page) {
if(!this.firstInitSearchData) {
await this.initSearchData()
this.firstInitSearchData = true
}
const query = {
currentPage: page.num,
pageSize: page.size,
menuId : this.menuId,
...this.listQuery,
...this.searchForm,
dataType:0,
}
request({
url: '/api/scm/Cwpaymentreceipt/getList',
method: 'post',
data: query,
}).then(res => {
let _list = this.columnList.length?res.data.list:[];
this.mescroll.endSuccess(_list.length);
if (page.num == 1) this.list = [];
const list = _list.map(o => ({
show: false,
...o
}));
this.list = this.list.concat(_list);
}).catch(() => {
this.mescroll.endErr();
})
},
handleClick(index, index1) {
const item = this.list[index]
if([1,2,3,5].includes(item.flowState)){
this.$u.toast("流程正在审核,请勿删除")
this.list[index].show = false
return
}
request({
url: '/api/scm/Cwpaymentreceipt/' + item.id,
method: 'delete'
}).then(res => {
uni.showToast({
title: res.msg,
complete: () => {
this.$u.toast(res.msg)
this.mescroll.resetUpScroll()
}
})
})
},
open(index) {
this.list[index].show = true;
this.list.map((val, idx) => {
if (index != idx) this.list[idx].show = false;
})
},
search() {
if (this.isPreview == '1') return
this.searchTimer && clearTimeout(this.searchTimer)
this.searchTimer = setTimeout(() => {
this.list = [];
this.mescroll.resetUpScroll();
}, 300)
},
goDetail(id, item) {
let flowtaskid = item.flowtaskid
let flowState =item.flowState
let flowId =item.flowId
let btnType = ''
let btnList = []
btnList.push('btn_edit')
btnList.push('btn_detail')
if(btnList.includes('btn_detail')){
btnType = "btn_detail"
}
if(btnList.includes('btn_edit')){
btnType = "btn_edit"
}
if(!btnType) return
let ids = flowtaskid?flowtaskid:id
this.flowId = flowId?flowId:this.templateList[0].id
this.jumPage(ids, flowState,btnType)
},
addPage() {
if (!this.templateList.length) return this.$u.toast('流程不存在')
if (this.templateList.length > 1) {
this.show = true
} else {
this.flowId = this.templateList[0].id
this.jumPage()
}
},
confirm(e) {
this.flowId = this.templateList[e[0]].id
this.jumPage()
},
jumPage(id, status,btnType){
if (!id && !status) btnType = 'btn_add'
let _title=""
if(btnType=='btn_add'){
_title = "新增"
}
if(btnType=='btn_detail'){
_title = "详情"
}
if(btnType=='btn_edit'){
_title = "编辑"
}
let opType = '-1'
if ([1,2,5].includes(status)) opType = 0
const config = {
id: id || '',
enCode: this.enCode,
flowId: this.flowId,
formType: 1,
type: 1,
opType,
status: status || '',
fullName: _title,
jurisdictionType: btnType || ''
}
uni.navigateTo({
url: '/pages/workFlow/flowBefore/index?config=' + this.base64.encode(JSON.stringify(config), "UTF-8")
})
},
getFlowStatus(val) {
let status
switch (val) {
case 0:
status = {
text: '等待提交',
statusCss: 'u-type-info'
}
break;
case 1:
status = {
text: '等待审核',
statusCss: 'u-type-primary'
}
break;
case 2:
status = {
text: '审核通过',
statusCss: 'u-type-success'
}
break;
case 3:
status = {
text: '审核驳回',
statusCss: 'u-type-error'
}
break;
case 4:
status = {
text: '审核撤回',
statusCss: 'u-type-error'
}
break;
case 5:
status = {
text: '审核终止',
statusCss: 'u-type-info'
}
break;
default:
status = {
text: '等待提交',
statusCss: 'u-type-info'
}
break;
}
return status
},
getColumnList() {
let columnPermissionList = []
let _appColumnList =this.appColumnList
for (let i = 0; i < _appColumnList.length; i++) {
columnPermissionList.push(_appColumnList[i])
}
this.columnList = this.transformColumnList(columnPermissionList, this.dataOptions)
},
transformColumnList(columnList, dataOptions) {
let list = []
for (let i = 0; i < columnList.length; i++) {
let e = columnList[i]
let columProp = e.prop
let label = e.label
let option = null
let options = columProp + "Options"
if (!columProp.includes('-')) {
columProp = columProp
if(this.type=='4'){
columProp = columProp +"_name"
}
if(label.length>4){
label = label.substring(0, 4)
}
e.label = label
e.prop = columProp
e.option = option
list.push(e)
} else {
e.vModel = columProp.split('-')[1]
e.childLabel = e.label.split('-')[1]
options = e.vModel + "Options"
let prop = columProp.split('-')[0]
let label = e.label.split('-')[0]
let newItem = {
align: "center",
jnpfKey: "table",
prop,
label,
children: []
}
if (!list.some(o => o.prop === prop)) list.push(newItem)
for (let i = 0; i < list.length; i++) {
if (list[i].prop === prop) {
e.prop = e.prop
e.vModel = e.vModel
if(this.type=='4'){
e.prop = e.prop+"_name"
e.vModel = e.vModel+"_name"
}
e.option = option
list[i].children.push(e)
break
}
}
}
}
return list
},
cellClick(item) {
if (this.sortValue === item.value) return
this.listQuery.sort = item.sort
this.listQuery.sidx = item.sidx
this.sortValue = item.value
this.$refs.uDropdown.close();
this.$nextTick(() => {
this.list = [];
this.mescroll.resetUpScroll();
})
},
reset() {
this.searchForm = JSON.parse(JSON.stringify(this.dataValue))
this.key = new Date()
},
closeDropdown() {
this.$refs.uDropdown.close();
this.$nextTick(() => {
this.list = [];
this.mescroll.resetUpScroll();
})
},
dataList(data){
let _list =data.list
return _list;
},
},
}
</script>
<style lang="scss">
page {
background-color: #f0f2f6;
height: 100%;
/* #ifdef MP-ALIPAY */
position: absolute;
top: 0;
left: 0;
width: 100%;
/* #endif */
}
.right-option-box {
display: flex;
width: max-content;
.right-option {
width: 144rpx;
height: 100%;
font-size: 16px;
color: #fff;
background-color: #dd524d;
display: flex;
align-items: center;
justify-content: center;
}
.more-option {
background-color: #1890ff;
}
}
</style>

File diff suppressed because one or more lines are too long

@ -86,6 +86,16 @@
@eventReceiver="eventReceiver"
v-if="config.formEnCode === 'costCode'"
/>
<cwpaymentreceipt
ref="form"
@eventReceiver="eventReceiver"
v-if="config.formEnCode === 'cwPaymentReceipt'"
/>
<cwsettlement
ref="form"
@eventReceiver="eventReceiver"
v-if="config.formEnCode === 'cwSettlement'"
/>
</template>
<template v-if="config.formType == 2">
<dynamicForm
@ -116,6 +126,8 @@ import workshopLine from "@/pages/scm/form/businessLine1/workshopLineIndex.vue";
import produceLine from "@/pages/scm/form/businessLine1/produceLineIndex.vue";
import warehousingReportloss from "@/pages/scm/form/warehousingReportloss/index.vue";
import cwCost from "@/pages/scm/form/cwCost/index.vue";
import cwpaymentreceipt from "@/pages/scm/form/cwpaymentreceipt/index.vue";
import cwsettlement from "@/pages/scm/form/cwsettlement/index.vue";
export default {
components: {
@ -135,7 +147,9 @@ export default {
workshopLine,
produceLine,
warehousingReportloss,
cwCost
cwCost,
cwpaymentreceipt,
cwsettlement
},
props: {
config: {

@ -21,7 +21,7 @@ spring:
port: 3309
username: root
password: linus,.123
db-name: jnpf_init
db-name: jnpf_init_test
db-schema: #金仓达梦选填
prepare-url: #自定义url

Loading…
Cancel
Save