123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242 |
- <template>
- <view class="problemHandleItem">
- <view class="text-black font-weight-bold font-md">
- 问题{{indexNo}}
- </view>
- <u--form labelPosition="left" :model="model" labelWidth="80">
- <u-form-item label="问题名称:" :required="!onlyFlag" prop="questionName">
- <u--input v-model="model.questionName" :readonly="onlyFlag" :border="onlyFlag ? 'none' : 'surround'"
- :placeholder="!onlyFlag ? '请填写问题名称' : ''">
- </u--input>
- </u-form-item>
- <view class="error-tip" v-if="!model.questionName && errorTip">
- 请填写问题名称
- </view>
- <u-form-item label="问题类型:" :required="!onlyFlag" prop="questionTypeName">
- <song-data-picker style="width: 100%;" @click.native="songClick" :readonly="onlyFlag" :clearIcon="false"
- :localdata="questionTypeColumn" :placeholder="!onlyFlag ? '请选择问题类型' : ''" popup-title="请选择问题类型"
- @nodeclick="onnodeclick">
- <slot name="data">
- <view class="d-flex j-sb a-center border p-1 rounded8" style="border-color: rgb(218, 219, 222, 0.5);">
- <view class="text-secondary">
- <text v-show="model.questionTypeName">{{model.questionTypeName}}</text>
- <text v-show="!model.questionTypeName" style="color: rgb(192, 196, 204);" class="font-md">请选择问题类型</text>
- </view>
- <u-icon v-if="!onlyFlag" name="arrow-down" color="#303133" size="15">
- </u-icon>
- </view>
- </slot>
- </song-data-picker>
- </u-form-item>
- <view class="error-tip" v-if="!model.questionTypeName && errorTip">
- 请选择问题类型
- </view>
- <block
- v-if="model.questionType == 'YG' || model.questionType == 'ZJ' || model.questionType == 'YDI' || model.questionType == 'CF'">
- <u-form-item label="缺口数:" :required="!onlyFlag" prop="gaps">
- <view class="d-flex a-center" v-if="model.questionType == 'YG'">
- <u--input v-model="model.gaps" v-if="!onlyFlag" type="number" :readonly="onlyFlag"
- :border="onlyFlag ? 'none' : 'surround'" :placeholder="!onlyFlag ? '请输入缺口数' : ''">
- </u--input>
- <text class="ml-1"><text v-if="onlyFlag" class="pr">{{model.gaps}}</text>人</text>
- </view>
- <view class="d-flex a-center" v-if="model.questionType == 'ZJ'">
- <u--input v-model="model.gaps" v-if="!onlyFlag" type="number" :readonly="onlyFlag"
- :border="onlyFlag ? 'none' : 'surround'" :placeholder="!onlyFlag ? '请输入缺口数' : ''">
- </u--input>
- <text class="ml-1"><text v-if="onlyFlag" class="pr">{{model.gaps}}</text>万元</text>
- </view>
- <view class="d-flex a-center" v-if="model.questionType == 'YDI'">
- <u--input v-model="model.gaps" v-if="!onlyFlag" type="number" :readonly="onlyFlag"
- :border="onlyFlag ? 'none' : 'surround'" :placeholder="!onlyFlag ? '请输入缺口数' : ''">
- </u--input>
- <text class="ml-1"><text class="pr" v-if="onlyFlag">{{model.gaps}}</text>亩</text>
- </view>
- <view class="d-flex a-center" v-if="model.questionType == 'CF'">
- <u--input v-model="model.gaps" v-if="!onlyFlag" type="number" :readonly="onlyFlag"
- :border="onlyFlag ? 'none' : 'surround'" :placeholder="!onlyFlag ? '请输入缺口数' : ''">
- </u--input>
- <text class="ml-1"><text class="pr" v-if="onlyFlag">{{model.gaps}}</text></text>
- </view>
- </u-form-item>
- <view class="error-tip" v-if="!model.gaps && errorTip">
- 请输入缺口数
- </view>
- </block>
- <u-form-item label="问题描述:" :required="!onlyFlag" prop="questionDescription" class="questionDesc">
- <u--textarea v-model="model.questionDescription" :disabled="onlyFlag" maxlength='-1'
- :border="onlyFlag ? 'none' : 'surround'" :placeholder="!onlyFlag ? '请填写问题描述' : ''">
- </u--textarea>
- </u-form-item>
- <view class="error-tip" v-if="!model.questionDescription && errorTip">
- 请填写问题描述
- </view>
- <u-form-item label="附件:" prop="files" v-if="model.fileList&&model.fileList.length">
- <view class="d-flex flex-wrap">
- <view class="w-100 d-flex" v-for="(item,index) in model.fileList" :key="index">
- <u--text type="primary" :text="item.name" @tap="downloadFile(index)"></u--text>
- </view>
- </view>
- </u-form-item>
- </u--form>
- <slot></slot>
- </view>
- </template>
- <script>
- import {Global} from "@/common/Global.js";
- import {enterpriseVisit} from "@/api/dzf/enterpriseVisit.js";
- import {Store} from "@/common/store.js";
- import {formatDate} from "@/common/util2.js"
- export default {
- props: {
- model: {
- type: Object,
- default: () => {}
- },
- readOnlyFlag: {
- type: Boolean,
- default: false
- },
- showErrorTip: {
- type: Boolean,
- default: false
- },
- column: {
- type: Array,
- default: () => []
- },
- dealProgressDict: {
- type: Array,
- default: () => []
- },
- modelIndex: {
- type: Number,
- default: 0
- },
- },
- data() {
- return {
- preTimeShow: false,
- outCharge: false
- }
- },
- computed: {
- onlyFlag() {
- return Boolean(this.readOnlyFlag)
- },
- errorTip() {
- return this.showErrorTip
- },
- questionTypeColumn() {
- const column = (this.column || []).map(ele => {
- const obj = {}
- obj.text = ele.fullName
- obj.value = ele.enCode
- return obj
- })
- return column
- },
- dealProgressColumn() {
- const column = (this.dealProgressDict || []).map(ele => {
- const obj = {}
- obj.text = ele.fullName
- obj.value = ele.enCode
- return obj
- })
- return column
- },
- indexNo() {
- return this.modelIndex + 1
- }
- },
- mounted() {
- const userInfo = Store.getUser() ? JSON.parse(Store.getUser()) : {}
- this.outCharge = userInfo?.roleLevel === '5'
- console.log("this.outCharge:", this.outCharge)
- console.log("this.readOnlyFlag:", this.readOnlyFlag)
- console.log("this.(model.preTime:", this.model)
- },
- methods: {
- downloadFile(index) {
- const downloadLink = Global.baseUrl + this.model.fileList[index].url;
- window.open(downloadLink, '_blank'); //h5直接进行跳转页面打开就可以了
- uni.downloadFile({ //调用uni中的下载方法
- url: Global.baseUrl + this.model.fileList[index].url, //后端返回的完整路径
- success: (res) => {
- console.log(res.tempFilePath, "下载");
- if (res.statusCode === 200) {
- const tempFilePath = res.tempFilePath;
- // 显示文件
- uni.openDocument({
- filePath: tempFilePath,
- success: (res) => {
- console.log(res, '打开文件成功');
- },
- });
- }
- },
- fail: (err) => {
- console.log('下载文件失败', err);
- }
- });
- },
- clearIcon(e) {
- this.$set(this.model, 'preTime', null)
- },
- // 问题类型选择变化操作
- onnodeclick(ele) {
- this.$set(this.model, 'questionTypeName', ele.text)
- this.$set(this.model, 'questionType', ele.value)
- this.model.gaps = ''
- },
- // 问题类型选择变化操作
- ondealprogressclick(ele) {
- this.$set(this.model, 'dealProgressName', ele.text)
- this.$set(this.model, 'dealProgress', ele.value)
- },
- choosePreTime() {
- if (!(this.model.status == '4' && this.outCharge)) return
- this.preTimeShow = true;
- uni.hideKeyboard()
- },
- preTimeConfirm(e) {
- this.preTimeShow = false
- console.log("preTime:", e.value)
- this.$set(this.model, 'preTime', formatDate(e.value, 'yyyy-MM-dd'))
- },
- // 问题类型--->点击
- songClick() {
- uni.hideKeyboard()
- },
- // 问题类型--->点击
- dealProgressClick() {
- uni.hideKeyboard()
- },
- // 判断是否有必填项为填写
- isRequired() {
- const query = uni.createSelectorQuery().in(this);
- let dataLength = 0
- query.selectAll('.error-tip').boundingClientRect(data => {
- dataLength = data.length
- if (dataLength) {
- uni.$u.toast('请填写完整问题诉求')
- }
- }).exec();
- return dataLength
- }
- }
- }
- </script>
- <style lang="scss" scoped>
- .error-tip {
- font-size: 12px;
- color: #f56c6c;
- margin-left: 160rpx;
- }
- </style>
|