初始提交
This commit is contained in:
388
pages/workFlow/workFlowForm/crmOrder/index.vue
Normal file
388
pages/workFlow/workFlowForm/crmOrder/index.vue
Normal file
@@ -0,0 +1,388 @@
|
||||
<template>
|
||||
<view class="jnpf-wrap jnpf-wrap-workflow">
|
||||
<u-form :model="dataForm" :rules="rules" ref="dataForm" :errorType="['toast']" label-position="left"
|
||||
label-width="150" label-align="left" v-show="hide">
|
||||
<view class="u-p-l-20 u-p-r-20 form-item-box">
|
||||
<u-form-item label="订单编码" prop="orderCode" v-if="judgeShow('orderCode')"
|
||||
:required="requiredList.orderCode">
|
||||
<u-input v-model="dataForm.orderCode" placeholder="订单编码" disabled input-align="right"></u-input>
|
||||
</u-form-item>
|
||||
<u-form-item label="客户名称" prop="customerId" :required="requiredList.customerName"
|
||||
v-if="judgeShow('customerName')">
|
||||
<JnpfTreeSelect v-model="dataForm.customerId" placeholder="请选择客户名称" :options="customerOptions"
|
||||
@change="onCustomerChange" :props="props" :disabled="judgeWrite('customerName')" />
|
||||
</u-form-item>
|
||||
<u-form-item label="业务人员" prop="salesmanId" :required="requiredList.salesmanId"
|
||||
v-if="judgeShow('salesmanId')">
|
||||
<JnpfUserSelect v-model="dataForm.salesmanId" placeholder="请选择业务人员" @change="onChange"
|
||||
:disabled="judgeWrite('salesmanId')" />
|
||||
</u-form-item>
|
||||
<u-form-item label="订单日期" prop="orderDate" :required="requiredList.orderDate"
|
||||
v-if="judgeShow('orderDate')">
|
||||
<JnpfDatePicker format="yyyy-MM-dd" placeholder="请选择订单日期" v-model="dataForm.orderDate"
|
||||
:disabled="judgeWrite('orderDate')" />
|
||||
</u-form-item>
|
||||
</view>
|
||||
<view class="jnpf-card">
|
||||
<view class="u-p-l-20 u-p-r-20 form-item-box">
|
||||
<u-form-item label="付款方式" prop="paymentMode" :required="requiredList.paymentMode"
|
||||
v-if="judgeShow('paymentMode')">
|
||||
<JnpfSelect v-model="dataForm.paymentMode" placeholder="请选择付款方式" :options="options"
|
||||
:disabled="judgeWrite('paymentMode')" />
|
||||
</u-form-item>
|
||||
<u-form-item label="付款金额" prop="receivableMoney" v-if="judgeShow('receivableMoney')"
|
||||
:required="requiredList.receivableMoney">
|
||||
<u-input v-model="dataForm.receivableMoney" type="number" placeholder="付款金额"
|
||||
:disabled="judgeWrite('receivableMoney')" input-align="right"></u-input>
|
||||
</u-form-item>
|
||||
<u-form-item label="定金比率" prop="earnestRate" v-if="judgeShow('earnestRate')"
|
||||
:required="requiredList.earnestRate">
|
||||
<u-input v-model="dataForm.earnestRate" type="number" placeholder="请输入定金比率"
|
||||
:disabled="judgeWrite('earnestRate')" input-align="right"></u-input>
|
||||
</u-form-item>
|
||||
<u-form-item label="预付定金" prop="prepayEarnest" v-if="judgeShow('prepayEarnest')"
|
||||
:required="requiredList.prepayEarnest">
|
||||
<u-input v-model="dataForm.prepayEarnest" type="number" placeholder="请输入预付定金"
|
||||
:disabled="judgeWrite('prepayEarnest')" input-align="right"></u-input>
|
||||
</u-form-item>
|
||||
<u-form-item label="运输方式" prop="transportMode" v-if="judgeShow('transportMode')"
|
||||
:required="requiredList.transportMode">
|
||||
<JnpfSelect v-model="dataForm.transportMode" placeholder="请选择运输方式" :options="transportOptions"
|
||||
:disabled="judgeWrite('transportMode')" />
|
||||
</u-form-item>
|
||||
<u-form-item label="发货日期" prop="deliveryDate" v-if="judgeShow('deliveryDate')"
|
||||
:required="requiredList.deliveryDate">
|
||||
<JnpfDatePicker format="yyyy-MM-dd" placeholder="请选择发货日期" v-model="dataForm.deliveryDate"
|
||||
:disabled="judgeWrite('deliveryDate')" />
|
||||
</u-form-item>
|
||||
<u-form-item label="发货地址" prop="deliveryAddress" v-if="judgeShow('deliveryAddress')"
|
||||
:required="requiredList.deliveryAddress">
|
||||
<u-input v-model="dataForm.deliveryAddress" type="textarea" placeholder="请输入发货地址"
|
||||
:disabled="judgeWrite('deliveryAddress')" input-align="right"></u-input>
|
||||
</u-form-item>
|
||||
<u-form-item label="订单备注" prop="description" v-if="judgeShow('description')"
|
||||
:required="requiredList.description">
|
||||
<u-input v-model="dataForm.description" type="textarea" placeholder="请输入订单备注"
|
||||
:disabled="judgeWrite('description')" input-align="right"></u-input>
|
||||
</u-form-item>
|
||||
<!-- #ifndef APP-HARMONY -->
|
||||
<u-form-item label="相关附件" prop="fileJson" :required="requiredList.fileJson">
|
||||
<JnpfUploadFile v-model="fileList" :disabled="judgeWrite('fileJson')" />
|
||||
</u-form-item>
|
||||
<!-- #endif -->
|
||||
<!-- #ifdef APP-HARMONY -->
|
||||
<u-form-item label="相关附件" prop="fileJson" :required="requiredList.fileJson">
|
||||
<JnpfUploadFileH v-model="fileList" :disabled="judgeWrite('fileJson')" />
|
||||
</u-form-item>
|
||||
<!-- #endif -->
|
||||
</view>
|
||||
</view>
|
||||
<view class="jnpf-table" v-if="judgeShow('goodsList')">
|
||||
<view class="jnpf-table-item-title u-flex u-row-between">
|
||||
<text class="jnpf-table-item-title-num">商品添购</text>
|
||||
</view>
|
||||
<view class="jnpf-table-item" v-for="(item,i) in dataForm.goodsList" :key="i">
|
||||
<view class="jnpf-table-item-title u-flex u-row-between">
|
||||
<text class="jnpf-table-item-title-num">({{i+1}})</text>
|
||||
<view class="jnpf-table-delete-btn" v-if="!judgeWrite('goodsList')" @click="delGoods(i)">
|
||||
删除
|
||||
</view>
|
||||
</view>
|
||||
<view class="u-p-l-20 u-p-r-20 form-item-box">
|
||||
<u-form-item label="商品名称" prop="dataForm.goodsList[i].goodsId"
|
||||
:required="requiredList['goodsList-goodsId']">
|
||||
<JnpfTreeSelect v-model="dataForm.goodsList[i].goodsId" placeholder="请选择商品名称"
|
||||
:options="goodsOptions" @change="onGoodsChange($event,i)" :props="props"
|
||||
:disabled="judgeWrite('goodsList')" />
|
||||
</u-form-item>
|
||||
<u-form-item label="规格型号" prop="dataForm.goodsList[i].specifications"
|
||||
:required="requiredList['goodsList-specifications']">
|
||||
<u-input v-model="dataForm.goodsList[i].specifications" placeholder="规格型号"
|
||||
:disabled="judgeWrite('goodsList')" input-align="right"></u-input>
|
||||
</u-form-item>
|
||||
<u-form-item label="单位" prop="dataForm.goodsList[i].unit"
|
||||
:required="requiredList['goodsList-unit']">
|
||||
<u-input v-model="dataForm.goodsList[i].unit" placeholder="单位"
|
||||
:disabled="judgeWrite('goodsList')" input-align="right"></u-input>
|
||||
</u-form-item>
|
||||
<u-form-item label="数量" prop="dataForm.goodsList[i].qty"
|
||||
:required="requiredList['goodsList-qty']">
|
||||
<u-input v-model="dataForm.goodsList[i].qty" placeholder="数量" type="number"
|
||||
@input="count(i)" :disabled="judgeWrite('goodsList')" input-align="right"></u-input>
|
||||
</u-form-item>
|
||||
<u-form-item label="单价" prop="dataForm.goodsList[i].price"
|
||||
:required="requiredList['goodsList-price']">
|
||||
<u-input v-model="dataForm.goodsList[i].price" placeholder="单价" type="number"
|
||||
@input="count(i)" :disabled="judgeWrite('goodsList')" input-align="right"></u-input>
|
||||
</u-form-item>
|
||||
<u-form-item label="金额" prop="dataForm.goodsList[i].amount"
|
||||
:required="requiredList['goodsList-amount']">
|
||||
<u-input v-model="dataForm.goodsList[i].amount" type="number" placeholder="金额" disabled
|
||||
input-align="right"></u-input>
|
||||
</u-form-item>
|
||||
<u-form-item label="折扣%" prop="dataForm.goodsList[i].discount"
|
||||
:required="requiredList['goodsList-discount']">
|
||||
<u-input v-model="dataForm.goodsList[i].discount" placeholder="折扣" type="number"
|
||||
@input="count(i)" :disabled="judgeWrite('goodsList')" input-align="right"></u-input>
|
||||
</u-form-item>
|
||||
<u-form-item label="税率%" prop="dataForm.goodsList[i].cess"
|
||||
:required="requiredList['goodsList-cess']">
|
||||
<u-input v-model="dataForm.goodsList[i].cess" placeholder="税率" type="number"
|
||||
@input="count(i)" :disabled="judgeWrite('goodsList')" input-align="right"></u-input>
|
||||
</u-form-item>
|
||||
<u-form-item label="实际单价" prop="dataForm.goodsList[i].actualPrice"
|
||||
:required="requiredList['goodsList-actualPrice']">
|
||||
<u-input v-model="dataForm.goodsList[i].actualPrice" placeholder="实际单价" type="number"
|
||||
disabled input-align="right"></u-input>
|
||||
</u-form-item>
|
||||
<u-form-item label="实际金额" prop="dataForm.goodsList[i].actualAmount"
|
||||
:required="requiredList['goodsList-actualAmount']">
|
||||
<u-input v-model="dataForm.goodsList[i].actualAmount" type="number" placeholder="实际金额"
|
||||
disabled input-align="right"></u-input>
|
||||
</u-form-item>
|
||||
<u-form-item label="备注" prop="dataForm.goodsList[i].description"
|
||||
:required="requiredList['goodsList-description']">
|
||||
<u-input v-model="dataForm.goodsList[i].description" placeholder="备注" type="textarea"
|
||||
:disabled="judgeWrite('goodsList')" input-align="right"></u-input>
|
||||
</u-form-item>
|
||||
</view>
|
||||
</view>
|
||||
<view class="jnpf-table-addBtn" @click="addGoods" v-if="!judgeWrite('goodsList')">
|
||||
<u-icon name="plus" color="#2979ff"></u-icon>商品添购
|
||||
</view>
|
||||
</view>
|
||||
<view class="jnpf-table" v-if="judgeShow('collectionPlanList')">
|
||||
<view class="jnpf-table-item-title u-flex u-row-between">
|
||||
<text class="jnpf-table-item-title-num">收款计划</text>
|
||||
</view>
|
||||
<view class="jnpf-table-item" v-for="(item,i) in dataForm.collectionPlanList" :key="i">
|
||||
<view class="jnpf-table-item-title u-flex u-row-between">
|
||||
<text class="jnpf-table-item-title-num">({{i+1}})</text>
|
||||
<view class="jnpf-table-delete-btn" v-if="!judgeWrite('collectionPlanList')"
|
||||
@click="delPlan(i)">删除
|
||||
</view>
|
||||
</view>
|
||||
<view class="u-p-l-20 u-p-r-20 form-item-box">
|
||||
<u-form-item label="收款日期" prop="dataForm.collectionPlanList[i].receivableDate"
|
||||
:required="requiredList['collectionPlanList-receivableDate']">
|
||||
<JnpfDatePicker format="yyyy-MM-dd HH:mm:ss" placeholder="请选择收款日期"
|
||||
v-model="dataForm.collectionPlanList[i].receivableDate"
|
||||
:disabled="judgeWrite('collectionPlanList')" />
|
||||
</u-form-item>
|
||||
<u-form-item label="收款比率%" prop="dataForm.collectionPlanList[i].receivableRate"
|
||||
:required="requiredList['collectionPlanList-receivableRate']">
|
||||
<u-input v-model="dataForm.collectionPlanList[i].receivableRate" placeholder="收款比率"
|
||||
type="number" :disabled="judgeWrite('collectionPlanList')"
|
||||
input-align="right"></u-input>
|
||||
</u-form-item>
|
||||
<u-form-item label="收款金额" prop="dataForm.collectionPlanList[i].receivableMoney"
|
||||
:required="requiredList['collectionPlanList-receivableMoney']">
|
||||
<u-input v-model="dataForm.collectionPlanList[i].receivableMoney" placeholder="收款金额"
|
||||
type="number" :disabled="judgeWrite('collectionPlanList')"
|
||||
input-align="right"></u-input>
|
||||
</u-form-item>
|
||||
<u-form-item label="收款方式" prop="dataForm.collectionPlanList[i].receivableMode"
|
||||
:required="requiredList['collectionPlanList-receivableMode']">
|
||||
<JnpfSelect v-model="dataForm.collectionPlanList[i].receivableMode" placeholder="请选择收款方式"
|
||||
:options="options" :disabled="judgeWrite('collectionPlanList')" />
|
||||
</u-form-item>
|
||||
<u-form-item label="收款摘要" prop="dataForm.collectionPlanList[i].abstract"
|
||||
:required="requiredList['collectionPlanList-abstract']">
|
||||
<u-input v-model="dataForm.collectionPlanList[i].abstract" placeholder="收款摘要"
|
||||
type="textarea" :disabled="judgeWrite('collectionPlanList')" input-align="right">
|
||||
</u-input>
|
||||
</u-form-item>
|
||||
</view>
|
||||
</view>
|
||||
<view class="jnpf-table-addBtn" @click="addPlan" v-if="!judgeWrite('collectionPlanList')">
|
||||
<u-icon name="plus" color="#2979ff"></u-icon>收款计划
|
||||
</view>
|
||||
</view>
|
||||
</u-form>
|
||||
</view>
|
||||
</template>
|
||||
<script>
|
||||
import comMixin from '../mixin'
|
||||
import {
|
||||
getGoodsList,
|
||||
getCustomerList,
|
||||
} from '@/api/apply/order'
|
||||
export default {
|
||||
name: 'crmOrder',
|
||||
mixins: [comMixin],
|
||||
data() {
|
||||
return {
|
||||
hide: false,
|
||||
billEnCode: 'OrderNumber',
|
||||
dataForm: {
|
||||
id: '',
|
||||
customerName: '',
|
||||
salesmanId: '',
|
||||
orderDate: undefined,
|
||||
orderCode: '',
|
||||
paymentMode: '',
|
||||
receivableMoney: undefined,
|
||||
earnestRate: undefined,
|
||||
prepayEarnest: undefined,
|
||||
transportMode: '',
|
||||
deliveryDate: undefined,
|
||||
deliveryAddress: '',
|
||||
description: '',
|
||||
customerId: '',
|
||||
salesmanName: '',
|
||||
goodsList: [],
|
||||
collectionPlanList: [],
|
||||
fileJson: ''
|
||||
},
|
||||
rules: {
|
||||
customerId: [{
|
||||
required: true,
|
||||
message: '客户名称不能为空',
|
||||
trigger: 'input'
|
||||
}],
|
||||
salesmanId: [{
|
||||
required: true,
|
||||
message: '业务人员不能为空',
|
||||
trigger: 'input'
|
||||
}],
|
||||
orderDate: [{
|
||||
required: true,
|
||||
message: '订单日期不能为空',
|
||||
trigger: 'change',
|
||||
type: 'number'
|
||||
}],
|
||||
paymentMode: [{
|
||||
required: true,
|
||||
message: '付款方式不能为空',
|
||||
trigger: 'input'
|
||||
}]
|
||||
},
|
||||
options: [{
|
||||
id: '现金',
|
||||
fullName: '现金'
|
||||
}, {
|
||||
id: '转帐',
|
||||
fullName: '转帐'
|
||||
}, {
|
||||
id: '汇票',
|
||||
fullName: '汇票'
|
||||
}],
|
||||
transportOptions: [{
|
||||
id: '快递',
|
||||
fullName: '快递'
|
||||
}, {
|
||||
id: '物流',
|
||||
fullName: '物流'
|
||||
}, {
|
||||
id: '配送',
|
||||
fullName: '配送'
|
||||
}, {
|
||||
id: '自提',
|
||||
fullName: '自提'
|
||||
}],
|
||||
props: {
|
||||
label: 'text',
|
||||
value: 'id',
|
||||
children: 'children'
|
||||
},
|
||||
goodsOptions: [],
|
||||
customerOptions: []
|
||||
}
|
||||
},
|
||||
created() {
|
||||
uni.showLoading({
|
||||
title: '正在加载.....',
|
||||
mask: true
|
||||
});
|
||||
setTimeout(() => {
|
||||
this.hide = true
|
||||
this.initData()
|
||||
uni.hideLoading()
|
||||
}, 800)
|
||||
},
|
||||
methods: {
|
||||
initData() {
|
||||
getGoodsList().then(res => {
|
||||
this.goodsOptions = res.data.list
|
||||
})
|
||||
getCustomerList().then(res => {
|
||||
this.customerOptions = res.data.list
|
||||
})
|
||||
},
|
||||
onChange(val, e) {
|
||||
this.dataForm.salesmanName = e.fullName
|
||||
},
|
||||
addGoods() {
|
||||
const item = {
|
||||
goodsId: '',
|
||||
goodsCode: '',
|
||||
goodsName: '',
|
||||
specifications: '',
|
||||
unit: '',
|
||||
qty: undefined,
|
||||
price: undefined,
|
||||
amount: '',
|
||||
discount: undefined,
|
||||
cess: undefined,
|
||||
actualPrice: undefined,
|
||||
actualAmount: undefined,
|
||||
description: ''
|
||||
}
|
||||
this.dataForm.goodsList.push(item)
|
||||
},
|
||||
delGoods(index) {
|
||||
this.dataForm.goodsList.splice(index, 1)
|
||||
},
|
||||
addPlan() {
|
||||
const item = {
|
||||
receivableDate: undefined,
|
||||
receivableRate: undefined,
|
||||
receivableMoney: undefined,
|
||||
receivableMode: '',
|
||||
abstract: ''
|
||||
}
|
||||
this.dataForm.collectionPlanList.push(item)
|
||||
},
|
||||
delPlan(index) {
|
||||
this.dataForm.collectionPlanList.splice(index, 1)
|
||||
},
|
||||
onGoodsChange(e, i) {
|
||||
const goods = e[0]
|
||||
this.dataForm.goodsList[i] = {
|
||||
goodsId: goods.id,
|
||||
goodsCode: goods.code,
|
||||
goodsName: goods.text,
|
||||
specifications: goods.specifications,
|
||||
unit: goods.unit,
|
||||
qty: 1,
|
||||
price: goods.price,
|
||||
amount: goods.price,
|
||||
discount: 100,
|
||||
cess: 0,
|
||||
actualPrice: goods.price,
|
||||
actualAmount: goods.price,
|
||||
description: ''
|
||||
}
|
||||
this.$forceUpdate()
|
||||
},
|
||||
onCustomerChange(val, e) {
|
||||
this.dataForm.customerName = e.text
|
||||
},
|
||||
count(i) {
|
||||
this.$nextTick(() => {
|
||||
const row = this.dataForm.goodsList[i]
|
||||
//金额 = 数量*单价
|
||||
row.amount = this.jnpf.toDecimal(parseFloat(row.price) * parseFloat(row.qty))
|
||||
//折扣价 = (单价*折扣)
|
||||
var discountPrice = row.price * (row.discount / 100);
|
||||
//实际单价 = 折扣价 * (1 + (税率 / 100))
|
||||
row.actualPrice = this.jnpf.toDecimal(discountPrice * (1 + (row.cess / 100)));
|
||||
//实际金额
|
||||
row.actualAmount = this.jnpf.toDecimal(parseFloat(row.actualPrice) * parseFloat(row
|
||||
.qty))
|
||||
this.$forceUpdate()
|
||||
})
|
||||
}
|
||||
}
|
||||
}
|
||||
</script>
|
||||
182
pages/workFlow/workFlowForm/dynamicForm/index.vue
Normal file
182
pages/workFlow/workFlowForm/dynamicForm/index.vue
Normal file
@@ -0,0 +1,182 @@
|
||||
<template>
|
||||
<view class="jnpf-wrap jnpf-wrap-workflow">
|
||||
<JnpfParser :formConf="formConf" ref="dynamicForm" v-if="!loading" @submit="sumbitForm" :key="key" />
|
||||
</view>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
export default {
|
||||
props: {
|
||||
config: {
|
||||
type: Object,
|
||||
default: () => {}
|
||||
},
|
||||
},
|
||||
data() {
|
||||
return {
|
||||
loading: true,
|
||||
key: +new Date(),
|
||||
setting: {},
|
||||
formConf: {},
|
||||
formData: {},
|
||||
eventType: '',
|
||||
flowUrgent: 1,
|
||||
dataForm: {
|
||||
id: '',
|
||||
flowId: ''
|
||||
},
|
||||
isAdd: false,
|
||||
userInfo: {}
|
||||
}
|
||||
},
|
||||
mounted() {
|
||||
this.init(this.config)
|
||||
},
|
||||
methods: {
|
||||
init(data) {
|
||||
this.userInfo = uni.getStorageSync('userInfo') || {}
|
||||
this.setting = data
|
||||
this.formConf = data.formConf ? JSON.parse(data.formConf) : {}
|
||||
this.dataForm.id = data.id || null;
|
||||
this.dataForm.flowId = data.flowId;
|
||||
this.loading = true;
|
||||
this.formData = {};
|
||||
this.$nextTick(() => {
|
||||
let extra = {}
|
||||
if (data.id) {
|
||||
this.isAdd = false;
|
||||
extra = {
|
||||
modelId: data.flowId,
|
||||
id: this.dataForm.id,
|
||||
type: data.type,
|
||||
flowId: data.flowId,
|
||||
processId: data.id,
|
||||
opType: data.opType,
|
||||
taskId: data.taskId
|
||||
}
|
||||
uni.setStorageSync('dynamicModelExtra', extra)
|
||||
const formData = data.draftData || data.formData || {}
|
||||
this.formData = {
|
||||
...formData,
|
||||
flowId: data.flowId
|
||||
}
|
||||
} else {
|
||||
this.isAdd = true;
|
||||
}
|
||||
if (data.previewType == 'initiationForm') this.formData = data.formData || {}
|
||||
this.fillFormData(this.formConf, this.formData)
|
||||
this.$nextTick(() => {
|
||||
this.loading = false
|
||||
})
|
||||
this.dataForm.flowId = data.flowId
|
||||
this.key = +new Date()
|
||||
})
|
||||
},
|
||||
fillFormData(form, data) {
|
||||
form.disabled = this.setting.readonly
|
||||
const loop = (list, parent) => {
|
||||
for (let i = 0; i < list.length; i++) {
|
||||
let item = list[i]
|
||||
let vModel = item.__vModel__
|
||||
let config = item.__config__
|
||||
if (vModel) {
|
||||
let val = data.hasOwnProperty(vModel) ? data[vModel] : config.defaultValue
|
||||
if (!config.isSubTable) config.defaultValue = val
|
||||
if (this.isAdd || config.isSubTable) { //新增时候,默认当前
|
||||
if (config.defaultCurrent) {
|
||||
if (config.jnpfKey === 'datePicker') {
|
||||
if (!data.hasOwnProperty(vModel)) {
|
||||
let format = this.jnpf.handelFormat(item.format)
|
||||
let dateStr = this.jnpf.toDate(new Date().getTime(), format)
|
||||
let time = format === 'yyyy' ? '-01-01 00:00:00' : format === 'yyyy-MM' ?
|
||||
'-01 00:00:00' : format === 'yyyy-MM-dd' ?
|
||||
' 00:00:00' : ''
|
||||
val = new Date(dateStr + time).getTime()
|
||||
config.defaultValue = val
|
||||
}
|
||||
}
|
||||
if (config.jnpfKey === 'timePicker') {
|
||||
if (!data.hasOwnProperty(vModel)) {
|
||||
config.defaultValue = this.jnpf.toDate(new Date(), item.format)
|
||||
}
|
||||
}
|
||||
if (config.jnpfKey === 'organizeSelect' && this.userInfo.organizeIds?.length) {
|
||||
config.defaultValue = item.multiple ? this.userInfo.organizeIds :
|
||||
this.userInfo.organizeId
|
||||
}
|
||||
if (config.jnpfKey === 'posSelect' && this.userInfo.positionIds?.length) {
|
||||
config.defaultValue = item.multiple ? this.userInfo.positionIds :
|
||||
this.userInfo.positionId
|
||||
}
|
||||
const userId = this.userInfo.userId
|
||||
if (config.jnpfKey === 'userSelect' && userId) {
|
||||
config.defaultValue = item.multiple ? [userId] : userId;
|
||||
}
|
||||
if (config.jnpfKey === 'usersSelect' && userId) {
|
||||
config.defaultValue = [userId + '--user'];
|
||||
}
|
||||
if (config.jnpfKey === 'sign' && this.userInfo.signImg) {
|
||||
config.defaultValue = this.userInfo.signImg
|
||||
}
|
||||
}
|
||||
}
|
||||
let noShow = item.__config__.noShow || false,
|
||||
isDisabled = item.disabled || false,
|
||||
required = item.__config__.required || false,
|
||||
isVisibility = false
|
||||
if (!item.__config__.visibility || (Array.isArray(item.__config__.visibility) && item
|
||||
.__config__.visibility.includes('app'))) isVisibility = true
|
||||
if (this.setting.formOperates && this.setting.formOperates.length) {
|
||||
let id = item.__config__.isSubTable ? parent?.__vModel__ + '-' + item?.__vModel__ :
|
||||
item
|
||||
.__vModel__
|
||||
let arr = this.setting.formOperates.filter(o => o.id === id) || []
|
||||
if (arr.length) {
|
||||
let obj = arr[0]
|
||||
noShow = !obj.read
|
||||
isDisabled = !obj.write
|
||||
required = obj.required ? obj.required : item.__config__.required
|
||||
}
|
||||
}
|
||||
isDisabled = item.readonly ? item.readonly : isDisabled;
|
||||
if (this.setting.readonly || config.disabled) isDisabled = true
|
||||
if (this.setting.origin === 'scan') isDisabled = true
|
||||
this.$set(item, 'disabled', isDisabled)
|
||||
this.$set(item.__config__, 'noShow', noShow)
|
||||
this.$set(item.__config__, 'required', required)
|
||||
this.$set(item.__config__, 'isVisibility', isVisibility)
|
||||
} else {
|
||||
let noShow = item.__config__.noShow ? item.__config__.noShow : false,
|
||||
isVisibility = false
|
||||
if (!item.__config__.visibility || (Array.isArray(item.__config__.visibility) && item
|
||||
.__config__.visibility.includes('app'))) isVisibility = true
|
||||
this.$set(item.__config__, 'isVisibility', isVisibility)
|
||||
this.$set(item.__config__, 'noShow', noShow)
|
||||
}
|
||||
if (item.__config__ && item.__config__.children && Array.isArray(item.__config__.children)) {
|
||||
loop(item.__config__.children, item)
|
||||
}
|
||||
}
|
||||
}
|
||||
loop(form.fields)
|
||||
form.formData = data
|
||||
},
|
||||
sumbitForm(data, callback) {
|
||||
if (!data) return
|
||||
const formData = {
|
||||
...this.formData,
|
||||
...data
|
||||
}
|
||||
this.dataForm.formData = formData
|
||||
if (callback && typeof callback === "function") callback()
|
||||
this.$emit('eventReceiver', this.dataForm, this.eventType)
|
||||
},
|
||||
submit(eventType, flowUrgent) {
|
||||
if (this.setting.isPreview == '1') return this.$u.toast('功能预览不支持数据保存')
|
||||
this.eventType = eventType
|
||||
this.flowUrgent = flowUrgent
|
||||
this.$refs.dynamicForm && this.$refs.dynamicForm.submitForm()
|
||||
},
|
||||
}
|
||||
}
|
||||
</script>
|
||||
221
pages/workFlow/workFlowForm/leaveApply/index.vue
Normal file
221
pages/workFlow/workFlowForm/leaveApply/index.vue
Normal file
@@ -0,0 +1,221 @@
|
||||
<template>
|
||||
<view class="jnpf-wrap jnpf-wrap-workflow">
|
||||
<u-form :model="dataForm" :rules="rules" ref="dataForm" :errorType="['toast']" label-position="left"
|
||||
label-width="150" label-align="left">
|
||||
<view class="u-p-l-20 u-p-r-20 form-item-box">
|
||||
<u-form-item label="流程标题" prop="flowTitle" :required="requiredList.flowTitle"
|
||||
v-if="judgeShow('flowTitle')">
|
||||
<u-input v-model="dataForm.flowTitle" placeholder="流程标题" :disabled="judgeWrite('flowTitle')"
|
||||
input-align="right"></u-input>
|
||||
</u-form-item>
|
||||
<u-form-item label="流程编码" prop="billNo" v-if="judgeShow('billNo')" :required="requiredList.billNo">
|
||||
<u-input v-model="dataForm.billNo" placeholder="流程编码" disabled input-align="right"></u-input>
|
||||
</u-form-item>
|
||||
</view>
|
||||
<view class="jnpf-card">
|
||||
<view class="u-p-l-20 u-p-r-20 form-item-box">
|
||||
<u-form-item label="申请人员" prop="applyUser" v-if="judgeShow('applyUser')"
|
||||
:required="requiredList.applyUser">
|
||||
<u-input v-model="dataForm.applyUser" placeholder="请输入申请人员" :disabled="judgeWrite('applyUser')"
|
||||
input-align="right">
|
||||
</u-input>
|
||||
</u-form-item>
|
||||
<u-form-item label="申请部门" prop="applyDept" v-if="judgeShow('applyDept')"
|
||||
:required="requiredList.applyDept">
|
||||
<u-input v-model="dataForm.applyDept" placeholder="请输入申请部门" :disabled="judgeWrite('applyDept')"
|
||||
input-align="right">
|
||||
</u-input>
|
||||
</u-form-item>
|
||||
<u-form-item label="申请职位" prop="applyPost" v-if="judgeShow('applyPost')"
|
||||
:required="requiredList.applyPost">
|
||||
<u-input v-model="dataForm.applyPost" placeholder="请输入申请职位" :disabled="judgeWrite('applyPost')"
|
||||
input-align="right">
|
||||
</u-input>
|
||||
</u-form-item>
|
||||
<u-form-item label="申请日期" prop="applyDate" v-if="judgeShow('applyDate')"
|
||||
:required="requiredList.applyDate">
|
||||
<JnpfDatePicker v-model="dataForm.applyDate" placeholder="请输入申请日期"
|
||||
:disabled="judgeWrite('applyDate')" />
|
||||
</u-form-item>
|
||||
<u-form-item label="请假类别" prop="leaveType" v-if="judgeShow('leaveType')"
|
||||
:required="requiredList.leaveType">
|
||||
<JnpfSelect v-model="dataForm.leaveType" placeholder="请选择请假类别" :options="leaveTypeList"
|
||||
:disabled="judgeWrite('leaveType')" />
|
||||
</u-form-item>
|
||||
<u-form-item label="请假原因" prop="leaveReason" v-if="judgeShow('leaveReason')"
|
||||
:required="requiredList.leaveReason">
|
||||
<u-input v-model="dataForm.leaveReason" placeholder="请输入请假原因" type="textarea"
|
||||
:disabled="judgeWrite('leaveReason')" input-align="right"></u-input>
|
||||
</u-form-item>
|
||||
<u-form-item label="起始时间" prop="leaveStartTime" v-if="judgeShow('leaveStartTime')"
|
||||
:required="requiredList.leaveStartTime">
|
||||
<JnpfDatePicker format="yyyy-MM-dd HH:mm:ss" v-model="dataForm.leaveStartTime"
|
||||
placeholder="请选择起始时间" :disabled="judgeWrite('leaveStartTime')" />
|
||||
</u-form-item>
|
||||
<u-form-item label="结束时间" prop="leaveEndTime" v-if="judgeShow('leaveEndTime')"
|
||||
:required="requiredList.leaveEndTime">
|
||||
<JnpfDatePicker format="yyyy-MM-dd HH:mm:ss" v-model="dataForm.leaveEndTime"
|
||||
placeholder="请选择结束时间" :disabled="judgeWrite('leaveEndTime')" />
|
||||
</u-form-item>
|
||||
<u-form-item label="请假天数" prop="leaveDayCount" v-if="judgeShow('leaveDayCount')"
|
||||
:required="requiredList.leaveDayCount">
|
||||
<u-input v-model="dataForm.leaveDayCount" placeholder="请输入请假天数"
|
||||
:disabled="judgeWrite('leaveDayCount')" input-align="right"></u-input>
|
||||
</u-form-item>
|
||||
<u-form-item label="请假小时" prop="leaveHour" v-if="judgeShow('leaveHour')"
|
||||
:required="requiredList.leaveHour">
|
||||
<u-input v-model="dataForm.leaveHour" placeholder="请输入请假小时" type="number"
|
||||
:disabled="judgeWrite('leaveHour')" input-align="right"></u-input>
|
||||
</u-form-item>
|
||||
<!-- #ifndef APP-HARMONY -->
|
||||
<u-form-item label="相关附件" prop="fileJson" v-if="judgeShow('fileJson')"
|
||||
:required="requiredList.fileJson">
|
||||
<JnpfUploadFile v-model="fileList" :disabled="judgeWrite('fileJson')" />
|
||||
</u-form-item>
|
||||
<!-- #endif -->
|
||||
<!-- #ifdef APP-HARMONY -->
|
||||
<u-form-item label="相关附件" prop="fileJson" v-if="judgeShow('fileJson')"
|
||||
:required="requiredList.fileJson">
|
||||
<JnpfUploadFileH v-model="fileList" :disabled="judgeWrite('fileJson')" />
|
||||
</u-form-item>
|
||||
<!-- #endif -->
|
||||
</view>
|
||||
</view>
|
||||
</u-form>
|
||||
</view>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import comMixin from '../mixin'
|
||||
export default {
|
||||
name: 'LeaveApply',
|
||||
mixins: [comMixin],
|
||||
data() {
|
||||
return {
|
||||
billEnCode: 'WF_LeaveApplyNo',
|
||||
dataForm: {
|
||||
flowTitle: '',
|
||||
billNo: '',
|
||||
flowUrgent: 1,
|
||||
applyUser: '',
|
||||
leaveHour: '',
|
||||
applyDept: '',
|
||||
leaveStartTime: '',
|
||||
leaveEndTime: '',
|
||||
leaveDayCount: '',
|
||||
leaveReason: '',
|
||||
applyDate: '',
|
||||
leaveType: '',
|
||||
fileJson: '',
|
||||
applyPost: '',
|
||||
description: ''
|
||||
},
|
||||
rules: {
|
||||
flowTitle: [{
|
||||
required: true,
|
||||
message: '流程标题不能为空',
|
||||
trigger: 'blur'
|
||||
}],
|
||||
flowUrgent: [{
|
||||
required: true,
|
||||
message: '紧急程度不能为空',
|
||||
trigger: 'change',
|
||||
type: 'number'
|
||||
}],
|
||||
billNo: [{
|
||||
required: true,
|
||||
message: '流程编码不能为空',
|
||||
trigger: 'blur',
|
||||
}],
|
||||
leaveHour: [{
|
||||
required: true,
|
||||
message: '请假小时不能为空',
|
||||
trigger: 'blur',
|
||||
}],
|
||||
leaveStartTime: [{
|
||||
required: true,
|
||||
message: '起始时间不能为空',
|
||||
trigger: 'blur',
|
||||
type: 'number'
|
||||
}],
|
||||
leaveDayCount: [{
|
||||
required: true,
|
||||
message: '请假天数不能为空',
|
||||
trigger: 'blur',
|
||||
}],
|
||||
leaveEndTime: [{
|
||||
required: true,
|
||||
message: '结束时间不能为空',
|
||||
trigger: 'blur',
|
||||
type: 'number'
|
||||
}],
|
||||
leaveReason: [{
|
||||
required: true,
|
||||
message: '请假原因不能为空',
|
||||
trigger: 'blur',
|
||||
type: 'string'
|
||||
}],
|
||||
},
|
||||
leaveTypeList: [{
|
||||
fullName: '事假',
|
||||
id: '事假',
|
||||
checked: false
|
||||
},
|
||||
{
|
||||
fullName: '病假',
|
||||
id: '病假',
|
||||
checked: false
|
||||
},
|
||||
{
|
||||
fullName: '婚假',
|
||||
id: '婚假',
|
||||
checked: false
|
||||
},
|
||||
{
|
||||
fullName: '产假',
|
||||
id: '产假',
|
||||
checked: false
|
||||
},
|
||||
{
|
||||
fullName: '丧假',
|
||||
id: '丧假',
|
||||
checked: false
|
||||
},
|
||||
{
|
||||
fullName: '年假',
|
||||
id: '年假',
|
||||
checked: false
|
||||
},
|
||||
{
|
||||
fullName: '调休',
|
||||
id: '调休',
|
||||
checked: false
|
||||
},
|
||||
{
|
||||
fullName: '其他',
|
||||
id: '其他',
|
||||
checked: false
|
||||
},
|
||||
|
||||
],
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
selfInit(data) {
|
||||
this.dataForm.applyDate = new Date().getTime()
|
||||
this.dataForm.flowTitle = this.userInfo.userName + "的请假申请表"
|
||||
this.dataForm.applyUser = this.userInfo.userName + '/' + this.userInfo.userAccount
|
||||
this.dataForm.applyDept = this.userInfo.organizeName
|
||||
if (this.userInfo?.positionList?.length) {
|
||||
const list = this.userInfo.positionList.map(o => o.treeName)
|
||||
this.dataForm.applyPost = list.join(',')
|
||||
}
|
||||
},
|
||||
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
||||
<style>
|
||||
|
||||
</style>
|
||||
226
pages/workFlow/workFlowForm/mixin.js
Normal file
226
pages/workFlow/workFlowForm/mixin.js
Normal file
@@ -0,0 +1,226 @@
|
||||
import {
|
||||
getBillNumber
|
||||
} from '@/api/common'
|
||||
|
||||
const includeList = ['crmOrder', 'salesOrder', 'leaveApply']
|
||||
export default {
|
||||
props: {
|
||||
config: {
|
||||
type: Object,
|
||||
default: () => {}
|
||||
},
|
||||
},
|
||||
data() {
|
||||
return {
|
||||
flowUrgentOptions: [{
|
||||
id: 1,
|
||||
fullName: '普通'
|
||||
}, {
|
||||
id: 2,
|
||||
fullName: '重要'
|
||||
}, {
|
||||
id: 3,
|
||||
fullName: '紧急'
|
||||
}],
|
||||
fileList: [],
|
||||
setting: {},
|
||||
userInfo: {},
|
||||
eventType: '',
|
||||
paymentMethodOptions: [],
|
||||
requiredList: {},
|
||||
requiredObj: []
|
||||
}
|
||||
},
|
||||
mounted() {
|
||||
this.init(this.config)
|
||||
this.$refs.dataForm.setRules(this.rules)
|
||||
this.userInfo = uni.getStorageSync('userInfo') || {}
|
||||
},
|
||||
methods: {
|
||||
checkChildRule() {
|
||||
let list = {}
|
||||
this.requiredObj.forEach((data) => {
|
||||
if (data.required) {
|
||||
list[data.id] = data.name + '不能为空'
|
||||
}
|
||||
})
|
||||
let title = [];
|
||||
for (let k in list) {
|
||||
let num = k.split("-");
|
||||
let childKey = num[0];
|
||||
num.forEach((model, i) => {
|
||||
if (i == 1) {
|
||||
let childData = this.dataForm[childKey]
|
||||
childData.forEach((child, i) => {
|
||||
if (child[model] instanceof Array) {
|
||||
if (child[model].length == 0) {
|
||||
title.push(list[childKey + "-" + model])
|
||||
}
|
||||
} else {
|
||||
if (!child[model] && child[model] !== 0) {
|
||||
title.push(list[childKey + "-" + model])
|
||||
}
|
||||
}
|
||||
})
|
||||
}
|
||||
})
|
||||
}
|
||||
let _regList = this.regList
|
||||
for (let k in _regList) {
|
||||
let childData = this.dataForm[k]
|
||||
for (let n in _regList[k]) {
|
||||
for (let i = 0; i < _regList[k][n].length; i++) {
|
||||
const element = _regList[k][n][i]
|
||||
if (element.pattern) {
|
||||
element.pattern = element.pattern.toString()
|
||||
let start = element.pattern.indexOf('/')
|
||||
let stop = element.pattern.lastIndexOf('/')
|
||||
let str = element.pattern.substring(start + 1, stop)
|
||||
let reg = new RegExp(str)
|
||||
element.pattern = reg
|
||||
}
|
||||
childData.forEach((item, index) => {
|
||||
if (item[n] && !element.pattern.test(item[n])) {
|
||||
title.push(element.message)
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
||||
}
|
||||
if (title.length > 0) {
|
||||
return title[0]
|
||||
}
|
||||
},
|
||||
/* 初始化处理 */
|
||||
init(data) {
|
||||
this.dataForm.id = data.id || ''
|
||||
this.dataForm.flowId = data.flowId
|
||||
this.setting = data
|
||||
if (data.formEnCode !== "revoke") this.updateDataRule()
|
||||
this.$nextTick(() => {
|
||||
this.$refs.dataForm.resetFields()
|
||||
if (this.beforeInit) this.beforeInit()
|
||||
if (data.id) {
|
||||
let dataForm = JSON.parse(JSON.stringify(data.draftData)) || JSON.parse(JSON.stringify(data
|
||||
.formData))
|
||||
if (this.selfGetInfo && typeof this.selfGetInfo === "function") {
|
||||
this.selfGetInfo(dataForm)
|
||||
} else {
|
||||
this.dataForm = JSON.parse(JSON.stringify(dataForm))
|
||||
}
|
||||
if (includeList.includes(data.formEnCode) && this.dataForm.fileJson) {
|
||||
this.fileList = JSON.parse(this.dataForm.fileJson)
|
||||
}
|
||||
return
|
||||
} else {
|
||||
if (this.selfInit) this.selfInit(data)
|
||||
if (!this.billEnCode) return
|
||||
getBillNumber(this.billEnCode).then(res => {
|
||||
if (data.formEnCode === 'crmOrder') {
|
||||
this.dataForm.orderCode = res.data
|
||||
} else {
|
||||
this.dataForm.billNo = res.data
|
||||
}
|
||||
})
|
||||
}
|
||||
})
|
||||
},
|
||||
/* 提交 */
|
||||
submit(eventType, flowUrgent) {
|
||||
this.eventType = eventType
|
||||
this.$refs.dataForm.setRules(this.rules)
|
||||
this.$refs.dataForm.validate((valid) => {
|
||||
if (valid) {
|
||||
if (includeList.includes(this.setting.formEnCode)) {
|
||||
this.dataForm.fileJson = !!this.fileList.length ? JSON.stringify(this.fileList) : ''
|
||||
}
|
||||
if (!!this.checkChildRule()) return this.$u.toast(`${this.checkChildRule()}`)
|
||||
if (this.exist && !!this.exist()) return this.$u.toast(`${this.exist()}`)
|
||||
let dataForm = {}
|
||||
if (this.beforeSubmit && typeof this.beforeSubmit === "function") {
|
||||
dataForm = this.beforeSubmit()
|
||||
} else {
|
||||
dataForm = this.dataForm
|
||||
}
|
||||
if (includeList.includes(this.setting.formEnCode)) {
|
||||
dataForm.fileJson = JSON.stringify(this.fileList)
|
||||
}
|
||||
if (eventType === 'save' || eventType === 'submit') {
|
||||
if (this.selfSubmit && typeof this.selfSubmit === "function") {
|
||||
this.selfSubmit(this.dataForm, flowUrgent)
|
||||
return
|
||||
}
|
||||
}
|
||||
this.$emit('eventReceiver', {
|
||||
formData: dataForm,
|
||||
id: this.dataForm.id
|
||||
}, eventType)
|
||||
}
|
||||
})
|
||||
},
|
||||
updateDataRule() {
|
||||
let newRules = {}
|
||||
for (let i = 0; i < this.setting.formOperates.length; i++) {
|
||||
const item = this.setting.formOperates[i]
|
||||
if (item.required) {
|
||||
this.$set(this.requiredList, item.id, item.required)
|
||||
if (item.jnpfKey != 'rate' && item.jnpfKey != 'slider') this.requiredObj.push(item)
|
||||
}
|
||||
const newRulesItem = {
|
||||
required: item.required || false,
|
||||
message: item.name + '不能为空',
|
||||
trigger: item.trigger || ['blur', 'change'],
|
||||
type: ''
|
||||
}
|
||||
const numList = ['inputNumber', 'datePicker', 'switch', 'rate', 'slider']
|
||||
if (item.dataType === 'array') newRulesItem.type = item.dataType
|
||||
if (numList.includes(item.jnpfKey)) newRulesItem.type = 'number'
|
||||
if (['relationForm', 'popupSelect'].includes(item.jnpfKey)) {
|
||||
newRulesItem.type = 'any',
|
||||
newRulesItem.validator = (rule, value, callback) => {
|
||||
if (value || value === 0) {
|
||||
callback();
|
||||
} else {
|
||||
callback(new Error(item.name + '不能为空'));
|
||||
}
|
||||
}
|
||||
}
|
||||
if (!this.rules.hasOwnProperty(item.id)) {
|
||||
if (item.required) this.$set(newRules, item.id, [newRulesItem])
|
||||
} else {
|
||||
let withoutRequiredItem = true
|
||||
for (let i = 0; i < this.rules[item.id].length; i++) {
|
||||
if (this.rules[item.id][i].hasOwnProperty('required')) {
|
||||
this.rules[item.id][i].required = item.required || false
|
||||
withoutRequiredItem = false
|
||||
}
|
||||
}
|
||||
if (withoutRequiredItem && item.required) this.rules[item.id].push(newRulesItem)
|
||||
}
|
||||
}
|
||||
this.rules = {
|
||||
...this.rules,
|
||||
...newRules
|
||||
}
|
||||
this.$refs.dataForm.setRules(this.rules)
|
||||
},
|
||||
/* 可见 */
|
||||
judgeShow(id) {
|
||||
if (this.setting.opType == 4) return true
|
||||
if (!this.setting.formOperates || !this.setting.formOperates.length) return true
|
||||
let arr = this.setting.formOperates.filter(o => o.id === id) || []
|
||||
if (!arr.length) return true
|
||||
let item = arr[0]
|
||||
return item.read
|
||||
},
|
||||
/* 可写 */
|
||||
judgeWrite(id) {
|
||||
if (this.setting.readonly) return true
|
||||
if (!this.setting.formOperates || !this.setting.formOperates.length) return false
|
||||
let arr = this.setting.formOperates.filter(o => o.id === id) || []
|
||||
if (!arr.length) return true
|
||||
let item = arr[0]
|
||||
return !item.write
|
||||
}
|
||||
}
|
||||
}
|
||||
70
pages/workFlow/workFlowForm/revokeApply/index.vue
Normal file
70
pages/workFlow/workFlowForm/revokeApply/index.vue
Normal file
@@ -0,0 +1,70 @@
|
||||
<template>
|
||||
<view class="jnpf-wrap jnpf-wrap-workflow">
|
||||
<u-form :model="dataForm" ref="dataForm" :errorType="['toast']" label-position="left" label-width="150"
|
||||
label-align="left">
|
||||
<view class="u-p-l-20 u-p-r-20 form-item-box">
|
||||
<u-form-item label="审批编号" prop="billRule">
|
||||
<u-input v-model="dataForm.billRule" placeholder="审批编号" disabled input-align="right"></u-input>
|
||||
</u-form-item>
|
||||
<u-form-item label="提交日期" prop="creatorTime">
|
||||
<JnpfDatePicker v-model="dataForm.creatorTime" placeholder="请输入提交日期" disabled />
|
||||
</u-form-item>
|
||||
<u-form-item label="撤销理由" prop="handleOpinion">
|
||||
<u-input v-model="dataForm.handleOpinion" placeholder="请输入撤销理由" type="textarea" disabled
|
||||
input-align="right"></u-input>
|
||||
</u-form-item>
|
||||
<u-form-item label="关联流程" prop="revokeFlow">
|
||||
<view class="jnpf-link" @click="openRevokeFlow()">
|
||||
<text>{{dataForm.revokeTaskName}}</text>
|
||||
</view>
|
||||
</u-form-item>
|
||||
</view>
|
||||
</u-form>
|
||||
</view>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import comMixin from '../mixin'
|
||||
import {
|
||||
FlowTask
|
||||
} from '@/api/workFlow/flowBefore'
|
||||
export default {
|
||||
name: 'revoke',
|
||||
mixins: [comMixin],
|
||||
data() {
|
||||
return {
|
||||
dataForm: {
|
||||
billRule: '',
|
||||
creatorTime: '',
|
||||
handleOpinion: '',
|
||||
revokeTaskId: '',
|
||||
revokeTaskName: ''
|
||||
}
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
/* 打开关联流程 */
|
||||
openRevokeFlow() {
|
||||
const query = {
|
||||
opType: 5,
|
||||
id: this.dataForm.revokeTaskId
|
||||
};
|
||||
uni.navigateTo({
|
||||
url: '/pages/workFlow/flowBefore/revokeForm?config=' + this.jnpf.base64.encode(JSON.stringify(
|
||||
query))
|
||||
})
|
||||
},
|
||||
selfInit(data) {
|
||||
this.dataForm.flowTitle = this.userInfo.userName + "的撤销申请表"
|
||||
}
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
||||
<style>
|
||||
.jnpf-link {
|
||||
width: 100%;
|
||||
color: #1890ff;
|
||||
text-align: right;
|
||||
}
|
||||
</style>
|
||||
265
pages/workFlow/workFlowForm/salesOrder/index.vue
Normal file
265
pages/workFlow/workFlowForm/salesOrder/index.vue
Normal file
@@ -0,0 +1,265 @@
|
||||
<template>
|
||||
<view class="jnpf-wrap jnpf-wrap-workflow">
|
||||
<u-form :model="dataForm" :rules="rules" ref="dataForm" :errorType="['toast']" label-position="left"
|
||||
label-width="150" label-align="left">
|
||||
<view class="u-p-l-20 u-p-r-20 form-item-box">
|
||||
<u-form-item label="流程标题" prop="flowTitle" :required="requiredList.flowTitle"
|
||||
v-if="judgeShow('flowTitle')">
|
||||
<u-input v-model="dataForm.flowTitle" placeholder="流程标题" :disabled="judgeWrite('flowTitle')"
|
||||
input-align="right"></u-input>
|
||||
</u-form-item>
|
||||
<u-form-item label="流程编码" prop="billNo" v-if="judgeShow('billNo')" :required="requiredList.billNo">
|
||||
<u-input v-model="dataForm.billNo" placeholder="流程编码" disabled input-align="right"></u-input>
|
||||
</u-form-item>
|
||||
</view>
|
||||
<view class="jnpf-card">
|
||||
<view class="u-p-l-20 u-p-r-20 form-item-box">
|
||||
<u-form-item label="客户名称" prop="customerName" v-if="judgeShow('customerName')"
|
||||
:required="requiredList.customerName">
|
||||
<u-input v-model="dataForm.customerName" placeholder="请输入客户名称"
|
||||
:disabled="judgeWrite('customerName')" input-align="right"></u-input>
|
||||
</u-form-item>
|
||||
<u-form-item label="联系人员" prop="contacts" v-if="judgeShow('contacts')"
|
||||
:required="requiredList.contacts">
|
||||
<u-input v-model="dataForm.contacts" placeholder="请输入联系人员" :disabled="judgeWrite('contacts')"
|
||||
input-align="right">
|
||||
</u-input>
|
||||
</u-form-item>
|
||||
<u-form-item label="开单日期" prop="salesDate" v-if="judgeShow('salesDate')"
|
||||
:required="requiredList.salesDate">
|
||||
<JnpfDatePicker type="datetime" v-model="dataForm.salesDate" placeholder="请输入开单日期"
|
||||
:disabled="judgeWrite('salesDate')" />
|
||||
</u-form-item>
|
||||
<u-form-item label="联系电话" prop="contactPhone" v-if="judgeShow('contactPhone')"
|
||||
:required="requiredList.contactPhone">
|
||||
<u-input v-model="dataForm.contactPhone" placeholder="请输入联系电话"
|
||||
:disabled="judgeWrite('contactPhone')" input-align="right"></u-input>
|
||||
</u-form-item>
|
||||
<u-form-item label="客户地址" prop="customerAddres" v-if="judgeShow('customerAddres')"
|
||||
:required="requiredList.customerAddres">
|
||||
<u-input v-model="dataForm.customerAddres" placeholder="输入送客户地址"
|
||||
:disabled="judgeWrite('customerAddres')" input-align="right"></u-input>
|
||||
</u-form-item>
|
||||
<u-form-item label="业务人员" prop="salesman" v-if="judgeShow('salesman')"
|
||||
:required="requiredList.salesman">
|
||||
<u-input v-model="dataForm.salesman" placeholder="输入业务人员" :disabled="judgeWrite('salesman')"
|
||||
input-align="right">
|
||||
</u-input>
|
||||
</u-form-item>
|
||||
<u-form-item label="发票编号" prop="ticketNum" v-if="judgeShow('ticketNum')"
|
||||
:required="requiredList.ticketNum">
|
||||
<u-input v-model="dataForm.ticketNum" placeholder="输入发票编号" :disabled="judgeWrite('ticketNum')"
|
||||
input-align="right">
|
||||
</u-input>
|
||||
</u-form-item>
|
||||
<u-form-item label="发票类型" prop="invoiceType" v-if="judgeShow('invoiceType')"
|
||||
:required="requiredList.invoiceType">
|
||||
<JnpfSelect v-model="dataForm.invoiceType" placeholder="请选择发票类型" :options="invoiceTypeList"
|
||||
:disabled="judgeWrite('invoiceType')" />
|
||||
</u-form-item>
|
||||
<u-form-item label="付款方式" prop="paymentMethod" v-if="judgeShow('paymentMethod')"
|
||||
:required="requiredList.paymentMethod">
|
||||
<u-input v-model="dataForm.paymentMethod" placeholder="请输入付款方式" input-align="right"
|
||||
:disabled="judgeWrite('paymentMethod')">
|
||||
</u-input>
|
||||
</u-form-item>
|
||||
<u-form-item label="付款金额" prop="paymentMoney" v-if="judgeShow('paymentMoney')"
|
||||
:required="requiredList.paymentMoney">
|
||||
<u-input v-model="dataForm.paymentMoney" placeholder="输入付款金额"
|
||||
:disabled="judgeWrite('paymentMoney')" input-align="right"></u-input>
|
||||
</u-form-item>
|
||||
<!-- #ifndef APP-HARMONY -->
|
||||
<u-form-item label="相关附件" prop="fileJson" v-if="judgeShow('fileJson')"
|
||||
:required="requiredList.fileJson">
|
||||
<JnpfUploadFile v-model="fileList" :disabled="judgeWrite('fileJson')" />
|
||||
</u-form-item>
|
||||
<!-- #endif -->
|
||||
<!-- #ifdef APP-HARMONY -->
|
||||
<u-form-item label="相关附件" prop="fileJson" v-if="judgeShow('fileJson')"
|
||||
:required="requiredList.fileJson">
|
||||
<JnpfUploadFileH v-model="fileList" :disabled="judgeWrite('fileJson')" />
|
||||
</u-form-item>
|
||||
<!-- #endif -->
|
||||
<u-form-item label="开单备注" prop="description" v-if="judgeShow('description')"
|
||||
:required="requiredList.description">
|
||||
<u-input v-model="dataForm.description" placeholder="输入开单备注" type="textarea"
|
||||
:disabled="judgeWrite('description')" input-align="right"></u-input>
|
||||
</u-form-item>
|
||||
</view>
|
||||
</view>
|
||||
<view class="jnpf-table" v-if="judgeShow('entryList')">
|
||||
<view class="jnpf-table-item-title u-flex u-row-between">
|
||||
<text class="jnpf-table-item-title-num">销售明细</text>
|
||||
</view>
|
||||
<view class="jnpf-table-item" v-for="(item,i) in dataForm.entryList" :key="i">
|
||||
<view class="jnpf-table-item-title u-flex u-row-between">
|
||||
<text class="jnpf-table-item-title-num">({{i+1}})</text>
|
||||
<view class="jnpf-table-delete-btn" v-if="!judgeWrite('entryList')" @click="delItem(i)">
|
||||
删除
|
||||
</view>
|
||||
</view>
|
||||
<view class="u-p-l-20 u-p-r-20 form-item-box">
|
||||
<u-form-item label="商品名称" prop="dataForm.entryList[i].goodsName"
|
||||
v-if="judgeShow('entryList-goodsName')" :required="requiredList['entryList-goodsName']">
|
||||
<u-input v-model="dataForm.entryList[i].goodsName" placeholder="请输入商品名称"
|
||||
:disabled="judgeWrite('entryList-goodsName')" input-align="right"></u-input>
|
||||
</u-form-item>
|
||||
<u-form-item label="规格类型" prop="dataForm.entryList[i].specifications"
|
||||
v-if="judgeShow('entryList-specifications')"
|
||||
:required="requiredList['entryList-specifications']">
|
||||
<u-input v-model="dataForm.entryList[i].specifications" placeholder="请输入规格类型"
|
||||
:disabled="judgeWrite('entryList-specifications')" input-align="right"></u-input>
|
||||
</u-form-item>
|
||||
<u-form-item label="单位" prop="dataForm.entryList[i].unit" v-if="judgeShow('entryList-unit')"
|
||||
:required="requiredList['entryList-unit']">
|
||||
<u-input v-model="dataForm.entryList[i].unit" placeholder="请输入单位"
|
||||
:disabled="judgeWrite('entryList-unit')" input-align="right"></u-input>
|
||||
</u-form-item>
|
||||
<u-form-item label="数量" prop="dataForm.entryList[i].qty" v-if="judgeShow('entryList-qty')"
|
||||
:required="requiredList['entryList-qty']">
|
||||
<u-input v-model="dataForm.entryList[i].qty" placeholder="请输入数量" type="number"
|
||||
input-align="right" @input="count(dataForm.entryList[i])"
|
||||
:disabled="judgeWrite('entryList-qty')"></u-input>
|
||||
</u-form-item>
|
||||
<u-form-item label="单价" prop="dataForm.entryList[i].price" v-if="judgeShow('entryList-price')"
|
||||
:required="requiredList['entryList-price']">
|
||||
<u-input v-model="dataForm.entryList[i].price" placeholder="请输入单价" type="number"
|
||||
@input="count(dataForm.entryList[i])" input-align="right"
|
||||
:disabled="judgeWrite('entryList-price')"></u-input>
|
||||
</u-form-item>
|
||||
<u-form-item label="金额" prop="dataForm.entryList[i].amount" v-if="judgeShow('entryList-amount')"
|
||||
:required="requiredList['entryList-amount']">
|
||||
<u-input v-model="dataForm.entryList[i].amount" type="number" placeholder="请输入金额" disabled
|
||||
input-align="right"></u-input>
|
||||
</u-form-item>
|
||||
<u-form-item label="备注" prop="dataForm.entryList[i].description"
|
||||
v-if="judgeShow('entryList-description')" :required="requiredList['entryList-description']">
|
||||
<u-input v-model="dataForm.entryList[i].description" placeholder="请输入备注" type="textarea"
|
||||
:disabled="judgeWrite('entryList-description')" input-align="right"></u-input>
|
||||
</u-form-item>
|
||||
</view>
|
||||
</view>
|
||||
<view class="jnpf-table-addBtn" @click="addItem" v-if="!judgeWrite('entryList')">
|
||||
<u-icon name="plus" color="#2979ff"></u-icon>添加
|
||||
</view>
|
||||
</view>
|
||||
</u-form>
|
||||
</view>
|
||||
</template>
|
||||
<script>
|
||||
import comMixin from '../mixin'
|
||||
export default {
|
||||
name: 'SalesOrder',
|
||||
mixins: [comMixin],
|
||||
data() {
|
||||
return {
|
||||
billEnCode: 'WF_SalesOrderNo',
|
||||
dataForm: {
|
||||
flowTitle: '',
|
||||
billNo: '',
|
||||
flowUrgent: 1,
|
||||
customerAddres: '',
|
||||
contactPhone: '',
|
||||
description: '',
|
||||
fileJson: '',
|
||||
salesman: '',
|
||||
paymentMoney: undefined,
|
||||
paymentMethod: '',
|
||||
invoiceType: '',
|
||||
salesDate: undefined,
|
||||
contacts: '',
|
||||
customerName: '',
|
||||
entryList: []
|
||||
},
|
||||
invoiceTypeList: [{
|
||||
fullName: "普通发票",
|
||||
id: "普通发票",
|
||||
checked: false
|
||||
},
|
||||
{
|
||||
fullName: "专业发票",
|
||||
id: "专业发票",
|
||||
checked: false
|
||||
},
|
||||
{
|
||||
fullName: "其他",
|
||||
id: "其他",
|
||||
checked: false
|
||||
}
|
||||
],
|
||||
rules: {
|
||||
flowTitle: [{
|
||||
required: true,
|
||||
message: '流程标题不能为空',
|
||||
trigger: 'blur'
|
||||
}],
|
||||
flowUrgent: [{
|
||||
required: true,
|
||||
message: '紧急程度不能为空',
|
||||
trigger: 'change',
|
||||
type: 'number'
|
||||
}],
|
||||
billNo: [{
|
||||
required: true,
|
||||
message: '流程编码不能为空',
|
||||
trigger: 'blur',
|
||||
}],
|
||||
salesDate: [{
|
||||
required: true,
|
||||
message: '开单日期不能为空',
|
||||
trigger: 'change',
|
||||
type: 'number'
|
||||
}]
|
||||
},
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
selfInit(data) {
|
||||
this.dataForm.flowTitle = this.userInfo.userName + "的销售订单";
|
||||
},
|
||||
/* 添加子表 */
|
||||
addItem() {
|
||||
const item = {
|
||||
goodsName: '',
|
||||
specifications: '',
|
||||
unit: '',
|
||||
qty: undefined,
|
||||
price: undefined,
|
||||
amount: undefined,
|
||||
description: ''
|
||||
}
|
||||
this.dataForm.entryList.push(item)
|
||||
},
|
||||
/* 删除子表 */
|
||||
delItem(index) {
|
||||
uni.showModal({
|
||||
title: '提示',
|
||||
content: '确定删除销售明细(' + (index + 1) + ')?',
|
||||
success: (res) => {
|
||||
if (res.confirm) {
|
||||
this.dataForm.entryList.splice(index, 1)
|
||||
}
|
||||
}
|
||||
})
|
||||
},
|
||||
|
||||
/* 计算价格 */
|
||||
count(row) {
|
||||
//金额 = 数量*单价
|
||||
row.amount = this.jnpf.toDecimal(parseFloat(row.price) * parseFloat(row.qty))
|
||||
//折扣价 = (单价*折扣)
|
||||
var discountPrice = row.price * (row.discount / 100);
|
||||
//实际单价 = 折扣价 * (1 + (税率 / 100))
|
||||
row.actualPrice = this.jnpf.toDecimal(discountPrice * (1 + (row.cess / 100)));
|
||||
//实际金额
|
||||
row.actualAmount = this.jnpf.toDecimal(parseFloat(row.actualPrice) * parseFloat(row
|
||||
.qty))
|
||||
this.$forceUpdate()
|
||||
},
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
||||
<style>
|
||||
|
||||
</style>
|
||||
Reference in New Issue
Block a user