同步3.0
This commit is contained in:
		| @@ -1,155 +1,134 @@ | ||||
| <template> | ||||
|   <div class="add-form" v-if="pageShow"> | ||||
|     <div v-show="!isShowConfig"> | ||||
|       <div class="header-pic"> | ||||
|         <image v-if="form.headPicture" :src="form.headPicture"/> | ||||
|         <span @click="upload">更换图片</span> | ||||
|       </div> | ||||
|       <div class="form-info"> | ||||
|         <h2>文本选项</h2> | ||||
|         <div class="form-info__wrapper"> | ||||
|     <div class="header-pic"> | ||||
|       <image v-if="form.headPicture" :src="form.headPicture"/> | ||||
|       <span @click="upload">更换图片</span> | ||||
|     </div> | ||||
|     <div class="form-info"> | ||||
|       <h2>文本选项</h2> | ||||
|       <div class="form-info__wrapper"> | ||||
|           <textarea class="title" placeholder="请输入标题 (必填)" :maxlength="30" :auto-height="true" | ||||
|                     v-model="form.title"></textarea> | ||||
|           <textarea | ||||
|               class="content" | ||||
|               border="none" | ||||
|               :clearable="false" | ||||
|               type="textarea" | ||||
|               v-model="form.tableExplain" | ||||
|               placeholder="请输入表单描述 (选填)" | ||||
|               :maxlength="255"> | ||||
|         <textarea | ||||
|             class="content" | ||||
|             border="none" | ||||
|             :clearable="false" | ||||
|             type="textarea" | ||||
|             v-model="form.tableExplain" | ||||
|             placeholder="请输入表单描述 (选填)" | ||||
|             :maxlength="255"> | ||||
|           </textarea> | ||||
|         </div> | ||||
|       </div> | ||||
|       <draggable | ||||
|           class="components-list" | ||||
|           v-model="targetList" | ||||
|           :animation="340" | ||||
|           scroll | ||||
|           element="div" | ||||
|           :options="{ | ||||
|     </div> | ||||
|     <draggable | ||||
|         class="components-list" | ||||
|         v-model="targetList" | ||||
|         :animation="340" | ||||
|         scroll | ||||
|         element="div" | ||||
|         :options="{ | ||||
|           animation: 340, | ||||
|           handle: '.components-item__title' | ||||
|         }" | ||||
|           draggable=".components-item" | ||||
|           :sort="true"> | ||||
|         <div class="components-item" v-for="(item, index) in targetList" :key="index" | ||||
|              @click="toFiledSetting(item, index)"> | ||||
|           <div class="components-item__title"> | ||||
|             <div class="components-item__title--left"> | ||||
|               <em :style="{opacity: item.required ? 1 : 0}">*</em> | ||||
|               <i>{{ index + 1 }}.</i> | ||||
|               <h2>{{ item.label }}</h2> | ||||
|         draggable=".components-item" | ||||
|         :sort="true"> | ||||
|       <div class="components-item" v-for="(item, index) in targetList" :key="index" | ||||
|            @click="toFiledSetting(item, index)"> | ||||
|         <div class="components-item__title"> | ||||
|           <div class="components-item__title--left"> | ||||
|             <em :style="{opacity: item.required ? 1 : 0}">*</em> | ||||
|             <i>{{ index + 1 }}.</i> | ||||
|             <h2>{{ item.label }}</h2> | ||||
|           </div> | ||||
|           <image :src="`${$cdn}askform/sc1.png`" @click.stop="removeComponent(index)" | ||||
|                  @touchstart.stop="removeComponent(index)"/> | ||||
|         </div> | ||||
|         <div class="components-item__filed"> | ||||
|           <template v-if="(item.type === 'radio')"> | ||||
|             <u-radio-group v-model="item.value" wrap> | ||||
|               <u-radio class="u-radio" disabled style="display: block;" v-for="(field, i) in item.options" :key="i"> | ||||
|                 <image :src="field.img[0].url" v-if="field.img.length"/> | ||||
|                 <span>{{ field.label }}</span> | ||||
|               </u-radio> | ||||
|             </u-radio-group> | ||||
|           </template> | ||||
|           <template v-if="(item.type === 'checkbox')"> | ||||
|             <u-checkbox-group v-model="item.value" wrap> | ||||
|               <u-checkbox class="u-checkbox" disabled :name="field.label" v-for="(field, i) in item.options" :key="i"> | ||||
|                 <image :src="field.img[0].url" v-if="field.img.length"/> | ||||
|                 <span>{{ field.label }}</span> | ||||
|               </u-checkbox> | ||||
|             </u-checkbox-group> | ||||
|           </template> | ||||
|           <template v-if="(item.type === 'select')"> | ||||
|             <div class="components-item__select"> | ||||
|               <span>{{ item.placeholder }}</span> | ||||
|               <u-icon name="arrow-down" color="#DEDFDF"/> | ||||
|             </div> | ||||
|             <image :src="`${$cdn}askform/sc1.png`" @click.stop="removeComponent(index)" | ||||
|                    @touchstart.stop="removeComponent(index)"/> | ||||
|           </div> | ||||
|           <div class="components-item__filed"> | ||||
|             <template v-if="(item.type === 'radio')"> | ||||
|               <u-radio-group v-model="item.value" wrap> | ||||
|                 <u-radio class="u-radio" disabled style="display: block;" v-for="(field, i) in item.options" :key="i"> | ||||
|                   <image :src="field.img[0].url" v-if="field.img.length"/> | ||||
|                   <span>{{ field.label }}</span> | ||||
|                 </u-radio> | ||||
|               </u-radio-group> | ||||
|             </template> | ||||
|             <template v-if="(item.type === 'checkbox')"> | ||||
|               <u-checkbox-group v-model="item.value" wrap> | ||||
|                 <u-checkbox class="u-checkbox" disabled :name="field.label" v-for="(field, i) in item.options" :key="i"> | ||||
|                   <image :src="field.img[0].url" v-if="field.img.length"/> | ||||
|                   <span>{{ field.label }}</span> | ||||
|                 </u-checkbox> | ||||
|               </u-checkbox-group> | ||||
|             </template> | ||||
|             <template v-if="(item.type === 'select')"> | ||||
|               <div class="components-item__select"> | ||||
|                 <span>{{ item.placeholder }}</span> | ||||
|                 <u-icon name="arrow-down" color="#DEDFDF"/> | ||||
|               </div> | ||||
|             </template> | ||||
|             <template v-if="(item.type === 'upload')"> | ||||
|               <div class="components-item__select components-item__textarea components-item__upload"> | ||||
|                 <image :src="`${$cdn}askform/upload.png`"/> | ||||
|                 <span>选择图片(10M以内)</span> | ||||
|               </div> | ||||
|             </template> | ||||
|             <template v-if="(item.type === 'input')"> | ||||
|               <div class="components-item__select"> | ||||
|                 <span>{{ item.placeholder }}</span> | ||||
|               </div> | ||||
|             </template> | ||||
|             <template v-if="(item.type === 'textarea')"> | ||||
|               <div class="components-item__select components-item__textarea"> | ||||
|                 <span>{{ item.placeholder }}</span> | ||||
|               </div> | ||||
|             </template> | ||||
|           </div> | ||||
|           </template> | ||||
|           <template v-if="(item.type === 'upload')"> | ||||
|             <div class="components-item__select components-item__textarea components-item__upload"> | ||||
|               <image :src="`${$cdn}askform/upload.png`"/> | ||||
|               <span>选择图片(10M以内)</span> | ||||
|             </div> | ||||
|           </template> | ||||
|           <template v-if="(item.type === 'input')"> | ||||
|             <div class="components-item__select"> | ||||
|               <span>{{ item.placeholder }}</span> | ||||
|             </div> | ||||
|           </template> | ||||
|           <template v-if="(item.type === 'textarea')"> | ||||
|             <div class="components-item__select components-item__textarea"> | ||||
|               <span>{{ item.placeholder }}</span> | ||||
|             </div> | ||||
|           </template> | ||||
|         </div> | ||||
|       </draggable> | ||||
|       <div class="add-form__btn" @click="isShow = true"> | ||||
|         <image :src="`${$cdn}askform/add.png`"/> | ||||
|         <span>添加问题</span> | ||||
|       </div> | ||||
|       <div class="add-form__footer"> | ||||
|         <div class="add-form__footer--item-wrapper"> | ||||
|           <div class="add-form__footer--item" @click="toPreview"> | ||||
|             <image :src="`${$cdn}sass/preview.png`"/> | ||||
|             <span>预览</span> | ||||
|           </div> | ||||
|           <div class="add-form__footer--item" @click="toSetting"> | ||||
|             <image :src="`${$cdn}sass/setting.png`"/> | ||||
|             <span>设置</span> | ||||
|           </div> | ||||
|     </draggable> | ||||
|     <div class="add-form__btn" @click="isShow = true"> | ||||
|       <image :src="`${$cdn}askform/add.png`"/> | ||||
|       <span>添加问题</span> | ||||
|     </div> | ||||
|     <div class="add-form__footer"> | ||||
|       <div class="add-form__footer--item-wrapper"> | ||||
|         <div class="add-form__footer--item" @click="toPreview"> | ||||
|           <image :src="`${$cdn}sass/preview.png`"/> | ||||
|           <span>预览</span> | ||||
|         </div> | ||||
|         <div class="add-form__footer--item" @click="toSetting"> | ||||
|           <image :src="`${$cdn}sass/setting.png`"/> | ||||
|           <span>设置</span> | ||||
|         </div> | ||||
|         <div @click="onConfirm">立即发布</div> | ||||
|       </div> | ||||
|       <u-popup v-model="isShow" :closeable="false" mode="bottom" @close="isShow = false"> | ||||
|         <div class="add-popup"> | ||||
|           <div class="add-popup__title"> | ||||
|             <h2>添加问题</h2> | ||||
|             <image :src="`${$cdn}askform/zk.png`" mode="aspectFit" @click="isShow = false"/> | ||||
|           </div> | ||||
|           <div class="add-popup__list"> | ||||
|             <span @click="toFiledSetting('radio')">单选题</span> | ||||
|             <span @click="toFiledSetting('checkbox')">多选题</span> | ||||
|             <span @click="toFiledSetting('select')">单下拉框</span> | ||||
|             <span @click="toFiledSetting('input')">单行填空</span> | ||||
|             <span @click="toFiledSetting('textarea')">多行填空</span> | ||||
|             <span @click="toFiledSetting('upload')">上传图片</span> | ||||
|           </div> | ||||
|       <div @click="onConfirm">立即发布</div> | ||||
|     </div> | ||||
|     <u-popup v-model="isShow" :closeable="false" mode="bottom" @close="isShow = false"> | ||||
|       <div class="add-popup"> | ||||
|         <div class="add-popup__title"> | ||||
|           <h2>添加问题</h2> | ||||
|           <image :src="`${$cdn}askform/zk.png`" mode="aspectFit" @click="isShow = false"/> | ||||
|         </div> | ||||
|       </u-popup> | ||||
|     </div> | ||||
|     <div class="detail" v-if="isShowConfig"> | ||||
|       <component | ||||
|           :is="component" | ||||
|           :index="filedIndex" | ||||
|           :filed="filed" | ||||
|           @change="onChange" | ||||
|           :targetListData="targetList" | ||||
|           :formData="form" | ||||
|           :filedType="filedType" | ||||
|           @back="isShowConfig = false" | ||||
|           :id="id" | ||||
|           :formConfig="formConfig"> | ||||
|       </component> | ||||
|     </div> | ||||
|         <div class="add-popup__list"> | ||||
|           <span @click="toFiledSetting('radio')">单选题</span> | ||||
|           <span @click="toFiledSetting('checkbox')">多选题</span> | ||||
|           <span @click="toFiledSetting('select')">单下拉框</span> | ||||
|           <span @click="toFiledSetting('input')">单行填空</span> | ||||
|           <span @click="toFiledSetting('textarea')">多行填空</span> | ||||
|           <span @click="toFiledSetting('upload')">上传图片</span> | ||||
|         </div> | ||||
|       </div> | ||||
|     </u-popup> | ||||
|   </div> | ||||
| </template> | ||||
| 
 | ||||
| <script> | ||||
| import draggable from 'vuedraggable' | ||||
| import FiledConfig from './FiledConfig' | ||||
| import FormSetting from '../FormSetting' | ||||
| import PreviewForm from './PreviewForm' | ||||
| import qs from "query-string" | ||||
| 
 | ||||
| export default { | ||||
|   props: ['params'], | ||||
| 
 | ||||
|   data() { | ||||
|     return { | ||||
|       pageShow: false, | ||||
|       isShowConfig: false, | ||||
|       form: { | ||||
|         tableExplain: '详细描述', | ||||
|         title: '问卷调查', | ||||
| @@ -179,34 +158,23 @@ export default { | ||||
|       filedIndex: '', | ||||
|       isQuote: false, | ||||
|       touchStart: 0, | ||||
|       component: '', | ||||
|       formConfig: {} | ||||
|     } | ||||
|   }, | ||||
| 
 | ||||
|   components: { | ||||
|     draggable, | ||||
|     PreviewForm, | ||||
|     FormSetting, | ||||
|     FiledConfig | ||||
|   }, | ||||
| 
 | ||||
|   mounted() { | ||||
|     this.type = Number(this.params.type) | ||||
| 
 | ||||
|     if (this.params.isQuote) { | ||||
|       this.isQuote = true | ||||
|     } | ||||
| 
 | ||||
|     if (this.params.id) { | ||||
|       this.id = this.params.id | ||||
|       this.getInfo(this.params.id) | ||||
|   created() { | ||||
|     let {type, isQuote, id} = this.$route.query | ||||
|     this.type = type | ||||
|     this.isQuote = !!isQuote | ||||
|     if (id) { | ||||
|       this.id = id | ||||
|       this.getInfo(id) | ||||
|     } else { | ||||
|       this.pageShow = true | ||||
|     } | ||||
| 
 | ||||
|     this.init() | ||||
| 
 | ||||
|     uni.$on('setting', res => { | ||||
|       this.form = { | ||||
|         ...this.form, | ||||
| @@ -216,28 +184,29 @@ export default { | ||||
|     }) | ||||
| 
 | ||||
|     uni.$on('filedConfig', res => { | ||||
|       if (res.index === '-1') { | ||||
|       console.log(res) | ||||
|       if (res.index < 0) { | ||||
|         this.targetList.push(res.config) | ||||
|       } else { | ||||
|         this.$set(this.targetList, [res.index], res.config) | ||||
|         this.targetList.splice(res.index, 1, res.config) | ||||
|       } | ||||
|     }) | ||||
|   }, | ||||
| 
 | ||||
|   onShow () { | ||||
|     localStorage.removeItem("toFiledConfig") | ||||
|   }, | ||||
| 
 | ||||
|   methods: { | ||||
|     toSetting() { | ||||
|       this.component = 'FormSetting' | ||||
|       this.isShowConfig = true | ||||
|       let {formConfig} = this | ||||
|       localStorage.setItem("toFormSetting", JSON.stringify(formConfig)) | ||||
|       uni.navigateTo({url: `./FormSetting`}) | ||||
|     }, | ||||
| 
 | ||||
|     back() { | ||||
|       this.$emit('change', { | ||||
|         type: 'Tabbar' | ||||
|       }) | ||||
|       uni.navigateBack({}) | ||||
|     }, | ||||
| 
 | ||||
|     onChange(e) { | ||||
| 
 | ||||
|     }, | ||||
| 
 | ||||
|     removeComponent(index) { | ||||
| @@ -245,8 +214,9 @@ export default { | ||||
|     }, | ||||
| 
 | ||||
|     toPreview() { | ||||
|       this.component = 'PreviewForm' | ||||
|       this.isShowConfig = true | ||||
|       let {form, targetList} = this | ||||
|       localStorage.setItem("toPreviewForm", JSON.stringify({form, targetList})) | ||||
|       uni.navigateTo({url: `./PreviewForm`}) | ||||
|     }, | ||||
| 
 | ||||
|     upload() { | ||||
| @@ -339,18 +309,15 @@ export default { | ||||
|         type: this.type, | ||||
|         templateType: 0 | ||||
|       }).then(res => { | ||||
|         if (res.code == 0) { | ||||
|           setTimeout(() => { | ||||
|             this.$emit('change', { | ||||
|               type: 'Result', | ||||
|               params: { | ||||
|                 linkUrl: res.data.linkUrl, | ||||
|                 title: this.form.title, | ||||
|                 tableExplain: this.form.tableExplain, | ||||
|                 headPicture: this.form.headPicture | ||||
|               } | ||||
|             }) | ||||
|           }, 600) | ||||
|         if (res?.code == 0) { | ||||
|           uni.navigateTo({ | ||||
|             url: `./Result?${qs.stringify({ | ||||
|               linkUrl: res.data.linkUrl, | ||||
|               title: this.form.title, | ||||
|               tableExplain: this.form.tableExplain, | ||||
|               headPicture: this.form.headPicture | ||||
|             })}` | ||||
|           }) | ||||
|         } | ||||
|       }).catch(e => { | ||||
|         this.$u.toast(e) | ||||
| @@ -376,7 +343,6 @@ export default { | ||||
|         } else { | ||||
|           this.$u.toast(res.msg) | ||||
|         } | ||||
| 
 | ||||
|         uni.hideLoading() | ||||
|       }).catch(() => { | ||||
|         uni.hideLoading() | ||||
| @@ -388,16 +354,12 @@ export default { | ||||
|       if (index > -1) { | ||||
|         this.filed = type | ||||
|         this.filedIndex = index | ||||
|         this.component = 'FiledConfig' | ||||
|         this.isShowConfig = true | ||||
| 
 | ||||
|         return false | ||||
|         localStorage.setItem("toFiledConfig", JSON.stringify({index, filed: type, filedType: type.type})) | ||||
|       } else { | ||||
|         this.filedIndex = '' | ||||
|         localStorage.setItem("toFiledConfig", JSON.stringify({filed: '', filedType: type, index: -1})) | ||||
|       } | ||||
| 
 | ||||
|       this.filedIndex = '' | ||||
|       this.filedType = type | ||||
|       this.component = 'FiledConfig' | ||||
|       this.isShowConfig = true | ||||
|       uni.navigateTo({url: `./FiledConfig`}) | ||||
|     }, | ||||
| 
 | ||||
|     init() { | ||||
| @@ -1,17 +1,13 @@ | ||||
| <template> | ||||
|   <div class="form"> | ||||
|     <component | ||||
|         :is="component" | ||||
|         @change="onChange" | ||||
|         :params="params"> | ||||
|     </component> | ||||
|     <component ref="TabPage" :is="component" @change="onChange" :params="params"/> | ||||
|   </div> | ||||
| </template> | ||||
|  | ||||
| <script> | ||||
| import Tabbar from './components/Tabbar.vue' | ||||
| import AddForm from './components/AddForm.vue' | ||||
| import Result from './components/Result.vue' | ||||
| import AddForm from './AddForm.vue' | ||||
| import Result from './Result.vue' | ||||
| import {mapActions} from "vuex"; | ||||
|  | ||||
| export default { | ||||
| @@ -21,7 +17,8 @@ export default { | ||||
|   data() { | ||||
|     return { | ||||
|       component: 'Tabbar', | ||||
|       params: {} | ||||
|       params: {}, | ||||
|       refresh: true | ||||
|     } | ||||
|   }, | ||||
|  | ||||
| @@ -40,8 +37,11 @@ export default { | ||||
|   }, | ||||
|   onShow() { | ||||
|     document.title = "问卷表单" | ||||
|     this.injectJWeixin(['sendChatMessage', 'selectEnterpriseContact', 'shareAppMessage', 'shareWechatMessage']).then(() => { | ||||
|       this.$dict.load(['questionnaireStatus', 'questionnaireType', 'questionnaireFieldType']) | ||||
|     this.$refs?.TabPage?.show() | ||||
|     this.$nextTick(() => { | ||||
|       this.injectJWeixin(['sendChatMessage', 'selectEnterpriseContact', 'shareAppMessage', 'shareWechatMessage']).then(() => { | ||||
|         this.$dict.load(['questionnaireStatus', 'questionnaireType', 'questionnaireFieldType']) | ||||
|       }) | ||||
|     }) | ||||
|   } | ||||
| } | ||||
|   | ||||
| @@ -69,7 +69,8 @@ export default { | ||||
|     this.checkAccess() | ||||
|   }, | ||||
|   onShow() { | ||||
|     document.title = "问卷调查" | ||||
|     document.title = '问卷调查' | ||||
|     wx.hideOptionMenu() | ||||
|   }, | ||||
| } | ||||
| </script> | ||||
|   | ||||
| @@ -142,45 +142,32 @@ | ||||
| </template> | ||||
| 
 | ||||
| <script> | ||||
| import {components} from './config' | ||||
| import {components} from './components/config' | ||||
| 
 | ||||
| export default { | ||||
|   props: ['filed', 'index', 'filedType'], | ||||
| 
 | ||||
|   data() { | ||||
|     let params = localStorage.getItem("toFiledConfig") | ||||
|     params && (params = JSON.parse(params)) | ||||
|     params.config = params.index > -1 ? params.filed : components.filter(v => v.type === params.filedType)[0] | ||||
|     return { | ||||
|       ...params, | ||||
|       isShowType: false, | ||||
|       isShowAnswer: false, | ||||
|       config: {} | ||||
|       isShowAnswer: false | ||||
|     } | ||||
|   }, | ||||
| 
 | ||||
|   mounted() { | ||||
|     if (this.index !== '') { | ||||
|       this.config = this.filed | ||||
|       return false | ||||
|     } | ||||
| 
 | ||||
|     console.log(components) | ||||
|     this.config = JSON.parse(JSON.stringify(components.filter(v => v.type === this.filedType)[0])) | ||||
|   }, | ||||
| 
 | ||||
|   computed: { | ||||
|     pointTypeName() { | ||||
|       if (!this.config.pointDict) return '' | ||||
| 
 | ||||
|       return this.config.pointDict.filter(v => v.dictValue === this.config.pointType)[0].dictName | ||||
|     }, | ||||
| 
 | ||||
|     defaultType() { | ||||
|       if (!this.config.pointType) return [0] | ||||
| 
 | ||||
|       return [Number(this.config.pointType)] | ||||
|     }, | ||||
| 
 | ||||
|     defaultAnswer() { | ||||
|       if (!this.config.answer) return [0] | ||||
| 
 | ||||
|       let index = 0 | ||||
|       if (this.config.answer) { | ||||
|         this.config.options?.forEach((v, i) => { | ||||
| @@ -193,14 +180,12 @@ export default { | ||||
|       return [index] | ||||
|     } | ||||
|   }, | ||||
| 
 | ||||
|   methods: { | ||||
|     answerChange(e) { | ||||
|       this.config.answer = e[0].label | ||||
|     }, | ||||
| 
 | ||||
|     pointTypeChange(e) { | ||||
|       console.log(e) | ||||
|       this.config.pointType = e[0].value | ||||
|     }, | ||||
| 
 | ||||
| @@ -265,8 +250,8 @@ export default { | ||||
|       this.config.options.splice(index, 1) | ||||
|     }, | ||||
| 
 | ||||
|     back() { | ||||
|       this.$emit('back') | ||||
|     back() {   | ||||
|       uni.navigateBack({}) | ||||
|     }, | ||||
| 
 | ||||
|     confirm() { | ||||
| @@ -274,7 +259,6 @@ export default { | ||||
|         config: this.config, | ||||
|         index: this.index === '' ? '-1' : this.index | ||||
|       }) | ||||
| 
 | ||||
|       this.back() | ||||
|     }, | ||||
| 
 | ||||
| @@ -68,7 +68,7 @@ | ||||
|       <div @click="back"> | ||||
|         <span>取消</span> | ||||
|       </div> | ||||
|       <div @click="confirm">{{ type === 'edit' ? '发布' : '确定' }}</div> | ||||
|       <div @click="confirm">{{ isEdit ? '发布' : '确定' }}</div> | ||||
|     </div> | ||||
|     <u-modal v-model="isShowModal" :content="tips"></u-modal> | ||||
|     <u-picker mode="time" v-model="isShowTime" :show-time-tag="true" @close="isShowTime = false" @confirm="onTimeChange" | ||||
| @@ -77,11 +77,17 @@ | ||||
| </template> | ||||
|  | ||||
| <script> | ||||
| export default { | ||||
|   props: ['id', 'formConfig', 'type'], | ||||
|  | ||||
| export default { | ||||
|   computed: { | ||||
|     isEdit() { | ||||
|       return this.$route.query.type == 'edit' | ||||
|     } | ||||
|   }, | ||||
|   data() { | ||||
|     let {id} = this.$route.query | ||||
|     return { | ||||
|       id, | ||||
|       params: { | ||||
|         year: true, | ||||
|         month: true, | ||||
| @@ -98,38 +104,38 @@ export default { | ||||
|       wechatId: '0', | ||||
|       periodValidityEndTime: '', | ||||
|       isShowTime: false, | ||||
|       periodValidityType: '0' | ||||
|       periodValidityType: '0', | ||||
|     } | ||||
|   }, | ||||
|  | ||||
|   mounted() { | ||||
|   created() { | ||||
|     if (this.id) { | ||||
|       this.getInfo(this.id) | ||||
|     } else if (this.formConfig) { | ||||
|       const res = this.formConfig | ||||
|     } else this.getFormSetting() | ||||
|   }, | ||||
|   methods: { | ||||
|     getFormSetting() { | ||||
|       let params = localStorage.getItem("toFormSetting"), res = {} | ||||
|       params && (res = JSON.parse(params)) | ||||
|       localStorage.removeItem("toFormSetting") | ||||
|       this.periodValidityType = res.periodValidityType || '0' | ||||
|       this.commitType = res.commitType || '1' | ||||
|       this.commitType = res.commitType || "1" | ||||
|       this.actionNotice = res.actionNotice === '1' | ||||
|       this.dynamicNotice = res.dynamicNotice === '1' | ||||
|  | ||||
|       if (res.periodValidityType === '1') { | ||||
|         this.periodValidityEndTime = res.periodValidityEndTime | ||||
|       } | ||||
|     } | ||||
|   }, | ||||
|  | ||||
|   methods: { | ||||
|     }, | ||||
|     onTimeChange(e) { | ||||
|       this.periodValidityEndTime = `${e.year}-${e.month}-${e.day} ${e.hour}:${e.minute}:${e.second}` | ||||
|     }, | ||||
|  | ||||
|     back() { | ||||
|       this.$emit('back') | ||||
|       uni.navigateBack({}) | ||||
|     }, | ||||
|  | ||||
|     getInfo(id) { | ||||
|       this.$http.post(`/app/appquestionnairetemplate/queryDetailById?id=${id}`).then(res => { | ||||
|         if (res.code == 0) { | ||||
|         if (res?.data) { | ||||
|           this.periodValidityType = res.data.periodValidityType | ||||
|           this.commitType = res.data.commitType | ||||
|           this.actionNotice = res.data.actionNotice === '1' | ||||
| @@ -158,9 +164,7 @@ export default { | ||||
|         } | ||||
|       }).then(res => { | ||||
|         if (res.code == 0) { | ||||
|           uni.$emit('reload') | ||||
|           this.$u.toast('发布成功') | ||||
|  | ||||
|           this.back() | ||||
|         } | ||||
|       }).catch(e => { | ||||
| @@ -169,12 +173,10 @@ export default { | ||||
|     }, | ||||
|  | ||||
|     confirm() { | ||||
|       if (this.type === 'edit') { | ||||
|       if (this.isEdit) { | ||||
|         this.publish() | ||||
|  | ||||
|         return false | ||||
|       } | ||||
|  | ||||
|       uni.$emit('setting', { | ||||
|         periodValidityType: this.periodValidityType, | ||||
|         commitType: this.commitType, | ||||
| @@ -182,7 +184,6 @@ export default { | ||||
|         dynamicNotice: this.dynamicNotice ? '1' : '0', | ||||
|         periodValidityEndTime: this.periodValidityEndTime ? this.periodValidityEndTime : '' | ||||
|       }) | ||||
|  | ||||
|       this.back() | ||||
|     } | ||||
|   } | ||||
| @@ -193,10 +194,6 @@ export default { | ||||
| .form-setting { | ||||
|   padding: 0 20px; | ||||
|  | ||||
|   u-radio + u-radio { | ||||
|     margin-left: 20px; | ||||
|   } | ||||
|  | ||||
|   .add-form__footer { | ||||
|     display: flex; | ||||
|     align-items: center; | ||||
|   | ||||
| @@ -67,8 +67,10 @@ | ||||
| <script> | ||||
| 
 | ||||
| export default { | ||||
|   props: ['formData', 'targetListData'], | ||||
|   data() { | ||||
|     let params = localStorage.getItem("toPreviewForm") | ||||
|     params && (params = JSON.parse(params)) | ||||
|     localStorage.removeItem("toPreviewForm") | ||||
|     return { | ||||
|       form: { | ||||
|         tableExplain: '详细描述', | ||||
| @@ -94,15 +96,10 @@ export default { | ||||
|       isShow: false, | ||||
|       type: 0, | ||||
|       id: '', | ||||
|       touchStart: 0 | ||||
|       touchStart: 0, | ||||
|       ...params | ||||
|     } | ||||
|   }, | ||||
| 
 | ||||
|   mounted() { | ||||
|     this.form = this.formData | ||||
|     this.targetList = this.targetListData | ||||
|   }, | ||||
| 
 | ||||
|   methods: { | ||||
|     getInfo(id) { | ||||
|       uni.showLoading() | ||||
| @@ -29,18 +29,21 @@ | ||||
| 
 | ||||
| <script> | ||||
| import {mapActions} from 'vuex' | ||||
| import qs from "query-string" | ||||
| 
 | ||||
| export default { | ||||
|   name: 'Result', | ||||
| 
 | ||||
|   props: ['params'], | ||||
| 
 | ||||
|   computed: { | ||||
|     params() { | ||||
|       return qs.parse(decodeURIComponent(location.search)) | ||||
|     } | ||||
|   }, | ||||
|   mounted() { | ||||
|     this.injectJWeixin(['sendChatMessage', 'selectEnterpriseContact']) | ||||
|   }, | ||||
|   methods: { | ||||
|     ...mapActions(['injectJWeixin', 'wxInvoke']), | ||||
| 
 | ||||
|     copy() { | ||||
|       let oInput = document.createElement('input') | ||||
|       oInput.value = this.params.linkUrl | ||||
| @@ -50,7 +53,6 @@ export default { | ||||
|       this.$u.toast('已复制') | ||||
|       oInput.remove() | ||||
|     }, | ||||
| 
 | ||||
|     share() { | ||||
|       this.injectJWeixin(['shareAppMessage', 'shareWechatMessage']).then(() => { | ||||
|         this.wxInvoke(['shareAppMessage', { | ||||
| @@ -61,7 +63,6 @@ export default { | ||||
|         }]) | ||||
|       }) | ||||
|     }, | ||||
| 
 | ||||
|     shareWechat() { | ||||
|       this.injectJWeixin(['shareAppMessage', 'shareWechatMessage']).then(() => { | ||||
|         this.wxInvoke(['shareWechatMessage', { | ||||
| @@ -72,10 +73,9 @@ export default { | ||||
|         }]) | ||||
|       }) | ||||
|     }, | ||||
| 
 | ||||
|     confirm() { | ||||
|       this.$emit('change', { | ||||
|         type: 'Tabbar' | ||||
|       uni.navigateBack({ | ||||
|         delta: 2 | ||||
|       }) | ||||
|     } | ||||
|   }, | ||||
| @@ -26,6 +26,8 @@ | ||||
| </template> | ||||
|  | ||||
| <script> | ||||
| import qs from "query-string" | ||||
|  | ||||
| export default { | ||||
|   name: 'addList', | ||||
|   label: '新建项目', | ||||
| @@ -47,30 +49,16 @@ export default { | ||||
|     } | ||||
|   }, | ||||
|  | ||||
|   mounted() { | ||||
|   created() { | ||||
|     this.getList() | ||||
|   }, | ||||
|  | ||||
|   methods: { | ||||
|     toAdd(type) { | ||||
|       this.$emit('change', { | ||||
|         type: 'AddForm', | ||||
|         params: { | ||||
|           type | ||||
|         } | ||||
|       }) | ||||
|       uni.navigateTo({url: `./AddForm?${qs.stringify({type})}`}) | ||||
|     }, | ||||
|  | ||||
|     quote(id) { | ||||
|       this.$emit('change', { | ||||
|         type: 'AddForm', | ||||
|         params: { | ||||
|           id, | ||||
|           isQuote: 1 | ||||
|         } | ||||
|       }) | ||||
|       uni.navigateTo({url: `./AddForm?${qs.stringify({id, isQuote: 1})}`}) | ||||
|     }, | ||||
|  | ||||
|     getList() { | ||||
|       this.$http.post(`/app/appquestionnairetemplate/list`, null, { | ||||
|         params: { | ||||
| @@ -79,7 +67,7 @@ export default { | ||||
|           size: 10000 | ||||
|         } | ||||
|       }).then(res => { | ||||
|         if (res.code == 0) { | ||||
|         if (res?.code == 0) { | ||||
|           this.list = res.data.records | ||||
|         } | ||||
|       }) | ||||
| @@ -90,7 +78,7 @@ export default { | ||||
|  | ||||
| <style lang="scss" scoped> | ||||
| .template-wrapper { | ||||
|   padding-bottom: 120 rpx; | ||||
|   padding-bottom: 120px; | ||||
|  | ||||
|   .template { | ||||
|     margin: 32px 32px 0; | ||||
|   | ||||
| @@ -11,8 +11,8 @@ | ||||
|           <div class="form-item__left"> | ||||
|             <h2>{{ item.title }}</h2> | ||||
|             <div class="form-item__left--info"> | ||||
| <!--              <AiOpenData v-if="item.createUnitName" type="departmentName" :openid="item.createUnitName"/>--> | ||||
|               <AiOpenData v-if="item.createUserName" type="userName" :openid="item.createUserName"/> | ||||
|               <span v-text="item.createUnitName"/> | ||||
|               <span v-text="item.createUserName"/> | ||||
|               <span>{{ item.createTime.substr(0, item.createTime.length - 3) }}</span> | ||||
|               <span>{{ $dict.getLabel('questionnaireType', item.type) }}</span> | ||||
|             </div> | ||||
| @@ -124,13 +124,13 @@ export default { | ||||
|     }, | ||||
|  | ||||
|     showPopup(item) { | ||||
|       if (item.status === '2') { | ||||
|         this.$confirm('表单已停止发布,请在后台管理系统中查看调查结果', '', { | ||||
|           showCancel: false | ||||
|         }) | ||||
|  | ||||
|         return false | ||||
|       } | ||||
|       // if (item.status === '2') { | ||||
|       //   this.$confirm('表单已停止发布,请在后台管理系统中查看调查结果', '', { | ||||
|       //     showCancel: false | ||||
|       //   }) | ||||
|       // | ||||
|       //   return false | ||||
|       // } | ||||
|  | ||||
|       this.info = item | ||||
|       this.id = item.id | ||||
| @@ -205,24 +205,17 @@ export default { | ||||
|       if (this.info.status === '1') { | ||||
|         return this.$u.toast('该表单已发布') | ||||
|       } | ||||
|  | ||||
|       this.linkTo(`./formSetting?id=${this.info.id}&type=edit`) | ||||
|       this.linkTo(`./FormSetting?id=${this.info.id}&type=edit`) | ||||
|       this.isShow = false | ||||
|     }, | ||||
|  | ||||
|     toEdit() { | ||||
|       if (this.info.dataCount !== 0) { | ||||
|         return this.$u.toast('该表单已有数据,无法编辑!') | ||||
|       } else { | ||||
|         let {id} = this | ||||
|         this.isShow = false | ||||
|         uni.navigateTo({url: `./AddForm?id=${id}`}) | ||||
|       } | ||||
|  | ||||
|       this.$emit('change', { | ||||
|         type: 'AddForm', | ||||
|         params: { | ||||
|           id: this.id | ||||
|         } | ||||
|       }) | ||||
|  | ||||
|       this.isShow = false | ||||
|     }, | ||||
|  | ||||
|     share(id) { | ||||
| @@ -303,6 +296,10 @@ export default { | ||||
|   height: 100vh; | ||||
|   overflow: hidden; | ||||
|  | ||||
|   u-radio + u-radio { | ||||
|     margin-left: 20px; | ||||
|   } | ||||
|  | ||||
|   ::v-deep .u-search { | ||||
|     margin-bottom: 0 !important; | ||||
|  | ||||
|   | ||||
| @@ -1,8 +1,8 @@ | ||||
| <template> | ||||
|   <div class="form-wrapper"> | ||||
|     <div class="form-content"> | ||||
|       <add-list ref="addList" v-if="currIndex === 1" @change="onChange"></add-list> | ||||
|       <list ref="list" v-if="currIndex === 0" @change="onChange"></list> | ||||
|       <list ref="list" v-if="currIndex === 0" @change="onChange"/> | ||||
|       <add-list ref="addList" v-if="currIndex === 1" @change="onChange"/> | ||||
|     </div> | ||||
|     <AiTabbar :active.sync="currIndex" :list="tabBar"/> | ||||
|   </div> | ||||
| @@ -26,7 +26,6 @@ export default { | ||||
|     AddList, | ||||
|     List | ||||
|   }, | ||||
|  | ||||
|   computed: { | ||||
|     tabBar() { | ||||
|       const link = icon => `${this.$cdn}askform/${icon}.png` | ||||
| @@ -40,13 +39,19 @@ export default { | ||||
|       })) | ||||
|     } | ||||
|   }, | ||||
|  | ||||
|   methods: { | ||||
|     onChange(e) { | ||||
|       this.$emit('change', e) | ||||
|     }, | ||||
|     show() { | ||||
|       if (this.currIndex == 0) { | ||||
|         this.currIndex = -1 | ||||
|         this.$nextTick(() => { | ||||
|           this.currIndex = 0 | ||||
|         }) | ||||
|       } | ||||
|     } | ||||
|   }, | ||||
|  | ||||
|   onReachBottom() { | ||||
|     if (this.currIndex === 0) { | ||||
|     } | ||||
|   | ||||
| @@ -34,7 +34,7 @@ | ||||
|                 </label> | ||||
|                 <u-gap height="16"></u-gap> | ||||
|                 <span class="info"> | ||||
|                 <AiOpenData type="userName" :openid="item.releaseUserId"></AiOpenData> | ||||
|                 <AiOpenData type="userName" :openid="item.releaseUserId"/> | ||||
|                 <text>{{ item.releaseTime }}</text> | ||||
|               </span> | ||||
|               </div> | ||||
| @@ -301,7 +301,6 @@ export default { | ||||
|       } | ||||
|  | ||||
|       & > .has-pic { | ||||
|         height: 100%; | ||||
|         display: flex; | ||||
|         justify-content: space-between; | ||||
|  | ||||
|   | ||||
| @@ -8,7 +8,7 @@ | ||||
|  | ||||
|       <div class="card"> | ||||
|         <header><em>*</em>公告内容</header> | ||||
|         <textarea v-model="form.content" placeholder="请输入" :maxlength="500"></textarea> | ||||
|         <AiEditor v-model="form.content" placeholder="请输入,最多500字" :maxlength="500"/> | ||||
|       </div> | ||||
|  | ||||
|       <div class="card"> | ||||
|   | ||||
		Reference in New Issue
	
	Block a user