addInspection.vue 28 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638
  1. <template>
  2. <view class="bg-white">
  3. <cu-custom bgColor="bg-blue" :isBack="true">
  4. <block slot="backText"></block>
  5. <block slot="content">新增巡检</block>
  6. <block slot="right">
  7. <text style="margin-right: 10rpx" @click="submitForm">保存</text>
  8. </block>
  9. </cu-custom>
  10. <view class="hc-tab-bar">
  11. <scroll-view scroll-x class="bg-white nav">
  12. <view class="flex text-center">
  13. <block v-for="item in engineeringType">
  14. <view class="cu-item flex-sub" :class="item.id === addform.engineeringType?'text-blue cur':''"
  15. @tap="engineeringTypeChange(item)">
  16. {{ item.label }}
  17. </view>
  18. </block>
  19. </view>
  20. </scroll-view>
  21. </view>
  22. <view style="padding: 15px;">
  23. <uni-forms ref="formRef" :rules="formRules" label-width="110px" :modelValue="addform">
  24. <uni-forms-item label="检查日期" required name="startDate">
  25. <uni-datetime-picker type="date" return-type="string" v-model="addform.startDate"/>
  26. </uni-forms-item>
  27. <uni-forms-item label="工程名称" required name="unitName">
  28. <uni-easyinput v-model="addform.unitName" placeholder="请输入工程名称"/>
  29. </uni-forms-item>
  30. <uni-forms-item label="关联部位" required name="relation">
  31. <view class="hc-fj-form-item-s">
  32. <view class="title text-cut">{{addform.relation ? '已选择关联' : '请点击右边按钮选择' }}</view>
  33. <button class="cu-btn bg-blue" @click="relationStringClick">+选择关联</button>
  34. </view>
  35. </uni-forms-item>
  36. <uni-forms-item label="左/右幅" required name="aroundPicture">
  37. <uni-data-select v-model="addform.aroundPicture" :localdata="aroundPictureData"/>
  38. </uni-forms-item>
  39. <uni-forms-item label="分部工程类别" required name="segmentName">
  40. <uni-easyinput v-model="addform.segmentName" placeholder="请输入分部工程类别"/>
  41. </uni-forms-item>
  42. <!-- 桥梁工程 -->
  43. <block v-if="addform.engineeringType === 2">
  44. <uni-forms-item label="分项工程名称" required name="subitemName">
  45. <uni-easyinput v-model="addform.subitemName" placeholder="请输入分项工程名称"/>
  46. </uni-forms-item>
  47. <uni-forms-item label="缺陷所处位置" required name="startStopStake">
  48. <uni-easyinput v-model="addform.startStopStake" placeholder="请输入"/>
  49. </uni-forms-item>
  50. <uni-forms-item label="构建编号" required name="buildNumber">
  51. <uni-easyinput v-model="addform.buildNumber" placeholder="请输入"/>
  52. </uni-forms-item>
  53. </block>
  54. <!-- 隧道工程 -->
  55. <block v-if="addform.engineeringType === 1">
  56. <uni-forms-item label="分项工程桩号" required name="subitemStake">
  57. <uni-easyinput v-model="addform.subitemStake" placeholder="请输入分项工程桩号"/>
  58. </uni-forms-item>
  59. <uni-forms-item label="缺陷起点桩号" required name="startStopStake">
  60. <uni-easyinput v-model="addform.startStopStake" placeholder="请输入"/>
  61. </uni-forms-item>
  62. <uni-forms-item label="横坐标" required name="abscissa_1">
  63. <uni-easyinput v-model="addform.abscissa_1" placeholder="请输入"/>
  64. </uni-forms-item>
  65. <uni-forms-item label="缺陷止点桩号" required name="stop_stake">
  66. <uni-easyinput v-model="addform.stop_stake" placeholder="请输入"/>
  67. </uni-forms-item>
  68. <uni-forms-item label="横坐标" required name="abscissa_2">
  69. <uni-easyinput v-model="addform.abscissa_2" placeholder="请输入"/>
  70. </uni-forms-item>
  71. <uni-forms-item label="长(m)" required name="data_length">
  72. <uni-easyinput v-model="addform.data_length" placeholder="请输入"/>
  73. </uni-forms-item>
  74. <uni-forms-item label="宽(m)" required name="data_width">
  75. <uni-easyinput v-model="addform.data_width" placeholder="请输入"/>
  76. </uni-forms-item>
  77. <uni-forms-item label="面积" required name="data_area">
  78. <uni-easyinput v-model="addform.data_area" placeholder="请输入面积"/>
  79. </uni-forms-item>
  80. </block>
  81. <uni-forms-item label="病害类型" required name="diseaseType" v-if="addform.engineeringType === 1">
  82. <uni-data-select v-model="addform.diseaseType" :clear="false" :localdata="diseaseTypeData" @change="diseaseTypeChange"/>
  83. </uni-forms-item>
  84. <uni-forms-item label="病害类型" required name="diseaseType" v-if="addform.engineeringType === 2">
  85. <uni-data-select v-model="addform.diseaseType" :clear="false" :localdata="diseaseTypeData1" @change="diseaseTypeChange"/>
  86. </uni-forms-item>
  87. <uni-forms-item label="严重程度" required name="severity">
  88. <uni-data-select v-model="addform.severity" :localdata="severityData"/>
  89. </uni-forms-item>
  90. <uni-forms-item label="限制性缺陷" required name="defectType">
  91. <uni-data-select v-model="addform.defectType" :localdata="defectTypeData"/>
  92. </uni-forms-item>
  93. <uni-forms-item label="病害描述" required name="hiddenDanger">
  94. <uni-easyinput type="textarea" v-model="addform.hiddenDanger" :disabled="!addform.diseaseType" placeholder="请先选择病害类型"/>
  95. </uni-forms-item>
  96. <uni-forms-item label="上传照片" required name="images">
  97. <view class="hc-form-up-img-box">
  98. <view class="hc-form-img-box">
  99. <block v-for="(item, index) in photoImages" :key="index">
  100. <view class="bg-img" @click="viewImage(index)">
  101. <image :src="item" mode="aspectFill"/>
  102. <view class="cu-tag bg-red" @click.stop="delImg(index)">
  103. <text class='cuIcon-close'/>
  104. </view>
  105. </view>
  106. </block>
  107. <view class="solids-add" @click="chooseImageTap">
  108. <text class='cuIcon-add'/>
  109. </view>
  110. </view>
  111. <view class="tip-text">支持JPG/JPEG/PNG</view>
  112. </view>
  113. </uni-forms-item>
  114. <uni-forms-item label="是否限期整改" required name="deadline">
  115. <uni-data-checkbox v-model="addform.deadline" :localdata="[{text: '是',value: 1}, {text: '否',value: 0}]"/>
  116. </uni-forms-item>
  117. <uni-forms-item label="限期整改日期" required name="endDate">
  118. <uni-datetime-picker type="date" return-type="string" v-model="addform.endDate"/>
  119. </uni-forms-item>
  120. <uni-forms-item label="施工方检查人" required name="checkName">
  121. <uni-easyinput v-model="addform.checkName" placeholder="请输入施工方检查人员"/>
  122. </uni-forms-item>
  123. <uni-forms-item label="监理方检查人" required name="superCheckName">
  124. <uni-easyinput v-model="addform.superCheckName" placeholder="请输入监理方检查人员"/>
  125. </uni-forms-item>
  126. <uni-forms-item label="整改人员" required name="taskflowUser">
  127. <view class="flex">
  128. <uni-easyinput :value="taskflowUserStr" disabled/>
  129. <view class="name-btn" @click="userChange">选择+</view>
  130. </view>
  131. </uni-forms-item>
  132. <uni-forms-item label="备注" name="remark">
  133. <uni-easyinput v-model="addform.remark" type="textarea" placeholder="请输入备注"/>
  134. </uni-forms-item>
  135. </uni-forms>
  136. </view>
  137. </view>
  138. </template>
  139. <script>
  140. import config from "../../core/api.js"
  141. import {deepCopy} from "@/uni_modules/uni-forms/components/uni-forms/utils";
  142. export default {
  143. data() {
  144. return {
  145. engineeringType: [
  146. {id: 1, label: '隧道工程'},
  147. {id: 2, label: '桥梁工程'}
  148. ],
  149. diseaseTypeData: [
  150. {value: 1, text: '蜂窝麻面', data: '面积小于该面总面积0.5%,深度小于10mm'},
  151. {value: 2, text: '错台', data: '加宽带端头错台'},
  152. {value: 3, text: '洞门端墙、挡土墙表面裂缝', data: '洞门挡土墙存在裂缝,裂缝宽度大于0.2mm'},
  153. {value: 4, text: '裂缝', data: '砼表面裂缝,环向/纵向'},
  154. {value: 5, text: '渗漏水', data: '洞内存在渗漏点'},
  155. ],
  156. diseaseTypeData1: [
  157. {value: 1, text: '蜂窝麻面', data: '面积为 m2,蜂窝总面积为所在面面积的 %。'},
  158. {value: 2, text: '裂缝', data: '裂缝长度L= m,最大宽度δ= mm,裂缝方向为 向。'},
  159. {value: 3, text: '模板接缝高差', data: '模板接缝处高差为 mm。'},
  160. {value: 4, text: '漏浆', data: '混凝土表面有 处漏浆现象。'},
  161. {value: 5, text: '空洞', data: '面积为 m2,深度为 mm。'},
  162. {value: 6, text: '钢筋外露', data: '面积为 m2。'},
  163. {value: 7, text: '建筑垃圾', data: '有 处未清除处理。'},
  164. {value: 8, text: '预埋件', data: '有 处未清除处理。'},
  165. {value: 9, text: '预制构件安装', data: '不平整度为 mm。'},
  166. {value: 10, text: '梁段间接缝', data: '高差为 mm。'},
  167. {value: 11, text: '梁段间色泽', data: ' 处存在差异。'},
  168. {value: 12, text: '梁段间错台', data: '长度为 m,高差为 mm。'},
  169. {value: 13, text: '主体钢结构外露涂装', data: '破损面积为 m2。'},
  170. {value: 14, text: '钢缆防蚀层', data: '破损面积为 m2。'},
  171. {value: 15, text: '湿接缝渗漏水', data: '长度为 m。'},
  172. {value: 16, text: '疏松', data: '面积为 m2,占所在面面积的 %,深度为 mm。'},
  173. {value: 17, text: '夹渣', data: '面积为 mm2。'},
  174. {value: 18, text: '掉皮、起砂', data: '面积为 mm2,占所在面面积的 %。'},
  175. {value: 19, text: '锥坡沉陷', data: '长度为 m,深度为 mm。'},
  176. {value: 20, text: '护坡沉陷', data: '长度为 m,深度为 mm。'},
  177. {value: 21, text: '内外轮廓线', data: '处不顺滑清晰。'},
  178. {value: 22, text: '栏杆、护栏', data: '处不牢固, 处不直顺。'},
  179. {value: 23, text: '沥青混凝土表面', data: '不平整密实,面积为 m2。'},
  180. {value: 24, text: '沥青混凝土泛油', data: '面积为 m2,占受检面面积的 %。'},
  181. {value: 25, text: '沥青混凝土松散', data: '面积为 m2,占受检面面积的 %。'},
  182. {value: 26, text: '沥青混凝土裂缝', data: '长度为 m,占受检面面积的 %。'},
  183. {value: 27, text: '沥青混凝土离析', data: '面积为 m2,占受检面面积的 %。'},
  184. {value: 28, text: '伸缩缝堵塞', data: '有 处堵塞。'},
  185. {value: 29, text: '伸缩缝变形', data: '有 处,长度为 m。'},
  186. {value: 30, text: '伸缩缝开裂', data: '有 处,长度为 m。'},
  187. {value: 31, text: '桥头跳车', data: '桥面与伸缩缝高差为 mm。'},
  188. {value: 32, text: '桥面排水不良', data: '有 处,面积为 m2。'},
  189. {value: 33, text: '支座安装偏歪', data: '横桥向左侧距梁中心 mm,横桥向右侧距梁中心 mm。'},
  190. {value: 34, text: '支座不均匀受力', data: '侧存在不均匀受力。'},
  191. {value: 35, text: '支座脱空', data: '面积为 / ,高度为 mm。'},
  192. {value: 36, text: '支座非正常变形', data: '存在 处非正常变形。'},
  193. {value: 37, text: '支座未按图纸布置', data: '存在 处支座未按图纸布置'},
  194. ],
  195. aroundPictureData: [
  196. { value: 1, text: "左" },
  197. { value: 2, text: "右" },
  198. { value: 3, text: "全部" },
  199. ],
  200. severityData: [
  201. { value: 0, text: "一般" },
  202. { value: 1, text: "严重" },
  203. { value: 2, text: "轻微" },
  204. ],
  205. defectTypeData: [
  206. { value: 1, text: "限制性缺陷" },
  207. { value: 2, text: "非限制性缺陷" },
  208. ],
  209. photoFiles: [],
  210. photoImages: [],
  211. addform: {
  212. engineeringType: 1,
  213. startDate: '',
  214. deadline: 1,
  215. images: [],
  216. files: []
  217. },
  218. // 校验规则
  219. formRules: {
  220. startDate: {
  221. rules: [{
  222. required: true,
  223. errorMessage: '请选择检查日期'
  224. }]
  225. },
  226. unitName: {
  227. rules: [{
  228. required: true,
  229. errorMessage: '请输入工程名称'
  230. }]
  231. },
  232. relation: {
  233. rules: [{
  234. required: true,
  235. errorMessage: '请选择关联工程部位'
  236. }]
  237. },
  238. aroundPicture: {
  239. rules: [{
  240. required: true,
  241. errorMessage: '请选择左/右幅'
  242. }]
  243. },
  244. segmentName: {
  245. rules: [{
  246. required: true,
  247. errorMessage: '请输入分部工程类别'
  248. }]
  249. },
  250. subitemName: {
  251. rules: [{
  252. required: true,
  253. errorMessage: '请输入分项工程名称'
  254. }]
  255. },
  256. startStopStake: {
  257. rules: [{
  258. required: true,
  259. errorMessage: '请输入相关数据'
  260. }]
  261. },
  262. buildNumber: {
  263. rules: [{
  264. required: true,
  265. errorMessage: '请输入构建编号'
  266. }]
  267. },
  268. subitemStake: {
  269. rules: [{
  270. required: true,
  271. errorMessage: '请输入分项工程桩号'
  272. }]
  273. },
  274. abscissa_1: {
  275. rules: [{
  276. required: true,
  277. errorMessage: '请输入横坐标'
  278. }]
  279. },
  280. stop_stake: {
  281. rules: [{
  282. required: true,
  283. errorMessage: '请输入缺陷止点桩号'
  284. }]
  285. },
  286. abscissa_2: {
  287. rules: [{
  288. required: true,
  289. errorMessage: '请输入横坐标'
  290. }]
  291. },
  292. data_length: {
  293. rules: [{
  294. required: true,
  295. errorMessage: '请输入长(m)'
  296. }]
  297. },
  298. data_width: {
  299. rules: [{
  300. required: true,
  301. errorMessage: '请输入宽(m)'
  302. }]
  303. },
  304. data_area: {
  305. rules: [{
  306. required: true,
  307. errorMessage: '请输入面积'
  308. }]
  309. },
  310. diseaseType: {
  311. rules: [{
  312. required: true,
  313. errorMessage: '请选择病害类型'
  314. }]
  315. },
  316. severity: {
  317. rules: [{
  318. required: true,
  319. errorMessage: '请选择严重程度'
  320. }]
  321. },
  322. defectType: {
  323. rules: [{
  324. required: true,
  325. errorMessage: '请选择限制性缺陷'
  326. }]
  327. },
  328. hiddenDanger: {
  329. rules: [{
  330. required: true,
  331. errorMessage: '请输入病害描述'
  332. }]
  333. },
  334. images: {
  335. rules: [{
  336. required: true,
  337. errorMessage: '请上传照片'
  338. }]
  339. },
  340. deadline: {
  341. rules: [{
  342. required: true,
  343. errorMessage: '请选择是否限期整改'
  344. }]
  345. },
  346. endDate: {
  347. rules: [{
  348. required: true,
  349. errorMessage: '请选择限期整改日期'
  350. }]
  351. },
  352. checkName: {
  353. rules: [{
  354. required: true,
  355. errorMessage: '请输入施工方检查人'
  356. }]
  357. },
  358. superCheckName: {
  359. rules: [{
  360. required: true,
  361. errorMessage: '请输入监理方检查人'
  362. }]
  363. },
  364. taskflowUser: {
  365. rules: [{
  366. required: true,
  367. errorMessage: '请选择整改人员'
  368. }]
  369. },
  370. }
  371. }
  372. },
  373. computed: {
  374. taskflowUserStr() {
  375. const users = this.addform.taskflowUser
  376. if (users && users.length) {
  377. let str = '';
  378. for (let i = 0; i < users.length; i++) {
  379. str += users[i].user_name;
  380. if (i < users.length - 1) {
  381. str += ','
  382. }
  383. }
  384. return str;
  385. } else {
  386. return '请选择整改人员';
  387. }
  388. },
  389. },
  390. onLoad(e) {
  391. this.userid = uni.getStorageSync("userInfo").id;
  392. this.project = uni.getStorageSync("porject" + "_" + uni.getStorageSync("userInfo").id);
  393. this.addform.startDate = this.$dayjs().format('YYYY-MM-DD');
  394. },
  395. onShow() {
  396. //选择整改人员
  397. uni.$on("principal", res => {
  398. this.$set(this.addform, 'taskflowUser', res);
  399. })
  400. //选择关联工程部位
  401. uni.$on("relation", ({relation, relationId}) => {
  402. this.$set(this.addform, 'relation', relation);
  403. this.$set(this.addform, 'relationId', relationId);
  404. })
  405. },
  406. onReady() {
  407. // 设置自定义表单校验规则,必须在节点渲染完毕后执行
  408. this.$refs.formRef.setRules(this.formRules)
  409. },
  410. methods: {
  411. engineeringTypeChange({id}) {
  412. let startDate = this.$dayjs().format('YYYY-MM-DD');
  413. this.addform = {
  414. engineeringType: id,
  415. startDate: startDate,
  416. images: [],
  417. deadline: 1,
  418. files: []
  419. }
  420. },
  421. //上传照片
  422. chooseImageTap() {
  423. let _this = this
  424. let images = this.addform.images
  425. let files = this.addform.files;
  426. let photos = this.photoImages
  427. uni.chooseImage({
  428. count: 9 - photos.length,
  429. extension: ['.jpg', '.png', '.jpeg'],
  430. success: async ({tempFilePaths, tempFiles}) => {
  431. if (tempFilePaths.length === 0) return;
  432. uni.showLoading({title: '上传文件中...', mask: true});
  433. for (let i = 0; i < tempFilePaths.length; i++) {
  434. const {code, url} = await _this.uploadFile(tempFilePaths[i])
  435. if (code === 200) {
  436. photos.push(url)
  437. let name = tempFiles[i].name;
  438. // #ifdef APP-PLUS
  439. name = url.substring(url.lastIndexOf('/') + 1);
  440. // #endif
  441. images.push({url: url, name: name, remark: '', type: '1', groupType: '1'})
  442. files.push({name: name, type: tempFiles[i].type ?? '', size: tempFiles[i].size ?? ''})
  443. }
  444. }
  445. _this.$set(_this.addform, 'images', images);
  446. _this.$set(_this.addform, 'files', files);
  447. _this.photoImages = photos
  448. uni.hideLoading();
  449. }
  450. });
  451. },
  452. async uploadFile(file) {
  453. return new Promise((resolve) => {
  454. const url = config.api;
  455. const token = uni.getStorageSync("token");
  456. uni.uploadFile({
  457. url: url+ '/app/qualityModifyInfo/uploadFile',
  458. name: 'file',
  459. header: {
  460. "Authorization": token,
  461. },
  462. filePath: file,
  463. success:({data}) => {
  464. const res = JSON.parse(data)
  465. if(res.data) {
  466. resolve({code: 200, url: res.data})
  467. } else {
  468. resolve({code: 300, url: ''})
  469. }
  470. },
  471. fail:()=> {
  472. resolve({code: 300, url: ''})
  473. }
  474. });
  475. })
  476. },
  477. //预览照片
  478. viewImage(index) {
  479. uni.previewImage({
  480. urls: this.photoImages,
  481. current: index
  482. });
  483. },
  484. //删除照片
  485. delImg(index) {
  486. this.photoFiles.splice(index, 1)
  487. this.photoImages.splice(index, 1)
  488. this.addform.images.splice(index, 1)
  489. },
  490. //关联工程部位
  491. relationStringClick() {
  492. //把已选值储存到全局变量
  493. getApp().globalData.relationId = this.addform.relationId;
  494. uni.navigateTo({
  495. url: "/pages/qualityInspection_fj/tree"
  496. })
  497. },
  498. //病害类型
  499. diseaseTypeChange(val) {
  500. const type = this.addform.engineeringType, index = val - 1;
  501. const typeData = type === 1 ? this.diseaseTypeData : this.diseaseTypeData1;
  502. this.addform.hiddenDanger = typeData[index].data
  503. },
  504. //选择整改人员
  505. userChange() {
  506. //把已选值储存到全局变量
  507. getApp().globalData.principal = this.addform.taskflowUser;
  508. uni.navigateTo({
  509. url: "/pages/constructionLog/personnel/personnel?name=" + '选择人员'
  510. })
  511. },
  512. //提交代码
  513. submitForm() {
  514. this.$refs.formRef.validate().then(res => {
  515. this.addInfoHandle();
  516. }).catch((e) => {
  517. console.log(e)
  518. uni.showToast({
  519. title: '请完善表单信息',
  520. duration: 1500,
  521. icon: 'none'
  522. });
  523. })
  524. },
  525. addInfoHandle() {
  526. uni.showLoading({title: '保存中', mask: true});
  527. let formData = deepCopy(this.addform);
  528. //处理合同段和用户信息
  529. const {id: projectId, contractId} = this.project
  530. formData['projectId'] = projectId;
  531. formData['contractId'] = contractId;
  532. formData['userId'] = this.userid;
  533. //处理日期格式
  534. formData.startDate = this.$dayjs(formData.startDate).format('YYYY 年 MM 月 DD 日');
  535. formData.endDate = this.$dayjs(formData.endDate).format('YYYY 年 MM 月 DD 日');
  536. //处理人员
  537. let taskflowUserIds = [];
  538. if (formData.taskflowUser) {
  539. formData.taskflowUser.forEach(element => {
  540. taskflowUserIds.push(element.id)
  541. });
  542. }
  543. formData.taskflowUserIds = taskflowUserIds.join(',');
  544. console.log('formData', formData)
  545. //发起请求
  546. this.http.request("/app/qualityModifyInfo/save", formData, true).then((json) => {
  547. uni.hideLoading();
  548. if(json.result == 1){
  549. this.$prompt.none("保存成功");
  550. setTimeout(function () {
  551. uni.navigateBack()
  552. }, 500)
  553. } else {
  554. this.$prompt.none("保存失败");
  555. }
  556. })
  557. },
  558. backPage() {
  559. uni.navigateBack({
  560. delta: 1
  561. });
  562. }
  563. }
  564. }
  565. </script>
  566. <style lang="scss">
  567. .hc-tab-bar {
  568. position: relative;
  569. }
  570. .hc-form-up-img-box {
  571. position: relative;
  572. .hc-form-img-box {
  573. position: relative;
  574. display: flex;
  575. align-items: center;
  576. flex-wrap: wrap;
  577. }
  578. .bg-img {
  579. position: relative;
  580. display: inline-block;
  581. height: 120rpx;
  582. width: 120rpx;
  583. border: 4rpx dashed #eee;
  584. border-radius: 4rpx;
  585. image {
  586. width: 100%;
  587. height: 100%;
  588. border-radius: 4rpx;
  589. }
  590. .cu-tag {
  591. position: absolute;
  592. right: -4rpx;
  593. top: -4rpx;
  594. padding: 8rpx;
  595. height: auto;
  596. border-radius: 0 4rpx 0 20rpx;
  597. }
  598. }
  599. .bg-img + .bg-img {
  600. margin-left: 10rpx;
  601. }
  602. .solids-add {
  603. display: inline-flex;
  604. height: 120rpx;
  605. width: 120rpx;
  606. border: 4rpx dashed #eee;
  607. border-radius: 4rpx;
  608. align-items: center;
  609. justify-content: center;
  610. text {
  611. color: #cfcdcd;
  612. font-size: 66px;
  613. }
  614. }
  615. .bg-img + .solids-add {
  616. margin-left: 10rpx;
  617. }
  618. .tip-text {
  619. color: #BBBBBB;
  620. margin-top: 18rpx;
  621. font-size: 22rpx;
  622. }
  623. }
  624. .name-btn {
  625. background-color: #e99d42;
  626. border-radius: 4px;
  627. font-size: 14px;
  628. color: #FFFFFF;
  629. border: 1px solid #bbbbbb;
  630. padding: 15rpx 20rpx;
  631. margin-left: 20px;
  632. }
  633. .name-btn-dis {
  634. background-color: #bbbbbb;
  635. }
  636. </style>