| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322 |
- <!DOCTYPE html>
- <html>
- <head>
- <meta charset="UTF-8">
- <meta name="viewport"
- content="width=device-width, initial-scale=1, maximum-scale=1, minimum-scale=1, user-scalable=no" />
- <link rel="stylesheet" href="./resource/vantIndex.css" />
- <link rel="stylesheet" href="./vue-form-making/index.css">
- </head>
- <body>
- <style>
- :root:root {
- --van-nav-bar-background: rgb(21, 122, 44);
- --van-nav-bar-title-text-color: rgb(255, 255, 255);
- --van-nav-bar-icon-color: rgb(255, 255, 255);
- }
- .blank_adopzrdd {
- display: flex;
- align-items: center;
- margin-bottom: 10px;
- }
- .blank_adopzrdd >span {
- display: inline-block;
- width: 80px;
- }
- .van-nav-bar--fixed {
- top: 44px;
- }
- .seal-card { background: #fff; border-radius: 8px; margin-bottom: 10px; overflow: hidden; box-shadow: 0 1px 4px rgba(0,0,0,.08); }
- .seal-card-header { display: flex; align-items: center; padding: 10px 12px; background: #f7f8fa; border-bottom: 1px solid #ebedf0; }
- .seal-card-index { font-size: 14px; font-weight: bold; color: #157A2C; margin-right: 8px; }
- .seal-card-type { flex: 1; font-size: 15px; font-weight: bold; color: #323233; }
- .seal-card-actions { display: flex; gap: 6px; flex-shrink: 0; }
- .seal-card-body { padding: 8px 12px; }
- .seal-card-row { display: flex; padding: 6px 0; font-size: 13px; }
- .seal-card-label { width: 42px; color: #969799; flex-shrink: 0; }
- .seal-card-value { flex: 1; color: #323233; word-break: break-all; }
- </style>
- <div id="app">
- <van-nav-bar height='100rpx' @click-left="onClickLeft"
- style="background-color: rgb(21, 122, 44);color: rgb(255, 255, 255);" :title="title" left-arrow
- :safe-area-inset-top='true' :placeholder='true' :fixed='true'></van-nav-bar>
- <fm-generate-vant-form style='height: 75vh !important;overflow: auto;margin-top:44px' v-if='isFlag'
- :data="jsonData" :value="form.valueJson" ref="generateForm" :edit='false' @on-upload-local="handleUploadLocal">
- <template v-slot:blank_adopzrdd="scope">
- <div style="width: 100%;">
- <div v-for="(item, index) in scope.model.blank_adopzrdd" :key="index" style="width: 100%;">
- <div class="blank_adopzrdd">
- <span>{{ index + 1 }}报销事项:</span>
- <van-field rows="1" v-model="scope.model.blank_adopzrdd[index].remark" type="textarea"
- autosize style="width: calc(100% - 80px)"></van-field>
- </div>
- <div class="blank_adopzrdd">
- <span>
- 金额:</span>
- <van-field v-model="scope.model.blank_adopzrdd[index].price" type="number"
- style="width: calc(100% - 80px)"></van-field>
- </div>
- <div class="blank_adopzrdd">
- <span>
- <van-icon @click="delNewRow('blank_adopzrdd', index)" name="delete"
- style="color: #f56c6c;"></van-icon>
- 附件:</span>
- <template v-if="item.files && item.files.length">
- <van-badge :content="item.files.length">
- <van-button type="primary" size="mini" @click="handleUploadLocal('blank_adopzrdd', index)">查看附件</van-button>
- </van-badge>
- </template>
- <!-- <van-button v-else type="primary" size="mini" @click="handleUploadLocal('blank_adopzrdd', index)">上传附件</van-button> -->
- </div>
- </div>
- </div>
- </template>
- <template v-slot:blank_use_seal="scope">
- <div style="width: 100%;">
- <!-- 列表项 -->
- <view v-for="(item, index) in scope.model.blank_use_seal" :key="index" class="seal-card">
- <div class="seal-card-header">
- <span class="seal-card-index">{{ index + 1 }}.</span>
- <span class="seal-card-type">{{ item.useSealType || '未选择类型' }}</span>
- <!-- <div class="seal-card-actions">
- <van-button size="mini" type="primary" plain @click="openSealEditDialog(scope, 'edit', index)">编辑</van-button>
- <van-button size="mini" type="danger" plain @click="delNewRow('blank_use_seal', index)">删除</van-button>
- </div> -->
- </div>
- <div class="seal-card-body">
- <div class="seal-card-row">
- <span class="seal-card-label">事由</span>
- <span class="seal-card-value">{{ item.useSealRemark || '未填写' }}</span>
- </div>
- <div class="seal-card-row">
- <span class="seal-card-label">印章</span>
- <span class="seal-card-value">{{ item.useSealName || '未选择' }}</span>
- </div>
- </div>
- </view>
- <!-- <van-button type="primary" size="small" block @click="openSealEditDialog(scope, 'add', scope.model.blank_use_seal?scope.model.blank_use_seal.length:0)" style="margin-bottom:10px">+ 添加印章使用</van-button> -->
- </div>
- </template>
- <template v-slot:blank_use_qualification="scope">
- <div style="width: 100%;">
- <view v-for="(item, index) in scope.model.blank_use_qualification" :key="index" class="seal-card">
- <div class="seal-card-header">
- <span class="seal-card-index">{{ index + 1 }}.</span>
- <span class="seal-card-type">{{ item.useQualificationType || '未选择类型' }}</span>
- <!-- <div class="seal-card-actions">
- <van-button size="mini" type="primary" plain @click="openQualEditDialog(scope, 'edit', index)">编辑</van-button>
- <van-button size="mini" type="danger" plain @click="delNewRow('blank_use_qualification', index)">删除</van-button>
- </div> -->
- </div>
- <div class="seal-card-body">
- <div class="seal-card-row">
- <span class="seal-card-label">事由</span>
- <span class="seal-card-value">{{ item.useQualificationRemark || '未填写' }}</span>
- </div>
- <div class="seal-card-row">
- <span class="seal-card-label">名称</span>
- <span class="seal-card-value">{{ item.useQualificationName || '未选择' }}</span>
- </div>
- </div>
- </view>
- <!-- <van-button type="primary" size="small" block @click="openQualEditDialog(scope, 'add', scope.model.blank_use_qualification?scope.model.blank_use_qualification.length:0)" style="margin-bottom:10px">+ 添加资质使用</van-button> -->
- </div>
- </template>
- </fm-generate-vant-form>
- <div v-if="type!='view'" style='position: fixed; bottom: 0;background: #f9fafb;width:100%;height:20%'>
- <van-form label-width='30px'>
- <van-cell-group inset>
- <van-field style="background: #f9fafb;" type="textarea" v-model="form.reason" label="意见"
- placeholder="" rows="2" :autosize='{maxHeight: 50}' show-word-limit />
- </van-cell-group>
- </van-form>
- <div
- style="display: flex;justify-content: space-between; padding: 0px 30px; width: 100%; height: 80px;">
- <van-button style="width:48%" type="primary" :loading="loading" @click="handleAudit(1)">通过
- </van-button>
- <van-button style="width:48%" type="danger" :loading="loading" @click="handleAudit(0)">驳回
- </van-button>
- </div>
- </div>
- </div>
- <script src="./resource/vue.global.prod.js"></script>
- <script src="./resource/vant.min.js"></script>
- <script src="./resource/axios.min.js"></script>
- <script src="./resource/uni.webview.js"></script>
- <script src="./vue-form-making/form-making-v3.umd.js"></script>
- <script>
- let EnvObj = {}
- uni.getEnv(function(res) {
- EnvObj = res;
- console.log('当前环境:' + JSON.stringify(res));
- });
- Vue.createApp({
- data() {
- return {
- isFlag: false,
- isEdit: true,
- type: '',
- jsonData: {},
- editData: {},
- form: {},
- headers: {},
- APIUrl: '',
- title: '',
- type: 'view',
- selectFilesField: null,
- selectFilesRowIndex: null,
- }
- },
- created() {
- let _this = this
- window.x_selectFiles = async (e) => {
- let data = JSON.parse(e)
- if (_this.$refs.generateForm) {
- if (_this.selectFilesRowIndex != null && _this.selectFilesField) {
- let formData = await _this.$refs.generateForm.getData(false);
- var arr = formData[_this.selectFilesField] || []
- var row = arr[_this.selectFilesRowIndex]
- if (row) {
- row.files = data.files || []
- _this.$refs.generateForm.setData({ [_this.selectFilesField]: arr })
- }
- _this.selectFilesRowIndex = null
- } else {
- _this.$refs.generateForm.setData({ [data.field]: data.files })
- }
- }
- }
- this.headers = this.getQueryParams('headers');
- let params = this.getQueryParams('params');
- this.APIUrl = this.headers.serverInfo || 'http://192.168.1.105:18086'
- this.title = params.type == 'view' ? '查看' : '审核'
- this.type = params.type || 'view'
- axios({
- method: 'get',
- url: this.APIUrl + `/bpm/process-instance/get?id=${params.processInstanceId}`,
- headers: this.headers,
- }).then((res) => {
- console.log(res)
- if (res.data.code != '-1') {
- this.form = res.data.data
- this.form.submitId = params.id
- this.jsonData = JSON.parse(res.data.data.formJson.makingJson);
- this.jsonData.list.forEach(item => {
- item.options.headers = [{
- key: 'Authorization',
- value: this.headers.Authorization
- }]
- if (item.type == "deptAndUserCascader") {
- item.type = 'cascader'
- }
- if (item.type == "deptCascader") {
- item.type = 'cascader'
- }
- if (item.type == "userSelect") {
- item.type = 'select'
- }
- if (item.type == "imgupload") {
- this.form.valueJson[item.model].length && this.form.valueJson[item
- .model].forEach(
- item => {
- //item.objectUrl = this.APIUrl +'/kd-aiot' + item.storePath
- item.objectUrl = item.url
- })
- }
- })
- this.jsonData.config.dataSource && this.jsonData.config.dataSource.forEach(item => {
- item.headers = {
- Authorization: this.headers.Authorization
- }
- item.url = item.url && item.url.replace('/api', this.APIUrl)
- })
- this.isFlag = true
- }
- });
- },
- methods: {
- async handleUploadLocal (model, rowIndex) {
- console.log('上传本地文件按钮被点击,字段模型:', model, '行索引:', rowIndex)
- let data = await this.$refs.generateForm.getData(false);
- let files = rowIndex != null && data[model] && data[model][rowIndex] ? (data[model][rowIndex].files || []) : (data[model] || [])
- this.selectFilesField = model
- this.selectFilesRowIndex = rowIndex != null ? rowIndex : null
- uni.postMessage({
- data: {
- type: 'selectFiles',
- field: model,
- files: files,
- isEdit: 'view'
- }
- });
- },
- getQueryParams(queryName) {
- const urlSearchParams = new URLSearchParams(window.location.search);
- const query = urlSearchParams.get(queryName);
- return JSON.parse(query);
- },
- async handleAudit(status) {
- await this._approveTaskWithVariables(status);
- },
- async _approveTaskWithVariables(status) {
- this.loading = true;
- let variables = {
- pass: !!status,
- ...this.form.formVariables
- };
- if (!this.form.reason) this.form.reason = !!status ? '通过' : '驳回'
- let API = !!status ? this.APIUrl + '/bpm/task/approveTaskWithVariables' :
- this.APIUrl + '/bpm/task/reject'
- axios({
- method: 'put',
- url: API,
- headers: this.headers,
- data: {
- id: this.form.submitId,
- reason: this.form.reason,
- variables
- }
- }).then((res) => {
- this.loading = false;
- if (res.data.code != '-1') {
- let params = {
- status,
- title: status === 0 ? '驳回' : ''
- }
- vant.showNotify({
- type: 'success',
- message: `审批${params.title}成功!`,
- duration: 1000,
- });
- setTimeout(() => {
- this.onClickLeft()
- }, 1000)
- }
- }).catch(() => {
- this.loading = false;
- });
- },
- onClickLeft() {
- uni.navigateBack({
- delta: 1
- });
- }
- }
- }).use(vant).use(FormMakingV3).mount('#app')
- </script>
- </body>
- </html>
|