Commit 3f0a9b978cf40c702306c740d6a61c442a2d2abf

Authored by wesley88
1 parent 6b65be48

1

lvdao-miniapp/pages.json
... ... @@ -397,6 +397,13 @@
397 397 "name": "pagesA",
398 398 "pages": [
399 399 {
  400 + "path": "addsb/addsb",
  401 + "style": {
  402 + "navigationBarBackgroundColor": "#FFFFFF",
  403 + "navigationBarTitleText": "事件上报"
  404 + }
  405 + },
  406 + {
400 407 "path": "web/web",
401 408 "style": {
402 409 "navigationBarBackgroundColor": "#FFFFFF",
... ...
lvdao-miniapp/pages/details/details.vue
... ... @@ -108,11 +108,11 @@
108 108 <u-col span="12">
109 109 <view class="form-item">
110 110 <view class="label">建筑图纸:</view>
111   - <view style='flex: 1;' v-if="!tableData.architecturalDrawings.length>0">
  111 + <view style='flex: 1;' v-if="tableData.architecturalDrawings&&!tableData.architecturalDrawings.length>0">
112 112 <text>暂无</text>
113 113 </view>
114 114 </view>
115   - <view style="display: flex;flex-wrap: wrap;" v-if="tableData.architecturalDrawings.length>0">
  115 + <view style="display: flex;flex-wrap: wrap;" v-if="tableData.architecturalDrawings&&tableData.architecturalDrawings.length>0">
116 116 <u-image @click="openimg1(tableData.architecturalDrawings,index)" :showLoading="true" v-for="(item,index) in tableData.architecturalDrawings" :src="imgUrl+item" width="100px" height="100px" border-radius="20" style="margin-bottom:25rpx;margin-left: 25rpx;"></u-image>
117 117 </view>
118 118  
... ... @@ -178,11 +178,11 @@
178 178 <u-col span="12">
179 179 <view class="form-item">
180 180 <view class="label">规划图纸:</view>
181   - <view style='flex: 1;' v-if="!tableData.planningDrawing.length>0">
  181 + <view style='flex: 1;' v-if="tableData.planningDrawing&&!tableData.planningDrawing.length>0">
182 182 <text>暂无</text>
183 183 </view>
184 184 </view>
185   - <view style="display: flex;flex-wrap: wrap;" v-if="tableData.planningDrawing.length>0">
  185 + <view style="display: flex;flex-wrap: wrap;" v-if="tableData.planningDrawing&&tableData.planningDrawing.length>0">
186 186 <u-image @click="openimg1(tableData.planningDrawing,index)" :showLoading="true" v-for="(item,index) in tableData.architecturalDrawings" :src="imgUrl+item" width="100px" height="100px" border-radius="20" style="margin-bottom:25rpx;margin-left: 25rpx;"></u-image>
187 187 </view>
188 188  
... ... @@ -275,9 +275,10 @@
275 275 },
276 276 },
277 277 onLoad(option) {
278   -
279   - let data = JSON.parse(option.item)
280   - console.log(data)
  278 + console.log(option)
  279 + let ce = decodeURIComponent(option.item)
  280 + let data = JSON.parse(ce)
  281 +
281 282  
282 283 if (data.shopName) {
283 284 this.qianzui = 'sp'
... ...
lvdao-miniapp/pages/shops/shops.vue
... ... @@ -252,9 +252,12 @@
252 252 this.search();
253 253 },
254 254 reconciliationdetail(item) {
  255 +
  256 + // let items = JSON.stringify(item)
  257 +
255 258 let items = JSON.stringify(item)
256 259 uni.navigateTo({
257   - url: `/pages/details/details?item=${items}`
  260 + url: `/pages/details/details?item=${encodeURIComponent(items)}`
258 261 })
259 262 },
260 263  
... ...
lvdao-miniapp/pagesA/addsb/addsb.vue 0 → 100644
  1 +<template>
  2 + <view class="appbox">
  3 +
  4 + <view style="display: flex;" v-if="type == '1'">
  5 + <view @click="changeonindex('意见反馈')" :class="onindex == '意见反馈'?'onclasst1':'classt1'">
  6 + 意见反馈
  7 + <view class="onindex"></view>
  8 + </view>
  9 + <view @click="changeonindex('我的反馈')" :class="onindex == '我的反馈'?'onclasst1':'classt1'">
  10 + 我的反馈
  11 + <view class="onindex"></view>
  12 + </view>
  13 + </view>
  14 + <view style="display: flex;" v-if="type == '2'">
  15 + <view :class="onindex == '意见反馈编辑'?'onclasst1':'classt1'">
  16 + 意见反馈编辑
  17 + <view class="onindex"></view>
  18 + </view>
  19 + </view>
  20 + <view style="flex: 1;overflow-y: scroll;">
  21 + <view v-if="onindex == '意见反馈'" style="overflow-y: scroll;height: 100%;">
  22 + <view class="fromitem">
  23 + <view class="t1 tit1">
  24 + 上报位置
  25 + </view>
  26 + <view class="item">
  27 + <input v-model="form.reportLocation" placeholder-style="color:#c8c9cc" placeholder="请输入" />
  28 + </view>
  29 + </view>
  30 + <view class="fromitem">
  31 + <view class="t1 tit1">
  32 + 问题描述
  33 + </view>
  34 + <view class="item">
  35 + <textarea v-model="form.problemDescribe" placeholder-style="color:#c8c9cc" placeholder="请输入" />
  36 + </view>
  37 + </view>
  38 + <view class="fromitem">
  39 + <view class="t1 tit1">
  40 + 事件类型
  41 + </view>
  42 + <view class="item" style="display: flex;justify-content: space-between;color: #c8c9cc;"
  43 + @click="typeShow = true">
  44 + <view>{{ontype?ontype:'请选择'}}</view>
  45 + <u-icon color="#c8c9cc" name="arrow-right"></u-icon>
  46 + </view>
  47 + </view>
  48 + <view class="fromitem">
  49 + <u-upload :action="$upload" :auto-upload="false" ref="coverImage" :max-count="9" :file-list="fist" @on-remove="onremove1"
  50 + @on-choose-complete="(response, file, fileList) => onsuccess1(response, file, fileList, 'coverImage')"></u-upload>
  51 + </view>
  52 + <view style="height: 100rpx;"></view>
  53 + <view class="page-footer">
  54 + <u-button style="width: 100%;" type="success" @click="submit">提交</u-button>
  55 + </view>
  56 + </view>
  57 + <scroll-view style="height: 100%;" scroll-y v-if="onindex == '我的反馈'" @scrolltolower="scrolltolower">
  58 + <view v-if="mylist.length>0" style="text-align: center;margin-top: 50rpx;" class="tit1">暂无数据</view>
  59 + <view style="background: #fff;border-radius: 18rpx;padding: 30rpx;margin-top: 30rpx;"
  60 + v-for="(item,index) in mylist">
  61 + <view style="display: flex;line-height: 50rpx;">
  62 + <view class="tit1">事件类型:</view>
  63 + <view class="tit2">{{item.eventTypeName|| '-'}}</view>
  64 + </view>
  65 + <view style="display: flex;line-height: 50rpx;">
  66 + <view class="tit1">上报位置:</view>
  67 + <view class="tit2">{{item.reportLocation|| '-'}}</view>
  68 + </view>
  69 + <view style="display: flex;line-height: 50rpx;">
  70 + <view class="tit1">问题描述:</view>
  71 + <view class="tit2">{{item.problemDescribe || '-'}}</view>
  72 + </view>
  73 + <view style="display: flex;line-height: 50rpx;">
  74 + <view class="tit1">提交时间:</view>
  75 + <view class="tit2">{{item.createTime || '-'}}</view>
  76 + </view>
  77 + <view style="display: flex;flex-wrap: wrap;">
  78 + <u-image @click="openimg1(item.eventPictures,index)" :showLoading="true"
  79 + v-for="(item1,index1) in item.eventPictures" :src="item1" width="100px" height="100px"
  80 + border-radius="20" style="margin-top:15rpx;margin-left: 15rpx;"></u-image>
  81 + </view>
  82 + <view style="display: flex;flex-direction: row-reverse;">
  83 + <view
  84 + style="background: rgb(63, 155, 106);padding: 10rpx 0;border-radius: 36rpx;color: #fff;font-size: 23rpx;width: 100rpx;text-align: center;font-weight: bold;"
  85 + @click="remove(item)">编辑</view>
  86 + </view>
  87 + </view>
  88 + </scroll-view>
  89 + <view v-if="onindex == '意见反馈编辑'">
  90 + <view class="fromitem">
  91 + <view class="t1 tit1">
  92 + 上报位置
  93 + </view>
  94 + <view class="item">
  95 + <input v-model="removeinfo.reportLocation" placeholder-style="color:#c8c9cc"
  96 + placeholder="请输入" />
  97 + </view>
  98 + </view>
  99 + <view class="fromitem">
  100 + <view class="t1 tit1">
  101 + 问题描述
  102 + </view>
  103 + <view class="item">
  104 + <textarea v-model="removeinfo.problemDescribe" placeholder-style="color:#c8c9cc"
  105 + placeholder="请输入" />
  106 + </view>
  107 + </view>
  108 + <view class="fromitem">
  109 + <view class="t1 tit1">
  110 + 事件类型
  111 + </view>
  112 + <view class="item" style="display: flex;justify-content: space-between;color: #c8c9cc;"
  113 + @click="typeShow = true">
  114 + <view>{{ontype?ontype:'请选择'}}</view>
  115 + <u-icon color="#c8c9cc" name="arrow-right"></u-icon>
  116 + </view>
  117 + </view>
  118 + <view class="fromitem">
  119 + <u-upload :action="$upload" :auto-upload="false" ref="coverImage" :max-count="9" :file-list="fist" @on-remove="onremove2"
  120 + @on-choose-complete="(response, file, fileList) => onsuccess2(response, file, fileList, 'coverImage')" ></u-upload>
  121 + </view>
  122 + <view style="height: 100rpx;"></view>
  123 + <view class="page-footer">
  124 + <u-button style="width: 48%;" @click="qux">取消</u-button>
  125 + <u-button style="width: 48%;" type="success" @click="removeonfo()">提交</u-button>
  126 + </view>
  127 + </view>
  128 + </view>
  129 +
  130 +
  131 + <u-select v-model="typeShow" :list="typeList" @confirm="typeChange"></u-select>
  132 + </view>
  133 +</template>
  134 +
  135 +<script>
  136 + export default {
  137 + data() {
  138 + return {
  139 + type: '1',
  140 + mylist: [],
  141 + fist: [],
  142 + typeShow: false,
  143 + typeList: [],
  144 + ontype: null,
  145 + onindex: '意见反馈',
  146 + form: {
  147 + problemDescribe: '',
  148 + reportLocation: '',
  149 + eventType: '',
  150 + eventPictures: [],
  151 + userName: uni.getStorageSync('user').name,
  152 + userPhone: uni.getStorageSync('user').phone,
  153 + },
  154 + removeinfo: {},
  155 + page:0,
  156 + total:0
  157 + }
  158 + },
  159 + onLoad() {
  160 + this.$http.sendRequest('/eventReporting/report', 'POST', {}, 1).then(res => {
  161 + if (res.data.code == 200) {
  162 + let list = res.data.data.map(item => {
  163 + let c1 = {
  164 + value: item.id,
  165 + label: item.name
  166 + }
  167 + return c1
  168 + })
  169 + console.error(list)
  170 + this.typeList = list
  171 + }
  172 + })
  173 + },
  174 +
  175 + methods: {
  176 + scrolltolower(e){
  177 + console.error(e)
  178 + if (this.mylist.length < this.total) {
  179 + this.page++
  180 + this.gain()
  181 + }
  182 + },
  183 + onremove1(e) {
  184 + this.form.eventPictures.splice(e,1)
  185 + console.error(this.form.eventPictures)
  186 + },
  187 + onremove2(e) {
  188 + this.removeinfo.eventPictures.splice(e,1)
  189 + console.error(this.removeinfo.eventPictures)
  190 + },
  191 + qux() {
  192 + this.type = '1'
  193 + this.changeonindex('我的反馈')
  194 + },
  195 + remove(e) {
  196 + this.removeinfo = e
  197 + this.fist = this.removeinfo.eventPictures.map(item => {
  198 + let c1 = {
  199 + url:item
  200 + }
  201 + return c1
  202 + })
  203 + this.ontype = this.removeinfo.eventTypeName;
  204 + console.error(this.fist)
  205 + this.onindex = '意见反馈编辑'
  206 + this.type = '2'
  207 + },
  208 + removeonfo() {
  209 + console.error({
  210 + ...this.removeinfo
  211 + })
  212 + console.error(this.fist)
  213 + this.$http.sendRequest('/eventReporting/update', 'POST', this.removeinfo, 1).then(res => {
  214 + console.error(res)
  215 + if(res.data.code == '200'){
  216 + uni.showToast({
  217 + icon:'none',
  218 + title:res.data.message
  219 + })
  220 + setTimeout(() => {
  221 + this.type = '1'
  222 + this.changeonindex('我的反馈')
  223 + }, 1000);
  224 + } else{
  225 + uni.showToast({
  226 + icon:'none',
  227 + title:res.data.message
  228 + })
  229 + }
  230 + })
  231 + },
  232 + openimg1(urls, index) {
  233 + let list = urls.map(item => {
  234 + return this.imgUrl + item
  235 + })
  236 + uni.previewImage({
  237 + current: index,
  238 + urls: list,
  239 + longPressActions: {
  240 + itemList: ['发送给朋友', '保存图片', '收藏'],
  241 + success: function(data) {
  242 + console.log('选中了第' + (data.tapIndex + 1) + '个按钮,第' + (data.index + 1) + '张图片');
  243 + },
  244 + fail: function(err) {
  245 + console.log(err.errMsg);
  246 + }
  247 + }
  248 + });
  249 + },
  250 + changeonindex(e) {
  251 + this.onindex = e
  252 + this.fist = []
  253 + this.mylist = []
  254 + this.ontype = null
  255 + this.page = 0
  256 + if (this.onindex == '意见反馈') {
  257 +
  258 + } else if (this.onindex == '我的反馈') {
  259 + this.gain()
  260 + }
  261 + },
  262 + gain() {
  263 + this.$http.sendRequest('/eventReporting/list', 'POST', {
  264 + "page": this.page,
  265 + "limit": 10,
  266 + userPhone: uni.getStorageSync('user').phone
  267 + }, 1).then(res => {
  268 + console.error(res)
  269 + this.mylist = [...this.mylist,...res.data.data.records]
  270 + this.total = res.data.data.total
  271 + })
  272 + },
  273 + submit() {
  274 + console.error({
  275 + ...this.form
  276 + })
  277 + console.error(this.fist)
  278 + this.$http.sendRequest('/eventReporting/save', 'POST', this.form, 1).then(res => {
  279 + console.error(res)
  280 + if(res.data.code == '200'){
  281 + uni.showToast({
  282 + icon:'none',
  283 + title:res.data.message
  284 + })
  285 + this.form = {
  286 + problemDescribe: '',
  287 + reportLocation: '',
  288 + eventType: '',
  289 + eventPictures: [],
  290 + userName: uni.getStorageSync('user').name,
  291 + userPhone: uni.getStorageSync('user').phone,
  292 + }
  293 + setTimeout(() => {
  294 + this.changeonindex('我的反馈')
  295 + }, 1000);
  296 + } else{
  297 + uni.showToast({
  298 + icon:'none',
  299 + title:res.data.message
  300 + })
  301 + }
  302 + })
  303 + },
  304 + typeChange(val) {
  305 + this.ontype = val[0].label;
  306 + this.form.eventType = val[0].value;
  307 + },
  308 + async onsuccess2(e, file, fileList, ziduan) {
  309 + console.error(e)
  310 + for (let i = 0; i < e.length; i++) {
  311 + if(e[i].progress == 0) {
  312 + await uni.uploadFile({
  313 + url: this.$upload, // 仅为示例,请替换为您的服务器上传接口
  314 + filePath: e[i].url,
  315 + name: 'file', // 后端接收的文件参数名
  316 + formData: {
  317 + filePath: 'xcx', // 其他表单数据
  318 + },
  319 + success: (uploadFileRes) => {
  320 + console.error(uploadFileRes)
  321 + let data = JSON.parse(uploadFileRes.data)
  322 + this.removeinfo.eventPictures.push(this.$img + data.data)
  323 + },
  324 + fail: (err) => {
  325 + console.error('上传失败', err);
  326 + uni.showToast({
  327 + title: '上传失败',
  328 + icon: 'none',
  329 + });
  330 + },
  331 + });
  332 + }
  333 +
  334 + }
  335 + // uni.showToast({
  336 + // title: '上传成功',
  337 + // icon: 'success',
  338 + // });
  339 +
  340 + },
  341 + async onsuccess1(e, file, fileList, ziduan) {
  342 + console.error(e)
  343 + for (let i = 0; i < e.length; i++) {
  344 + await uni.uploadFile({
  345 + url: this.$upload, // 仅为示例,请替换为您的服务器上传接口
  346 + filePath: e[i].url,
  347 + name: 'file', // 后端接收的文件参数名
  348 + formData: {
  349 + filePath: 'xcx', // 其他表单数据
  350 + },
  351 + success: (uploadFileRes) => {
  352 + console.error(uploadFileRes)
  353 + let data = JSON.parse(uploadFileRes.data)
  354 + this.form.eventPictures.push(this.$img + data.data)
  355 + },
  356 + fail: (err) => {
  357 + console.error('上传失败', err);
  358 + uni.showToast({
  359 + title: '上传失败',
  360 + icon: 'none',
  361 + });
  362 + },
  363 + });
  364 + }
  365 + // uni.showToast({
  366 + // title: '上传成功',
  367 + // icon: 'success',
  368 + // });
  369 +
  370 + },
  371 + }
  372 + }
  373 +</script>
  374 +
  375 +<style scoped lang="scss">
  376 + .tit1 {
  377 + color: #7a7a7a;
  378 + font-size: 26rpx;
  379 + }
  380 +
  381 + .tit2 {
  382 + color: #000;
  383 + font-size: 28rpx;
  384 + }
  385 +
  386 + .appbox {
  387 + width: 100%;
  388 + height: 100vh;
  389 + overflow: hidden;
  390 + background-image: url('@/static/icon/bg2.png');
  391 + background-size: 100% 100%;
  392 + padding: 30rpx;
  393 + box-sizing: border-box;
  394 + display: flex;
  395 + flex-direction: column;
  396 + }
  397 +
  398 + .onclasst1 {
  399 + font-size: 30rpx;
  400 + margin-right: 40rpx;
  401 + font-weight: bold;
  402 + color: rgb(63, 155, 106);
  403 +
  404 + .onindex {
  405 + border-radius: 36rpx;
  406 + margin: 0 auto;
  407 + width: 70rpx;
  408 + height: 20rpx;
  409 + margin-top: 20rpx;
  410 + background: linear-gradient(90deg, #3f9b6a 0%, rgba(63, 155, 106, 0) 100%);
  411 + }
  412 + }
  413 +
  414 + .classt1 {
  415 + font-size: 30rpx;
  416 + margin-right: 40rpx;
  417 + font-weight: bold;
  418 + color: rgba(0, 0, 0, 0.9);
  419 + }
  420 +
  421 + .fromitem {
  422 + margin-top: 30rpx;
  423 +
  424 + .t1 {
  425 + margin: 30rpx 0;
  426 + }
  427 +
  428 + .item {
  429 + padding: 20rpx;
  430 + background: #fff;
  431 + border-radius: 18rpx;
  432 + }
  433 + }
  434 +
  435 + /* 保存按钮 */
  436 + .page-footer {
  437 + position: fixed;
  438 + left: 0;
  439 + bottom: 0;
  440 + display: flex;
  441 + width: 100%;
  442 + height: 120rpx;
  443 + background-color: #FFFFFF;
  444 + padding: 20rpx 20rpx;
  445 + padding-bottom: constant(safe-area-inset-bottom);
  446 + padding-bottom: env(safe-area-inset-bottom);
  447 + z-index: 9999;
  448 + justify-content: space-between;
  449 + .u-btn {
  450 + flex: 1;
  451 + }
  452 +
  453 + .footer-buy {
  454 + display: flex;
  455 + align-items: center;
  456 + justify-content: space-between;
  457 + width: 100%;
  458 + height: 100%;
  459 +
  460 + .cart-add {
  461 + display: flex;
  462 + align-items: center;
  463 + justify-content: center;
  464 + width: 100%;
  465 + height: 100rpx;
  466 + background-color: #3f9b6a;
  467 +
  468 + text {
  469 + font-size: 28rpx;
  470 + color: #FFFFFF;
  471 + }
  472 + }
  473 + }
  474 + }
  475 +</style>
0 476 \ No newline at end of file
... ...
lvdao-miniapp/static/icon/bg1.png

90.9 KB | W: | H:

13.9 KB | W: | H:

  • 2-up
  • Swipe
  • Onion skin
lvdao-miniapp/static/icon/bg2.png 0 → 100644

16.5 KB

lvdao-miniapp/static/icon/icon1.png

1.35 KB | W: | H:

637 Bytes | W: | H:

  • 2-up
  • Swipe
  • Onion skin
lvdao-miniapp/static/icon/icon2.png

885 Bytes | W: | H:

457 Bytes | W: | H:

  • 2-up
  • Swipe
  • Onion skin
lvdao-miniapp/static/icon/icon3.png

954 Bytes | W: | H:

457 Bytes | W: | H:

  • 2-up
  • Swipe
  • Onion skin
lvdao-miniapp/static/icon/icon4.png

900 Bytes | W: | H:

471 Bytes | W: | H:

  • 2-up
  • Swipe
  • Onion skin
lvdao-miniapp/static/icon/icon5.png

1.38 KB | W: | H:

604 Bytes | W: | H:

  • 2-up
  • Swipe
  • Onion skin
lvdao-miniapp/static/icon/icon6.png

1023 Bytes | W: | H:

497 Bytes | W: | H:

  • 2-up
  • Swipe
  • Onion skin