调整工程目录
This commit is contained in:
		
							
								
								
									
										12
									
								
								bin/serve.js
									
									
									
									
									
								
							
							
						
						
									
										12
									
								
								bin/serve.js
									
									
									
									
									
								
							| @@ -69,13 +69,23 @@ const start = () => { | ||||
|     } | ||||
|   } | ||||
|   findApp('src/apps', file => { | ||||
|     if (/.*\\.+\\App[^\\]+\\[^\\]+\.vue/g.test(file)) { | ||||
|     if (/.+\\App[^\\]+\\[^\\]+\.vue/g.test(file)) { | ||||
|       let app = { | ||||
|         name: file.replace(/.*\\([^\\]+).vue/g, '$1'), | ||||
|         path: file.replace(/^src\\(.*).vue/g, '$1').replace(/\\/g, '/') | ||||
|       } | ||||
|       json.pages.push(app) | ||||
|     } | ||||
|   }).then(() => { | ||||
|     return findApp('src/sass', file => { | ||||
|       if (/.+\\App[^\\]+\\[^\\]+\.vue/g.test(file)) { | ||||
|         let app = { | ||||
|           name: file.replace(/.*\\([^\\]+).vue/g, '$1'), | ||||
|           path: file.replace(/^src\\(.*).vue/g, '$1').replace(/\\/g, '/') | ||||
|         } | ||||
|         json.pages.push(app) | ||||
|       } | ||||
|     }) | ||||
|   }).then(() => { | ||||
|     fsExtra.outputJson('src/pages.json', json, () => { | ||||
|       chalkTag.done('生成pages.json') | ||||
|   | ||||
| @@ -11,7 +11,8 @@ | ||||
|   "main": "src/apps/index.js", | ||||
|   "files": [ | ||||
|     "src/components", | ||||
|     "src/apps" | ||||
|     "src/apps", | ||||
|     "src/sass" | ||||
|   ], | ||||
|   "dependencies": { | ||||
|     "@amap/amap-jsapi-loader": "^1.0.1", | ||||
|   | ||||
| @@ -1,193 +0,0 @@ | ||||
| <template> | ||||
|   <div class="template-wrapper"> | ||||
|     <div class="form-list"> | ||||
|       <div | ||||
|         class="form-list__item" | ||||
|         @click="toAdd(index)" | ||||
|         :style="{'background-image': `url(${$cdn}askform/${index + 1}.png)`}" | ||||
|         v-for="(item, index) in itemList" | ||||
|         :key="index"> | ||||
|         <h2>{{ item.name }}</h2> | ||||
|         <div>立即创建</div> | ||||
|       </div> | ||||
|     </div> | ||||
|     <div class="template" v-if="list.length"> | ||||
|       <h2>共享模板</h2> | ||||
|       <div class="template-list"> | ||||
|         <div class="template-item" v-for="(item, index) in list" :key="index" hover-class="bg-hover" @click="quote(item.id)"> | ||||
|           <image :src="`${$cdn}askform/6.png`" /> | ||||
|           <h2>{{ item.title }}</h2> | ||||
|           <u-icon name="arrow-right" color="#E1E2E3" /> | ||||
|         </div> | ||||
|       </div> | ||||
|     </div> | ||||
|   </div> | ||||
| </template> | ||||
|  | ||||
| <script> | ||||
| export default { | ||||
|   name: 'addList', | ||||
|   label: '新建项目', | ||||
|  | ||||
|   data () { | ||||
|     return { | ||||
|       itemList: [{ | ||||
|         name: '问卷调查' | ||||
|       }, { | ||||
|         name: '考试测评' | ||||
|       }, { | ||||
|         name: '报名登记' | ||||
|       }, { | ||||
|         name: '满意调查' | ||||
|       }, { | ||||
|         name: '投票评选' | ||||
|       }], | ||||
|       list: [] | ||||
|     } | ||||
|   }, | ||||
|  | ||||
|   mounted () { | ||||
|     this.getList() | ||||
|   }, | ||||
|  | ||||
|   methods: { | ||||
|     toAdd (type) { | ||||
|       this.$emit('change', { | ||||
|         type: 'AddForm', | ||||
|         params: { | ||||
|           type | ||||
|         } | ||||
|       }) | ||||
|     }, | ||||
|  | ||||
|     quote (id) { | ||||
|       this.$emit('change', { | ||||
|         type: 'AddForm', | ||||
|         params: { | ||||
|           id, | ||||
|           isQuote: 1 | ||||
|         } | ||||
|       }) | ||||
|     }, | ||||
|  | ||||
|     getList () { | ||||
|       this.$http.post(`/app/appquestionnairetemplate/list`, null, { | ||||
|         params: { | ||||
|           current: 1, | ||||
|           templateType: 1, | ||||
|           size: 10000 | ||||
|         } | ||||
|       }).then(res => { | ||||
|         if (res.code == 0) { | ||||
|           this.list = res.data.records | ||||
|         } | ||||
|       }) | ||||
|     } | ||||
|   } | ||||
| } | ||||
| </script> | ||||
|  | ||||
| <style lang="scss" scoped> | ||||
|   .template-wrapper { | ||||
|     padding-bottom: 120rpx; | ||||
|  | ||||
|     .template { | ||||
|       margin: 32px 32px 0; | ||||
|       background: #fff; | ||||
|       border-radius: 8px; | ||||
|       overflow: hidden; | ||||
|  | ||||
|       & > h2 { | ||||
|         height: 88px; | ||||
|         line-height: 88px; | ||||
|         padding: 0 24px; | ||||
|         color: #333333; | ||||
|         font-size: 30px; | ||||
|       } | ||||
|  | ||||
|       .template-item { | ||||
|         display: flex; | ||||
|         align-items: center; | ||||
|         height: 104px; | ||||
|         padding: 0 24px; | ||||
|         border-bottom: 1px solid #D8DDE6; | ||||
|  | ||||
|         &:active { | ||||
|           background-color: #eee; | ||||
|         } | ||||
|  | ||||
|         &:last-child { | ||||
|           border: none; | ||||
|         } | ||||
|  | ||||
|         image { | ||||
|           width: 36px; | ||||
|           height: 42px; | ||||
|         } | ||||
|  | ||||
|         i { | ||||
|           font-size: 30px; | ||||
|           color: #E1E2E3; | ||||
|         } | ||||
|  | ||||
|         h2 { | ||||
|           flex: 1; | ||||
|           padding: 0 18px; | ||||
|           color: #333333; | ||||
|           font-size: 28px; | ||||
|           font-weight: normal; | ||||
|           overflow: hidden; | ||||
|           text-overflow:ellipsis; | ||||
|           white-space: nowrap; | ||||
|         } | ||||
|       } | ||||
|     } | ||||
|  | ||||
|     .form-list { | ||||
|       display: flex; | ||||
|       flex-wrap: wrap; | ||||
|       padding: 0 32px 0; | ||||
|  | ||||
|       div { | ||||
|         box-sizing: border-box; | ||||
|       } | ||||
|  | ||||
|       .form-list__item { | ||||
|         width: calc(50% - 13px); | ||||
|         height: 216px; | ||||
|         margin: 32px 24px 0 0; | ||||
|         padding: 40px 20px 52px; | ||||
|         background-color: #FFFFFF; | ||||
|         border-radius: 8px; | ||||
|         background-size: 100% 100%; | ||||
|  | ||||
|         &:active { | ||||
|           background-color: #eee; | ||||
|         } | ||||
|  | ||||
|         &:nth-of-type(2n) { | ||||
|           margin-right: 0; | ||||
|         } | ||||
|  | ||||
|         div { | ||||
|           width: 148px; | ||||
|           height: 48px; | ||||
|           line-height: 48px; | ||||
|           text-align: center; | ||||
|           color: #fff; | ||||
|           font-size: 28px; | ||||
|           background: #6BA1F9; | ||||
|           border-radius: 24px; | ||||
|         } | ||||
|  | ||||
|         h2 { | ||||
|           margin-bottom: 32px; | ||||
|           padding-left: 10px; | ||||
|           color: #333333; | ||||
|           font-weight: 700; | ||||
|           font-size: 32px; | ||||
|         } | ||||
|       } | ||||
|     } | ||||
|   } | ||||
| </style> | ||||
| @@ -1,163 +0,0 @@ | ||||
| export const components = [ | ||||
| 	{ | ||||
| 		type: 'radio', | ||||
| 		label: '单选', | ||||
| 		fixedLabel: '单选', | ||||
| 		value: '', | ||||
| 		points: '', | ||||
| 		icon: 'iconradio', | ||||
| 		isShowPoints: false, | ||||
| 		required: true, | ||||
| 		hasAnswer: false, | ||||
| 		answer: '', | ||||
| 		pointType: '0', | ||||
| 		pointDict: [ | ||||
| 			{ | ||||
| 				dictName: '此题有唯一答案和分值', | ||||
| 				dictValue: '0' | ||||
| 			}, | ||||
| 			{ | ||||
| 				dictName: '每个选项都有对应分值', | ||||
| 				dictValue: '1' | ||||
| 			} | ||||
| 		], | ||||
| 		options: [ | ||||
| 			{ | ||||
| 				label: '选项1', | ||||
| 				value: '', | ||||
| 				point: '', | ||||
| 				img: [] | ||||
| 			}, | ||||
| 			{ | ||||
| 				label: '选项2', | ||||
| 				value: '', | ||||
| 				point: '', | ||||
| 				img: [] | ||||
| 			} | ||||
| 		], | ||||
| 		title: '' | ||||
| 	}, | ||||
| 	{ | ||||
| 		type: 'checkbox', | ||||
| 		label: '多选', | ||||
| 		fixedLabel: '多选', | ||||
| 		points: '', | ||||
| 		icon: 'iconcheck_box', | ||||
| 		isShowPoints: false, | ||||
| 		required: true, | ||||
| 		hasAnswer: false, | ||||
| 		answer: [], | ||||
| 		value: [], | ||||
| 		pointType: '0', | ||||
| 		pointDict: [ | ||||
| 			{ | ||||
| 				dictName: '此题有唯一答案和分值', | ||||
| 				dictValue: '0' | ||||
| 			}, | ||||
| 			{ | ||||
| 				dictName: '每个选项都有对应分值', | ||||
| 				dictValue: '1' | ||||
| 			}, | ||||
| 			{ | ||||
| 				dictName: '答对几项得几分,答错不得分', | ||||
| 				dictValue: '2' | ||||
| 			} | ||||
| 		], | ||||
| 		options: [ | ||||
| 			{ | ||||
| 				label: '选项1', | ||||
| 				value: '', | ||||
| 				point: '', | ||||
| 				img: [], | ||||
| 				checked: false | ||||
| 			}, | ||||
| 			{ | ||||
| 				label: '选项2', | ||||
| 				point: '', | ||||
| 				value: '', | ||||
| 				img: [], | ||||
| 				checked: false | ||||
| 			} | ||||
| 		], | ||||
| 		title: '' | ||||
| 	}, | ||||
| 	{ | ||||
| 		type: 'select', | ||||
| 		label: '单下拉框', | ||||
| 		fixedLabel: '单下拉框', | ||||
| 		value: '', | ||||
| 		points: '', | ||||
| 		icon: 'iconSelect', | ||||
| 		isShowPoints: false, | ||||
| 		required: true, | ||||
| 		hasAnswer: false, | ||||
| 		answer: '', | ||||
| 		pointType: '0', | ||||
| 		placeholder: '请选择', | ||||
| 		pointDict: [ | ||||
| 			{ | ||||
| 				dictName: '此题有唯一答案和分值', | ||||
| 				dictValue: '0' | ||||
| 			}, | ||||
| 			{ | ||||
| 				dictName: '每个选项都有对应分值', | ||||
| 				dictValue: '1' | ||||
| 			} | ||||
| 		], | ||||
| 		options: [ | ||||
| 			{ | ||||
| 				label: '选项1', | ||||
| 				value: '', | ||||
| 				point: '', | ||||
| 				img: [] | ||||
| 			}, | ||||
| 			{ | ||||
| 				label: '选项2', | ||||
| 				value: '', | ||||
| 				point: '', | ||||
| 				img: [] | ||||
| 			} | ||||
| 		], | ||||
| 		title: '' | ||||
| 	}, | ||||
| 	{ | ||||
| 		type: 'input', | ||||
| 		label: '单行填空', | ||||
| 		fixedLabel: '单行填空', | ||||
| 		value: '', | ||||
| 		pointType: '0', | ||||
| 		icon: 'icontext_box', | ||||
| 		isShowPoints: false, | ||||
| 		points: '', | ||||
| 		required: true, | ||||
| 		hasAnswer: false, | ||||
| 		placeholder: '请输入...', | ||||
| 		answer: '' | ||||
| 	}, | ||||
| 	{ | ||||
| 		type: 'textarea', | ||||
| 		label: '多行填空', | ||||
| 		fixedLabel: '多行填空', | ||||
| 		pointType: '0', | ||||
| 		icon: 'icontext_area', | ||||
| 		points: '', | ||||
| 		isShowPoints: false, | ||||
| 		required: true, | ||||
| 		hasAnswer: false, | ||||
| 		answer: '', | ||||
| 		placeholder: '请输入...', | ||||
| 		value: '' | ||||
| 	}, | ||||
| 	{ | ||||
| 		type: 'upload', | ||||
| 		label: '上传图片', | ||||
| 		fixedLabel: '上传图片', | ||||
| 		value: '', | ||||
| 		icon: 'iconpic', | ||||
| 		isShowPoints: false, | ||||
| 		points: '', | ||||
| 		required: true, | ||||
| 		hasAnswer: false, | ||||
| 		answer: '' | ||||
| 	} | ||||
| ]; | ||||
| @@ -1,558 +0,0 @@ | ||||
| <template> | ||||
|   <div class="detail" v-if="pageShow"> | ||||
|     <template v-if="!list"> | ||||
|       <div class="card"> | ||||
|         <header>{{ detail.title }}</header> | ||||
|         <u-gap height="16"></u-gap> | ||||
|         <u-row v-if="detail.createUserId"> | ||||
| <!--          <u-avatar :src="$cdn + 'common/xzh.png'" v-if="false"></u-avatar>--> | ||||
|           <div class="u-avatar__img"> | ||||
|             <AiOpenData type="userName" :openid="detail.createUserId"></AiOpenData> | ||||
|           </div> | ||||
|           <span class="user-name"> | ||||
|             <AiOpenData type="userName" :openid="detail.createUserId"></AiOpenData> | ||||
|           </span> | ||||
|         </u-row> | ||||
|         <u-gap height="32"></u-gap> | ||||
|         <u-row> | ||||
|           <img :src="$cdn + 'common/meeting.png'" alt=""> | ||||
|           <span :style="{color:color(detail.status)}">{{ $dict.getLabel('meetStatus', detail.status) }}</span> | ||||
|         </u-row> | ||||
|         <u-gap height="8"></u-gap> | ||||
|         <u-row> | ||||
|           <img :src="$cdn + 'common/date.png'" alt=""> | ||||
|           <span>{{ detail.startTime && detail.startTime.substr(0, 16) }} 至 {{ detail.endTime && detail.endTime.substr(0, 16) }}</span> | ||||
|         </u-row> | ||||
|         <u-gap height="8"></u-gap> | ||||
|         <u-row style="align-items: start;flex-wrap: nowrap;"> | ||||
|           <img :src="$cdn + 'common/location.png'" alt=""> | ||||
|           <span>{{ detail.address }}</span> | ||||
|         </u-row> | ||||
|       </div> | ||||
|       <div class="card"> | ||||
|         <span>{{ detail.content }}</span> | ||||
|       </div> | ||||
|       <div class="card" v-if="detail.files && detail.files.length"> | ||||
|         <div class="label">相关附件</div> | ||||
|         <div class="file" v-for="(item,index) in detail.files" @click="preFile(item)" :key="index"> | ||||
|           <u-row justify="between"> | ||||
|             <label class="left"> | ||||
|               <img :src="$cdn + 'common/appendix.png'" alt=""> | ||||
|               <span>{{ item.fileName }}.{{ item.postfix }}</span> | ||||
|             </label> | ||||
|             <span>{{ item.fileSizeStr }}</span> | ||||
|           </u-row> | ||||
|         </div> | ||||
|       </div> | ||||
|       <div class="card item-wrap"> | ||||
|         <u-row justify="between"> | ||||
|           <span>参会人</span> | ||||
|           <label class="right" @click="list=true"> | ||||
|             查看全部<em>{{ detail.attendees && detail.attendees.length }}</em>人 | ||||
|             <div class="right-arrow"></div> | ||||
|           </label> | ||||
|         </u-row> | ||||
|       </div> | ||||
|  | ||||
|       <div class="footer cancel" v-if="detail.status==1 && detail.createUserId == user.id" @click="handleCancel">取消会议 | ||||
|       </div> | ||||
|  | ||||
|       <template v-else> | ||||
|         <div class="footer" v-if="['1','2'].includes(detail.status) && ['0','3'].includes(detail.joinStatus)"> | ||||
|           <div class="leave" @click="updateStatus(0)"> | ||||
|             <img :src="$cdn + 'sass/leave.png'" alt="">请假 | ||||
|           </div> | ||||
|           <div @click="toDo" class="leave"> | ||||
|             <img :src="$cdn + 'sass/toBe.png'" alt="">待定 | ||||
|           </div> | ||||
|           <div @click="updateStatus(1)">确认会议</div> | ||||
|         </div> | ||||
|  | ||||
|         <!--        <div class="footer" v-if="['1','2'].includes(detail.status) && detail.joinStatus!=0">--> | ||||
|         <!--          <label>{{ detail.joinStatus|transform }}</label>--> | ||||
|         <!--          <img :src="$cdn + tag(detail.joinStatus)" alt="">--> | ||||
|         <!--        </div>--> | ||||
|       </template> | ||||
|  | ||||
|     </template> | ||||
|     <template v-else> | ||||
|       <div class="att-list"> | ||||
|         <AiTopFixed> | ||||
|           <u-tabs :list="tabs" :current="current" height="96" :is-scroll="false" bar-width="192" | ||||
|                   @change="change"></u-tabs> | ||||
|         </AiTopFixed> | ||||
|         <div v-for="(item,index) in detail.attendees && detail.attendees.filter(e=>e.joinStatus==current)" :key="index" | ||||
|              class="att-wrap"> | ||||
|           <div class="left"> | ||||
|             <u-avatar :src="item.avatar || (($cdn + 'common/xztx.png'))" size="74" mode="square" style="margin-right: 8px"></u-avatar> | ||||
|             <AiOpenData type="userName" :openid="item.name"></AiOpenData> | ||||
|           </div> | ||||
|           <!--          <img :src="$cdn + 'common/phone.png'" alt="" @click="call(item)">--> | ||||
|         </div> | ||||
|       </div> | ||||
|     </template> | ||||
|     <u-modal v-model="show" title="提示" show-cancel-button content='是否要取消该会议?' @confirm="onConfirm"></u-modal> | ||||
|     <AiBack/> | ||||
|   </div> | ||||
| </template> | ||||
|  | ||||
| <script> | ||||
|   import {mapActions, mapState} from "vuex"; | ||||
|  | ||||
|   export default { | ||||
|     name: "detail", | ||||
|     data() { | ||||
|       return { | ||||
|         detail: {}, | ||||
|         list: false, | ||||
|         current: 0, | ||||
|         pageShow: false, | ||||
|         show: false, | ||||
|         id:null, | ||||
|       } | ||||
|     }, | ||||
|     onLoad(opt){ | ||||
|       this.id = opt.id; | ||||
|     }, | ||||
|     computed: { | ||||
|       ...mapState(["user"]), | ||||
|       tabs() { | ||||
|         return [ | ||||
|           {name: this.count(0) + "人未确认"}, | ||||
|           {name: this.count(1) + "人已确认"}, | ||||
|           {name: this.count(2) + "人已请假"}, | ||||
|           {name: this.count(3) + "人待定"}, | ||||
|         ] | ||||
|       }, | ||||
|     }, | ||||
|     methods: { | ||||
|       onConfirm() { | ||||
|         this.$http.post("/app/appmeetinginfo/cancel", null, { | ||||
|           params: { | ||||
|             meetingId: this.id, | ||||
|           } | ||||
|         }).then(res => { | ||||
|           if (res.code == 0) { | ||||
|             this.$u.toast("取消成功"); | ||||
|             this.getDetail(); | ||||
|           } | ||||
|         }) | ||||
|       }, | ||||
|       handleCancel() { | ||||
|         this.show = true; | ||||
|       }, | ||||
|       toDo() { | ||||
|         this.$http.post("/app/appmeetinginfo/tobeConfirm", null, { | ||||
|           params: { | ||||
|             meetingId: this.id, | ||||
|           } | ||||
|         }).then(res => { | ||||
|           if (res.code == 0) { | ||||
|             this.$u.toast("会议待定"); | ||||
|             setTimeout(_ => { | ||||
|               uni.navigateBack(); | ||||
|             }, 800) | ||||
|           } | ||||
|         }) | ||||
|       }, | ||||
|       count(sta) { | ||||
|         return this.detail.attendees ? this.detail.attendees?.filter(e => e.joinStatus == sta)?.length : 0; | ||||
|       }, | ||||
|       change(index) { | ||||
|         this.current = index; | ||||
|         this.detail = {}; | ||||
|         this.getDetail(); | ||||
|       }, | ||||
|       call(item) { | ||||
|         if (item.phone) { | ||||
|           uni.makePhoneCall({ | ||||
|             phoneNumber: item.phone | ||||
|           }); | ||||
|         } | ||||
|       }, | ||||
|       ...mapActions(['previewFile', 'injectJWeixin']), | ||||
|       preFile(e) { | ||||
|         if ([".jpg", ".png", ".gif"].includes(e.postfix.toLowerCase())) { | ||||
|           uni.previewImage({ | ||||
|             current: e.url, | ||||
|             urls: [e.url] | ||||
|           }) | ||||
|         } else { | ||||
|           this.previewFile({...e}) | ||||
|         } | ||||
|       }, | ||||
|       tag(status) { | ||||
|         return { | ||||
|           "1": "common/2confirmed2.png", | ||||
|           "2": "common/2absent2.png" | ||||
|         }[status] | ||||
|       }, | ||||
|       updateStatus(status) { | ||||
|         this.$http.post(status == 0 ? "/app/appmeetinginfo/absent" : "/app/appmeetinginfo/confirm", null, { | ||||
|           params: { | ||||
|             meetingId: this.id, | ||||
|             reason: status == 0 ? "" : null | ||||
|           } | ||||
|         }).then(res => { | ||||
|           if (res.code == 0) { | ||||
|             this.$u.toast(status == 0 ? "请假成功" : "确认成功") | ||||
|             this.getDetail() | ||||
|           } | ||||
|         }) | ||||
|       }, | ||||
|       color(status) { | ||||
|         if (status == 1) { | ||||
|           return "#FF8822" | ||||
|         } | ||||
|  | ||||
|         if (status == 2) { | ||||
|           return "#1365DD" | ||||
|         } | ||||
|  | ||||
|         if (status == 3) { | ||||
|           return "#FF4466" | ||||
|         } | ||||
|  | ||||
|         return "#343D65" | ||||
|       }, | ||||
|       getDetail() { | ||||
|         this.$http.post("/app/appmeetinginfo/info-id", null, { | ||||
|           params: {id: this.id} | ||||
|         }).then(res => { | ||||
|           if (res && res.data) { | ||||
|             this.detail = res.data | ||||
|             this.pageShow = true | ||||
|           } | ||||
|         }) | ||||
|       } | ||||
|     }, | ||||
|     created() { | ||||
|       this.injectJWeixin(['sendChatMessage']).then(() => { | ||||
|         this.getDetail() | ||||
|       }) | ||||
|     }, | ||||
|  | ||||
|     onShow() { | ||||
|       document.title = "会议详情"; | ||||
|       this.$dict.load("meetStatus"); | ||||
|       wx.hideOptionMenu(); | ||||
|     }, | ||||
|     filters: { | ||||
|       transform(status) { | ||||
|         if (status == 1) { | ||||
|           return "已确认" | ||||
|         } | ||||
|         if (status == 2) { | ||||
|           return "已请假" | ||||
|         } | ||||
|       } | ||||
|     } | ||||
|   } | ||||
| </script> | ||||
|  | ||||
| <style lang="scss" scoped> | ||||
|   .detail { | ||||
|     min-height: 100%; | ||||
|     background-color: #F5F5F5; | ||||
|     padding-bottom: 140px; | ||||
|  | ||||
|  | ||||
|     ::v-deep .AiTopFixed { | ||||
|       margin-bottom: 16px; | ||||
|  | ||||
|       .content { | ||||
|         padding: 0 !important; | ||||
|       } | ||||
|     } | ||||
|  | ||||
|  | ||||
|     .att-list { | ||||
|       min-height: 100%; | ||||
|  | ||||
|       .att-wrap { | ||||
|         display: flex; | ||||
|         height: 112px; | ||||
|         align-items: center; | ||||
|         justify-content: space-between; | ||||
|         background-color: #ffffff; | ||||
|         box-sizing: border-box; | ||||
|         padding: 0 50px; | ||||
|         border-bottom: 1px solid #E4E5E6; | ||||
|  | ||||
|         .left { | ||||
|           display: flex; | ||||
|           align-items: center; | ||||
|  | ||||
|           &:after { | ||||
|             content: ""; | ||||
|             position: absolute; | ||||
|             right: 0; | ||||
|             bottom: 0; | ||||
|             width: 622px; | ||||
|             height: 2px; | ||||
|             background-color: rgba(216, 221, 230, 0.5); | ||||
|           } | ||||
|  | ||||
|           .name { | ||||
|             font-size: 30px; | ||||
|             font-weight: 600; | ||||
|             color: #333333; | ||||
|           } | ||||
|         } | ||||
|  | ||||
|         & > img { | ||||
|           width: 48px; | ||||
|           height: 48px; | ||||
|         } | ||||
|       } | ||||
|     } | ||||
|  | ||||
|     .card { | ||||
|       background-color: #FFFFFF; | ||||
|       margin-bottom: 8px; | ||||
|       box-sizing: border-box; | ||||
|       padding: 16px 32px; | ||||
|  | ||||
|       header { | ||||
|         font-size: 40px; | ||||
|         font-weight: 600; | ||||
|         color: #333333; | ||||
|         line-height: 64px; | ||||
|         letter-spacing: 1px; | ||||
|       } | ||||
|  | ||||
|       .u-row { | ||||
|         & > div { | ||||
|           border-radius: 50%; | ||||
|           text-align: center; | ||||
|           font-size: 30px; | ||||
|           display: flex; | ||||
|           align-items: center; | ||||
|           justify-content: center; | ||||
|           /*margin-left: 8px;*/ | ||||
|         } | ||||
|  | ||||
|         & > span { | ||||
|           font-size: 30px; | ||||
|           color: #343D65; | ||||
|           margin-left: 16px; | ||||
|         } | ||||
|  | ||||
|         ::v-deep .u-avatar__img { | ||||
|           width: 56px; | ||||
|           height: 56px; | ||||
|           vertical-align: middle; | ||||
|           color: #ffffff; | ||||
|           background-color: #2266FF; | ||||
|           font-size: 16px; | ||||
|         } | ||||
|  | ||||
|         .user-name{ | ||||
|           font-size: 30px; | ||||
|           color: #343D65; | ||||
|         } | ||||
|  | ||||
|         img { | ||||
|           width: 48px; | ||||
|           height: 48px; | ||||
|         } | ||||
|       } | ||||
|  | ||||
|       & > span { | ||||
|         font-size: 32px; | ||||
|         color: #333333; | ||||
|         line-height: 48px; | ||||
|         letter-spacing: 1px; | ||||
|         display: inline-block; | ||||
|         box-sizing: border-box; | ||||
|         padding: 16px 0; | ||||
|       } | ||||
|  | ||||
|       .label { | ||||
|         height: 96px; | ||||
|         font-size: 32px; | ||||
|         color: #333333; | ||||
|         display: flex; | ||||
|         align-items: center; | ||||
|         margin-bottom: 16px; | ||||
|       } | ||||
|  | ||||
|       .file { | ||||
|         height: 128px; | ||||
|         background: #FFFFFF; | ||||
|         border-radius: 8px; | ||||
|         border: 1px solid #CCCCCC; | ||||
|         box-sizing: border-box; | ||||
|         padding: 0 16px; | ||||
|         margin-bottom: 32px; | ||||
|  | ||||
|         & > .u-row { | ||||
|           height: 100%; | ||||
|  | ||||
|           .left { | ||||
|             width: 522px; | ||||
|             display: flex; | ||||
|             align-items: center; | ||||
|  | ||||
|             & > img { | ||||
|               width: 96px; | ||||
|               height: 96px; | ||||
|             } | ||||
|  | ||||
|             & > span { | ||||
|               font-size: 32px; | ||||
|               color: #333333; | ||||
|               display: inline-block; | ||||
|               line-height: 44px; | ||||
|               text-overflow: ellipsis; | ||||
|               overflow-x: hidden; | ||||
|               white-space: nowrap; | ||||
|             } | ||||
|           } | ||||
|  | ||||
|           & > span { | ||||
|             font-size: 28px; | ||||
|             color: #999999; | ||||
|           } | ||||
|         } | ||||
|       } | ||||
|  | ||||
|       .active { | ||||
|         background-color: #F3F6F9; | ||||
|       } | ||||
|  | ||||
|       .name { | ||||
|         font-size: 32px; | ||||
|         font-weight: 400; | ||||
|         color: #333333; | ||||
|       } | ||||
|  | ||||
|       .wrap { | ||||
|         height: 112px; | ||||
|         display: flex; | ||||
|         align-items: center; | ||||
|         position: relative; | ||||
|  | ||||
|         &:after { | ||||
|           content: ""; | ||||
|           position: absolute; | ||||
|           right: 0; | ||||
|           bottom: 0; | ||||
|           width: 622px; | ||||
|           height: 2px; | ||||
|           background-color: rgba(216, 221, 230, 0.5); | ||||
|         } | ||||
|  | ||||
|         & > label { | ||||
|           width: 80px; | ||||
|           height: 80px; | ||||
|           border-radius: 50%; | ||||
|           background-color: #4E8EEE; | ||||
|           font-size: 28px; | ||||
|           font-weight: 600; | ||||
|           color: #FFFFFF; | ||||
|           display: flex; | ||||
|           align-items: center; | ||||
|           justify-content: center; | ||||
|         } | ||||
|       } | ||||
|     } | ||||
|  | ||||
|     .item-wrap { | ||||
|       height: 112px; | ||||
|       padding: 0 32px; | ||||
|  | ||||
|       .u-row { | ||||
|         height: 100%; | ||||
|  | ||||
|         & > span { | ||||
|           font-size: 32px; | ||||
|           font-weight: 400; | ||||
|           color: #333333; | ||||
|         } | ||||
|       } | ||||
|  | ||||
|       .right { | ||||
|         font-size: 28px; | ||||
|         color: #999999; | ||||
|         display: flex; | ||||
|         align-items: center; | ||||
|  | ||||
|         em { | ||||
|           font-style: normal; | ||||
|           color: #1365DD; | ||||
|         } | ||||
|  | ||||
|         .right-arrow { | ||||
|           width: 16px; | ||||
|           height: 16px; | ||||
|           border-top: 5px solid #CCCCCC; | ||||
|           border-right: 5px solid #CCCCCC; | ||||
|           transform: rotate(45deg); | ||||
|         } | ||||
|       } | ||||
|     } | ||||
|  | ||||
|     .footer { | ||||
|       height: 112px; | ||||
|       width: 100%; | ||||
|       position: fixed; | ||||
|       left: 0; | ||||
|       bottom: 0; | ||||
|       background-color: #FFFFFF; | ||||
|       display: flex; | ||||
|       align-items: center; | ||||
|       justify-content: center; | ||||
|  | ||||
|       & > div { | ||||
|         font-size: 28px; | ||||
|         color: #666666; | ||||
|         display:flex; | ||||
|         flex-direction: column; | ||||
|  | ||||
|         & > img { | ||||
|           width: 48px; | ||||
|           height: 48px; | ||||
|         } | ||||
|       } | ||||
|  | ||||
|       & > div:nth-child(1), & > div:nth-child(2) { | ||||
|         width: 135px; | ||||
|         height: 100%; | ||||
|         display: flex; | ||||
|         align-items: center; | ||||
|         justify-content: center; | ||||
|       } | ||||
|  | ||||
|       & > div:last-child { | ||||
|         width: calc(100% - 270px); | ||||
|         height: 100%; | ||||
|         color: #FFFFFF; | ||||
|         display: flex; | ||||
|         align-items: center; | ||||
|         justify-content: center; | ||||
|         background-color: #1365DD; | ||||
|       } | ||||
|  | ||||
|       & > label { | ||||
|         font-size: 36px; | ||||
|         font-weight: 400; | ||||
|         color: #999999; | ||||
|       } | ||||
|  | ||||
|       /*img {*/ | ||||
|       /*  width: 158px;*/ | ||||
|       /*  height: 104px;*/ | ||||
|       /*  position: absolute;*/ | ||||
|       /*  right: 0;*/ | ||||
|       /*  top: 0;*/ | ||||
|       /*}*/ | ||||
|     } | ||||
|  | ||||
|     .cancel { | ||||
|       color: #ffffff; | ||||
|       font-size: 36px; | ||||
|       background-color: #005DFF | ||||
|     } | ||||
|   } | ||||
| </style> | ||||
| @@ -1,226 +0,0 @@ | ||||
| <template> | ||||
|   <div class="meeting-list"> | ||||
|     <div class="card" v-for="(item,index) in list" :key="index" @click="detail(item)"> | ||||
|       <header> | ||||
|         <span>{{item.title}}</span> | ||||
|         <span> | ||||
|           <span v-if="index==2">保存于</span> | ||||
|           {{item.createTime}}</span> | ||||
|       </header> | ||||
|       <u-row justify="between"> | ||||
|         <div class="time"> | ||||
|           <span>{{item.startTime|format}}</span> | ||||
|           <span>{{item.startTime|formatDate(0)}}年{{item.startTime|formatDate(1)}}月{{item.startTime|formatDate(2)}}日 周{{item.startTime|formatWeek}}</span> | ||||
|         </div> | ||||
|         <div class="arrow"></div> | ||||
|         <div class="time"> | ||||
|           <span>{{item.endTime|format}}</span> | ||||
|           <span>{{item.endTime|formatDate(0)}}年{{item.endTime|formatDate(1)}}月{{item.endTime|formatDate(2)}}日 周{{item.endTime|formatWeek}}</span> | ||||
|         </div> | ||||
|       </u-row> | ||||
|       <u-row class="info"> | ||||
|         <span>发起人员:</span> | ||||
|         <AiOpenData type="userName" :openid="item.createUserId"/> | ||||
|       </u-row> | ||||
|       <u-gap height="20"></u-gap> | ||||
|       <u-row class="info"> | ||||
|         <span>会议地点:</span> | ||||
|         <span>{{item.address}}</span> | ||||
|       </u-row> | ||||
|       <div class="tag" v-if="item.status!=0" :style="{background:'url(' + $cdn + tag(item.status) +')'}"></div> | ||||
|     </div> | ||||
|     <u-loadmore :status="status" v-if="list.length"/> | ||||
|     <AiEmpty v-if="!list.length"></AiEmpty> | ||||
|     <AiBack/> | ||||
|   </div> | ||||
| </template> | ||||
|  | ||||
| <script> | ||||
|  | ||||
|   export default { | ||||
|     name: "meetingList", | ||||
|     props: { | ||||
|       params: { | ||||
|         type: [String, Number, Object], | ||||
|       } | ||||
|     }, | ||||
|     data() { | ||||
|       return { | ||||
|         list: [], | ||||
|         current: 1, | ||||
|         index: null, | ||||
|         status: "加载更多", | ||||
|       } | ||||
|     }, | ||||
|  | ||||
|     onLoad(opt) { | ||||
|       this.index = opt.index | ||||
|       uni.setNavigationBarTitle({ | ||||
|         title: opt.index == 0 ? "历史会议" : "草稿箱" | ||||
|       }); | ||||
|       this.getData(); | ||||
|     }, | ||||
|  | ||||
|     methods: { | ||||
|       detail({id}) { | ||||
|         let url | ||||
|         if (this.index == 2) { | ||||
|           url = "/apps/AppMeetingNotice/addMeeting?id=" + id | ||||
|         } else { | ||||
|           url = "/apps/AppMeetingNotice/detail?id=" + id | ||||
|         } | ||||
|         uni.navigateTo({url}) | ||||
|       }, | ||||
|       tag(status) { | ||||
|         return { | ||||
|           "1": 'common/1wks.png', | ||||
|           "2": 'common/1jxz.png', | ||||
|           "3": 'common/1yqx.png', | ||||
|           "4": 'common/1yjs.png' | ||||
|         }[status] | ||||
|       }, | ||||
|       getData() { | ||||
|         this.$http.post("/app/appmeetinginfo/list", null, { | ||||
|           params: { | ||||
|             listType: this.index == 0 ? "2" : '0', | ||||
|             meetingStatus: this.index == 0 ? "4" : "0", | ||||
|             size: 10, | ||||
|             current: this.current, | ||||
|           } | ||||
|         }).then(res => { | ||||
|           if (res && res.data) { | ||||
|             if (this.current > 1 && this.current > res.data.pages) { | ||||
|               this.status = "已经到底啦" | ||||
|             } | ||||
|             this.list = this.current > 1 ? [...this.list, ...res.data.records] : res.data.records | ||||
|           } | ||||
|         }) | ||||
|       }, | ||||
|     }, | ||||
|  | ||||
|     onReachBottom() { | ||||
|       this.current ++; | ||||
|       this.getData(); | ||||
|     }, | ||||
|  | ||||
|     filters: { | ||||
|       format(date) { | ||||
|         return date.split(" ")[1].substr(0, 5) | ||||
|       }, | ||||
|       formatDate(date, index) { | ||||
|         return date.split(" ")[0].split("-")[index] | ||||
|       }, | ||||
|       formatWeek(date) { | ||||
|         return "日一二三四五六".charAt((new Date(date.split(" ")[0]).getDay())) | ||||
|       } | ||||
|     }, | ||||
|   } | ||||
| </script> | ||||
|  | ||||
| <style lang="scss" scoped> | ||||
|   .meeting-list { | ||||
|     min-height: 100%; | ||||
|     background-color: #F5F5F5; | ||||
|     box-sizing: border-box; | ||||
|     padding: 32px; | ||||
|  | ||||
|     .card { | ||||
|       background-color: #FFFFFF; | ||||
|       box-sizing: border-box; | ||||
|       padding: 32px; | ||||
|       border-radius: 8px; | ||||
|       margin-bottom: 32px; | ||||
|       position: relative; | ||||
|  | ||||
|       &:last-child { | ||||
|         margin-bottom: 0; | ||||
|       } | ||||
|  | ||||
|       & > header { | ||||
|         width: 95%; | ||||
|         font-size: 32px; | ||||
|         font-weight: 600; | ||||
|         color: #333333; | ||||
|         display: flex; | ||||
|         flex-direction: column; | ||||
|  | ||||
|         & > span:last-child { | ||||
|           font-size: 28px; | ||||
|           font-weight: 400; | ||||
|           color: #999999; | ||||
|           margin-top: 10px; | ||||
|         } | ||||
|       } | ||||
|  | ||||
|       .time { | ||||
|         display: flex; | ||||
|         flex-direction: column; | ||||
|         margin: 46px 0; | ||||
|  | ||||
|         & > span:first-child { | ||||
|           font-size: 60px; | ||||
|           font-weight: 600; | ||||
|           color: #333333; | ||||
|           line-height: 84px; | ||||
|         } | ||||
|  | ||||
|         & > span:last-child { | ||||
|           font-size: 22px; | ||||
|           color: #333333; | ||||
|         } | ||||
|       } | ||||
|  | ||||
|       .arrow { | ||||
|         width: 28px; | ||||
|         height: 68px; | ||||
|         overflow: hidden; | ||||
|         position: relative; | ||||
|         transform: rotate(180deg); | ||||
|  | ||||
|         &:before, &:after { | ||||
|           content: ""; | ||||
|           width: 50px; | ||||
|           height: 50px; | ||||
|           position: absolute; | ||||
|           transform: scaleY(1.3) translate(30%, -40px) rotate(45deg); | ||||
|         } | ||||
|  | ||||
|         &:before { | ||||
|           top: 59px; | ||||
|           background-color: #CCCCCC; | ||||
|         } | ||||
|  | ||||
|         &:after { | ||||
|           left: 7px; | ||||
|           top: 59px; | ||||
|           background-color: #FFFFFF; | ||||
|         } | ||||
|       } | ||||
|  | ||||
|       .info { | ||||
|         flex-wrap: nowrap; | ||||
|  | ||||
|         & > span:first-child { | ||||
|           flex-shrink: 0; | ||||
|           font-size: 30px; | ||||
|           color: #999999; | ||||
|         } | ||||
|  | ||||
|         & > span:last-child { | ||||
|           font-size: 30px; | ||||
|           color: #343D65; | ||||
|         } | ||||
|       } | ||||
|  | ||||
|       .tag { | ||||
|         width: 112px; | ||||
|         height: 112px; | ||||
|         background-repeat: no-repeat !important; | ||||
|         background-size: 100% 100% !important; | ||||
|         position: absolute; | ||||
|         top: 0; | ||||
|         right: 0; | ||||
|       } | ||||
|     } | ||||
|   } | ||||
| </style> | ||||
| @@ -1,360 +0,0 @@ | ||||
| <template> | ||||
|   <div class="detail" v-if="pageShow"> | ||||
|     <template v-if="detailObj.status!=2"> | ||||
|       <div class="card"> | ||||
|         <header>{{ detailObj.title }}</header> | ||||
|         <u-gap height="16"></u-gap> | ||||
|         <u-row> | ||||
|           <span>发布人:</span> | ||||
|           <span v-if="detailObj.createUserId"> | ||||
|             <AiOpenData type="userName" :openid="detailObj.createUserId"></AiOpenData> | ||||
|           </span> | ||||
|         </u-row> | ||||
|         <u-gap height="8"></u-gap> | ||||
|         <u-row> | ||||
|           <span>发布部门:</span> | ||||
|           <span v-if="detailObj.unitName"> | ||||
|             <AiOpenData type="departmentName" :openid="detailObj.unitName"></AiOpenData> | ||||
|           </span> | ||||
|         </u-row> | ||||
|         <u-gap height="8"></u-gap> | ||||
|         <u-row> | ||||
|           <span>发布日期:</span> | ||||
|           <span>{{ detailObj.releaseTime }}</span> | ||||
|         </u-row> | ||||
|         <u-gap height="8"></u-gap> | ||||
|       </div> | ||||
|  | ||||
|       <div class="card"> | ||||
|         <div class="label">公告内容</div> | ||||
|         <u-parse :html="detailObj.content"></u-parse> | ||||
|       </div> | ||||
|  | ||||
|       <div class="card" style="padding-top: 0" v-if="detailObj.files && detailObj.files.length"> | ||||
|         <div class="label">相关附件</div> | ||||
|         <div class="file" v-for="(item,index) in detailObj.files" :key="index" @click="preFile(item)"> | ||||
|           <u-row justify="between"> | ||||
|             <label class="left"> | ||||
|               <img :src="$cdn + 'common/appendix.png'" alt=""> | ||||
|               <span>{{ item.name }}.{{ item.postfix }}</span> | ||||
|             </label> | ||||
|             <span>{{ (item.size / 1024).toFixed(2) }}KB</span> | ||||
|           </u-row> | ||||
|         </div> | ||||
|       </div> | ||||
|  | ||||
|       <div class="card" @click="handleClick"> | ||||
|         <u-row justify="between" class="item"> | ||||
|           <span>接收对象</span> | ||||
|           <div class="right"> | ||||
|             <em>{{ detailObj.readNum }}人</em>已读 | ||||
|             <em>{{ detailObj.unReadNum }}人</em>未读 | ||||
|             <div class="arrow"></div> | ||||
|           </div> | ||||
|         </u-row> | ||||
|       </div> | ||||
|     </template> | ||||
|     <AiEmpty description="该通知已撤回" v-else/> | ||||
|     <AiBack/> | ||||
|   </div> | ||||
| </template> | ||||
|  | ||||
| <script> | ||||
|   import {mapActions} from "vuex"; | ||||
|  | ||||
|   export default { | ||||
|     name: "detail", | ||||
|     data() { | ||||
|       return { | ||||
|         detailObj: {}, | ||||
|         id: null, | ||||
|         pageShow: false, | ||||
|         flag: false, | ||||
|       } | ||||
|     }, | ||||
|  | ||||
|     onLoad(opt) { | ||||
|       this.id = opt.id; | ||||
|       this.flag = opt.flag; | ||||
|     }, | ||||
|  | ||||
|     created() { | ||||
|       this.injectJWeixin(['sendChatMessage']).then(() => { | ||||
|         this.getDetail() | ||||
|       }) | ||||
|     }, | ||||
|  | ||||
|     onShow() { | ||||
|       document.title = "公告详情"; | ||||
|       wx.hideOptionMenu(); | ||||
|     }, | ||||
|  | ||||
|     methods: { | ||||
|       ...mapActions(['previewFile', 'injectJWeixin']), | ||||
|       preFile(e) { | ||||
|         if ([".jpg", ".png", ".gif"].includes(e.postfix.toLowerCase())) { | ||||
|           uni.previewImage({ | ||||
|             current: e.url, | ||||
|             urls: [e.url] | ||||
|           }) | ||||
|         } else { | ||||
|           this.previewFile({...e}) | ||||
|         } | ||||
|       }, | ||||
|       getDetail() { | ||||
|         this.$http.post("/app/appannouncement/detail", null, { | ||||
|           params: { | ||||
|             id: this.id, | ||||
|             detail: this.flag | ||||
|           } | ||||
|         }).then(res => { | ||||
|           if (res && res.data) { | ||||
|             this.detailObj = res.data; | ||||
|             this.pageShow = true | ||||
|           } | ||||
|         }) | ||||
|       }, | ||||
|       handleClick() { | ||||
|         uni.navigateTo({ | ||||
|           url:"/apps/AppNotification/read?id=" + this.id, | ||||
|         }) | ||||
|       } | ||||
|     }, | ||||
|   } | ||||
| </script> | ||||
|  | ||||
| <style lang="scss" scoped> | ||||
|   .detail { | ||||
|     min-height: 100%; | ||||
|     background-color: #F5F5F5; | ||||
|     padding-bottom: 140px; | ||||
|  | ||||
|     ::v-deep .content { | ||||
|       padding: 0; | ||||
|     } | ||||
|  | ||||
|     .card { | ||||
|       background-color: #FFFFFF; | ||||
|       margin-bottom: 8px; | ||||
|       box-sizing: border-box; | ||||
|       padding: 16px 32px; | ||||
|  | ||||
|       header { | ||||
|         font-size: 40px; | ||||
|         font-weight: 600; | ||||
|         color: #333333; | ||||
|         line-height: 64px; | ||||
|         letter-spacing: 1px; | ||||
|       } | ||||
|  | ||||
|       .u-row { | ||||
|         & > div { | ||||
|           border-radius: 50%; | ||||
|           text-align: center; | ||||
|           font-size: 22px; | ||||
|           font-weight: bold; | ||||
|           display: flex; | ||||
|           align-items: center; | ||||
|           justify-content: center; | ||||
|         } | ||||
|  | ||||
|         & > span { | ||||
|           font-size: 30px; | ||||
|           color: #343D65; | ||||
|           line-height: 48px; | ||||
|         } | ||||
|  | ||||
|         & > span:last-child { | ||||
|           font-size: 30px; | ||||
|           /*color: #343D65;*/ | ||||
|           /*margin-left: 16px;*/ | ||||
|           line-height: 48px; | ||||
|         } | ||||
|  | ||||
|         .title { | ||||
|           width: 490px; | ||||
|           height: 112px; | ||||
|           display: flex; | ||||
|           align-items: center; | ||||
|           font-size: 32px; | ||||
|           color: #333333; | ||||
|           overflow: hidden; | ||||
|           text-overflow: ellipsis; | ||||
|           white-space: nowrap; | ||||
|         } | ||||
|  | ||||
|         .right { | ||||
|           font-size: 28px; | ||||
|           display: flex; | ||||
|           align-items: center; | ||||
|           color: #666666; | ||||
|  | ||||
|           .arrow { | ||||
|             width: 16px; | ||||
|             height: 16px; | ||||
|             border-top: 3px solid #CCCCCC; | ||||
|             border-right: 3px solid #CCCCCC; | ||||
|             transform: rotate(45deg); | ||||
|           } | ||||
|         } | ||||
|       } | ||||
|  | ||||
|       .item { | ||||
|         position: relative; | ||||
|         height: 80px; | ||||
|  | ||||
|         &:after { | ||||
|           width: 100%; | ||||
|           height: 1px; | ||||
|           background-color: rgba(216, 221, 230, 0.5); | ||||
|           content: ""; | ||||
|           position: absolute; | ||||
|           left: 0; | ||||
|           bottom: 0; | ||||
|         } | ||||
|       } | ||||
|  | ||||
|       & > span { | ||||
|         font-size: 32px; | ||||
|         color: #333333; | ||||
|         line-height: 48px; | ||||
|         letter-spacing: 1px; | ||||
|         display: inline-block; | ||||
|       } | ||||
|  | ||||
|       .label { | ||||
|         height: 80px; | ||||
|         font-size: 32px; | ||||
|         color: #333333; | ||||
|         display: flex; | ||||
|         align-items: center; | ||||
|         margin-bottom: 16px; | ||||
|  | ||||
|         & > em { | ||||
|           font-style: normal; | ||||
|           font-size: 32px; | ||||
|           color: #1365DD; | ||||
|         } | ||||
|       } | ||||
|  | ||||
|       .file { | ||||
|         height: 128px; | ||||
|         background: #FFFFFF; | ||||
|         border-radius: 8px; | ||||
|         border: 1px solid #CCCCCC; | ||||
|         box-sizing: border-box; | ||||
|         padding: 0 16px; | ||||
|         margin-bottom: 32px; | ||||
|  | ||||
|         & > .u-row { | ||||
|           height: 100%; | ||||
|  | ||||
|           .left { | ||||
|             width: 476px; | ||||
|             display: flex; | ||||
|             align-items: center; | ||||
|             word-break: break-all; | ||||
|  | ||||
|             & > img { | ||||
|               flex-shrink: 0; | ||||
|               width: 96px; | ||||
|               height: 96px; | ||||
|             } | ||||
|  | ||||
|             & > span { | ||||
|               font-size: 32px; | ||||
|               color: #333333; | ||||
|               display: inline-block; | ||||
|               line-height: 44px; | ||||
|               overflow: hidden; | ||||
|               text-overflow: ellipsis; | ||||
|               display: -webkit-box; | ||||
|               -webkit-box-orient: vertical; | ||||
|               -webkit-line-clamp: 2; | ||||
|             } | ||||
|           } | ||||
|  | ||||
|           & > span { | ||||
|             font-size: 28px; | ||||
|             color: #999999; | ||||
|           } | ||||
|         } | ||||
|       } | ||||
|  | ||||
|       .active { | ||||
|         background-color: #F3F6F9; | ||||
|       } | ||||
|  | ||||
|       & > text { | ||||
|         width: 100%; | ||||
|         display: inline-block; | ||||
|         font-size: 30px; | ||||
|         color: #649EFD; | ||||
|         text-align: center; | ||||
|       } | ||||
|  | ||||
|       .progress { | ||||
|         height: 12px; | ||||
|         background: #F2F4FC; | ||||
|         border-radius: 12px; | ||||
|         position: relative; | ||||
|         margin: 16px 0 64px 0; | ||||
|  | ||||
|         .pro-active { | ||||
|           height: 12px; | ||||
|           background: #639EFD; | ||||
|           border-radius: 12px; | ||||
|           position: absolute; | ||||
|           left: 0; | ||||
|           top: 0; | ||||
|         } | ||||
|  | ||||
|       } | ||||
|  | ||||
|       em { | ||||
|         font-style: normal; | ||||
|         font-size: 28px; | ||||
|         color: #1365DD; | ||||
|       } | ||||
|  | ||||
|       ::v-deep .u-collapse { | ||||
|         position: relative; | ||||
|  | ||||
|         &:after { | ||||
|           content: ""; | ||||
|           width: 718px; | ||||
|           height: 1px; | ||||
|           background-color: rgba(216, 221, 230, 0.5); | ||||
|           position: absolute; | ||||
|           left: 0; | ||||
|           bottom: 0; | ||||
|         } | ||||
|  | ||||
|         .u-collapse-head { | ||||
|           padding: 40px 0; | ||||
|         } | ||||
|  | ||||
|         .u-collapse-content { | ||||
|           font-size: 32px; | ||||
|           color: #333333; | ||||
|           line-height: 48px; | ||||
|           letter-spacing: 1px; | ||||
|         } | ||||
|       } | ||||
|     } | ||||
|  | ||||
|     .footer { | ||||
|       height: 112px; | ||||
|       width: 100%; | ||||
|       position: fixed; | ||||
|       left: 0; | ||||
|       bottom: 0; | ||||
|       background: #1365DD; | ||||
|       display: flex; | ||||
|       align-items: center; | ||||
|       justify-content: center; | ||||
|       font-size: 36px; | ||||
|       color: #FFFFFF; | ||||
|     } | ||||
|   } | ||||
| </style> | ||||
| @@ -2,7 +2,8 @@ | ||||
|   <div class="AppWalkask"> | ||||
|     <template v-if="isList"> | ||||
|       <div class="header-top"> | ||||
|         <u-tabs :list="tabList" :is-scroll="false" :current="currentTabs" height="96" bg-color="#3975C6" inactive-color="#fff" active-color="#fff" @change="change"></u-tabs> | ||||
|         <u-tabs :list="tabList" :is-scroll="false" :current="currentTabs" height="96" bg-color="#3975C6" | ||||
|                 inactive-color="#fff" active-color="#fff" @change="change"></u-tabs> | ||||
|       </div> | ||||
|  | ||||
|       <div class="header-middle"> | ||||
| @@ -11,10 +12,13 @@ | ||||
|             <div class="left"> | ||||
|               <img src="./components/images/icon2.png" alt=""/> | ||||
|  | ||||
|               <AiAreaPicker v-model="areaId" ref="areaIds" :areaId="areaId" @select="areaSelect" style="color: #fff"> </AiAreaPicker> | ||||
|               <AiAreaPicker v-model="areaId" ref="areaIds" :areaId="areaId" @select="areaSelect" | ||||
|                             style="color: #fff"></AiAreaPicker> | ||||
|             </div> | ||||
|  | ||||
|             <u-search v-model="keyword" :clearabled="true" placeholder="请输入标题" :show-action="false" bg-color="#1F5CAF" search-icon-color="#E2E8F1" color="#E2E8F1" height="58" @search="handerSearch" @clear="handerClear"></u-search> | ||||
|             <u-search v-model="keyword" :clearabled="true" placeholder="请输入标题" :show-action="false" bg-color="#1F5CAF" | ||||
|                       search-icon-color="#E2E8F1" color="#E2E8F1" height="58" @search="handerSearch" | ||||
|                       @clear="handerClear"></u-search> | ||||
|           </div> | ||||
|  | ||||
|           <template v-if="data.length > 0"> | ||||
| @@ -29,7 +33,8 @@ | ||||
|                 <div class="cards-hint">{{ item.description }}</div> | ||||
|  | ||||
|                 <div class="imgs"> | ||||
|                   <img :src="items.url" alt="" v-for="(items, i) in item.images" :key="i" @click.stop="previewImage(item.images, items.url)" /> | ||||
|                   <img :src="items.url" alt="" v-for="(items, i) in item.images" :key="i" | ||||
|                        @click.stop="previewImage(item.images, items.url)"/> | ||||
|                 </div> | ||||
|  | ||||
|                 <div class="cards-bottom"> | ||||
| @@ -57,10 +62,13 @@ | ||||
|             <div class="left"> | ||||
|               <img src="./components/images/icon2.png" alt=""/> | ||||
|  | ||||
|               <AiAreaPicker v-model="areaId" ref="areaIds" :areaId="areaId" @select="areaSelect" style="color: #fff"> </AiAreaPicker> | ||||
|               <AiAreaPicker v-model="areaId" ref="areaIds" :areaId="areaId" @select="areaSelect" | ||||
|                             style="color: #fff"></AiAreaPicker> | ||||
|             </div> | ||||
|  | ||||
|             <u-search v-model="keyword" :clearabled="true" placeholder="请输入标题" :show-action="false" bg-color="#1F5CAF" search-icon-color="#E2E8F1" color="#E2E8F1" height="58" @search="handerSearch" @clear="handerClear"></u-search> | ||||
|             <u-search v-model="keyword" :clearabled="true" placeholder="请输入标题" :show-action="false" bg-color="#1F5CAF" | ||||
|                       search-icon-color="#E2E8F1" color="#E2E8F1" height="58" @search="handerSearch" | ||||
|                       @clear="handerClear"></u-search> | ||||
|           </div> | ||||
|  | ||||
|           <template v-if="data.length > 0"> | ||||
| @@ -75,7 +83,8 @@ | ||||
|                 <div class="cards-hint">{{ item.description }}</div> | ||||
|  | ||||
|                 <div class="imgs"> | ||||
|                   <img :src="items.url" alt="" v-for="(items, i) in item.images" :key="i" @click.stop="previewImage(item.images, items.url)" /> | ||||
|                   <img :src="items.url" alt="" v-for="(items, i) in item.images" :key="i" | ||||
|                        @click.stop="previewImage(item.images, items.url)"/> | ||||
|                 </div> | ||||
|  | ||||
|                 <div class="cards-bottom"> | ||||
| @@ -99,7 +108,8 @@ | ||||
|         </div> | ||||
|       </div> | ||||
|  | ||||
|       <u-modal v-model="deletShow" content="您确认要删除该条信息吗?" :show-cancel-button="true" :mask-close-able="true" :show-title="false" @confirm="delet"></u-modal> | ||||
|       <u-modal v-model="deletShow" content="您确认要删除该条信息吗?" :show-cancel-button="true" :mask-close-able="true" | ||||
|                :show-title="false" @confirm="delet"></u-modal> | ||||
|  | ||||
|       <AiFixedBtn> | ||||
|         <div class="addBtn iconfont iconfont-iconfangda" @tap.stop="goDetail()"/> | ||||
| @@ -152,7 +162,8 @@ export default { | ||||
|     this.areaId = this.user.areaId | ||||
|     this.getList() | ||||
|   }, | ||||
|   mounted() {}, | ||||
|   mounted() { | ||||
|   }, | ||||
|   methods: { | ||||
|     getList() { | ||||
|       this.$http | ||||
| @@ -247,11 +258,13 @@ export default { | ||||
| <style lang="scss" scoped> | ||||
| .AppWalkask { | ||||
|   height: 100%; | ||||
|  | ||||
|   .header-middle { | ||||
|     .currentLeft, | ||||
|     .currentRight { | ||||
|       padding-bottom: 56px; | ||||
|       background: #fff; | ||||
|  | ||||
|       .currentLeft-top { | ||||
|         display: flex; | ||||
|         align-items: center; | ||||
| @@ -262,6 +275,7 @@ export default { | ||||
|           width: 40%; | ||||
|           display: flex; | ||||
|           align-items: center; | ||||
|  | ||||
|           img { | ||||
|             width: 48px; | ||||
|             height: 48px; | ||||
| @@ -272,6 +286,7 @@ export default { | ||||
|       .AiCard { | ||||
|         ::v-deep .start { | ||||
|           border-bottom: 1px solid #dddddd; | ||||
|  | ||||
|           .fill { | ||||
|             .cards-left { | ||||
|               .walkName { | ||||
| @@ -280,6 +295,7 @@ export default { | ||||
|                 margin-right: 16px; | ||||
|                 color: #333; | ||||
|               } | ||||
|  | ||||
|               .tags { | ||||
|                 display: inline-block; | ||||
|                 padding: 6px 16px; | ||||
| @@ -290,6 +306,7 @@ export default { | ||||
|                 margin-left: 16px; | ||||
|               } | ||||
|             } | ||||
|  | ||||
|             .cards-hint { | ||||
|               margin-top: 16px; | ||||
|               font-size: 30px; | ||||
| @@ -302,17 +319,21 @@ export default { | ||||
|               -webkit-line-clamp: 2; | ||||
|               -webkit-box-orient: vertical; | ||||
|             } | ||||
|  | ||||
|             .imgs { | ||||
|               margin-top: 20px; | ||||
|  | ||||
|               img { | ||||
|                 width: 221px; | ||||
|                 height: 221px; | ||||
|                 margin-right: 8px; | ||||
|               } | ||||
|  | ||||
|               img:nth-child(3n + 0) { | ||||
|                 margin-right: 0; | ||||
|               } | ||||
|             } | ||||
|  | ||||
|             .cards-bottom { | ||||
|               margin: 24px 0 16px 0; | ||||
|               font-size: 24px; | ||||
| @@ -341,6 +362,7 @@ export default { | ||||
|         color: #b7b7b7; | ||||
|         margin-top: 5px; | ||||
|         font-weight: 800; | ||||
|  | ||||
|         .toAdds { | ||||
|           color: #467dfe; | ||||
|         } | ||||
|   | ||||
| @@ -4,7 +4,8 @@ | ||||
|       <div class="header-description"> | ||||
|         <u-form :model="forms" ref="uForm" label-width="auto"> | ||||
|           <u-form-item label="区域选择" prop="areaId" style="position: relative"> | ||||
|             <AiAreaPicker v-model="forms.areaId" ref="areaIds" :areaId="areaIdProps" @select="areaSelect" style="color: #333"> </AiAreaPicker> | ||||
|             <AiAreaPicker v-model="forms.areaId" ref="areaIds" :areaId="areaIdProps" @select="areaSelect" | ||||
|                           style="color: #333"></AiAreaPicker> | ||||
|           </u-form-item> | ||||
|  | ||||
|           <u-form-item label="走访对象" prop="create_user_name" required style="position: relative"> | ||||
| @@ -16,18 +17,21 @@ | ||||
|           <u-form-item label="现实状态" prop="reality" style="position: relative"> | ||||
|             <u-input v-model="forms.reality" disabled placeholder="请选择走访慰问对象" @click="showStstus = true"/> | ||||
|  | ||||
|             <u-select v-model="showStstus" :list="$dict.getDict('realityStatus')" value-name="dictValue" label-name="dictName" @confirm="realityStstus"></u-select> | ||||
|             <u-select v-model="showStstus" :list="$dict.getDict('realityStatus')" value-name="dictValue" | ||||
|                       label-name="dictName" @confirm="realityStstus"></u-select> | ||||
|  | ||||
|             <u-icon name="arrow-right" color="#CCCCCC" style="position: absolute; top: 25px; right: 30px"></u-icon> | ||||
|           </u-form-item> | ||||
|  | ||||
|           <u-form-item label="入户走访事项" prop="title" required label-position="top"> | ||||
|             <u-input v-model="forms.title" placeholder="请输入入户走访事项(30字以内)" type="textarea" auto-height height="60" maxlength="30" /> | ||||
|             <u-input v-model="forms.title" placeholder="请输入入户走访事项(30字以内)" type="textarea" auto-height height="60" | ||||
|                      maxlength="30"/> | ||||
|             <div>{{ forms.title.length }}/30</div> | ||||
|           </u-form-item> | ||||
|  | ||||
|           <u-form-item label="入户走访内容" prop="description" label-position="top"> | ||||
|             <u-input v-model="forms.description" placeholder="请输入入户走访事项(500字以内)" type="textarea" auto-height height="60" maxlength="500" /> | ||||
|             <u-input v-model="forms.description" placeholder="请输入入户走访事项(500字以内)" type="textarea" auto-height height="60" | ||||
|                      maxlength="500"/> | ||||
|             <div>{{ forms.description.length }}/500</div> | ||||
|           </u-form-item> | ||||
|  | ||||
| @@ -187,20 +191,24 @@ export default { | ||||
| .add { | ||||
|   height: 100%; | ||||
|   padding-bottom: 112px; | ||||
|  | ||||
|   .header-description { | ||||
|     ::v-deep .u-form { | ||||
|       .u-form-item { | ||||
|         margin-bottom: 16px; | ||||
|  | ||||
|         .u-form-item__body { | ||||
|           .u-form-item--right__content__slot { | ||||
|             padding-bottom: 0; | ||||
|           } | ||||
|         } | ||||
|       } | ||||
|  | ||||
|       .u-form-item:last-child { | ||||
|         margin-bottom: 0; | ||||
|         padding-bottom: 20px !important; | ||||
|       } | ||||
|  | ||||
|       .avatars { | ||||
|         .u-form-item__body { | ||||
|           .default { | ||||
|   | ||||
| @@ -54,7 +54,8 @@ export default { | ||||
|       this.getDetail() | ||||
|     }) | ||||
|   }, | ||||
|   mounted() {}, | ||||
|   mounted() { | ||||
|   }, | ||||
|   methods: { | ||||
|     getDetail() { | ||||
|       this.$http.post(`/app/appvisitvondolence/queryDetailById?id=${this.params.id}`).then((res) => { | ||||
| @@ -73,14 +74,17 @@ export default { | ||||
| <style lang="scss" scoped> | ||||
| .detail { | ||||
|   height: 100%; | ||||
|  | ||||
|   .header-top { | ||||
|     background: #3975c6; | ||||
|     padding: 24px 32px 32px; | ||||
|  | ||||
|     .hint { | ||||
|       font-size: 40px; | ||||
|       font-weight: 500; | ||||
|       color: #ffffff; | ||||
|     } | ||||
|  | ||||
|     .walk-item { | ||||
|       font-size: 28px; | ||||
|       color: #d7e3f3; | ||||
| @@ -91,17 +95,21 @@ export default { | ||||
|   .header-middle { | ||||
|     background: #fff; | ||||
|     padding: 32px 32px 32px 32px; | ||||
|  | ||||
|     .hint-con { | ||||
|       font-size: 32px; | ||||
|       color: #666666; | ||||
|     } | ||||
|  | ||||
|     .imgs { | ||||
|       margin: 32px 0 48px 0; | ||||
|  | ||||
|       img { | ||||
|         width: 218px; | ||||
|         height: 218px; | ||||
|         margin-right: 16px; | ||||
|       } | ||||
|  | ||||
|       img:nth-child(3n + 0) { | ||||
|         margin-right: 0; | ||||
|       } | ||||
|   | ||||
| @@ -1,7 +1,8 @@ | ||||
| <template> | ||||
|   <div class="walkObject"> | ||||
|     <div class="header-top"> | ||||
|       <u-search v-model="keyword" placeholder="搜索" :show-action="false" bg-color="#F5F5F5" search-icon-color="#CCCCCC" placeholder-color="#999999" @search="handerSearch" @clear="handerClear"></u-search> | ||||
|       <u-search v-model="keyword" placeholder="搜索" :show-action="false" bg-color="#F5F5F5" search-icon-color="#CCCCCC" | ||||
|                 placeholder-color="#999999" @search="handerSearch" @clear="handerClear"></u-search> | ||||
|     </div> | ||||
|  | ||||
|     <div class="header-middle"> | ||||
| @@ -12,7 +13,8 @@ | ||||
|       <div class="Checkbox"> | ||||
|         <div v-if="DiyList.length > 0"> | ||||
|           <u-collapse event-type="close" arrowaccordion> | ||||
|             <u-collapse-item v-for="(item, index) in DiyList" :title="item.menuLevel2Name" :key="index" @change="selectUser(item)"> | ||||
|             <u-collapse-item v-for="(item, index) in DiyList" :title="item.menuLevel2Name" :key="index" | ||||
|                              @change="selectUser(item)"> | ||||
|               <u-radio-group v-model="value"> | ||||
|                 <u-radio v-for="(item, index) in userList" :key="index" :name="item.create_user_name"> | ||||
|                   {{ item.create_user_name }} | ||||
| @@ -73,7 +75,8 @@ export default { | ||||
|   created() { | ||||
|     this.getDiyList() | ||||
|   }, | ||||
|   mounted() {}, | ||||
|   mounted() { | ||||
|   }, | ||||
|   methods: { | ||||
|     getDiyList() { | ||||
|       this.$http.post('/app/appapplicationinfo/queryApplicationListByType?type=0').then((res) => { | ||||
| @@ -109,6 +112,7 @@ export default { | ||||
| .walkObject { | ||||
|   background: #ffffff; | ||||
|   padding-bottom: 118px; | ||||
|  | ||||
|   .header-top { | ||||
|     background: #fff; | ||||
|     padding: 20px 32px; | ||||
| @@ -123,10 +127,12 @@ export default { | ||||
|       font-size: 30px; | ||||
|       font-weight: 500; | ||||
|     } | ||||
|  | ||||
|     .empty-div { | ||||
|       height: 16px; | ||||
|       background: #f5f5f5; | ||||
|     } | ||||
|  | ||||
|     .Checkbox { | ||||
|       padding: 0 20px 0 30px; | ||||
|  | ||||
| @@ -153,6 +159,7 @@ export default { | ||||
|     width: 100%; | ||||
|     box-sizing: border-box; | ||||
|     padding: 0 32px; | ||||
|  | ||||
|     .subBtn { | ||||
|       margin: 20px 0 18px 0; | ||||
|       padding: 18px 32px; | ||||
| @@ -161,8 +168,10 @@ export default { | ||||
|       font-size: 32px; | ||||
|       color: #ffffff; | ||||
|     } | ||||
|  | ||||
|     .typeName { | ||||
|       margin: 36px 0 22px 0; | ||||
|  | ||||
|       .typeName-box { | ||||
|         padding: 16px 14px; | ||||
|         background: #eaeef1; | ||||
| @@ -171,6 +180,7 @@ export default { | ||||
|         font-weight: 500; | ||||
|         margin-left: 10px; | ||||
|       } | ||||
|  | ||||
|       .typeName-box:first-child { | ||||
|         margin-left: 0; | ||||
|       } | ||||
|   | ||||
| @@ -9,9 +9,7 @@ | ||||
| <script> | ||||
| export default { | ||||
|   name: "AiAdd", | ||||
|     props: { | ||||
|  | ||||
|     }, | ||||
|   props: {}, | ||||
|   data() { | ||||
|     return {} | ||||
|   }, | ||||
| @@ -48,6 +46,7 @@ | ||||
|   align-items: center; | ||||
|   flex-direction: column; | ||||
|   justify-content: center; | ||||
|  | ||||
|   &:before, &:after { | ||||
|     content: ""; | ||||
|     background: #FFFFFF; | ||||
|   | ||||
| @@ -10,7 +10,8 @@ | ||||
|       </div> | ||||
|       <div class="areaSelector"> | ||||
|         <div class="fixedTop"> | ||||
|           <span v-for="(area, i) in fullArea" :key="area.id" v-text="area.name" :class="{ current: area.id == index }" @click="selectNode(area, i)" /> | ||||
|           <span v-for="(area, i) in fullArea" :key="area.id" v-text="area.name" :class="{ current: area.id == index }" | ||||
|                 @click="selectNode(area, i)"/> | ||||
|         </div> | ||||
|         <span v-text="currentArea.name"/> | ||||
|       </div> | ||||
|   | ||||
| @@ -26,13 +26,13 @@ export default { | ||||
|   justify-content: center; | ||||
|  | ||||
|   .emptyImg { | ||||
|     width: 400 rpx; | ||||
|     height: 240 rpx; | ||||
|     width: 400px; | ||||
|     height: 240px; | ||||
|     margin-top: 112px; | ||||
|   } | ||||
|  | ||||
|   .emptyText { | ||||
|     font-size: 29 rpx; | ||||
|     font-size: 29px; | ||||
|     font-family: PingFangSC-Regular, PingFang SC; | ||||
|     font-weight: 400; | ||||
|     color: rgba(183, 183, 183, 1); | ||||
|   | ||||
| @@ -2,7 +2,8 @@ | ||||
|   <view class="imt-audio"> | ||||
|     <view class="audio-wrapper"> | ||||
|       <view class="audio-number">{{ format(current) }}</view> | ||||
| 			<slider class="audio-slider" :activeColor="color" block-size="16" :value="current" :max="duration || 10" @changing="seek=true,current=$event.detail.value" @change="audio.seek($event.detail.value)"></slider> | ||||
|       <slider class="audio-slider" :activeColor="color" block-size="16" :value="current" :max="duration || 10" | ||||
|               @changing="seek=true,current=$event.detail.value" @change="audio.seek($event.detail.value)"></slider> | ||||
|       <view class="audio-number">{{ format(duration) }}</view> | ||||
|     </view> | ||||
|     <view class="audio-control-wrapper" :style="{color}"> | ||||
| @@ -18,6 +19,7 @@ | ||||
| <script> | ||||
| import stopImg from '../pages/resourcesManage/img/stop-img.png' | ||||
| import playImg from '../pages/resourcesManage/img/play-icon.png' | ||||
|  | ||||
| export default { | ||||
|   data() { | ||||
|     return { | ||||
|   | ||||
| @@ -19,7 +19,8 @@ | ||||
|             <span>联系方式</span> | ||||
|           </div> | ||||
|           <div class="right"> | ||||
|             <input placeholder="请输入" type="number" v-model="form.phone" :maxlength="11" placeholder-style="color: #999; font-size: 30rpx;" /> | ||||
|             <input placeholder="请输入" type="number" v-model="form.phone" :maxlength="11" | ||||
|                    placeholder-style="color: #999; font-size: 30rpx;"/> | ||||
|           </div> | ||||
|         </div> | ||||
|       </div> | ||||
| @@ -64,7 +65,9 @@ | ||||
|           </div> | ||||
|           <div class="right"> | ||||
|             <u-radio-group v-model="form.move"> | ||||
|               <u-radio :name="item.dictValue" v-for="(item, index) in $dict.getDict('fpYesOrNo')" :key="index">{{ item.dictName }}</u-radio> | ||||
|               <u-radio :name="item.dictValue" v-for="(item, index) in $dict.getDict('fpYesOrNo')" :key="index"> | ||||
|                 {{ item.dictName }} | ||||
|               </u-radio> | ||||
|             </u-radio-group> | ||||
|           </div> | ||||
|         </div> | ||||
| @@ -78,7 +81,8 @@ | ||||
|             <span>安置地区</span> | ||||
|           </div> | ||||
|           <div class="right"> | ||||
|             <AiAreaPicker ref="area" class="aiArea" :areaId.sync="form.placeAreaId" mode="custom" all @select="onChange"> | ||||
|             <AiAreaPicker ref="area" class="aiArea" :areaId.sync="form.placeAreaId" mode="custom" all | ||||
|                           @select="onChange"> | ||||
|               <span class="label" v-if="form.placeArea">{{ form.placeArea }}</span> | ||||
|               <i v-else>请选择</i> | ||||
|               <u-icon name="arrow-right" color="#ddd"/> | ||||
| @@ -223,6 +227,7 @@ | ||||
|   .aiArea { | ||||
|     display: flex; | ||||
|     align-items: center; | ||||
|  | ||||
|     .label { | ||||
|       color: #303133 !important; | ||||
|       font-size: 30px; | ||||
|   | ||||
| @@ -133,7 +133,8 @@ | ||||
|             <span>务工时长(月)</span> | ||||
|           </div> | ||||
|           <div class="right"> | ||||
|             <input placeholder="请输入" type="number" v-model="form.workingMonths" placeholder-style="color: #999; font-size: 30rpx;" /> | ||||
|             <input placeholder="请输入" type="number" v-model="form.workingMonths" | ||||
|                    placeholder-style="color: #999; font-size: 30rpx;"/> | ||||
|           </div> | ||||
|         </div> | ||||
|       </div> | ||||
| @@ -147,7 +148,9 @@ | ||||
|           </div> | ||||
|           <div class="right"> | ||||
|             <u-radio-group v-model="form.medicalInsurance"> | ||||
|               <u-radio :name="item.dictValue" v-for="(item, index) in $dict.getDict('fpYesOrNo')" :key="index">{{ item.dictName }}</u-radio> | ||||
|               <u-radio :name="item.dictValue" v-for="(item, index) in $dict.getDict('fpYesOrNo')" :key="index"> | ||||
|                 {{ item.dictName }} | ||||
|               </u-radio> | ||||
|             </u-radio-group> | ||||
|           </div> | ||||
|         </div> | ||||
| @@ -160,7 +163,9 @@ | ||||
|           </div> | ||||
|           <div class="right"> | ||||
|             <u-radio-group v-model="form.sicknessInsurance"> | ||||
|               <u-radio :name="item.dictValue" v-for="(item, index) in $dict.getDict('fpYesOrNo')" :key="index">{{ item.dictName }}</u-radio> | ||||
|               <u-radio :name="item.dictValue" v-for="(item, index) in $dict.getDict('fpYesOrNo')" :key="index"> | ||||
|                 {{ item.dictName }} | ||||
|               </u-radio> | ||||
|             </u-radio-group> | ||||
|           </div> | ||||
|         </div> | ||||
| @@ -173,7 +178,9 @@ | ||||
|           </div> | ||||
|           <div class="right"> | ||||
|             <u-radio-group v-model="form.endowmentInsurance"> | ||||
|               <u-radio :name="item.dictValue" v-for="(item, index) in $dict.getDict('fpYesOrNo')" :key="index">{{ item.dictName }}</u-radio> | ||||
|               <u-radio :name="item.dictValue" v-for="(item, index) in $dict.getDict('fpYesOrNo')" :key="index"> | ||||
|                 {{ item.dictName }} | ||||
|               </u-radio> | ||||
|             </u-radio-group> | ||||
|           </div> | ||||
|         </div> | ||||
| @@ -186,7 +193,9 @@ | ||||
|           </div> | ||||
|           <div class="right"> | ||||
|             <u-radio-group v-model="form.subsistenceAllowance"> | ||||
|               <u-radio :name="item.dictValue" v-for="(item, index) in $dict.getDict('fpYesOrNo')" :key="index">{{ item.dictName }}</u-radio> | ||||
|               <u-radio :name="item.dictValue" v-for="(item, index) in $dict.getDict('fpYesOrNo')" :key="index"> | ||||
|                 {{ item.dictName }} | ||||
|               </u-radio> | ||||
|             </u-radio-group> | ||||
|           </div> | ||||
|         </div> | ||||
| @@ -199,7 +208,9 @@ | ||||
|           </div> | ||||
|           <div class="right"> | ||||
|             <u-radio-group v-model="form.destitute"> | ||||
|               <u-radio :name="item.dictValue" v-for="(item, index) in $dict.getDict('fpYesOrNo')" :key="index">{{ item.dictName }}</u-radio> | ||||
|               <u-radio :name="item.dictValue" v-for="(item, index) in $dict.getDict('fpYesOrNo')" :key="index"> | ||||
|                 {{ item.dictName }} | ||||
|               </u-radio> | ||||
|             </u-radio-group> | ||||
|           </div> | ||||
|         </div> | ||||
| @@ -212,6 +223,7 @@ | ||||
| <script> | ||||
| import AiSelect from '@/components/AiSelect' | ||||
| import AiDate from '@/components/AiDate' | ||||
|  | ||||
| export default { | ||||
|   data() { | ||||
|     return { | ||||
|   | ||||
| @@ -47,14 +47,17 @@ | ||||
|           </div> | ||||
|           <div class="item-info"> | ||||
|             <label>监测员电话</label> | ||||
|             <span style="color: #3D94FB;" @click="call(info.monitoringContactPhone)">{{ info.monitoringContactPhone || '-' }}</span> | ||||
|             <span style="color: #3D94FB;" | ||||
|                   @click="call(info.monitoringContactPhone)">{{ info.monitoringContactPhone || '-' }}</span> | ||||
|           </div> | ||||
|         </div> | ||||
|         <div class="item-wrapper"> | ||||
|           <div class="item-header"> | ||||
|             <div class="left"> | ||||
|               <h2>家庭成员</h2> | ||||
|               <i :style="{color: info.familyList.length ? '#2EA222' : '#FF4466'}">({{ info.familyList.length ? '已填写' : '未填写' }})</i> | ||||
|               <i :style="{color: info.familyList.length ? '#2EA222' : '#FF4466'}">({{ | ||||
|                   info.familyList.length ? '已填写' : '未填写' | ||||
|                 }})</i> | ||||
|             </div> | ||||
|             <span @click="linkTo('/pages/Monitor/FamilyMember?id=' + info.id)">编辑</span> | ||||
|           </div> | ||||
| @@ -71,7 +74,9 @@ | ||||
|           <div class="item-header"> | ||||
|             <div class="left"> | ||||
|               <h2>家庭情况</h2> | ||||
|               <i :style="{color: isFamilySituation ? '#2EA222' : '#FF4466'}">({{ isFamilySituation ? '已填写' : '未填写' }})</i> | ||||
|               <i :style="{color: isFamilySituation ? '#2EA222' : '#FF4466'}">({{ | ||||
|                   isFamilySituation ? '已填写' : '未填写' | ||||
|                 }})</i> | ||||
|             </div> | ||||
|             <span @click="linkTo('/pages/Monitor/FamilySituation?id=' + info.id)">编辑</span> | ||||
|           </div> | ||||
| @@ -132,7 +137,8 @@ | ||||
|             </div> | ||||
|             <p>{{ item.detail }}</p> | ||||
|             <div class="imgs"> | ||||
|               <image :src="img.url" @click="prevImg(item.imgs, img.url)" v-for="(img, index) in item.imgs" :key="index" /> | ||||
|               <image :src="img.url" @click="prevImg(item.imgs, img.url)" v-for="(img, index) in item.imgs" | ||||
|                      :key="index"/> | ||||
|             </div> | ||||
|           </div> | ||||
|         </div> | ||||
| @@ -148,6 +154,7 @@ | ||||
| <script> | ||||
| import AiFixedBtn from '@/components/AiFixedBtn' | ||||
| import AiEmpty from '@/components/AiEmpty/AiEmpty' | ||||
|  | ||||
| export default { | ||||
|   name: 'detail', | ||||
|  | ||||
|   | ||||
| @@ -9,7 +9,9 @@ | ||||
|           </div> | ||||
|           <div class="right"> | ||||
|             <u-radio-group v-model="form.dilapidatedHouse"> | ||||
|               <u-radio :name="item.dictValue" v-for="(item, index) in $dict.getDict('fpYesOrNo')" :key="index">{{ item.dictName }}</u-radio> | ||||
|               <u-radio :name="item.dictValue" v-for="(item, index) in $dict.getDict('fpYesOrNo')" :key="index"> | ||||
|                 {{ item.dictName }} | ||||
|               </u-radio> | ||||
|             </u-radio-group> | ||||
|           </div> | ||||
|         </div> | ||||
| @@ -22,7 +24,9 @@ | ||||
|           </div> | ||||
|           <div class="right"> | ||||
|             <u-radio-group v-model="form.drinkingWaterSafety"> | ||||
|               <u-radio :name="item.dictValue" v-for="(item, index) in $dict.getDict('fpYesOrNo')" :key="index">{{ item.dictName }}</u-radio> | ||||
|               <u-radio :name="item.dictValue" v-for="(item, index) in $dict.getDict('fpYesOrNo')" :key="index"> | ||||
|                 {{ item.dictName }} | ||||
|               </u-radio> | ||||
|             </u-radio-group> | ||||
|           </div> | ||||
|         </div> | ||||
|   | ||||
| @@ -7,7 +7,8 @@ | ||||
|             <span>工资收入</span> | ||||
|           </div> | ||||
|           <div class="right"> | ||||
|             <input placeholder="请输入" v-model="form.income1" type="number" placeholder-style="color: #999; font-size: 30rpx;" /> | ||||
|             <input placeholder="请输入" v-model="form.income1" type="number" | ||||
|                    placeholder-style="color: #999; font-size: 30rpx;"/> | ||||
|           </div> | ||||
|         </div> | ||||
|       </div> | ||||
| @@ -17,7 +18,8 @@ | ||||
|             <span>生产经营收入</span> | ||||
|           </div> | ||||
|           <div class="right"> | ||||
|             <input placeholder="请输入" v-model="form.income2" type="number" placeholder-style="color: #999; font-size: 30rpx;" /> | ||||
|             <input placeholder="请输入" v-model="form.income2" type="number" | ||||
|                    placeholder-style="color: #999; font-size: 30rpx;"/> | ||||
|           </div> | ||||
|         </div> | ||||
|       </div> | ||||
| @@ -27,7 +29,8 @@ | ||||
|             <span>财产性收入</span> | ||||
|           </div> | ||||
|           <div class="right"> | ||||
|             <input placeholder="请输入" v-model="form.income3" type="number" placeholder-style="color: #999; font-size: 30rpx;" /> | ||||
|             <input placeholder="请输入" v-model="form.income3" type="number" | ||||
|                    placeholder-style="color: #999; font-size: 30rpx;"/> | ||||
|           </div> | ||||
|         </div> | ||||
|       </div> | ||||
| @@ -37,7 +40,8 @@ | ||||
|             <span>转移性收入</span> | ||||
|           </div> | ||||
|           <div class="right"> | ||||
|             <input placeholder="请输入" v-model="form.income4" type="number" placeholder-style="color: #999; font-size: 30rpx;" /> | ||||
|             <input placeholder="请输入" v-model="form.income4" type="number" | ||||
|                    placeholder-style="color: #999; font-size: 30rpx;"/> | ||||
|           </div> | ||||
|         </div> | ||||
|       </div> | ||||
| @@ -47,7 +51,8 @@ | ||||
|             <span>理赔收入</span> | ||||
|           </div> | ||||
|           <div class="right"> | ||||
|             <input placeholder="请输入" v-model="form.income8" type="number" placeholder-style="color: #999; font-size: 30rpx;" /> | ||||
|             <input placeholder="请输入" v-model="form.income8" type="number" | ||||
|                    placeholder-style="color: #999; font-size: 30rpx;"/> | ||||
|           </div> | ||||
|         </div> | ||||
|       </div> | ||||
| @@ -59,7 +64,8 @@ | ||||
|             <span>生产经营支出</span> | ||||
|           </div> | ||||
|           <div class="right"> | ||||
|             <input placeholder="请输入" v-model="form.income5" type="number" placeholder-style="color: #999; font-size: 30rpx;" /> | ||||
|             <input placeholder="请输入" v-model="form.income5" type="number" | ||||
|                    placeholder-style="color: #999; font-size: 30rpx;"/> | ||||
|           </div> | ||||
|         </div> | ||||
|       </div> | ||||
| @@ -69,7 +75,8 @@ | ||||
|             <span>合规自然支出</span> | ||||
|           </div> | ||||
|           <div class="right"> | ||||
|             <input placeholder="请输入" v-model="form.income9" type="number" placeholder-style="color: #999; font-size: 30rpx;" /> | ||||
|             <input placeholder="请输入" v-model="form.income9" type="number" | ||||
|                    placeholder-style="color: #999; font-size: 30rpx;"/> | ||||
|           </div> | ||||
|         </div> | ||||
|       </div> | ||||
|   | ||||
| @@ -86,7 +86,9 @@ | ||||
|           </div> | ||||
|           <div class="right"> | ||||
|             <u-radio-group v-model="form.isRisk" @change="onRiskChange"> | ||||
|               <u-radio :name="item.dictValue" v-for="(item, index) in $dict.getDict('fpYesOrNo')" :key="index">{{ item.dictName }}</u-radio> | ||||
|               <u-radio :name="item.dictValue" v-for="(item, index) in $dict.getDict('fpYesOrNo')" :key="index"> | ||||
|                 {{ item.dictName }} | ||||
|               </u-radio> | ||||
|             </u-radio-group> | ||||
|           </div> | ||||
|         </div> | ||||
|   | ||||
| @@ -7,7 +7,8 @@ | ||||
|         <div class="label" v-if="addressArea">{{ addressArea }}</div> | ||||
|         <i v-else>请选择</i> | ||||
|       </AiArea> --> | ||||
|       <AiAreaPicker ref="area" class="aiArea" :name.sync="addressArea" :areaId="areaId" mode="custom" @select="onChange"> | ||||
|       <AiAreaPicker ref="area" class="aiArea" :name.sync="addressArea" :areaId="areaId" mode="custom" | ||||
|                     @select="onChange"> | ||||
|         <span class="label" v-if="addressArea">{{ addressArea }}</span> | ||||
|         <i v-else>请选择</i> | ||||
|       </AiAreaPicker> | ||||
|   | ||||
| @@ -3,7 +3,8 @@ | ||||
|     <div class="area"> | ||||
|       <i>可选范围</i> | ||||
|       <span class="separat">/</span> | ||||
|       <AiAreaPicker ref="area" class="aiArea" :areaId="areaId" :name.sync="addressArea" mode="custom" @select="onChange"> | ||||
|       <AiAreaPicker ref="area" class="aiArea" :areaId="areaId" :name.sync="addressArea" mode="custom" | ||||
|                     @select="onChange"> | ||||
|         <span class="label" v-if="addressArea">{{ addressArea }}</span> | ||||
|         <i v-else>请选择</i> | ||||
|       </AiAreaPicker> | ||||
| @@ -200,8 +201,7 @@ | ||||
|       const y = data.map(v => this.$dict.getLabel('fpRiskType', v.risk_type) || '其他') | ||||
|       const v = data.map(v => v.c) | ||||
|       const option = { | ||||
|           tooltip: { | ||||
|           }, | ||||
|         tooltip: {}, | ||||
|         color: ['#2896FF', '#09DBFE', '#61FDB9', '#FFBB69', '#8429FF', '#ea7ccc'], | ||||
|         grid: { | ||||
|           top: '4%', | ||||
|   | ||||
| @@ -10,7 +10,8 @@ | ||||
|       </span> | ||||
|     </div> | ||||
|     <div class="list"> | ||||
|       <div class="item" v-for="(item, index) in list" :key="index" @click="linkTo('/pages/PovertyAlleviation/NewsDetail?id=' + item.id)"> | ||||
|       <div class="item" v-for="(item, index) in list" :key="index" | ||||
|            @click="linkTo('/pages/PovertyAlleviation/NewsDetail?id=' + item.id)"> | ||||
|         <div class="left"> | ||||
|           <h2>{{ item.title }}</h2> | ||||
|           <div class="item-bottom"> | ||||
| @@ -27,6 +28,7 @@ | ||||
|  | ||||
| <script> | ||||
| import AiEmpty from '@/components/AiEmpty/AiEmpty' | ||||
|  | ||||
| export default { | ||||
|   data() { | ||||
|     return { | ||||
|   | ||||
| @@ -17,7 +17,8 @@ | ||||
|     <div class="news"> | ||||
|       <h2>最新动态</h2> | ||||
|       <div class="news-list"> | ||||
|         <div class="news-item" v-for="(item, index) in list" :key="index" @click="linkTo(`/pages/PovertyAlleviation/NewsDetail?id=${item.id}`)"> | ||||
|         <div class="news-item" v-for="(item, index) in list" :key="index" | ||||
|              @click="linkTo(`/pages/PovertyAlleviation/NewsDetail?id=${item.id}`)"> | ||||
|           <div class="left"> | ||||
|             <h2>{{ item.title }}</h2> | ||||
|             <div class="item-bottom"> | ||||
|   | ||||
| @@ -25,8 +25,11 @@ | ||||
|     </div> | ||||
|     <div class="radio-content"> | ||||
|       <div class="title">播放方式</div> | ||||
|       <div class="item mar-r50" :class="formData.taskType == 0 ? 'active' : ''"  @click="formData.taskType = 0">立即播放<img src="./img/bigHorn-xz.png" alt=""></div> | ||||
|       <div class="item" :class="formData.taskType == 1 ? 'active' : ''" @click="formData.taskType = 1"><img src="./img/bigHorn-xz.png" alt="">定时播放</div> | ||||
|       <div class="item mar-r50" :class="formData.taskType == 0 ? 'active' : ''" @click="formData.taskType = 0">立即播放<img | ||||
|           src="./img/bigHorn-xz.png" alt=""></div> | ||||
|       <div class="item" :class="formData.taskType == 1 ? 'active' : ''" @click="formData.taskType = 1"><img | ||||
|           src="./img/bigHorn-xz.png" alt="">定时播放 | ||||
|       </div> | ||||
|     </div> | ||||
|     <div class="content" v-if="formData.taskType != 0"> | ||||
|       <div class="item"> | ||||
| @@ -39,13 +42,16 @@ | ||||
|     </div> | ||||
|     <div class="radio-content" v-if="formData.taskType != 0 && formData.cyclingType == 2"> | ||||
|       <div class="title">播放天数</div> | ||||
|       <div class="mini-item" :class="item.isCheck ? 'mini-active' : ''" v-for="(item, index) in dayList" :key="index" @click="checkClick(index)">{{item.label}}</div> | ||||
|       <div class="mini-item" :class="item.isCheck ? 'mini-active' : ''" v-for="(item, index) in dayList" :key="index" | ||||
|            @click="checkClick(index)">{{ item.label }} | ||||
|       </div> | ||||
|     </div> | ||||
|     <div class="content" v-if="formData.taskType != 0 && formData.cyclingType == 3"> | ||||
|       <div class="item"> | ||||
|         <div class="label">播放天数</div> | ||||
|         <div class="value"> | ||||
|           <u-input type="text" placeholder="请输入" height="18" input-align="right" v-model="formData.broadcastDay" maxlength="4" /> | ||||
|           <u-input type="text" placeholder="请输入" height="18" input-align="right" v-model="formData.broadcastDay" | ||||
|                    maxlength="4"/> | ||||
|         </div> | ||||
|       </div> | ||||
|     </div> | ||||
| @@ -73,13 +79,15 @@ | ||||
|       </div> | ||||
|     </div> | ||||
|     <div class="btn" @click="addConfirm">确认</div> | ||||
|     <u-select v-model="showSelect" :list="selectList" @confirm="confirm" label-name="dictName" value-name="dictValue"></u-select> | ||||
|     <u-select v-model="showSelect" :list="selectList" @confirm="confirm" label-name="dictName" | ||||
|               value-name="dictValue"></u-select> | ||||
|     <u-picker v-model="showDateTime" mode="time" :params="params" @confirm="confirm"></u-picker> | ||||
|     <AiBack></AiBack> | ||||
|   </div> | ||||
| </template> | ||||
| <script> | ||||
| import AiBack from "@/components/AiBack"; | ||||
|  | ||||
| export default { | ||||
|   name: "addPlay", | ||||
|   data() { | ||||
| @@ -367,9 +375,11 @@ export default { | ||||
| <style lang="scss" scoped> | ||||
| .addPlay { | ||||
|   padding-bottom: 128px; | ||||
|  | ||||
|   .content { | ||||
|     padding-left: 32px; | ||||
|     background-color: #fff; | ||||
|  | ||||
|     .item { | ||||
|       width: 100%; | ||||
|       padding: 34px 0; | ||||
| @@ -381,10 +391,12 @@ export default { | ||||
|       display: flex; | ||||
|       color: #333; | ||||
|       justify-content: space-between; | ||||
|  | ||||
|       .label { | ||||
|         width: 198px; | ||||
|         font-size: 32px; | ||||
|       } | ||||
|  | ||||
|       .value { | ||||
|         display: flex; | ||||
|         align-items: center; | ||||
| @@ -401,6 +413,7 @@ export default { | ||||
|           text-overflow: ellipsis; | ||||
|           white-space: nowrap; | ||||
|         } | ||||
|  | ||||
|         img { | ||||
|           width: 32px; | ||||
|           height: 32px; | ||||
| @@ -408,15 +421,18 @@ export default { | ||||
|           margin-left: 6px; | ||||
|         } | ||||
|       } | ||||
|  | ||||
|       .color-999 { | ||||
|         color: #999; | ||||
|       } | ||||
|     } | ||||
|   } | ||||
|  | ||||
|   .radio-content { | ||||
|     padding: 34px 32px 38px; | ||||
|     border-bottom: 1px solid #ddd; | ||||
|     background-color: #fff; | ||||
|  | ||||
|     .title { | ||||
|       font-size: 32px; | ||||
|       font-family: PingFangSC-Regular, PingFang SC; | ||||
| @@ -424,11 +440,13 @@ export default { | ||||
|       color: #333; | ||||
|       line-height: 44px; | ||||
|       margin-bottom: 54px; | ||||
|  | ||||
|       span { | ||||
|         font-size: 24px; | ||||
|         font-weight: 400; | ||||
|       } | ||||
|     } | ||||
|  | ||||
|     .item { | ||||
|       display: inline-block; | ||||
|       width: 320px; | ||||
| @@ -441,14 +459,17 @@ export default { | ||||
|       font-family: PingFangSC-Medium, PingFang SC; | ||||
|       font-weight: 500; | ||||
|       color: #333; | ||||
|  | ||||
|       img { | ||||
|         display: none; | ||||
|       } | ||||
|     } | ||||
|  | ||||
|     .active { | ||||
|       background: #E7F1FE; | ||||
|       color: #1174FE; | ||||
|       position: relative; | ||||
|  | ||||
|       img { | ||||
|         display: inline-block; | ||||
|         position: absolute; | ||||
| @@ -458,9 +479,11 @@ export default { | ||||
|         height: 46px; | ||||
|       } | ||||
|     } | ||||
|  | ||||
|     .mar-r50 { | ||||
|       margin-right: 50px; | ||||
|     } | ||||
|  | ||||
|     .mini-item { | ||||
|       display: inline-block; | ||||
|       width: 128px; | ||||
| @@ -474,15 +497,18 @@ export default { | ||||
|       margin-right: 58px; | ||||
|       margin-bottom: 32px; | ||||
|     } | ||||
|  | ||||
|     .mini-item:nth-of-type(5) { | ||||
|       margin-right: 0; | ||||
|     } | ||||
|  | ||||
|     .mini-active { | ||||
|       background: #F2F8FE; | ||||
|       border: 1px solid #89B2EE; | ||||
|       box-sizing: border-box; | ||||
|     } | ||||
|   } | ||||
|  | ||||
|   .btn { | ||||
|     position: fixed; | ||||
|     bottom: 0; | ||||
|   | ||||
| @@ -19,7 +19,8 @@ | ||||
|       </div> | ||||
|     </div> | ||||
|     <div class="banner"> | ||||
|       <div class="item" :class="item.bgClass" v-for="(item, index) in bannerList" :key="index" @click="linkTo(item.path)"> | ||||
|       <div class="item" :class="item.bgClass" v-for="(item, index) in bannerList" :key="index" | ||||
|            @click="linkTo(item.path)"> | ||||
|         <h2>{{ item.title }}</h2> | ||||
|         <div>{{ item.text }}</div> | ||||
|         <img :src="item.imgUrl" alt=""> | ||||
| @@ -77,10 +78,12 @@ export default { | ||||
| .bigHorn { | ||||
|   .header { | ||||
|     position: relative; | ||||
|  | ||||
|     img { | ||||
|       width: 100%; | ||||
|       height: 306px; | ||||
|     } | ||||
|  | ||||
|     .content { | ||||
|       width: 686px; | ||||
|       padding: 40px 0; | ||||
| @@ -92,14 +95,17 @@ export default { | ||||
|       left: 50%; | ||||
|       transform: translateX(-50%); | ||||
|       display: flex; | ||||
|  | ||||
|       .item { | ||||
|         text-align: center; | ||||
|         flex: 1; | ||||
|  | ||||
|         img { | ||||
|           width: 64px; | ||||
|           height: 64px; | ||||
|           margin-bottom: 18px; | ||||
|         } | ||||
|  | ||||
|         div { | ||||
|           font-size: 30px; | ||||
|           font-family: PingFang-SC-Medium, PingFang-SC; | ||||
| @@ -108,6 +114,7 @@ export default { | ||||
|           line-height: 42px; | ||||
|           margin-bottom: 10px; | ||||
|         } | ||||
|  | ||||
|         h2 { | ||||
|           font-size: 40px; | ||||
|           font-family: DINAlternate-Bold, DINAlternate; | ||||
| @@ -118,8 +125,10 @@ export default { | ||||
|       } | ||||
|     } | ||||
|   } | ||||
|  | ||||
|   .banner { | ||||
|     margin-top: 150px; | ||||
|  | ||||
|     .item { | ||||
|       width: 686px; | ||||
|       height: 190px; | ||||
| @@ -129,6 +138,7 @@ export default { | ||||
|       box-sizing: border-box; | ||||
|       color: #FFF; | ||||
|       position: relative; | ||||
|  | ||||
|       h2 { | ||||
|         font-size: 42px; | ||||
|         font-family: PingFangSC-Medium, PingFang SC; | ||||
| @@ -136,6 +146,7 @@ export default { | ||||
|         line-height: 60px; | ||||
|         margin-bottom: 16px; | ||||
|       } | ||||
|  | ||||
|       div { | ||||
|         font-size: 26px; | ||||
|         font-family: PingFangSC-Regular, PingFang SC; | ||||
| @@ -143,6 +154,7 @@ export default { | ||||
|         color: #FFF; | ||||
|         line-height: 32px; | ||||
|       } | ||||
|  | ||||
|       img { | ||||
|         width: 160px; | ||||
|         position: absolute; | ||||
| @@ -150,15 +162,19 @@ export default { | ||||
|         right: 30px; | ||||
|       } | ||||
|     } | ||||
|  | ||||
|     .bg-67A3F4 { | ||||
|       background: #67A3F4; | ||||
|     } | ||||
|  | ||||
|     .bg-4ED5BB { | ||||
|       background: #4ED5BB; | ||||
|     } | ||||
|  | ||||
|     .bg-E5B565 { | ||||
|       background: #E5B565; | ||||
|     } | ||||
|  | ||||
|     .bg-F19661 { | ||||
|       background: #F19661; | ||||
|     } | ||||
|   | ||||
| @@ -16,6 +16,7 @@ | ||||
| <script> | ||||
| import AiEmpty from '@/components/AiEmpty/AiEmpty' | ||||
| import AiBack from "@/components/AiBack"; | ||||
|  | ||||
| export default { | ||||
|   name: "onlineList", | ||||
|   data() { | ||||
| @@ -59,18 +60,22 @@ export default { | ||||
|   .record { | ||||
|     padding-left: 32px; | ||||
|     background-color: #fff; | ||||
|  | ||||
|     .item { | ||||
|       width: 100%; | ||||
|       border-bottom: 1px solid #ddd; | ||||
|       display: flex; | ||||
|       padding: 12px 40px 16px 0; | ||||
|  | ||||
|       img { | ||||
|         width: 48px; | ||||
|         height: 48px; | ||||
|         margin: 12px 16px 0 0; | ||||
|       } | ||||
|  | ||||
|       .info { | ||||
|         width: calc(100% - 100px); | ||||
|  | ||||
|         p { | ||||
|           font-size: 34px; | ||||
|           font-family: PingFang-SC-Medium, PingFang-SC; | ||||
| @@ -79,6 +84,7 @@ export default { | ||||
|           line-height: 48px; | ||||
|           margin-bottom: 12px; | ||||
|         } | ||||
|  | ||||
|         span { | ||||
|           font-size: 22px; | ||||
|           font-family: PingFang-SC-Medium, PingFang-SC; | ||||
|   | ||||
| @@ -17,6 +17,7 @@ | ||||
| <script> | ||||
| import AiEmpty from '@/components/AiEmpty/AiEmpty' | ||||
| import AiBack from "@/components/AiBack"; | ||||
|  | ||||
| export default { | ||||
|   name: "onlinePlayList", | ||||
|   data() { | ||||
| @@ -61,18 +62,22 @@ export default { | ||||
|   .record { | ||||
|     padding-left: 32px; | ||||
|     background-color: #fff; | ||||
|  | ||||
|     .item { | ||||
|       width: 100%; | ||||
|       border-bottom: 1px solid #ddd; | ||||
|       display: flex; | ||||
|       padding: 12px 40px 16px 0; | ||||
|  | ||||
|       img { | ||||
|         width: 48px; | ||||
|         height: 48px; | ||||
|         margin: 12px 16px 0 0; | ||||
|       } | ||||
|  | ||||
|       .info { | ||||
|         width: calc(100% - 100px); | ||||
|  | ||||
|         p { | ||||
|           font-size: 34px; | ||||
|           font-family: PingFang-SC-Medium, PingFang-SC; | ||||
| @@ -81,6 +86,7 @@ export default { | ||||
|           line-height: 48px; | ||||
|           margin-bottom: 12px; | ||||
|         } | ||||
|  | ||||
|         span { | ||||
|           font-size: 22px; | ||||
|           font-family: PingFang-SC-Medium, PingFang-SC; | ||||
|   | ||||
| @@ -11,7 +11,10 @@ | ||||
|           <span>{{ item.createTime }}</span><br/> | ||||
|           <span>{{ item.deviceName }}</span> | ||||
|         </div> | ||||
|         <div class="btn bg-3975C6" v-if="item.broadcastStatus == 0 || item.broadcastStatus == 1 || item.broadcastStatus == 2" @click="cancel(item.broadcastId)">撤销</div> | ||||
|         <div class="btn bg-3975C6" | ||||
|              v-if="item.broadcastStatus == 0 || item.broadcastStatus == 1 || item.broadcastStatus == 2" | ||||
|              @click="cancel(item.broadcastId)">撤销 | ||||
|         </div> | ||||
|         <div class="btn bg-AFD0FC" v-if="item.broadcastStatus == 6">已取消</div> | ||||
|       </div> | ||||
|     </div> | ||||
| @@ -20,6 +23,7 @@ | ||||
| </template> | ||||
| <script> | ||||
| import AiBack from "@/components/AiBack"; | ||||
|  | ||||
| export default { | ||||
|   name: "playList", | ||||
|   data() { | ||||
| @@ -84,9 +88,11 @@ export default { | ||||
|     box-sizing: border-box; | ||||
|     border-bottom: 1px solid #ddd; | ||||
|   } | ||||
|  | ||||
|   .record { | ||||
|     padding-left: 32px; | ||||
|     background-color: #fff; | ||||
|  | ||||
|     .item { | ||||
|       width: 100%; | ||||
|       border-bottom: 1px solid #ddd; | ||||
| @@ -94,10 +100,12 @@ export default { | ||||
|       justify-content: space-between; | ||||
|       padding: 12px 40px 16px 0; | ||||
|       box-sizing: border-box; | ||||
|  | ||||
|       .info { | ||||
|         width: 480px; | ||||
|         margin-right: 40px; | ||||
|         word-break: break-all; | ||||
|  | ||||
|         p { | ||||
|           font-size: 34px; | ||||
|           font-family: PingFang-SC-Medium, PingFang-SC; | ||||
| @@ -106,6 +114,7 @@ export default { | ||||
|           line-height: 48px; | ||||
|           margin-bottom: 12px; | ||||
|         } | ||||
|  | ||||
|         span { | ||||
|           font-size: 22px; | ||||
|           font-family: PingFang-SC-Medium, PingFang-SC; | ||||
| @@ -114,6 +123,7 @@ export default { | ||||
|           line-height: 32px; | ||||
|         } | ||||
|       } | ||||
|  | ||||
|       .btn { | ||||
|         width: 154px; | ||||
|         height: 60px; | ||||
| @@ -126,9 +136,11 @@ export default { | ||||
|         color: #FFF; | ||||
|         margin-top: 18px; | ||||
|       } | ||||
|  | ||||
|       .bg-3975C6 { | ||||
|         background: #3975C6; | ||||
|       } | ||||
|  | ||||
|       .bg-AFD0FC { | ||||
|         background: #AFD0FC; | ||||
|       } | ||||
|   | ||||
| @@ -43,9 +43,7 @@ export default { | ||||
|       value: '' | ||||
|     } | ||||
|   }, | ||||
|   methods: { | ||||
|      | ||||
|   }, | ||||
|   methods: {}, | ||||
|   mounted() { | ||||
|  | ||||
|   } | ||||
| @@ -54,6 +52,7 @@ export default { | ||||
| <style lang="scss" scoped> | ||||
| .selectEquipment { | ||||
|   padding-bottom: 128px; | ||||
|  | ||||
|   .search { | ||||
|     width: 100%; | ||||
|     height: 104px; | ||||
| @@ -61,6 +60,7 @@ export default { | ||||
|     margin-bottom: 4px; | ||||
|     padding: 20px 32px; | ||||
|     box-sizing: border-box; | ||||
|  | ||||
|     .search-bg { | ||||
|       width: 686px; | ||||
|       height: 64px; | ||||
| @@ -69,6 +69,7 @@ export default { | ||||
|       background: #F5F5F5; | ||||
|       border-radius: 32px; | ||||
|       position: relative; | ||||
|  | ||||
|       img { | ||||
|         width: 32px; | ||||
|         height: 32px; | ||||
| @@ -76,6 +77,7 @@ export default { | ||||
|         top: 16px; | ||||
|         left: 32px; | ||||
|       } | ||||
|  | ||||
|       .search-input { | ||||
|         width: 590px; | ||||
|         height: 36px; | ||||
| @@ -85,23 +87,28 @@ export default { | ||||
|       } | ||||
|     } | ||||
|   } | ||||
|  | ||||
|   .record { | ||||
|     padding-left: 32px; | ||||
|     background-color: #fff; | ||||
|  | ||||
|     .item { | ||||
|       width: 100%; | ||||
|       display: flex; | ||||
|       border-bottom: 1px solid #ddd; | ||||
|  | ||||
|       .check-img { | ||||
|         width: 32px; | ||||
|         height: 32px; | ||||
|         margin: 32px 32px 0 0; | ||||
|       } | ||||
|  | ||||
|       .voice-img { | ||||
|         width: 48px; | ||||
|         height: 48px; | ||||
|         margin: 28px 16px 0 0; | ||||
|       } | ||||
|  | ||||
|       .info { | ||||
|         width: calc(100% - 148px); | ||||
|         padding: 18px 0; | ||||
| @@ -109,6 +116,7 @@ export default { | ||||
|         font-size: 34px; | ||||
|         display: flex; | ||||
|         justify-content: space-between; | ||||
|  | ||||
|         .text { | ||||
|           p { | ||||
|             font-family: PingFang-SC-Medium, PingFang-SC; | ||||
| @@ -116,6 +124,7 @@ export default { | ||||
|             color: #333; | ||||
|             margin-bottom: 8px; | ||||
|           } | ||||
|  | ||||
|           span { | ||||
|             font-size: 26px; | ||||
|             font-family: PingFang-SC-Medium, PingFang-SC; | ||||
| @@ -124,6 +133,7 @@ export default { | ||||
|             line-height: 36px; | ||||
|           } | ||||
|         } | ||||
|  | ||||
|         .status { | ||||
|           font-size: 34px; | ||||
|           font-family: PingFang-SC-Medium, PingFang-SC; | ||||
| @@ -134,6 +144,7 @@ export default { | ||||
|       } | ||||
|     } | ||||
|   } | ||||
|  | ||||
|   .btn { | ||||
|     position: fixed; | ||||
|     bottom: 0; | ||||
| @@ -144,6 +155,7 @@ export default { | ||||
|     border-top: 1px solid #ddd; | ||||
|     padding: 24px 32px 24px 0; | ||||
|     box-sizing: border-box; | ||||
|  | ||||
|     div { | ||||
|       width: 192px; | ||||
|       height: 80px; | ||||
|   | ||||
| @@ -17,13 +17,9 @@ | ||||
| export default { | ||||
|   name: "selectMp3", | ||||
|   data() { | ||||
|     return { | ||||
|        | ||||
|     } | ||||
|   }, | ||||
|   methods: { | ||||
|      | ||||
|     return {} | ||||
|   }, | ||||
|   methods: {}, | ||||
|   mounted() { | ||||
|  | ||||
|   } | ||||
| @@ -32,17 +28,21 @@ export default { | ||||
| <style lang="scss" scoped> | ||||
| .selectMp3 { | ||||
|   padding-bottom: 128px; | ||||
|  | ||||
|   .record { | ||||
|     padding-left: 32px; | ||||
|     background-color: #fff; | ||||
|  | ||||
|     .item { | ||||
|       width: 100%; | ||||
|       display: flex; | ||||
|  | ||||
|       img { | ||||
|         width: 32px; | ||||
|         height: 32px; | ||||
|         margin: 40px 16px 0 0; | ||||
|       } | ||||
|  | ||||
|       .info { | ||||
|         width: calc(100% - 60px); | ||||
|         padding-bottom: 16px; | ||||
| @@ -57,6 +57,7 @@ export default { | ||||
|       } | ||||
|     } | ||||
|   } | ||||
|  | ||||
|   .btn { | ||||
|     position: fixed; | ||||
|     bottom: 0; | ||||
| @@ -67,6 +68,7 @@ export default { | ||||
|     border-top: 1px solid #ddd; | ||||
|     padding: 24px 32px 24px 0; | ||||
|     box-sizing: border-box; | ||||
|  | ||||
|     div { | ||||
|       width: 192px; | ||||
|       height: 80px; | ||||
|   | ||||
| @@ -6,7 +6,8 @@ | ||||
|         type="primary" | ||||
|         :custom-style="{ width: '100%', borderRadius: '4px', marginTop: '48px' }" | ||||
|         @click="goBack" | ||||
|       >{{ btnText }}</u-button | ||||
|     >{{ btnText }} | ||||
|     </u-button | ||||
|     > | ||||
|     <back></back> | ||||
|   </div> | ||||
|   | ||||
| @@ -16,7 +16,8 @@ | ||||
|         <u-gap height="8"></u-gap> | ||||
|         <u-row> | ||||
|           <span>紧急程度:</span> | ||||
|           <span :style="{color:$dict.getColor('documentEmergencyLevel',detail.emergencyLevel)}">{{$dict.getLabel("documentEmergencyLevel",detail.emergencyLevel)}}</span> | ||||
|           <span | ||||
|               :style="{color:$dict.getColor('documentEmergencyLevel',detail.emergencyLevel)}">{{ $dict.getLabel("documentEmergencyLevel", detail.emergencyLevel) }}</span> | ||||
|         </u-row> | ||||
|         <u-gap height="8"></u-gap> | ||||
|         <u-row> | ||||
| @@ -60,8 +61,10 @@ | ||||
|             <div class="avatar">{{ item.flowUserName && item.flowUserName.substr(-2) }}</div> | ||||
|             <div class="right"> | ||||
|               <u-row justify="between"> | ||||
|                 <text class="status" :style="{color:item.readStatus==1?'#FF8822':'#1365DD'}">{{$dict.getLabel(detail.readType ==1 ? "readingStatus" : | ||||
|                   "documentFlowStatus",detail.readType ==0 ? item.flowStatus : item.readStatus)}} | ||||
|                 <text class="status" :style="{color:item.readStatus==1?'#FF8822':'#1365DD'}">{{ | ||||
|                     $dict.getLabel(detail.readType == 1 ? "readingStatus" : | ||||
|                         "documentFlowStatus", detail.readType == 0 ? item.flowStatus : item.readStatus) | ||||
|                   }} | ||||
|                 </text> | ||||
|                 <text class="date">{{ item.flowTime }}</text> | ||||
|               </u-row> | ||||
| @@ -81,7 +84,9 @@ | ||||
|         <div @click="handleClick(1)">流转</div> | ||||
|       </div> | ||||
|  | ||||
|       <div class="footer" v-if="detail.readType==1 && detail.flowRight==1" @click="read" style="background-color: #1365DD;color: #FFFFFF">我已阅完</div> | ||||
|       <div class="footer" v-if="detail.readType==1 && detail.flowRight==1" @click="read" | ||||
|            style="background-color: #1365DD;color: #FFFFFF">我已阅完 | ||||
|       </div> | ||||
|  | ||||
|     </template> | ||||
|  | ||||
|   | ||||
| @@ -2,7 +2,8 @@ | ||||
|   <div class="document-flow"> | ||||
|     <ai-top-fixed> | ||||
|       <header class="pad"> | ||||
|         <u-search placeholder="请输入公文名称" v-model="documentName" @clear="documentName='',getList()" @search="getList" clearabled :show-action="false" height="64"></u-search> | ||||
|         <u-search placeholder="请输入公文名称" v-model="documentName" @clear="documentName='',getList()" @search="getList" | ||||
|                   clearabled :show-action="false" height="64"></u-search> | ||||
|       </header> | ||||
|     </ai-top-fixed> | ||||
|     <div class="list pad" v-if="list.length"> | ||||
|   | ||||
| @@ -55,9 +55,11 @@ export default { | ||||
|  | ||||
|   ::v-deep .u-drawer { | ||||
|     text-align: center; | ||||
|  | ||||
|     .uni-scroll-view-content { | ||||
|       max-height: 672px; | ||||
|     } | ||||
|  | ||||
|     .option { | ||||
|       font-size: 32px; | ||||
|       cursor: pointer; | ||||
|   | ||||
| @@ -13,6 +13,7 @@ | ||||
|  | ||||
| <script> | ||||
| import AiBack from "../../components/AiBack"; | ||||
|  | ||||
| export default { | ||||
|   name: "historyList", | ||||
|   components: {AiBack}, | ||||
|   | ||||
| @@ -29,7 +29,8 @@ | ||||
|       </div> | ||||
|  | ||||
|       <div class="card"> | ||||
|         <AiUploader :multiple="true" type="file" :limit="9" placeholder="上传附件" @list="fileList" :def="form.files"></AiUploader> | ||||
|         <AiUploader :multiple="true" type="file" :limit="9" placeholder="上传附件" @list="fileList" | ||||
|                     :def="form.files"></AiUploader> | ||||
|       </div> | ||||
|  | ||||
|       <div class="card item-wrap" @click="select"> | ||||
| @@ -73,7 +74,8 @@ | ||||
|     </div> | ||||
|     <u-picker mode="time" v-model="show" :params="params" @confirm="confirm"></u-picker> | ||||
|     <AiBack ref="aiBack" v-if="!userSelect"/> | ||||
|     <AiSelectEnterprise :visible.sync="userSelect" :value="form.attendees" v-if="userSelect" @change="change"></AiSelectEnterprise> | ||||
|     <AiSelectEnterprise :visible.sync="userSelect" :value="form.attendees" v-if="userSelect" | ||||
|                         @change="change"></AiSelectEnterprise> | ||||
|   </div> | ||||
| </template> | ||||
|  | ||||
|   | ||||
| @@ -17,7 +17,9 @@ | ||||
|         <u-gap height="8"></u-gap> | ||||
|         <u-row> | ||||
|           <img :src="$cdn + 'common/date.png'" alt=""> | ||||
|           <span>{{ detail.startTime && detail.startTime.substr(0, 16) }} 至 {{ detail.endTime && detail.endTime.substr(0, 16) }}</span> | ||||
|           <span>{{ | ||||
|               detail.startTime && detail.startTime.substr(0, 16) | ||||
|             }} 至 {{ detail.endTime && detail.endTime.substr(0, 16) }}</span> | ||||
|         </u-row> | ||||
|         <u-gap height="8"></u-gap> | ||||
|         <u-row> | ||||
|   | ||||
| @@ -199,6 +199,7 @@ | ||||
|  | ||||
|     .info { | ||||
|       flex-wrap: nowrap; | ||||
|  | ||||
|       & > span:first-child { | ||||
|         flex-shrink: 0; | ||||
|         font-size: 30px; | ||||
|   | ||||
| @@ -2,7 +2,8 @@ | ||||
|   <div class="meeting"> | ||||
|     <ai-top-fixed> | ||||
|       <u-grid :col="3" :border="false"> | ||||
|         <u-grid-item v-for="(item,index) in grid" :key="index" :custom-style="{padding:'14px 0'}" @click="handleClick(index)"> | ||||
|         <u-grid-item v-for="(item,index) in grid" :key="index" :custom-style="{padding:'14px 0'}" | ||||
|                      @click="handleClick(index)"> | ||||
|           <u-icon :name="item.icon" :size="64"></u-icon> | ||||
|           <view class="label">{{ item.label }}</view> | ||||
|         </u-grid-item> | ||||
| @@ -211,6 +212,7 @@ | ||||
|           position: absolute; | ||||
|           transform: scaleY(1.3) translate(30%, -40px) rotate(45deg); | ||||
|         } | ||||
|  | ||||
|         &:before { | ||||
|           top: 59px; | ||||
|           background-color: #CCCCCC; | ||||
|   | ||||
| @@ -12,7 +12,8 @@ | ||||
|       </div> | ||||
|  | ||||
|       <div class="card"> | ||||
|         <AiUploader :multiple="true" type="image" :limit="9" placeholder="上传图片" @list="fileList" :def="form.files"></AiUploader> | ||||
|         <AiUploader :multiple="true" type="image" :limit="9" placeholder="上传图片" @list="fileList" | ||||
|                     :def="form.files"></AiUploader> | ||||
|       </div> | ||||
|  | ||||
|       <div class="card item-wrap" @click="select"> | ||||
| @@ -62,7 +63,8 @@ | ||||
|     </div> | ||||
|     <AiBack ref="aiBack" v-if="!userSelect"/> | ||||
|     <u-picker v-model="show" mode="time" :params="params" @confirm="confirm"></u-picker> | ||||
|     <AiSelectEnterprise :visible.sync="userSelect" :value="form.persons" v-if="userSelect" @change="change"></AiSelectEnterprise> | ||||
|     <AiSelectEnterprise :visible.sync="userSelect" :value="form.persons" v-if="userSelect" | ||||
|                         @change="change"></AiSelectEnterprise> | ||||
|   </div> | ||||
| </template> | ||||
|  | ||||
| @@ -283,6 +285,7 @@ | ||||
|           bottom: 0; | ||||
|         } | ||||
|       } | ||||
|  | ||||
|       .active { | ||||
|         background-color: #E7F1FE; | ||||
|         color: #1174FE; | ||||
|   | ||||
| @@ -8,7 +8,9 @@ | ||||
|         <template v-if="!item.imgUrl"> | ||||
|           <label> | ||||
|             <b v-if="index==0 && item.readStatus==0"></b> | ||||
|             <div class="tag" v-if="index==1" :style="color(item.status)">{{$dict.getLabel("announcementStatus",item.status)}}</div> | ||||
|             <div class="tag" v-if="index==1" :style="color(item.status)"> | ||||
|               {{ $dict.getLabel("announcementStatus", item.status) }} | ||||
|             </div> | ||||
|             {{ item.title }} | ||||
|           </label> | ||||
|           <u-gap height="16"></u-gap> | ||||
| @@ -22,7 +24,9 @@ | ||||
|             <div class="left"> | ||||
|               <label> | ||||
|                 <b v-if="index==0 && item.readStatus==0"></b> | ||||
|                 <div class="tag" v-if="index==1" :style="color(item.status)">{{$dict.getLabel("announcementStatus",item.status)}}</div> | ||||
|                 <div class="tag" v-if="index==1" :style="color(item.status)"> | ||||
|                   {{ $dict.getLabel("announcementStatus", item.status) }} | ||||
|                 </div> | ||||
|                 {{ item.title }} | ||||
|               </label> | ||||
|               <u-gap height="16"></u-gap> | ||||
| @@ -310,6 +314,7 @@ | ||||
|             -webkit-line-clamp: 2; | ||||
|           } | ||||
|         } | ||||
|  | ||||
|         & > img { | ||||
|           width: 192px; | ||||
|           height: 144px; | ||||
|   | ||||
| @@ -172,6 +172,7 @@ | ||||
|  | ||||
|       .right { | ||||
|         text-align: center; | ||||
|  | ||||
|         image { | ||||
|           width: 64px; | ||||
|           height: 64px; | ||||
|   | ||||
| @@ -8,7 +8,9 @@ | ||||
|       <div class="item" v-for="(item, index) in list" :key="index" hover-class="bg-hover" @click="toDetail(item.id)"> | ||||
|         <div class="item-top"> | ||||
|           <h2>{{ item.name || item.phone }}</h2> | ||||
|           <span :style="{color: item.riskEliminationMethod ? '#2EA222' : '#FF4466'}">{{ item.riskEliminationMethod ? '已解除' : '未解除' }}</span> | ||||
|           <span :style="{color: item.riskEliminationMethod ? '#2EA222' : '#FF4466'}">{{ | ||||
|               item.riskEliminationMethod ? '已解除' : '未解除' | ||||
|             }}</span> | ||||
|         </div> | ||||
|         <p>{{ item.addressArea }} {{ item.address }}</p> | ||||
|         <div class="item-bottom">家庭收入</div> | ||||
| @@ -20,6 +22,7 @@ | ||||
|  | ||||
| <script> | ||||
| import AiEmpty from '@/components/AiEmpty/AiEmpty' | ||||
|  | ||||
| export default { | ||||
|   name: 'list', | ||||
|  | ||||
|   | ||||
| @@ -194,6 +194,7 @@ export default { | ||||
| <style lang="scss" scoped> | ||||
| .info { | ||||
|   padding-bottom: 130px; | ||||
|  | ||||
|   .certBtn { | ||||
|     cursor: pointer; | ||||
|     background: $uni-color-primary; | ||||
|   | ||||
| @@ -12,17 +12,20 @@ | ||||
|       </div> | ||||
|       <div class="radio-content"> | ||||
|         <div class="title">素材标题</div> | ||||
|         <textarea rows="2" placeholder="请输入(30字以内)" v-model="name" style="width:100%;height:80px;" maxlength="30"></textarea> | ||||
|         <textarea rows="2" placeholder="请输入(30字以内)" v-model="name" style="width:100%;height:80px;" | ||||
|                   maxlength="30"></textarea> | ||||
|       </div> | ||||
|     </div> | ||||
|     <div v-else> | ||||
|       <div class="radio-content mar-b16"> | ||||
|         <div class="title">素材标题</div> | ||||
|         <textarea rows="2" placeholder="请输入(30字以内)" v-model="name" style="width:100%;height:80px;" maxlength="30"></textarea> | ||||
|         <textarea rows="2" placeholder="请输入(30字以内)" v-model="name" style="width:100%;height:80px;" | ||||
|                   maxlength="30"></textarea> | ||||
|       </div> | ||||
|       <div class="radio-content"> | ||||
|         <div class="title">文本内容</div> | ||||
|         <textarea rows="8" placeholder="请输入文本内容(12000字以内)" v-model="content" style="width:100%;height:300px;" maxlength="12000"></textarea> | ||||
|         <textarea rows="8" placeholder="请输入文本内容(12000字以内)" v-model="content" style="width:100%;height:300px;" | ||||
|                   maxlength="12000"></textarea> | ||||
|       </div> | ||||
|     </div> | ||||
|     <div class="btn" @click="confirm">确认</div> | ||||
| @@ -32,6 +35,7 @@ | ||||
|  | ||||
| <script> | ||||
| import AiBack from "@/components/AiBack"; | ||||
|  | ||||
| export default { | ||||
|   name: "addPlay", | ||||
|   data() { | ||||
| @@ -118,9 +122,11 @@ | ||||
| <style lang="scss" scoped> | ||||
| .addPlay { | ||||
|   padding-bottom: 128px; | ||||
|  | ||||
|   .content { | ||||
|     padding-left: 32px; | ||||
|     background-color: #fff; | ||||
|  | ||||
|     .item { | ||||
|       width: 100%; | ||||
|       padding: 34px 0; | ||||
| @@ -132,10 +138,12 @@ | ||||
|       display: flex; | ||||
|       color: #333; | ||||
|       justify-content: space-between; | ||||
|  | ||||
|       .label { | ||||
|         width: 198px; | ||||
|         font-size: 32px; | ||||
|       } | ||||
|  | ||||
|       .value { | ||||
|         font-size: 28px; | ||||
|         width: calc(100% - 198px); | ||||
| @@ -150,14 +158,17 @@ | ||||
|           margin-left: 6px; | ||||
|         } | ||||
|       } | ||||
|  | ||||
|       .color-999 { | ||||
|         color: #999; | ||||
|       } | ||||
|     } | ||||
|   } | ||||
|  | ||||
|   .radio-content { | ||||
|     padding: 34px 32px 38px; | ||||
|     background-color: #fff; | ||||
|  | ||||
|     .title { | ||||
|       font-size: 32px; | ||||
|       font-family: PingFangSC-Regular, PingFang SC; | ||||
| @@ -165,15 +176,18 @@ | ||||
|       color: #333; | ||||
|       line-height: 44px; | ||||
|       margin-bottom: 32px; | ||||
|  | ||||
|       span { | ||||
|         font-size: 24px; | ||||
|         font-weight: 400; | ||||
|       } | ||||
|     } | ||||
|   } | ||||
|  | ||||
|   .mar-b16 { | ||||
|     margin-bottom: 16px; | ||||
|   } | ||||
|  | ||||
|   .btn { | ||||
|     position: fixed; | ||||
|     bottom: 0; | ||||
|   | ||||
| @@ -326,6 +326,7 @@ | ||||
| uni-page-body { | ||||
|   background-color: #fff; | ||||
| } | ||||
|  | ||||
| .recording { | ||||
|   height: 100vh; | ||||
|   overflow-y: hidden; | ||||
| @@ -333,11 +334,13 @@ | ||||
|   .content { | ||||
|     padding-top: 310px; | ||||
|     text-align: center; | ||||
|  | ||||
|     img { | ||||
|       width: 406px; | ||||
|       height: 306px; | ||||
|       margin-bottom: 48px; | ||||
|     } | ||||
|  | ||||
|     .text { | ||||
|       font-size: 30px; | ||||
|       color: #999; | ||||
| @@ -345,6 +348,7 @@ | ||||
|       text-align: center; | ||||
|     } | ||||
|   } | ||||
|  | ||||
|   .footer { | ||||
|     display: flex; | ||||
|     align-items: center; | ||||
| @@ -357,6 +361,7 @@ | ||||
|     background: #F6F8FC; | ||||
|     padding: 20px 86px; | ||||
|     box-sizing: border-box; | ||||
|  | ||||
|     span { | ||||
|       display: inline-block; | ||||
|       width: 160px; | ||||
| @@ -370,6 +375,7 @@ | ||||
|       vertical-align: top; | ||||
|       margin-top: 30px; | ||||
|     } | ||||
|  | ||||
|     img { | ||||
|       width: 128px; | ||||
|       height: 128px; | ||||
| @@ -407,6 +413,7 @@ | ||||
|     background: url(./img/top.png) repeat-x; | ||||
|     background-size: auto 6px; | ||||
|   } | ||||
|  | ||||
|   .time { | ||||
|     width: 100%; | ||||
|     margin-top: 208px; | ||||
| @@ -449,6 +456,7 @@ | ||||
|     border-radius: 4px; | ||||
|     background-color: #3476EE; | ||||
|   } | ||||
|  | ||||
|   .header-line span.line1 { | ||||
|     animation-delay: -1s; | ||||
|   } | ||||
| @@ -488,6 +496,7 @@ | ||||
|   .header-line span.line10 { | ||||
|     animation-delay: -0.1s; | ||||
|   } | ||||
|  | ||||
|   .header-line span.line11 { | ||||
|     animation-delay: -1s; | ||||
|   } | ||||
|   | ||||
| @@ -1,7 +1,8 @@ | ||||
| <template> | ||||
|   <div class="resourcesManage"> | ||||
|     <div class="tab"> | ||||
|       <u-tabs :list="tab" :is-scroll="false" :current="currIndex" @change="change" height="96" :bar-style="barStyle"></u-tabs> | ||||
|       <u-tabs :list="tab" :is-scroll="false" :current="currIndex" @change="change" height="96" | ||||
|               :bar-style="barStyle"></u-tabs> | ||||
|     </div> | ||||
|     <div class="record" v-if="currIndex == 0"> | ||||
|       <div class="item" v-for="(item, index) in list" :key="index" @click="choose(item)"> | ||||
| @@ -30,6 +31,7 @@ | ||||
| <script> | ||||
| import AiVideo from '@/components/AiVideo' | ||||
| import AiBack from "@/components/AiBack"; | ||||
|  | ||||
| export default { | ||||
|   name: "resourcesManage", | ||||
|   data() { | ||||
| @@ -147,6 +149,7 @@ | ||||
| <style lang="scss" scoped> | ||||
| .resourcesManage { | ||||
|   padding-bottom: 128px; | ||||
|  | ||||
|   .tab { | ||||
|     border-bottom: 1px solid #ddd; | ||||
|     margin-bottom: 4px; | ||||
| @@ -157,6 +160,7 @@ | ||||
|     height: 400 rpx; | ||||
|     box-sizing: border-box; | ||||
|     padding: 104 rpx 0 46 rpx; | ||||
|  | ||||
|     audio { | ||||
|  | ||||
|     } | ||||
| @@ -164,17 +168,20 @@ | ||||
|  | ||||
|   .record { | ||||
|     background-color: #fff; | ||||
|  | ||||
|     .item { | ||||
|       width: 100%; | ||||
|       display: flex; | ||||
|       border-bottom: 1px solid #ddd; | ||||
|       padding: 32px 30px; | ||||
|       box-sizing: border-box; | ||||
|  | ||||
|       img { | ||||
|         width: 56px; | ||||
|         height: 56px; | ||||
|         margin-right: 14px; | ||||
|       } | ||||
|  | ||||
|       .info { | ||||
|         width: calc(100% - 70px); | ||||
|         line-height: 44px; | ||||
| @@ -192,14 +199,17 @@ | ||||
|       } | ||||
|     } | ||||
|   } | ||||
|  | ||||
|   .record-text { | ||||
|     background-color: #fff; | ||||
|  | ||||
|     .item { | ||||
|       width: 100%; | ||||
|       border-bottom: 1px solid #ddd; | ||||
|       padding: 32px 30px; | ||||
|       box-sizing: border-box; | ||||
|       font-size: 30px; | ||||
|  | ||||
|       div { | ||||
|         font-size: 30px; | ||||
|         font-family: PingFangSC-Medium, PingFang SC; | ||||
| @@ -209,16 +219,20 @@ | ||||
|         text-overflow: ellipsis; | ||||
|         white-space: nowrap; | ||||
|         margin-bottom: 12px; | ||||
|  | ||||
|         .color-0063E5 { | ||||
|           color: #0063E5; | ||||
|         } | ||||
|  | ||||
|         .color-FF8100 { | ||||
|           color: #FF8100; | ||||
|         } | ||||
|  | ||||
|         .color-FF4466 { | ||||
|           color: #FF4466; | ||||
|         } | ||||
|       } | ||||
|  | ||||
|       p { | ||||
|         font-family: PingFangSC-Regular, PingFang SC; | ||||
|         font-weight: 400; | ||||
| @@ -235,6 +249,7 @@ | ||||
|       } | ||||
|     } | ||||
|   } | ||||
|  | ||||
|   .add-img { | ||||
|     width: 120px; | ||||
|     position: fixed; | ||||
|   | ||||
| @@ -19,13 +19,9 @@ | ||||
| export default { | ||||
|   name: "talking", | ||||
|   data() { | ||||
|     return { | ||||
|        | ||||
|     } | ||||
|   }, | ||||
|   methods: { | ||||
|      | ||||
|     return {} | ||||
|   }, | ||||
|   methods: {}, | ||||
|   mounted() { | ||||
|  | ||||
|   } | ||||
| @@ -35,6 +31,7 @@ export default { | ||||
| uni-page-body { | ||||
|   background-color: #fff; | ||||
| } | ||||
|  | ||||
| .talking { | ||||
|   .header { | ||||
|     width: 100%; | ||||
| @@ -44,21 +41,26 @@ uni-page-body{ | ||||
|     box-sizing: border-box; | ||||
|     display: flex; | ||||
|     justify-content: space-between; | ||||
|  | ||||
|     p { | ||||
|       font-size: 32px; | ||||
|       color: #333; | ||||
|       line-height: 44px; | ||||
|  | ||||
|       span { | ||||
|         color: #1174FE; | ||||
|       } | ||||
|     } | ||||
|  | ||||
|     img { | ||||
|       width: 32px; | ||||
|       height: 32px; | ||||
|     } | ||||
|   } | ||||
|  | ||||
|   .content { | ||||
|     margin-top: 224px; | ||||
|  | ||||
|     .time { | ||||
|       width: 100%; | ||||
|       text-align: center; | ||||
| @@ -66,11 +68,13 @@ uni-page-body{ | ||||
|       color: #000000; | ||||
|       line-height: 134px; | ||||
|     } | ||||
|  | ||||
|     img { | ||||
|       width: 406px; | ||||
|       height: 306px; | ||||
|       margin: 0 0 48px 172px; | ||||
|     } | ||||
|  | ||||
|     .text { | ||||
|       font-size: 30px; | ||||
|       color: #999; | ||||
| @@ -78,6 +82,7 @@ uni-page-body{ | ||||
|       text-align: center; | ||||
|     } | ||||
|   } | ||||
|  | ||||
|   .footer { | ||||
|     position: fixed; | ||||
|     bottom: 0; | ||||
| @@ -87,6 +92,7 @@ uni-page-body{ | ||||
|     background: #F6F8FC; | ||||
|     padding: 20px 310px; | ||||
|     box-sizing: border-box; | ||||
|  | ||||
|     img { | ||||
|       width: 128px; | ||||
|       height: 128px; | ||||
|   | ||||
| @@ -30,7 +30,8 @@ | ||||
|       <text class="title">事件描述</text> | ||||
|       <div class="content">{{ detail.explain }}</div> | ||||
|       <div class="photos"> | ||||
|         <img :src="item.url" alt="" v-for="(item,index) in detail.files" :key="index" @click.stop="previewImage(detail.files,index)"> | ||||
|         <img :src="item.url" alt="" v-for="(item,index) in detail.files" :key="index" | ||||
|              @click.stop="previewImage(detail.files,index)"> | ||||
|       </div> | ||||
|       <template v-if="detail.handleResult"> | ||||
|         <u-row justify="space-between" class="result"> | ||||
|   | ||||
| @@ -142,6 +142,7 @@ export default { | ||||
| .balance { | ||||
|   min-height: 100%; | ||||
|   background-color: #ffffff; | ||||
|  | ||||
|   .operate { | ||||
|     height: 120px; | ||||
|     display: flex; | ||||
|   | ||||
| @@ -2,13 +2,16 @@ | ||||
|   <div class="result-page"> | ||||
|     <img :src="imgSrc" alt=""> | ||||
|     <text>{{ text }}</text> | ||||
|     <u-button type="primary" :custom-style="{width:'100%',borderRadius:'4px',marginTop:'48px'}" @click="goBack">{{btnText}}</u-button> | ||||
|     <u-button type="primary" :custom-style="{width:'100%',borderRadius:'4px',marginTop:'48px'}" @click="goBack"> | ||||
|       {{ btnText }} | ||||
|     </u-button> | ||||
|     <back></back> | ||||
|   </div> | ||||
| </template> | ||||
|  | ||||
| <script> | ||||
| import Back from "../../../../components/AiBack"; | ||||
|  | ||||
| export default { | ||||
|   name: "result-page", | ||||
|   components: {Back}, | ||||
|   | ||||
| @@ -49,6 +49,7 @@ | ||||
| <script> | ||||
| import AiEmpty from "../../components/AiEmpty"; | ||||
| import {mapState} from "vuex"; | ||||
|  | ||||
| export default { | ||||
|   name: "supermarket", | ||||
|   components: {AiEmpty}, | ||||
| @@ -246,10 +247,12 @@ | ||||
|         .wrap { | ||||
|           display: flex; | ||||
|           justify-content: flex-end; | ||||
|  | ||||
|           .lxc-count { | ||||
|             display: flex; | ||||
|             align-items: center; | ||||
|             justify-content: center; | ||||
|  | ||||
|             .less { | ||||
|               width: 40px; | ||||
|               height: 40px; | ||||
|   | ||||
| @@ -70,7 +70,8 @@ | ||||
|         </div> | ||||
|         <div class="card" v-if="detail.processList.length"> | ||||
|           <u-collapse> | ||||
|             <u-collapse-item :title="item.createDate && item.createDate.split(' ')[0]" v-for="(item, index) in detail.processList" :key="index"> | ||||
|             <u-collapse-item :title="item.createDate && item.createDate.split(' ')[0]" | ||||
|                              v-for="(item, index) in detail.processList" :key="index"> | ||||
|               <template slot="info"> | ||||
|                 完成到<em>{{ item.percent }}%</em> | ||||
|               </template> | ||||
| @@ -103,7 +104,9 @@ | ||||
|     </template> | ||||
|  | ||||
|     <ai-back></ai-back> | ||||
|     <div class="footer" v-if="index==1 && detail.myUserInfo.taskRole == 1 &&  detail.myUserInfo.doStatus==0" @click="handleClick">去完成</div> | ||||
|     <div class="footer" v-if="index==1 && detail.myUserInfo.taskRole == 1 &&  detail.myUserInfo.doStatus==0" | ||||
|          @click="handleClick">去完成 | ||||
|     </div> | ||||
|     <div class="footer" v-if="index==2" @click="createSubTask">创建子任务</div> | ||||
|   </div> | ||||
| </template> | ||||
|   | ||||
| @@ -9,7 +9,8 @@ | ||||
|               <span class="icon">*</span> | ||||
|               <span> 审批意见:</span> | ||||
|             </span> | ||||
|             <textarea :maxlength="150" placeholder="请输入审批意见" v-model="opinion" class="textarea" clearable="false"> </textarea> | ||||
|             <textarea :maxlength="150" placeholder="请输入审批意见" v-model="opinion" class="textarea" | ||||
|                       clearable="false"> </textarea> | ||||
|             <div class="clearn" @click="clearn">清空内容</div> | ||||
|             <div class="msg_length"> | ||||
|               <span class="font">{{ opinion.length }}</span> | ||||
| @@ -26,7 +27,8 @@ | ||||
|                 <span class="icon" v-if="item.mustFill == 1">*</span> | ||||
|                 <span> {{ item.fieldName }}:</span> | ||||
|               </span> | ||||
|               <textarea :maxlength="150" placeholder="请输入审批意见" v-model="item.fieldValue" class="textarea" clearable="false"> </textarea> | ||||
|               <textarea :maxlength="150" placeholder="请输入审批意见" v-model="item.fieldValue" class="textarea" | ||||
|                         clearable="false"> </textarea> | ||||
|               <div class="clearn" @click="clearn">清空内容</div> | ||||
|               <div class="msg_length"> | ||||
|                 <span class="font">{{ item.fieldValue.length }}</span> | ||||
| @@ -42,7 +44,8 @@ | ||||
|                 <span> {{ item.fieldName }}:</span> | ||||
|               </div> | ||||
|               <div class="left"> | ||||
|                 <u-input type="text" @click="timeSelect(index)" class="right" placeholder="请选择" disabled v-model="item.fieldValue"></u-input> | ||||
|                 <u-input type="text" @click="timeSelect(index)" class="right" placeholder="请选择" disabled | ||||
|                          v-model="item.fieldValue"></u-input> | ||||
|               </div> | ||||
|             </div> | ||||
|           </div> | ||||
| @@ -56,7 +59,8 @@ | ||||
|         <!-- 单个文件最大10MB.zip、.rar、.doc、.docx、.xls、.xlsx、.ppt、.pptx、.pdf、.txt、.jpg、.png格式 --> | ||||
|         <div class="upload"> | ||||
|           <div class="info"> | ||||
|             <ai-uploader multiple @list="(v) => (annex = v)" :limit="9" action="/admin/file/add2" type="file" placeholder="添加文件" preview /> | ||||
|             <ai-uploader multiple @list="(v) => (annex = v)" :limit="9" action="/admin/file/add2" type="file" | ||||
|                          placeholder="添加文件" preview/> | ||||
|           </div> | ||||
|         </div> | ||||
|       </div> | ||||
| @@ -119,9 +123,11 @@ export default { | ||||
|   // 监听 | ||||
|   watch: {}, | ||||
|   // 实例创建后 | ||||
|   onShow() {}, | ||||
|   onShow() { | ||||
|   }, | ||||
|   // 实例渲染后 | ||||
|   mounted() {}, | ||||
|   mounted() { | ||||
|   }, | ||||
|   // 方法 | ||||
|   methods: { | ||||
|     timeSelect(index) { | ||||
|   | ||||
| @@ -6,7 +6,8 @@ | ||||
|         <p>审批通过:</p> | ||||
|         <div class="save"> | ||||
|           <div style="display:inline">[{{ this.list.tableInfo.tableName }}]已签署完成,</div> | ||||
|           <ai-image preview :file="list.pdfFile" style="display:inline-block;margin-left:4px ;"><span class="clicksave">点击查看和保存</span> </ai-image> | ||||
|           <ai-image preview :file="list.pdfFile" style="display:inline-block;margin-left:4px ;"><span class="clicksave">点击查看和保存</span> | ||||
|           </ai-image> | ||||
|         </div> | ||||
|       </div> | ||||
|  | ||||
| @@ -19,7 +20,8 @@ | ||||
|           <div class="people_msg"> | ||||
|             <!-- 圆形头像 --> | ||||
|             <div class="avatar"> | ||||
|               <span v-if="list.createUserAvatar"><img :src="list.createUserAvatar" alt="" style="width: 100%;height: 100%;border-radius:50%"/></span> | ||||
|               <span v-if="list.createUserAvatar"><img :src="list.createUserAvatar" alt="" | ||||
|                                                       style="width: 100%;height: 100%;border-radius:50%"/></span> | ||||
|               <span v-else> {{ $formatName(list.createUserName) }}</span> | ||||
|             </div> | ||||
|  | ||||
| @@ -81,20 +83,24 @@ | ||||
|       </div> | ||||
|  | ||||
|       <!-- tabs栏 --> | ||||
|       <u-tabs class="tabs" :list="list_tabs" height="96" active-color="#1365dd" inactive-color="#999" bar-width="374" font-size="30" :is-scroll="false" :current="current" @change="change"></u-tabs> | ||||
|       <u-tabs class="tabs" :list="list_tabs" height="96" active-color="#1365dd" inactive-color="#999" bar-width="374" | ||||
|               font-size="30" :is-scroll="false" :current="current" @change="change"></u-tabs> | ||||
|  | ||||
|       <!-- 表单申请的折叠窗 --> | ||||
|       <div style="background-color:#fff"> | ||||
|         <div v-if="current == 0" class="collapse"> | ||||
|           <u-collapse event-type="close" :arrow="true" :accordion="true"> | ||||
|             <u-collapse-item v-if="item.length > 0" v-for="(item, index) in inforlist" :title="item[0].groupName" :key="index"> | ||||
|             <u-collapse-item v-if="item.length > 0" v-for="(item, index) in inforlist" :title="item[0].groupName" | ||||
|                              :key="index"> | ||||
|               <div v-for="(items, indexs) in item" :key="indexs"> | ||||
|                 <div class="item_msg"> | ||||
|                   <!-- 左 --> | ||||
|                   <span class="msg_lef">{{ items.fieldName }}</span> | ||||
|                   <!-- 右 --> | ||||
|                   <!-- 字典值 items.dictionaryCode --> | ||||
|                   <span class="msg_lright" v-if="items.fieldDataType != 5">{{ $dict.getLabel(items.dictionaryCode, items.fieldValue) }}</span> | ||||
|                   <span class="msg_lright" v-if="items.fieldDataType != 5">{{ | ||||
|                       $dict.getLabel(items.dictionaryCode, items.fieldValue) | ||||
|                     }}</span> | ||||
|                   <span class="msg_lright" v-else> | ||||
|                     <span v-for="(itemL, indexL) in items.fieldValue" :key="indexL" | ||||
|                     >{{ $dict.getLabel(items.dictionaryCode, itemL) }} | ||||
| @@ -120,7 +126,8 @@ | ||||
|               <div class="item-left-ava-icon"> | ||||
|                 <!-- 头像 --> | ||||
|                 <div class="avatar" v-if="item.userName"> | ||||
|                   <span v-if="item.stepAvatar"><img :src="item.stepAvatar" alt="" style="width: 100%;height: 100%;border-radius:50%"/></span> | ||||
|                   <span v-if="item.stepAvatar"><img :src="item.stepAvatar" alt="" | ||||
|                                                     style="width: 100%;height: 100%;border-radius:50%"/></span> | ||||
|                   <span v-else> {{ $formatName(item.userName) }}</span> | ||||
|                 </div> | ||||
|  | ||||
| @@ -191,7 +198,8 @@ | ||||
|                   <div class="examine_docx1"> | ||||
|                     <!-- 图片 --> | ||||
|                     <div class="examine_img" v-if="item.pictureFiles && item.pictureFiles.length > 0" style=""> | ||||
|                       <ai-image preview :src="pic.url" v-for="pic in item.pictureFiles" :key="pic.id" style="width: 65px;height: 75px;float: left;margin-left: 6px;margin-bottom: 4px;overflow: hidden;" /> | ||||
|                       <ai-image preview :src="pic.url" v-for="pic in item.pictureFiles" :key="pic.id" | ||||
|                                 style="width: 65px;height: 75px;float: left;margin-left: 6px;margin-bottom: 4px;overflow: hidden;"/> | ||||
|                     </div> | ||||
|  | ||||
|                     <!-- 附件资料 --> | ||||
| @@ -214,7 +222,8 @@ | ||||
|                   <div class="examine_docx1"> | ||||
|                     <!-- 图片 --> | ||||
|                     <div class="examine_img" v-if="item.pictureFiles && item.pictureFiles.length > 0" style=""> | ||||
|                       <ai-image preview :src="pic.url" v-for="pic in item.pictureFiles" :key="pic.id" style="width: 69px;height: 75px;float: left;margin-left: 4px;margin-bottom: 4px;overflow: hidden;" /> | ||||
|                       <ai-image preview :src="pic.url" v-for="pic in item.pictureFiles" :key="pic.id" | ||||
|                                 style="width: 69px;height: 75px;float: left;margin-left: 4px;margin-bottom: 4px;overflow: hidden;"/> | ||||
|                     </div> | ||||
|  | ||||
|                     <!-- 附件资料 --> | ||||
|   | ||||
| @@ -2,7 +2,9 @@ | ||||
|   <div class="closemsg"> | ||||
|     <img :src="imgSrc" alt=""/> | ||||
|     <text>{{ text }}</text> | ||||
|     <u-button type="primary" :custom-style="{ width: '100%', borderRadius: '4px', marginTop: '48px' }" @click="goBack">{{ btnText }} </u-button> | ||||
|     <u-button type="primary" :custom-style="{ width: '100%', borderRadius: '4px', marginTop: '48px' }" @click="goBack"> | ||||
|       {{ btnText }} | ||||
|     </u-button> | ||||
|     <back></back> | ||||
|   </div> | ||||
| </template> | ||||
|   | ||||
| @@ -2,7 +2,8 @@ | ||||
|   <div class="workonline"> | ||||
|     <!-- 顶部搜索 --> | ||||
|     <div class="search"> | ||||
|       <u-search class="serach_content" placeholder="请输入标题" :show-action="false" v-model="keyword" @clear="search" @search="search"></u-search> | ||||
|       <u-search class="serach_content" placeholder="请输入标题" :show-action="false" v-model="keyword" @clear="search" | ||||
|                 @search="search"></u-search> | ||||
|     </div> | ||||
|  | ||||
|     <u-tabs :list="list" :is-scroll="false" :current="currentType" @change="change"></u-tabs> | ||||
| @@ -22,10 +23,14 @@ | ||||
|               <span class="item_info">审批进度:</span> | ||||
|  | ||||
|               <!-- 申请类型 ing --> | ||||
|               <span class="business_status" v-if="item.approvalStatus == 0"> {{ $dict.getLabel('listApprovalStatusHb', item.approvalStatus) }}</span> | ||||
|               <span class="business_status" v-if="item.approvalStatus == 0"> {{ | ||||
|                   $dict.getLabel('listApprovalStatusHb', item.approvalStatus) | ||||
|                 }}</span> | ||||
|  | ||||
|               <!-- end --> | ||||
|               <span class="business_status_blue" v-if="item.approvalStatus == 1"> {{ $dict.getLabel('listApprovalStatusHb', item.approvalStatus) }}</span> | ||||
|               <span class="business_status_blue" v-if="item.approvalStatus == 1"> {{ | ||||
|                   $dict.getLabel('listApprovalStatusHb', item.approvalStatus) | ||||
|                 }}</span> | ||||
|  | ||||
|               <!-- false --> | ||||
|               <span class="business_status_gray" v-if="item.approvalStatus == 2"> | ||||
| @@ -95,7 +100,8 @@ export default { | ||||
|     }) | ||||
|   }, | ||||
|   // 实例渲染后 | ||||
|   mounted() {}, | ||||
|   mounted() { | ||||
|   }, | ||||
|   // 方法 | ||||
|   methods: { | ||||
|     getList() { | ||||
|   | ||||
| @@ -469,7 +469,7 @@ export default { | ||||
| 
 | ||||
|         .u-checkbox__icon-wrap, .u-radio__icon-wrap { | ||||
|           position: absolute; | ||||
|           top: 4 rpx; | ||||
|           top: 4px; | ||||
|         } | ||||
| 
 | ||||
|         .u-radio__label, .u-checkbox__label { | ||||
							
								
								
									
										194
									
								
								src/sass/AppAskForm/components/AddList.vue
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										194
									
								
								src/sass/AppAskForm/components/AddList.vue
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,194 @@ | ||||
| <template> | ||||
|   <div class="template-wrapper"> | ||||
|     <div class="form-list"> | ||||
|       <div | ||||
|           class="form-list__item" | ||||
|           @click="toAdd(index)" | ||||
|           :style="{'background-image': `url(${$cdn}askform/${index + 1}.png)`}" | ||||
|           v-for="(item, index) in itemList" | ||||
|           :key="index"> | ||||
|         <h2>{{ item.name }}</h2> | ||||
|         <div>立即创建</div> | ||||
|       </div> | ||||
|     </div> | ||||
|     <div class="template" v-if="list.length"> | ||||
|       <h2>共享模板</h2> | ||||
|       <div class="template-list"> | ||||
|         <div class="template-item" v-for="(item, index) in list" :key="index" hover-class="bg-hover" | ||||
|              @click="quote(item.id)"> | ||||
|           <image :src="`${$cdn}askform/6.png`"/> | ||||
|           <h2>{{ item.title }}</h2> | ||||
|           <u-icon name="arrow-right" color="#E1E2E3"/> | ||||
|         </div> | ||||
|       </div> | ||||
|     </div> | ||||
|   </div> | ||||
| </template> | ||||
|  | ||||
| <script> | ||||
| export default { | ||||
|   name: 'addList', | ||||
|   label: '新建项目', | ||||
|  | ||||
|   data() { | ||||
|     return { | ||||
|       itemList: [{ | ||||
|         name: '问卷调查' | ||||
|       }, { | ||||
|         name: '考试测评' | ||||
|       }, { | ||||
|         name: '报名登记' | ||||
|       }, { | ||||
|         name: '满意调查' | ||||
|       }, { | ||||
|         name: '投票评选' | ||||
|       }], | ||||
|       list: [] | ||||
|     } | ||||
|   }, | ||||
|  | ||||
|   mounted() { | ||||
|     this.getList() | ||||
|   }, | ||||
|  | ||||
|   methods: { | ||||
|     toAdd(type) { | ||||
|       this.$emit('change', { | ||||
|         type: 'AddForm', | ||||
|         params: { | ||||
|           type | ||||
|         } | ||||
|       }) | ||||
|     }, | ||||
|  | ||||
|     quote(id) { | ||||
|       this.$emit('change', { | ||||
|         type: 'AddForm', | ||||
|         params: { | ||||
|           id, | ||||
|           isQuote: 1 | ||||
|         } | ||||
|       }) | ||||
|     }, | ||||
|  | ||||
|     getList() { | ||||
|       this.$http.post(`/app/appquestionnairetemplate/list`, null, { | ||||
|         params: { | ||||
|           current: 1, | ||||
|           templateType: 1, | ||||
|           size: 10000 | ||||
|         } | ||||
|       }).then(res => { | ||||
|         if (res.code == 0) { | ||||
|           this.list = res.data.records | ||||
|         } | ||||
|       }) | ||||
|     } | ||||
|   } | ||||
| } | ||||
| </script> | ||||
|  | ||||
| <style lang="scss" scoped> | ||||
| .template-wrapper { | ||||
|   padding-bottom: 120 rpx; | ||||
|  | ||||
|   .template { | ||||
|     margin: 32px 32px 0; | ||||
|     background: #fff; | ||||
|     border-radius: 8px; | ||||
|     overflow: hidden; | ||||
|  | ||||
|     & > h2 { | ||||
|       height: 88px; | ||||
|       line-height: 88px; | ||||
|       padding: 0 24px; | ||||
|       color: #333333; | ||||
|       font-size: 30px; | ||||
|     } | ||||
|  | ||||
|     .template-item { | ||||
|       display: flex; | ||||
|       align-items: center; | ||||
|       height: 104px; | ||||
|       padding: 0 24px; | ||||
|       border-bottom: 1px solid #D8DDE6; | ||||
|  | ||||
|       &:active { | ||||
|         background-color: #eee; | ||||
|       } | ||||
|  | ||||
|       &:last-child { | ||||
|         border: none; | ||||
|       } | ||||
|  | ||||
|       image { | ||||
|         width: 36px; | ||||
|         height: 42px; | ||||
|       } | ||||
|  | ||||
|       i { | ||||
|         font-size: 30px; | ||||
|         color: #E1E2E3; | ||||
|       } | ||||
|  | ||||
|       h2 { | ||||
|         flex: 1; | ||||
|         padding: 0 18px; | ||||
|         color: #333333; | ||||
|         font-size: 28px; | ||||
|         font-weight: normal; | ||||
|         overflow: hidden; | ||||
|         text-overflow: ellipsis; | ||||
|         white-space: nowrap; | ||||
|       } | ||||
|     } | ||||
|   } | ||||
|  | ||||
|   .form-list { | ||||
|     display: flex; | ||||
|     flex-wrap: wrap; | ||||
|     padding: 0 32px 0; | ||||
|  | ||||
|     div { | ||||
|       box-sizing: border-box; | ||||
|     } | ||||
|  | ||||
|     .form-list__item { | ||||
|       width: calc(50% - 13px); | ||||
|       height: 216px; | ||||
|       margin: 32px 24px 0 0; | ||||
|       padding: 40px 20px 52px; | ||||
|       background-color: #FFFFFF; | ||||
|       border-radius: 8px; | ||||
|       background-size: 100% 100%; | ||||
|  | ||||
|       &:active { | ||||
|         background-color: #eee; | ||||
|       } | ||||
|  | ||||
|       &:nth-of-type(2n) { | ||||
|         margin-right: 0; | ||||
|       } | ||||
|  | ||||
|       div { | ||||
|         width: 148px; | ||||
|         height: 48px; | ||||
|         line-height: 48px; | ||||
|         text-align: center; | ||||
|         color: #fff; | ||||
|         font-size: 28px; | ||||
|         background: #6BA1F9; | ||||
|         border-radius: 24px; | ||||
|       } | ||||
|  | ||||
|       h2 { | ||||
|         margin-bottom: 32px; | ||||
|         padding-left: 10px; | ||||
|         color: #333333; | ||||
|         font-weight: 700; | ||||
|         font-size: 32px; | ||||
|       } | ||||
|     } | ||||
|   } | ||||
| } | ||||
| </style> | ||||
| @@ -2,7 +2,9 @@ | ||||
|   <div class="form-config"> | ||||
|     <div class="config-group"> | ||||
|       <div class="config-item"> | ||||
|         <u-input class="form-maintitle" :maxlength="200" v-model="config.label" :placeholder="`请输入${config.fixedLabel||''}标题 ${config.required ? '(必填)' : ''}`"  placeholder-style="color: #999999; font-weight: 600" /> | ||||
|         <u-input class="form-maintitle" :maxlength="200" v-model="config.label" | ||||
|                  :placeholder="`请输入${config.fixedLabel||''}标题 ${config.required ? '(必填)' : ''}`" | ||||
|                  placeholder-style="color: #999999; font-weight: 600"/> | ||||
|       </div> | ||||
|       <div class="config-item__select--wrapper" v-if="['radio', 'select', 'checkbox'].includes(config.type)"> | ||||
|         <div class="config-item__select" v-for="(item, index) in config.options" :key="index"> | ||||
| @@ -12,7 +14,8 @@ | ||||
|             <image v-else :src="item.img[0].url"/> | ||||
|           </div> | ||||
|           <div class="textarea"> | ||||
|            <textarea type="textarea" placeholder-style="color: #CDCDCF" :auto-height="true" v-model="item.label" :maxlength="100" placeholder="请输入选项" /> | ||||
|             <textarea type="textarea" placeholder-style="color: #CDCDCF" :auto-height="true" v-model="item.label" | ||||
|                       :maxlength="100" placeholder="请输入选项"/> | ||||
|           </div> | ||||
|         </div> | ||||
|         <div class="config-item__select config-item__select--add" @click="addOptions"> | ||||
| @@ -35,7 +38,8 @@ | ||||
|           <span>是否必填</span> | ||||
|         </div> | ||||
|         <div class="config-item__right"> | ||||
|           <u-switch v-model="config.required" active-value="1" inactive-value="0" :size="40" active-color="#1088F9"></u-switch> | ||||
|           <u-switch v-model="config.required" active-value="1" inactive-value="0" :size="40" | ||||
|                     active-color="#1088F9"></u-switch> | ||||
|         </div> | ||||
|       </div> | ||||
|       <div class="config-item" v-if="!['upload'].includes(config.type)"> | ||||
| @@ -54,7 +58,8 @@ | ||||
|           <u-input v-model="config.answer" placeholder="请输入正确答案" input-align="right"/> | ||||
|         </div> | ||||
|       </div> | ||||
|       <div class="config-item" v-if="['radio', 'select'].includes(config.type) && config.isShowPoints && config.pointType === '0'"> | ||||
|       <div class="config-item" | ||||
|            v-if="['radio', 'select'].includes(config.type) && config.isShowPoints && config.pointType === '0'"> | ||||
|         <div class="config-item__left"> | ||||
|           <span>正确答案</span> | ||||
|         </div> | ||||
| @@ -63,7 +68,8 @@ | ||||
|           <u-icon name="arrow-down-fill" color="#c0c4cc" size="24"></u-icon> | ||||
|         </div> | ||||
|       </div> | ||||
|       <div class="config-item config-item__checkbox" v-if="config.isShowPoints && ['radio', 'select', 'checkbox'].includes(config.type)"> | ||||
|       <div class="config-item config-item__checkbox" | ||||
|            v-if="config.isShowPoints && ['radio', 'select', 'checkbox'].includes(config.type)"> | ||||
|         <div class="config-item__left"> | ||||
|           <span>计分方式</span> | ||||
|         </div> | ||||
| @@ -72,13 +78,15 @@ | ||||
|           <u-icon name="arrow-right" color="#E1E2E3"/> | ||||
|         </div> | ||||
|       </div> | ||||
|       <div class="config-item config-item__answer config-item__checkbox" v-if="['checkbox'].includes(config.type) && config.isShowPoints && config.pointType === '0'"> | ||||
|       <div class="config-item config-item__answer config-item__checkbox" | ||||
|            v-if="['checkbox'].includes(config.type) && config.isShowPoints && config.pointType === '0'"> | ||||
|         <div class="config-item__left"> | ||||
|           <span>正确答案</span> | ||||
|         </div> | ||||
|         <div class="config-item__right"> | ||||
|           <u-checkbox-group wrap @change="onCheckboxChange"> | ||||
|             <u-checkbox v-model="field.checked" :name="field.label"  v-if="field.label" v-for="(field, i) in config.options" :key="i"> | ||||
|             <u-checkbox v-model="field.checked" :name="field.label" v-if="field.label" | ||||
|                         v-for="(field, i) in config.options" :key="i"> | ||||
|               <span>{{ field.label }}</span> | ||||
|             </u-checkbox> | ||||
|           </u-checkbox-group> | ||||
| @@ -104,7 +112,8 @@ | ||||
|       </div> | ||||
|       <div class="config-item config-item__point" v-if="config.isShowPoints && config.pointType === '2'"> | ||||
|         <u-checkbox-group wrap @change="onCheckboxChange"> | ||||
|           <u-checkbox v-model="field.checked" :name="field.label" v-if="field.label" v-for="(field, i) in config.options" :key="i"> | ||||
|           <u-checkbox v-model="field.checked" :name="field.label" v-if="field.label" | ||||
|                       v-for="(field, i) in config.options" :key="i"> | ||||
|             <span>{{ field.label }}</span> | ||||
|             <u-input v-model="field.point" type="number" placeholder="请输入分值" input-align="right"/> | ||||
|           </u-checkbox> | ||||
| @@ -119,8 +128,10 @@ | ||||
|         </div> | ||||
|       </div> | ||||
|     </div> | ||||
|     <u-select :list="config.options" :default-value="defaultAnswer" value-name="value" label-name="label" v-model="isShowAnswer" @confirm="answerChange"></u-select> | ||||
|     <u-select :list="config.pointDict" :default-value="defaultType" value-name="dictValue" label-name="dictName" v-model="isShowType" @confirm="pointTypeChange"></u-select> | ||||
|     <u-select :list="config.options" :default-value="defaultAnswer" value-name="value" label-name="label" | ||||
|               v-model="isShowAnswer" @confirm="answerChange"></u-select> | ||||
|     <u-select :list="config.pointDict" :default-value="defaultType" value-name="dictValue" label-name="dictName" | ||||
|               v-model="isShowType" @confirm="pointTypeChange"></u-select> | ||||
|     <div class="add-form__footer"> | ||||
|       <div @click="back"> | ||||
|         <span>取消</span> | ||||
| @@ -132,6 +143,7 @@ | ||||
| 
 | ||||
| <script> | ||||
| import {components} from './config' | ||||
| 
 | ||||
| export default { | ||||
|   props: ['filed', 'index', 'filedType'], | ||||
| 
 | ||||
| @@ -139,8 +151,7 @@ export default { | ||||
|     return { | ||||
|       isShowType: false, | ||||
|       isShowAnswer: false, | ||||
|       config: { | ||||
|       } | ||||
|       config: {} | ||||
|     } | ||||
|   }, | ||||
| 
 | ||||
| @@ -422,6 +433,7 @@ export default { | ||||
| 
 | ||||
|         .config-item__left { | ||||
|           margin-bottom: 32 rpx; | ||||
| 
 | ||||
|           span { | ||||
|             word-break: break-all; | ||||
|             color: #333; | ||||
| @@ -449,6 +461,7 @@ export default { | ||||
|         // justify-content: flex-end; | ||||
|       } | ||||
|     } | ||||
| 
 | ||||
|     .config-item__point { | ||||
|       height: auto; | ||||
|       padding: 0; | ||||
| @@ -71,7 +71,8 @@ | ||||
|       <div @click="confirm">{{ type === 'edit' ? '发布' : '确定' }}</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" :params="params"></u-picker> | ||||
|     <u-picker mode="time" v-model="isShowTime" :show-time-tag="true" @close="isShowTime = false" @confirm="onTimeChange" | ||||
|               :params="params"></u-picker> | ||||
|   </div> | ||||
| </template> | ||||
| 
 | ||||
| @@ -27,7 +27,7 @@ | ||||
|           <span>{{ $dict.getLabel('questionnaireStatus', item.status) }}</span> | ||||
|         </div> | ||||
|       </div> | ||||
|       <div style="height: 30rpx"></div> | ||||
|       <u-gap/> | ||||
|       <AiEmpty v-if="!list.length && isMore"></AiEmpty> | ||||
|     </scroll-view> | ||||
|     <u-popup v-model="isShow" :closeable="false" mode="bottom" :z-index="11"> | ||||
							
								
								
									
										163
									
								
								src/sass/AppAskForm/components/config.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										163
									
								
								src/sass/AppAskForm/components/config.js
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,163 @@ | ||||
| export const components = [ | ||||
|   { | ||||
|     type: 'radio', | ||||
|     label: '单选', | ||||
|     fixedLabel: '单选', | ||||
|     value: '', | ||||
|     points: '', | ||||
|     icon: 'iconradio', | ||||
|     isShowPoints: false, | ||||
|     required: true, | ||||
|     hasAnswer: false, | ||||
|     answer: '', | ||||
|     pointType: '0', | ||||
|     pointDict: [ | ||||
|       { | ||||
|         dictName: '此题有唯一答案和分值', | ||||
|         dictValue: '0' | ||||
|       }, | ||||
|       { | ||||
|         dictName: '每个选项都有对应分值', | ||||
|         dictValue: '1' | ||||
|       } | ||||
|     ], | ||||
|     options: [ | ||||
|       { | ||||
|         label: '选项1', | ||||
|         value: '', | ||||
|         point: '', | ||||
|         img: [] | ||||
|       }, | ||||
|       { | ||||
|         label: '选项2', | ||||
|         value: '', | ||||
|         point: '', | ||||
|         img: [] | ||||
|       } | ||||
|     ], | ||||
|     title: '' | ||||
|   }, | ||||
|   { | ||||
|     type: 'checkbox', | ||||
|     label: '多选', | ||||
|     fixedLabel: '多选', | ||||
|     points: '', | ||||
|     icon: 'iconcheck_box', | ||||
|     isShowPoints: false, | ||||
|     required: true, | ||||
|     hasAnswer: false, | ||||
|     answer: [], | ||||
|     value: [], | ||||
|     pointType: '0', | ||||
|     pointDict: [ | ||||
|       { | ||||
|         dictName: '此题有唯一答案和分值', | ||||
|         dictValue: '0' | ||||
|       }, | ||||
|       { | ||||
|         dictName: '每个选项都有对应分值', | ||||
|         dictValue: '1' | ||||
|       }, | ||||
|       { | ||||
|         dictName: '答对几项得几分,答错不得分', | ||||
|         dictValue: '2' | ||||
|       } | ||||
|     ], | ||||
|     options: [ | ||||
|       { | ||||
|         label: '选项1', | ||||
|         value: '', | ||||
|         point: '', | ||||
|         img: [], | ||||
|         checked: false | ||||
|       }, | ||||
|       { | ||||
|         label: '选项2', | ||||
|         point: '', | ||||
|         value: '', | ||||
|         img: [], | ||||
|         checked: false | ||||
|       } | ||||
|     ], | ||||
|     title: '' | ||||
|   }, | ||||
|   { | ||||
|     type: 'select', | ||||
|     label: '单下拉框', | ||||
|     fixedLabel: '单下拉框', | ||||
|     value: '', | ||||
|     points: '', | ||||
|     icon: 'iconSelect', | ||||
|     isShowPoints: false, | ||||
|     required: true, | ||||
|     hasAnswer: false, | ||||
|     answer: '', | ||||
|     pointType: '0', | ||||
|     placeholder: '请选择', | ||||
|     pointDict: [ | ||||
|       { | ||||
|         dictName: '此题有唯一答案和分值', | ||||
|         dictValue: '0' | ||||
|       }, | ||||
|       { | ||||
|         dictName: '每个选项都有对应分值', | ||||
|         dictValue: '1' | ||||
|       } | ||||
|     ], | ||||
|     options: [ | ||||
|       { | ||||
|         label: '选项1', | ||||
|         value: '', | ||||
|         point: '', | ||||
|         img: [] | ||||
|       }, | ||||
|       { | ||||
|         label: '选项2', | ||||
|         value: '', | ||||
|         point: '', | ||||
|         img: [] | ||||
|       } | ||||
|     ], | ||||
|     title: '' | ||||
|   }, | ||||
|   { | ||||
|     type: 'input', | ||||
|     label: '单行填空', | ||||
|     fixedLabel: '单行填空', | ||||
|     value: '', | ||||
|     pointType: '0', | ||||
|     icon: 'icontext_box', | ||||
|     isShowPoints: false, | ||||
|     points: '', | ||||
|     required: true, | ||||
|     hasAnswer: false, | ||||
|     placeholder: '请输入...', | ||||
|     answer: '' | ||||
|   }, | ||||
|   { | ||||
|     type: 'textarea', | ||||
|     label: '多行填空', | ||||
|     fixedLabel: '多行填空', | ||||
|     pointType: '0', | ||||
|     icon: 'icontext_area', | ||||
|     points: '', | ||||
|     isShowPoints: false, | ||||
|     required: true, | ||||
|     hasAnswer: false, | ||||
|     answer: '', | ||||
|     placeholder: '请输入...', | ||||
|     value: '' | ||||
|   }, | ||||
|   { | ||||
|     type: 'upload', | ||||
|     label: '上传图片', | ||||
|     fixedLabel: '上传图片', | ||||
|     value: '', | ||||
|     icon: 'iconpic', | ||||
|     isShowPoints: false, | ||||
|     points: '', | ||||
|     required: true, | ||||
|     hasAnswer: false, | ||||
|     answer: '' | ||||
|   } | ||||
| ]; | ||||
| @@ -10,12 +10,16 @@ | ||||
|           <u-row justify="between"> | ||||
|             <div class="time"> | ||||
|               <span>{{ item.startTime|formatTime }}</span> | ||||
|               <span>{{ item.startTime|formatDate(0) }}年{{ item.startTime|formatDate(1) }}月{{ item.startTime|formatDate(2) }}日 周{{ item.startTime|formatWeek }}</span> | ||||
|               <span>{{ item.startTime|formatDate(0) }}年{{ | ||||
|                   item.startTime|formatDate(1) | ||||
|                 }}月{{ item.startTime|formatDate(2) }}日 周{{ item.startTime|formatWeek }}</span> | ||||
|             </div> | ||||
|             <div class="arrow"></div> | ||||
|             <div class="time"> | ||||
|               <span>{{ item.endTime|formatTime }}</span> | ||||
|               <span>{{ item.endTime|formatDate(0) }}年{{ item.endTime|formatDate(1) }}月{{ item.endTime|formatDate(2) }}日 周{{ item.endTime|formatWeek }}</span> | ||||
|               <span>{{ item.endTime|formatDate(0) }}年{{ item.endTime|formatDate(1) }}月{{ item.endTime|formatDate(2) }}日 周{{ | ||||
|                   item.endTime|formatWeek | ||||
|                 }}</span> | ||||
|             </div> | ||||
|           </u-row> | ||||
|           <u-row class="info"> | ||||
							
								
								
									
										561
									
								
								src/sass/AppMeetingNotice/detail.vue
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										561
									
								
								src/sass/AppMeetingNotice/detail.vue
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,561 @@ | ||||
| <template> | ||||
|   <div class="detail" v-if="pageShow"> | ||||
|     <template v-if="!list"> | ||||
|       <div class="card"> | ||||
|         <header>{{ detail.title }}</header> | ||||
|         <u-gap height="16"></u-gap> | ||||
|         <u-row v-if="detail.createUserId"> | ||||
|           <!--          <u-avatar :src="$cdn + 'common/xzh.png'" v-if="false"></u-avatar>--> | ||||
|           <div class="u-avatar__img"> | ||||
|             <AiOpenData type="userName" :openid="detail.createUserId"></AiOpenData> | ||||
|           </div> | ||||
|           <span class="user-name"> | ||||
|             <AiOpenData type="userName" :openid="detail.createUserId"></AiOpenData> | ||||
|           </span> | ||||
|         </u-row> | ||||
|         <u-gap height="32"></u-gap> | ||||
|         <u-row> | ||||
|           <img :src="$cdn + 'common/meeting.png'" alt=""> | ||||
|           <span :style="{color:color(detail.status)}">{{ $dict.getLabel('meetStatus', detail.status) }}</span> | ||||
|         </u-row> | ||||
|         <u-gap height="8"></u-gap> | ||||
|         <u-row> | ||||
|           <img :src="$cdn + 'common/date.png'" alt=""> | ||||
|           <span>{{ | ||||
|               detail.startTime && detail.startTime.substr(0, 16) | ||||
|             }} 至 {{ detail.endTime && detail.endTime.substr(0, 16) }}</span> | ||||
|         </u-row> | ||||
|         <u-gap height="8"></u-gap> | ||||
|         <u-row style="align-items: start;flex-wrap: nowrap;"> | ||||
|           <img :src="$cdn + 'common/location.png'" alt=""> | ||||
|           <span>{{ detail.address }}</span> | ||||
|         </u-row> | ||||
|       </div> | ||||
|       <div class="card"> | ||||
|         <span>{{ detail.content }}</span> | ||||
|       </div> | ||||
|       <div class="card" v-if="detail.files && detail.files.length"> | ||||
|         <div class="label">相关附件</div> | ||||
|         <div class="file" v-for="(item,index) in detail.files" @click="preFile(item)" :key="index"> | ||||
|           <u-row justify="between"> | ||||
|             <label class="left"> | ||||
|               <img :src="$cdn + 'common/appendix.png'" alt=""> | ||||
|               <span>{{ item.fileName }}.{{ item.postfix }}</span> | ||||
|             </label> | ||||
|             <span>{{ item.fileSizeStr }}</span> | ||||
|           </u-row> | ||||
|         </div> | ||||
|       </div> | ||||
|       <div class="card item-wrap"> | ||||
|         <u-row justify="between"> | ||||
|           <span>参会人</span> | ||||
|           <label class="right" @click="list=true"> | ||||
|             查看全部<em>{{ detail.attendees && detail.attendees.length }}</em>人 | ||||
|             <div class="right-arrow"></div> | ||||
|           </label> | ||||
|         </u-row> | ||||
|       </div> | ||||
|  | ||||
|       <div class="footer cancel" v-if="detail.status==1 && detail.createUserId == user.id" @click="handleCancel">取消会议 | ||||
|       </div> | ||||
|  | ||||
|       <template v-else> | ||||
|         <div class="footer" v-if="['1','2'].includes(detail.status) && ['0','3'].includes(detail.joinStatus)"> | ||||
|           <div class="leave" @click="updateStatus(0)"> | ||||
|             <img :src="$cdn + 'sass/leave.png'" alt="">请假 | ||||
|           </div> | ||||
|           <div @click="toDo" class="leave"> | ||||
|             <img :src="$cdn + 'sass/toBe.png'" alt="">待定 | ||||
|           </div> | ||||
|           <div @click="updateStatus(1)">确认会议</div> | ||||
|         </div> | ||||
|  | ||||
|         <!--        <div class="footer" v-if="['1','2'].includes(detail.status) && detail.joinStatus!=0">--> | ||||
|         <!--          <label>{{ detail.joinStatus|transform }}</label>--> | ||||
|         <!--          <img :src="$cdn + tag(detail.joinStatus)" alt="">--> | ||||
|         <!--        </div>--> | ||||
|       </template> | ||||
|  | ||||
|     </template> | ||||
|     <template v-else> | ||||
|       <div class="att-list"> | ||||
|         <AiTopFixed> | ||||
|           <u-tabs :list="tabs" :current="current" height="96" :is-scroll="false" bar-width="192" | ||||
|                   @change="change"></u-tabs> | ||||
|         </AiTopFixed> | ||||
|         <div v-for="(item,index) in detail.attendees && detail.attendees.filter(e=>e.joinStatus==current)" :key="index" | ||||
|              class="att-wrap"> | ||||
|           <div class="left"> | ||||
|             <u-avatar :src="item.avatar || (($cdn + 'common/xztx.png'))" size="74" mode="square" | ||||
|                       style="margin-right: 8px"></u-avatar> | ||||
|             <AiOpenData type="userName" :openid="item.name"></AiOpenData> | ||||
|           </div> | ||||
|           <!--          <img :src="$cdn + 'common/phone.png'" alt="" @click="call(item)">--> | ||||
|         </div> | ||||
|       </div> | ||||
|     </template> | ||||
|     <u-modal v-model="show" title="提示" show-cancel-button content='是否要取消该会议?' @confirm="onConfirm"></u-modal> | ||||
|     <AiBack/> | ||||
|   </div> | ||||
| </template> | ||||
|  | ||||
| <script> | ||||
| import {mapActions, mapState} from "vuex"; | ||||
|  | ||||
| export default { | ||||
|   name: "detail", | ||||
|   data() { | ||||
|     return { | ||||
|       detail: {}, | ||||
|       list: false, | ||||
|       current: 0, | ||||
|       pageShow: false, | ||||
|       show: false, | ||||
|       id: null, | ||||
|     } | ||||
|   }, | ||||
|   onLoad(opt) { | ||||
|     this.id = opt.id; | ||||
|   }, | ||||
|   computed: { | ||||
|     ...mapState(["user"]), | ||||
|     tabs() { | ||||
|       return [ | ||||
|         {name: this.count(0) + "人未确认"}, | ||||
|         {name: this.count(1) + "人已确认"}, | ||||
|         {name: this.count(2) + "人已请假"}, | ||||
|         {name: this.count(3) + "人待定"}, | ||||
|       ] | ||||
|     }, | ||||
|   }, | ||||
|   methods: { | ||||
|     onConfirm() { | ||||
|       this.$http.post("/app/appmeetinginfo/cancel", null, { | ||||
|         params: { | ||||
|           meetingId: this.id, | ||||
|         } | ||||
|       }).then(res => { | ||||
|         if (res.code == 0) { | ||||
|           this.$u.toast("取消成功"); | ||||
|           this.getDetail(); | ||||
|         } | ||||
|       }) | ||||
|     }, | ||||
|     handleCancel() { | ||||
|       this.show = true; | ||||
|     }, | ||||
|     toDo() { | ||||
|       this.$http.post("/app/appmeetinginfo/tobeConfirm", null, { | ||||
|         params: { | ||||
|           meetingId: this.id, | ||||
|         } | ||||
|       }).then(res => { | ||||
|         if (res.code == 0) { | ||||
|           this.$u.toast("会议待定"); | ||||
|           setTimeout(_ => { | ||||
|             uni.navigateBack(); | ||||
|           }, 800) | ||||
|         } | ||||
|       }) | ||||
|     }, | ||||
|     count(sta) { | ||||
|       return this.detail.attendees ? this.detail.attendees?.filter(e => e.joinStatus == sta)?.length : 0; | ||||
|     }, | ||||
|     change(index) { | ||||
|       this.current = index; | ||||
|       this.detail = {}; | ||||
|       this.getDetail(); | ||||
|     }, | ||||
|     call(item) { | ||||
|       if (item.phone) { | ||||
|         uni.makePhoneCall({ | ||||
|           phoneNumber: item.phone | ||||
|         }); | ||||
|       } | ||||
|     }, | ||||
|     ...mapActions(['previewFile', 'injectJWeixin']), | ||||
|     preFile(e) { | ||||
|       if ([".jpg", ".png", ".gif"].includes(e.postfix.toLowerCase())) { | ||||
|         uni.previewImage({ | ||||
|           current: e.url, | ||||
|           urls: [e.url] | ||||
|         }) | ||||
|       } else { | ||||
|         this.previewFile({...e}) | ||||
|       } | ||||
|     }, | ||||
|     tag(status) { | ||||
|       return { | ||||
|         "1": "common/2confirmed2.png", | ||||
|         "2": "common/2absent2.png" | ||||
|       }[status] | ||||
|     }, | ||||
|     updateStatus(status) { | ||||
|       this.$http.post(status == 0 ? "/app/appmeetinginfo/absent" : "/app/appmeetinginfo/confirm", null, { | ||||
|         params: { | ||||
|           meetingId: this.id, | ||||
|           reason: status == 0 ? "" : null | ||||
|         } | ||||
|       }).then(res => { | ||||
|         if (res.code == 0) { | ||||
|           this.$u.toast(status == 0 ? "请假成功" : "确认成功") | ||||
|           this.getDetail() | ||||
|         } | ||||
|       }) | ||||
|     }, | ||||
|     color(status) { | ||||
|       if (status == 1) { | ||||
|         return "#FF8822" | ||||
|       } | ||||
|  | ||||
|       if (status == 2) { | ||||
|         return "#1365DD" | ||||
|       } | ||||
|  | ||||
|       if (status == 3) { | ||||
|         return "#FF4466" | ||||
|       } | ||||
|  | ||||
|       return "#343D65" | ||||
|     }, | ||||
|     getDetail() { | ||||
|       this.$http.post("/app/appmeetinginfo/info-id", null, { | ||||
|         params: {id: this.id} | ||||
|       }).then(res => { | ||||
|         if (res && res.data) { | ||||
|           this.detail = res.data | ||||
|           this.pageShow = true | ||||
|         } | ||||
|       }) | ||||
|     } | ||||
|   }, | ||||
|   created() { | ||||
|     this.injectJWeixin(['sendChatMessage']).then(() => { | ||||
|       this.getDetail() | ||||
|     }) | ||||
|   }, | ||||
|  | ||||
|   onShow() { | ||||
|     document.title = "会议详情"; | ||||
|     this.$dict.load("meetStatus"); | ||||
|     wx.hideOptionMenu(); | ||||
|   }, | ||||
|   filters: { | ||||
|     transform(status) { | ||||
|       if (status == 1) { | ||||
|         return "已确认" | ||||
|       } | ||||
|       if (status == 2) { | ||||
|         return "已请假" | ||||
|       } | ||||
|     } | ||||
|   } | ||||
| } | ||||
| </script> | ||||
|  | ||||
| <style lang="scss" scoped> | ||||
| .detail { | ||||
|   min-height: 100%; | ||||
|   background-color: #F5F5F5; | ||||
|   padding-bottom: 140px; | ||||
|  | ||||
|  | ||||
|   ::v-deep .AiTopFixed { | ||||
|     margin-bottom: 16px; | ||||
|  | ||||
|     .content { | ||||
|       padding: 0 !important; | ||||
|     } | ||||
|   } | ||||
|  | ||||
|  | ||||
|   .att-list { | ||||
|     min-height: 100%; | ||||
|  | ||||
|     .att-wrap { | ||||
|       display: flex; | ||||
|       height: 112px; | ||||
|       align-items: center; | ||||
|       justify-content: space-between; | ||||
|       background-color: #ffffff; | ||||
|       box-sizing: border-box; | ||||
|       padding: 0 50px; | ||||
|       border-bottom: 1px solid #E4E5E6; | ||||
|  | ||||
|       .left { | ||||
|         display: flex; | ||||
|         align-items: center; | ||||
|  | ||||
|         &:after { | ||||
|           content: ""; | ||||
|           position: absolute; | ||||
|           right: 0; | ||||
|           bottom: 0; | ||||
|           width: 622px; | ||||
|           height: 2px; | ||||
|           background-color: rgba(216, 221, 230, 0.5); | ||||
|         } | ||||
|  | ||||
|         .name { | ||||
|           font-size: 30px; | ||||
|           font-weight: 600; | ||||
|           color: #333333; | ||||
|         } | ||||
|       } | ||||
|  | ||||
|       & > img { | ||||
|         width: 48px; | ||||
|         height: 48px; | ||||
|       } | ||||
|     } | ||||
|   } | ||||
|  | ||||
|   .card { | ||||
|     background-color: #FFFFFF; | ||||
|     margin-bottom: 8px; | ||||
|     box-sizing: border-box; | ||||
|     padding: 16px 32px; | ||||
|  | ||||
|     header { | ||||
|       font-size: 40px; | ||||
|       font-weight: 600; | ||||
|       color: #333333; | ||||
|       line-height: 64px; | ||||
|       letter-spacing: 1px; | ||||
|     } | ||||
|  | ||||
|     .u-row { | ||||
|       & > div { | ||||
|         border-radius: 50%; | ||||
|         text-align: center; | ||||
|         font-size: 30px; | ||||
|         display: flex; | ||||
|         align-items: center; | ||||
|         justify-content: center; | ||||
|         /*margin-left: 8px;*/ | ||||
|       } | ||||
|  | ||||
|       & > span { | ||||
|         font-size: 30px; | ||||
|         color: #343D65; | ||||
|         margin-left: 16px; | ||||
|       } | ||||
|  | ||||
|       ::v-deep .u-avatar__img { | ||||
|         width: 56px; | ||||
|         height: 56px; | ||||
|         vertical-align: middle; | ||||
|         color: #ffffff; | ||||
|         background-color: #2266FF; | ||||
|         font-size: 16px; | ||||
|       } | ||||
|  | ||||
|       .user-name { | ||||
|         font-size: 30px; | ||||
|         color: #343D65; | ||||
|       } | ||||
|  | ||||
|       img { | ||||
|         width: 48px; | ||||
|         height: 48px; | ||||
|       } | ||||
|     } | ||||
|  | ||||
|     & > span { | ||||
|       font-size: 32px; | ||||
|       color: #333333; | ||||
|       line-height: 48px; | ||||
|       letter-spacing: 1px; | ||||
|       display: inline-block; | ||||
|       box-sizing: border-box; | ||||
|       padding: 16px 0; | ||||
|     } | ||||
|  | ||||
|     .label { | ||||
|       height: 96px; | ||||
|       font-size: 32px; | ||||
|       color: #333333; | ||||
|       display: flex; | ||||
|       align-items: center; | ||||
|       margin-bottom: 16px; | ||||
|     } | ||||
|  | ||||
|     .file { | ||||
|       height: 128px; | ||||
|       background: #FFFFFF; | ||||
|       border-radius: 8px; | ||||
|       border: 1px solid #CCCCCC; | ||||
|       box-sizing: border-box; | ||||
|       padding: 0 16px; | ||||
|       margin-bottom: 32px; | ||||
|  | ||||
|       & > .u-row { | ||||
|         height: 100%; | ||||
|  | ||||
|         .left { | ||||
|           width: 522px; | ||||
|           display: flex; | ||||
|           align-items: center; | ||||
|  | ||||
|           & > img { | ||||
|             width: 96px; | ||||
|             height: 96px; | ||||
|           } | ||||
|  | ||||
|           & > span { | ||||
|             font-size: 32px; | ||||
|             color: #333333; | ||||
|             display: inline-block; | ||||
|             line-height: 44px; | ||||
|             text-overflow: ellipsis; | ||||
|             overflow-x: hidden; | ||||
|             white-space: nowrap; | ||||
|           } | ||||
|         } | ||||
|  | ||||
|         & > span { | ||||
|           font-size: 28px; | ||||
|           color: #999999; | ||||
|         } | ||||
|       } | ||||
|     } | ||||
|  | ||||
|     .active { | ||||
|       background-color: #F3F6F9; | ||||
|     } | ||||
|  | ||||
|     .name { | ||||
|       font-size: 32px; | ||||
|       font-weight: 400; | ||||
|       color: #333333; | ||||
|     } | ||||
|  | ||||
|     .wrap { | ||||
|       height: 112px; | ||||
|       display: flex; | ||||
|       align-items: center; | ||||
|       position: relative; | ||||
|  | ||||
|       &:after { | ||||
|         content: ""; | ||||
|         position: absolute; | ||||
|         right: 0; | ||||
|         bottom: 0; | ||||
|         width: 622px; | ||||
|         height: 2px; | ||||
|         background-color: rgba(216, 221, 230, 0.5); | ||||
|       } | ||||
|  | ||||
|       & > label { | ||||
|         width: 80px; | ||||
|         height: 80px; | ||||
|         border-radius: 50%; | ||||
|         background-color: #4E8EEE; | ||||
|         font-size: 28px; | ||||
|         font-weight: 600; | ||||
|         color: #FFFFFF; | ||||
|         display: flex; | ||||
|         align-items: center; | ||||
|         justify-content: center; | ||||
|       } | ||||
|     } | ||||
|   } | ||||
|  | ||||
|   .item-wrap { | ||||
|     height: 112px; | ||||
|     padding: 0 32px; | ||||
|  | ||||
|     .u-row { | ||||
|       height: 100%; | ||||
|  | ||||
|       & > span { | ||||
|         font-size: 32px; | ||||
|         font-weight: 400; | ||||
|         color: #333333; | ||||
|       } | ||||
|     } | ||||
|  | ||||
|     .right { | ||||
|       font-size: 28px; | ||||
|       color: #999999; | ||||
|       display: flex; | ||||
|       align-items: center; | ||||
|  | ||||
|       em { | ||||
|         font-style: normal; | ||||
|         color: #1365DD; | ||||
|       } | ||||
|  | ||||
|       .right-arrow { | ||||
|         width: 16px; | ||||
|         height: 16px; | ||||
|         border-top: 5px solid #CCCCCC; | ||||
|         border-right: 5px solid #CCCCCC; | ||||
|         transform: rotate(45deg); | ||||
|       } | ||||
|     } | ||||
|   } | ||||
|  | ||||
|   .footer { | ||||
|     height: 112px; | ||||
|     width: 100%; | ||||
|     position: fixed; | ||||
|     left: 0; | ||||
|     bottom: 0; | ||||
|     background-color: #FFFFFF; | ||||
|     display: flex; | ||||
|     align-items: center; | ||||
|     justify-content: center; | ||||
|  | ||||
|     & > div { | ||||
|       font-size: 28px; | ||||
|       color: #666666; | ||||
|       display: flex; | ||||
|       flex-direction: column; | ||||
|  | ||||
|       & > img { | ||||
|         width: 48px; | ||||
|         height: 48px; | ||||
|       } | ||||
|     } | ||||
|  | ||||
|     & > div:nth-child(1), & > div:nth-child(2) { | ||||
|       width: 135px; | ||||
|       height: 100%; | ||||
|       display: flex; | ||||
|       align-items: center; | ||||
|       justify-content: center; | ||||
|     } | ||||
|  | ||||
|     & > div:last-child { | ||||
|       width: calc(100% - 270px); | ||||
|       height: 100%; | ||||
|       color: #FFFFFF; | ||||
|       display: flex; | ||||
|       align-items: center; | ||||
|       justify-content: center; | ||||
|       background-color: #1365DD; | ||||
|     } | ||||
|  | ||||
|     & > label { | ||||
|       font-size: 36px; | ||||
|       font-weight: 400; | ||||
|       color: #999999; | ||||
|     } | ||||
|  | ||||
|     /*img {*/ | ||||
|     /*  width: 158px;*/ | ||||
|     /*  height: 104px;*/ | ||||
|     /*  position: absolute;*/ | ||||
|     /*  right: 0;*/ | ||||
|     /*  top: 0;*/ | ||||
|     /*}*/ | ||||
|   } | ||||
|  | ||||
|   .cancel { | ||||
|     color: #ffffff; | ||||
|     font-size: 36px; | ||||
|     background-color: #005DFF | ||||
|   } | ||||
| } | ||||
| </style> | ||||
							
								
								
									
										226
									
								
								src/sass/AppMeetingNotice/meetingList.vue
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										226
									
								
								src/sass/AppMeetingNotice/meetingList.vue
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,226 @@ | ||||
| <template> | ||||
|   <div class="meeting-list"> | ||||
|     <div class="card" v-for="(item,index) in list" :key="index" @click="detail(item)"> | ||||
|       <header> | ||||
|         <span>{{ item.title }}</span> | ||||
|         <span> | ||||
|           <span v-if="index==2">保存于</span> | ||||
|           {{ item.createTime }}</span> | ||||
|       </header> | ||||
|       <u-row justify="between"> | ||||
|         <div class="time"> | ||||
|           <span>{{ item.startTime|format }}</span> | ||||
|           <span>{{ item.startTime|formatDate(0) }}年{{ item.startTime|formatDate(1) }}月{{ item.startTime|formatDate(2) }}日 周{{ item.startTime|formatWeek }}</span> | ||||
|         </div> | ||||
|         <div class="arrow"></div> | ||||
|         <div class="time"> | ||||
|           <span>{{ item.endTime|format }}</span> | ||||
|           <span>{{ item.endTime|formatDate(0) }}年{{ item.endTime|formatDate(1) }}月{{ item.endTime|formatDate(2) }}日 周{{ item.endTime|formatWeek }}</span> | ||||
|         </div> | ||||
|       </u-row> | ||||
|       <u-row class="info"> | ||||
|         <span>发起人员:</span> | ||||
|         <AiOpenData type="userName" :openid="item.createUserId"/> | ||||
|       </u-row> | ||||
|       <u-gap height="20"></u-gap> | ||||
|       <u-row class="info"> | ||||
|         <span>会议地点:</span> | ||||
|         <span>{{ item.address }}</span> | ||||
|       </u-row> | ||||
|       <div class="tag" v-if="item.status!=0" :style="{background:'url(' + $cdn + tag(item.status) +')'}"></div> | ||||
|     </div> | ||||
|     <u-loadmore :status="status" v-if="list.length"/> | ||||
|     <AiEmpty v-if="!list.length"></AiEmpty> | ||||
|     <AiBack/> | ||||
|   </div> | ||||
| </template> | ||||
|  | ||||
| <script> | ||||
|  | ||||
| export default { | ||||
|   name: "meetingList", | ||||
|   props: { | ||||
|     params: { | ||||
|       type: [String, Number, Object], | ||||
|     } | ||||
|   }, | ||||
|   data() { | ||||
|     return { | ||||
|       list: [], | ||||
|       current: 1, | ||||
|       index: null, | ||||
|       status: "加载更多", | ||||
|     } | ||||
|   }, | ||||
|  | ||||
|   onLoad(opt) { | ||||
|     this.index = opt.index | ||||
|     uni.setNavigationBarTitle({ | ||||
|       title: opt.index == 0 ? "历史会议" : "草稿箱" | ||||
|     }); | ||||
|     this.getData(); | ||||
|   }, | ||||
|  | ||||
|   methods: { | ||||
|     detail({id}) { | ||||
|       let url | ||||
|       if (this.index == 2) { | ||||
|         url = "/apps/AppMeetingNotice/addMeeting?id=" + id | ||||
|       } else { | ||||
|         url = "/apps/AppMeetingNotice/detail?id=" + id | ||||
|       } | ||||
|       uni.navigateTo({url}) | ||||
|     }, | ||||
|     tag(status) { | ||||
|       return { | ||||
|         "1": 'common/1wks.png', | ||||
|         "2": 'common/1jxz.png', | ||||
|         "3": 'common/1yqx.png', | ||||
|         "4": 'common/1yjs.png' | ||||
|       }[status] | ||||
|     }, | ||||
|     getData() { | ||||
|       this.$http.post("/app/appmeetinginfo/list", null, { | ||||
|         params: { | ||||
|           listType: this.index == 0 ? "2" : '0', | ||||
|           meetingStatus: this.index == 0 ? "4" : "0", | ||||
|           size: 10, | ||||
|           current: this.current, | ||||
|         } | ||||
|       }).then(res => { | ||||
|         if (res && res.data) { | ||||
|           if (this.current > 1 && this.current > res.data.pages) { | ||||
|             this.status = "已经到底啦" | ||||
|           } | ||||
|           this.list = this.current > 1 ? [...this.list, ...res.data.records] : res.data.records | ||||
|         } | ||||
|       }) | ||||
|     }, | ||||
|   }, | ||||
|  | ||||
|   onReachBottom() { | ||||
|     this.current++; | ||||
|     this.getData(); | ||||
|   }, | ||||
|  | ||||
|   filters: { | ||||
|     format(date) { | ||||
|       return date.split(" ")[1].substr(0, 5) | ||||
|     }, | ||||
|     formatDate(date, index) { | ||||
|       return date.split(" ")[0].split("-")[index] | ||||
|     }, | ||||
|     formatWeek(date) { | ||||
|       return "日一二三四五六".charAt((new Date(date.split(" ")[0]).getDay())) | ||||
|     } | ||||
|   }, | ||||
| } | ||||
| </script> | ||||
|  | ||||
| <style lang="scss" scoped> | ||||
| .meeting-list { | ||||
|   min-height: 100%; | ||||
|   background-color: #F5F5F5; | ||||
|   box-sizing: border-box; | ||||
|   padding: 32px; | ||||
|  | ||||
|   .card { | ||||
|     background-color: #FFFFFF; | ||||
|     box-sizing: border-box; | ||||
|     padding: 32px; | ||||
|     border-radius: 8px; | ||||
|     margin-bottom: 32px; | ||||
|     position: relative; | ||||
|  | ||||
|     &:last-child { | ||||
|       margin-bottom: 0; | ||||
|     } | ||||
|  | ||||
|     & > header { | ||||
|       width: 95%; | ||||
|       font-size: 32px; | ||||
|       font-weight: 600; | ||||
|       color: #333333; | ||||
|       display: flex; | ||||
|       flex-direction: column; | ||||
|  | ||||
|       & > span:last-child { | ||||
|         font-size: 28px; | ||||
|         font-weight: 400; | ||||
|         color: #999999; | ||||
|         margin-top: 10px; | ||||
|       } | ||||
|     } | ||||
|  | ||||
|     .time { | ||||
|       display: flex; | ||||
|       flex-direction: column; | ||||
|       margin: 46px 0; | ||||
|  | ||||
|       & > span:first-child { | ||||
|         font-size: 60px; | ||||
|         font-weight: 600; | ||||
|         color: #333333; | ||||
|         line-height: 84px; | ||||
|       } | ||||
|  | ||||
|       & > span:last-child { | ||||
|         font-size: 22px; | ||||
|         color: #333333; | ||||
|       } | ||||
|     } | ||||
|  | ||||
|     .arrow { | ||||
|       width: 28px; | ||||
|       height: 68px; | ||||
|       overflow: hidden; | ||||
|       position: relative; | ||||
|       transform: rotate(180deg); | ||||
|  | ||||
|       &:before, &:after { | ||||
|         content: ""; | ||||
|         width: 50px; | ||||
|         height: 50px; | ||||
|         position: absolute; | ||||
|         transform: scaleY(1.3) translate(30%, -40px) rotate(45deg); | ||||
|       } | ||||
|  | ||||
|       &:before { | ||||
|         top: 59px; | ||||
|         background-color: #CCCCCC; | ||||
|       } | ||||
|  | ||||
|       &:after { | ||||
|         left: 7px; | ||||
|         top: 59px; | ||||
|         background-color: #FFFFFF; | ||||
|       } | ||||
|     } | ||||
|  | ||||
|     .info { | ||||
|       flex-wrap: nowrap; | ||||
|  | ||||
|       & > span:first-child { | ||||
|         flex-shrink: 0; | ||||
|         font-size: 30px; | ||||
|         color: #999999; | ||||
|       } | ||||
|  | ||||
|       & > span:last-child { | ||||
|         font-size: 30px; | ||||
|         color: #343D65; | ||||
|       } | ||||
|     } | ||||
|  | ||||
|     .tag { | ||||
|       width: 112px; | ||||
|       height: 112px; | ||||
|       background-repeat: no-repeat !important; | ||||
|       background-size: 100% 100% !important; | ||||
|       position: absolute; | ||||
|       top: 0; | ||||
|       right: 0; | ||||
|     } | ||||
|   } | ||||
| } | ||||
| </style> | ||||
							
								
								
									
										360
									
								
								src/sass/AppNotification/detail.vue
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										360
									
								
								src/sass/AppNotification/detail.vue
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,360 @@ | ||||
| <template> | ||||
|   <div class="detail" v-if="pageShow"> | ||||
|     <template v-if="detailObj.status!=2"> | ||||
|       <div class="card"> | ||||
|         <header>{{ detailObj.title }}</header> | ||||
|         <u-gap height="16"></u-gap> | ||||
|         <u-row> | ||||
|           <span>发布人:</span> | ||||
|           <span v-if="detailObj.createUserId"> | ||||
|             <AiOpenData type="userName" :openid="detailObj.createUserId"></AiOpenData> | ||||
|           </span> | ||||
|         </u-row> | ||||
|         <u-gap height="8"></u-gap> | ||||
|         <u-row> | ||||
|           <span>发布部门:</span> | ||||
|           <span v-if="detailObj.unitName"> | ||||
|             <AiOpenData type="departmentName" :openid="detailObj.unitName"></AiOpenData> | ||||
|           </span> | ||||
|         </u-row> | ||||
|         <u-gap height="8"></u-gap> | ||||
|         <u-row> | ||||
|           <span>发布日期:</span> | ||||
|           <span>{{ detailObj.releaseTime }}</span> | ||||
|         </u-row> | ||||
|         <u-gap height="8"></u-gap> | ||||
|       </div> | ||||
|  | ||||
|       <div class="card"> | ||||
|         <div class="label">公告内容</div> | ||||
|         <u-parse :html="detailObj.content"></u-parse> | ||||
|       </div> | ||||
|  | ||||
|       <div class="card" style="padding-top: 0" v-if="detailObj.files && detailObj.files.length"> | ||||
|         <div class="label">相关附件</div> | ||||
|         <div class="file" v-for="(item,index) in detailObj.files" :key="index" @click="preFile(item)"> | ||||
|           <u-row justify="between"> | ||||
|             <label class="left"> | ||||
|               <img :src="$cdn + 'common/appendix.png'" alt=""> | ||||
|               <span>{{ item.name }}.{{ item.postfix }}</span> | ||||
|             </label> | ||||
|             <span>{{ (item.size / 1024).toFixed(2) }}KB</span> | ||||
|           </u-row> | ||||
|         </div> | ||||
|       </div> | ||||
|  | ||||
|       <div class="card" @click="handleClick"> | ||||
|         <u-row justify="between" class="item"> | ||||
|           <span>接收对象</span> | ||||
|           <div class="right"> | ||||
|             <em>{{ detailObj.readNum }}人</em>已读 | ||||
|             <em>{{ detailObj.unReadNum }}人</em>未读 | ||||
|             <div class="arrow"></div> | ||||
|           </div> | ||||
|         </u-row> | ||||
|       </div> | ||||
|     </template> | ||||
|     <AiEmpty description="该通知已撤回" v-else/> | ||||
|     <AiBack/> | ||||
|   </div> | ||||
| </template> | ||||
|  | ||||
| <script> | ||||
| import {mapActions} from "vuex"; | ||||
|  | ||||
| export default { | ||||
|   name: "detail", | ||||
|   data() { | ||||
|     return { | ||||
|       detailObj: {}, | ||||
|       id: null, | ||||
|       pageShow: false, | ||||
|       flag: false, | ||||
|     } | ||||
|   }, | ||||
|  | ||||
|   onLoad(opt) { | ||||
|     this.id = opt.id; | ||||
|     this.flag = opt.flag; | ||||
|   }, | ||||
|  | ||||
|   created() { | ||||
|     this.injectJWeixin(['sendChatMessage']).then(() => { | ||||
|       this.getDetail() | ||||
|     }) | ||||
|   }, | ||||
|  | ||||
|   onShow() { | ||||
|     document.title = "公告详情"; | ||||
|     wx.hideOptionMenu(); | ||||
|   }, | ||||
|  | ||||
|   methods: { | ||||
|     ...mapActions(['previewFile', 'injectJWeixin']), | ||||
|     preFile(e) { | ||||
|       if ([".jpg", ".png", ".gif"].includes(e.postfix.toLowerCase())) { | ||||
|         uni.previewImage({ | ||||
|           current: e.url, | ||||
|           urls: [e.url] | ||||
|         }) | ||||
|       } else { | ||||
|         this.previewFile({...e}) | ||||
|       } | ||||
|     }, | ||||
|     getDetail() { | ||||
|       this.$http.post("/app/appannouncement/detail", null, { | ||||
|         params: { | ||||
|           id: this.id, | ||||
|           detail: this.flag | ||||
|         } | ||||
|       }).then(res => { | ||||
|         if (res && res.data) { | ||||
|           this.detailObj = res.data; | ||||
|           this.pageShow = true | ||||
|         } | ||||
|       }) | ||||
|     }, | ||||
|     handleClick() { | ||||
|       uni.navigateTo({ | ||||
|         url: "/apps/AppNotification/read?id=" + this.id, | ||||
|       }) | ||||
|     } | ||||
|   }, | ||||
| } | ||||
| </script> | ||||
|  | ||||
| <style lang="scss" scoped> | ||||
| .detail { | ||||
|   min-height: 100%; | ||||
|   background-color: #F5F5F5; | ||||
|   padding-bottom: 140px; | ||||
|  | ||||
|   ::v-deep .content { | ||||
|     padding: 0; | ||||
|   } | ||||
|  | ||||
|   .card { | ||||
|     background-color: #FFFFFF; | ||||
|     margin-bottom: 8px; | ||||
|     box-sizing: border-box; | ||||
|     padding: 16px 32px; | ||||
|  | ||||
|     header { | ||||
|       font-size: 40px; | ||||
|       font-weight: 600; | ||||
|       color: #333333; | ||||
|       line-height: 64px; | ||||
|       letter-spacing: 1px; | ||||
|     } | ||||
|  | ||||
|     .u-row { | ||||
|       & > div { | ||||
|         border-radius: 50%; | ||||
|         text-align: center; | ||||
|         font-size: 22px; | ||||
|         font-weight: bold; | ||||
|         display: flex; | ||||
|         align-items: center; | ||||
|         justify-content: center; | ||||
|       } | ||||
|  | ||||
|       & > span { | ||||
|         font-size: 30px; | ||||
|         color: #343D65; | ||||
|         line-height: 48px; | ||||
|       } | ||||
|  | ||||
|       & > span:last-child { | ||||
|         font-size: 30px; | ||||
|         /*color: #343D65;*/ | ||||
|         /*margin-left: 16px;*/ | ||||
|         line-height: 48px; | ||||
|       } | ||||
|  | ||||
|       .title { | ||||
|         width: 490px; | ||||
|         height: 112px; | ||||
|         display: flex; | ||||
|         align-items: center; | ||||
|         font-size: 32px; | ||||
|         color: #333333; | ||||
|         overflow: hidden; | ||||
|         text-overflow: ellipsis; | ||||
|         white-space: nowrap; | ||||
|       } | ||||
|  | ||||
|       .right { | ||||
|         font-size: 28px; | ||||
|         display: flex; | ||||
|         align-items: center; | ||||
|         color: #666666; | ||||
|  | ||||
|         .arrow { | ||||
|           width: 16px; | ||||
|           height: 16px; | ||||
|           border-top: 3px solid #CCCCCC; | ||||
|           border-right: 3px solid #CCCCCC; | ||||
|           transform: rotate(45deg); | ||||
|         } | ||||
|       } | ||||
|     } | ||||
|  | ||||
|     .item { | ||||
|       position: relative; | ||||
|       height: 80px; | ||||
|  | ||||
|       &:after { | ||||
|         width: 100%; | ||||
|         height: 1px; | ||||
|         background-color: rgba(216, 221, 230, 0.5); | ||||
|         content: ""; | ||||
|         position: absolute; | ||||
|         left: 0; | ||||
|         bottom: 0; | ||||
|       } | ||||
|     } | ||||
|  | ||||
|     & > span { | ||||
|       font-size: 32px; | ||||
|       color: #333333; | ||||
|       line-height: 48px; | ||||
|       letter-spacing: 1px; | ||||
|       display: inline-block; | ||||
|     } | ||||
|  | ||||
|     .label { | ||||
|       height: 80px; | ||||
|       font-size: 32px; | ||||
|       color: #333333; | ||||
|       display: flex; | ||||
|       align-items: center; | ||||
|       margin-bottom: 16px; | ||||
|  | ||||
|       & > em { | ||||
|         font-style: normal; | ||||
|         font-size: 32px; | ||||
|         color: #1365DD; | ||||
|       } | ||||
|     } | ||||
|  | ||||
|     .file { | ||||
|       height: 128px; | ||||
|       background: #FFFFFF; | ||||
|       border-radius: 8px; | ||||
|       border: 1px solid #CCCCCC; | ||||
|       box-sizing: border-box; | ||||
|       padding: 0 16px; | ||||
|       margin-bottom: 32px; | ||||
|  | ||||
|       & > .u-row { | ||||
|         height: 100%; | ||||
|  | ||||
|         .left { | ||||
|           width: 476px; | ||||
|           display: flex; | ||||
|           align-items: center; | ||||
|           word-break: break-all; | ||||
|  | ||||
|           & > img { | ||||
|             flex-shrink: 0; | ||||
|             width: 96px; | ||||
|             height: 96px; | ||||
|           } | ||||
|  | ||||
|           & > span { | ||||
|             font-size: 32px; | ||||
|             color: #333333; | ||||
|             display: inline-block; | ||||
|             line-height: 44px; | ||||
|             overflow: hidden; | ||||
|             text-overflow: ellipsis; | ||||
|             display: -webkit-box; | ||||
|             -webkit-box-orient: vertical; | ||||
|             -webkit-line-clamp: 2; | ||||
|           } | ||||
|         } | ||||
|  | ||||
|         & > span { | ||||
|           font-size: 28px; | ||||
|           color: #999999; | ||||
|         } | ||||
|       } | ||||
|     } | ||||
|  | ||||
|     .active { | ||||
|       background-color: #F3F6F9; | ||||
|     } | ||||
|  | ||||
|     & > text { | ||||
|       width: 100%; | ||||
|       display: inline-block; | ||||
|       font-size: 30px; | ||||
|       color: #649EFD; | ||||
|       text-align: center; | ||||
|     } | ||||
|  | ||||
|     .progress { | ||||
|       height: 12px; | ||||
|       background: #F2F4FC; | ||||
|       border-radius: 12px; | ||||
|       position: relative; | ||||
|       margin: 16px 0 64px 0; | ||||
|  | ||||
|       .pro-active { | ||||
|         height: 12px; | ||||
|         background: #639EFD; | ||||
|         border-radius: 12px; | ||||
|         position: absolute; | ||||
|         left: 0; | ||||
|         top: 0; | ||||
|       } | ||||
|  | ||||
|     } | ||||
|  | ||||
|     em { | ||||
|       font-style: normal; | ||||
|       font-size: 28px; | ||||
|       color: #1365DD; | ||||
|     } | ||||
|  | ||||
|     ::v-deep .u-collapse { | ||||
|       position: relative; | ||||
|  | ||||
|       &:after { | ||||
|         content: ""; | ||||
|         width: 718px; | ||||
|         height: 1px; | ||||
|         background-color: rgba(216, 221, 230, 0.5); | ||||
|         position: absolute; | ||||
|         left: 0; | ||||
|         bottom: 0; | ||||
|       } | ||||
|  | ||||
|       .u-collapse-head { | ||||
|         padding: 40px 0; | ||||
|       } | ||||
|  | ||||
|       .u-collapse-content { | ||||
|         font-size: 32px; | ||||
|         color: #333333; | ||||
|         line-height: 48px; | ||||
|         letter-spacing: 1px; | ||||
|       } | ||||
|     } | ||||
|   } | ||||
|  | ||||
|   .footer { | ||||
|     height: 112px; | ||||
|     width: 100%; | ||||
|     position: fixed; | ||||
|     left: 0; | ||||
|     bottom: 0; | ||||
|     background: #1365DD; | ||||
|     display: flex; | ||||
|     align-items: center; | ||||
|     justify-content: center; | ||||
|     font-size: 36px; | ||||
|     color: #FFFFFF; | ||||
|   } | ||||
| } | ||||
| </style> | ||||
| @@ -2,12 +2,10 @@ | ||||
|   if (typeof exports === "object") { | ||||
|     // CommonJS | ||||
|     module.exports = exports = factory(); | ||||
| 	} | ||||
| 	else if (typeof define === "function" && define.amd) { | ||||
|   } else if (typeof define === "function" && define.amd) { | ||||
|     // AMD | ||||
|     define([], factory); | ||||
| 	} | ||||
| 	else { | ||||
|   } else { | ||||
|     // Global (browser) | ||||
|     root.CryptoJS = factory(); | ||||
|   } | ||||
| @@ -41,7 +39,8 @@ | ||||
|     if (!crypto && typeof require === 'function') { | ||||
|       try { | ||||
|         crypto = require('crypto'); | ||||
| 	        } catch (err) {} | ||||
|       } catch (err) { | ||||
|       } | ||||
|     } | ||||
|  | ||||
|     /* | ||||
| @@ -55,14 +54,16 @@ | ||||
|         if (typeof crypto.getRandomValues === 'function') { | ||||
|           try { | ||||
|             return crypto.getRandomValues(new Uint32Array(1))[0]; | ||||
| 	                } catch (err) {} | ||||
|           } catch (err) { | ||||
|           } | ||||
|         } | ||||
|  | ||||
|         // Use randomBytes method (NodeJS) | ||||
|         if (typeof crypto.randomBytes === 'function') { | ||||
|           try { | ||||
|             return crypto.randomBytes(4).readInt32LE(); | ||||
| 	                } catch (err) {} | ||||
|           } catch (err) { | ||||
|           } | ||||
|         } | ||||
|       } | ||||
|  | ||||
| @@ -74,7 +75,8 @@ | ||||
|  | ||||
| 	     */ | ||||
|     var create = Object.create || (function () { | ||||
| 	        function F() {} | ||||
|       function F() { | ||||
|       } | ||||
|  | ||||
|       return function (obj) { | ||||
|         var subtype; | ||||
| @@ -4311,8 +4313,7 @@ | ||||
|       var nPaddingBytes = blockSizeBytes - data.sigBytes % blockSizeBytes; | ||||
|  | ||||
|       // Pad | ||||
| 	        data.concat(CryptoJS.lib.WordArray.random(nPaddingBytes - 1)). | ||||
| 	             concat(CryptoJS.lib.WordArray.create([nPaddingBytes << 24], 1)); | ||||
|       data.concat(CryptoJS.lib.WordArray.random(nPaddingBytes - 1)).concat(CryptoJS.lib.WordArray.create([nPaddingBytes << 24], 1)); | ||||
|     }, | ||||
|  | ||||
|     unpad: function (data) { | ||||
| @@ -5549,8 +5550,7 @@ | ||||
|   CryptoJS.mode.CTRGladman = (function () { | ||||
|     var CTRGladman = CryptoJS.lib.BlockCipherMode.extend(); | ||||
|  | ||||
| 		function incWord(word) | ||||
| 		{ | ||||
|     function incWord(word) { | ||||
|       if (((word >> 24) & 0xff) === 0xff) { //overflow | ||||
|         var b1 = (word >> 16) & 0xff; | ||||
|         var b2 = (word >> 8) & 0xff; | ||||
| @@ -5559,25 +5559,17 @@ | ||||
|         if (b1 === 0xff) // overflow b1 | ||||
|         { | ||||
|           b1 = 0; | ||||
| 			if (b2 === 0xff) | ||||
| 			{ | ||||
|           if (b2 === 0xff) { | ||||
|             b2 = 0; | ||||
| 				if (b3 === 0xff) | ||||
| 				{ | ||||
|             if (b3 === 0xff) { | ||||
|               b3 = 0; | ||||
| 				} | ||||
| 				else | ||||
| 				{ | ||||
|             } else { | ||||
|               ++b3; | ||||
|             } | ||||
| 			} | ||||
| 			else | ||||
| 			{ | ||||
|           } else { | ||||
|             ++b2; | ||||
|           } | ||||
| 			} | ||||
| 			else | ||||
| 			{ | ||||
|         } else { | ||||
|           ++b1; | ||||
|         } | ||||
|  | ||||
| @@ -5585,18 +5577,14 @@ | ||||
|         word += (b1 << 16); | ||||
|         word += (b2 << 8); | ||||
|         word += b3; | ||||
| 			} | ||||
| 			else | ||||
| 			{ | ||||
|       } else { | ||||
|         word += (0x01 << 24); | ||||
|       } | ||||
|       return word; | ||||
|     } | ||||
|  | ||||
| 		function incCounter(counter) | ||||
| 		{ | ||||
| 			if ((counter[0] = incWord(counter[0])) === 0) | ||||
| 			{ | ||||
|     function incCounter(counter) { | ||||
|       if ((counter[0] = incWord(counter[0])) === 0) { | ||||
|         // encr_data in fileenc.c from  Dr Brian Gladman's counts only with DWORD j < 8 | ||||
|         counter[1] = incWord(counter[1]); | ||||
|       } | ||||
| @@ -5637,8 +5625,6 @@ | ||||
|   }()); | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|   (function () { | ||||
|     // Shortcuts | ||||
|     var C = CryptoJS; | ||||
|   | ||||
		Reference in New Issue
	
	Block a user