rapidRep.vue 20 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790
  1. <template>
  2. <view class="handler">
  3. <view class="body view-body">
  4. <view class="form_item column">
  5. <view class="title"><text class="required newicon newicon-bitian"></text>故障描述:</view>
  6. <uni-easyinput class="value" type="textarea" v-model="dataInfo.description" placeholder="请输入故障描述" :class="{formRed: isSubmit && !dataInfo.description.trim()}" />
  7. </view>
  8. <!-- <view class="candidate">
  9. <view class="candidate-item" v-for="item in candidateData" :key="item" @click="itemCandidate(item)">{{item.name}}</view>
  10. </view> -->
  11. <view class="form_item" v-if="cmdbRepair && cmdbRepair.valueconfig==1">
  12. <view class="title select">关联资产:</view>
  13. <input class="item-input" disabled placeholder="请扫描资产卡二维码" v-model="dataInfo.property"/>
  14. <text class="newicon newicon-saoma icon" @click="scanCodes"></text>
  15. </view>
  16. <view class="form_item">
  17. <view class="title">照片:</view>
  18. <view class="value">
  19. <uni-file-picker ref="handlerImgRef" v-model="dataInfo.handlerImgList"
  20. limit="4" @success="handlerImgSuccess" file-mediatype="image" mode="grid"
  21. @fail="handlerImgFail" @select="handlerImgSelect" @delete="handlerImgDelete">
  22. </uni-file-picker>
  23. <view class="imgTips">(支持JPG/PNG格式图片,单张大小10M以内)</view>
  24. </view>
  25. </view>
  26. <view class="form_item">
  27. <view class="title">录音:</view>
  28. <view class="chunk" v-if="!dataInfo.localId" @touchstart.stop="examineRecord($event)">点击录音</view>
  29. <view class="chunk-2" v-if="dataInfo.localId">
  30. <view class="chunk-2-2" @click="playAudio">
  31. <view>播放录音</view>
  32. <image v-if="isPlayOut==1" class="chunk-img" src="../../static/img/audio_play.gif" mode=""></image>
  33. </view>
  34. <icon class="chunk-icon" type="clear" size="22" @click="clearRec"/>
  35. </view>
  36. </view>
  37. </view>
  38. <view class="foot_common_btns">
  39. <button @click="goBackOrToList" type="default" class="cancelButton btn">返回</button>
  40. <button @click="submit" type="default" class="primaryButton btn">下一步</button>
  41. </view>
  42. <view class="mask-class" v-if="isrecordType">
  43. <view class="mask-box">
  44. <image class="mask-img" src="../../static/img/audio_play.gif" mode=""></image>
  45. </view>
  46. <view class="mask-bottom">
  47. <view class="mask-bottom-txt" @click.stop="recStop($event)">结束录音</view>
  48. </view>
  49. </view>
  50. </view>
  51. </template>
  52. <script setup>
  53. import { SM } from "@/http/http.js"
  54. import { ref, reactive, computed } from 'vue'
  55. import NumberModal from '@/components/NumberModal.vue';
  56. import { onLoad } from '@dcloudio/uni-app'
  57. import { generateNumberArray } from '@/utils/index.js'
  58. import { api_group, api_repairScanCode, api_incidentDetail, api_getSolution, api_user, api_incidentTask, api_branch, api_dutyDepartment, api_getDictionary, api_querySummaryDoc, api_addSummaryDoc } from "@/http/api.js"
  59. import { defaultColor } from '@/static/js/theme.js'
  60. import { useSetTitle } from '@/share/useSetTitle.js'
  61. import { useMakePhoneCall } from '@/share/useMakePhoneCall.js'
  62. import { useUploadFile } from '@/share/useUploadFile.js'
  63. import { useGoBack } from '@/share/useGoBack.js'
  64. import { useLoginUserStore } from '@/stores/loginUser'
  65. import { useHandlerStore } from '@/stores/handler'
  66. import { rapidRepNextStore } from '@/stores/rapidRepNext'
  67. import { post } from "@/http/http.js"
  68. import wx from 'weixin-jsapi'
  69. // import Recorder from 'recorder-core';
  70. // import 'recorder-core/src/engine/mp3';
  71. // import 'recorder-core/src/engine/mp3-engine';
  72. // import 'recorder-core/src/engine/wav';
  73. // import 'recorder-core/src/extensions/waveview';
  74. useSetTitle();
  75. const rapidNextStore = rapidRepNextStore();
  76. const loginUserStore = useLoginUserStore();
  77. const handlerStore = useHandlerStore();
  78. const { makePhoneCall } = useMakePhoneCall();
  79. const { uploadFile } = useUploadFile();
  80. const { goBack } = useGoBack();
  81. let rec = null
  82. let wave = null
  83. // 主题颜色
  84. const primaryColor = ref(defaultColor)
  85. // 数据
  86. const dataInfo = reactive({
  87. tabs: [
  88. // {id: 5, name: '故障处理', value: 'doing', num: ''},
  89. // {id: 6, name: '延期处理', value: 'overtime', num: ''},
  90. ],
  91. tabActiveValue: 0,//当前选择的tab
  92. incidentId: undefined,//事件ID
  93. incidentData: {},//事件对象
  94. description: '',//故障描述
  95. property:'', //资产
  96. assetId:null,//资产id
  97. handlerImgList: [],//处理图片列表
  98. localId:'' ,//录音本地id
  99. serverId:'',//录音服务器id
  100. })
  101. // 故障处理用是否提供备用机
  102. const newProvideBackupMachine = ref(0)
  103. // 知识库id
  104. const solutionId = ref(null)
  105. // 是否提交
  106. const isSubmit = ref(false)
  107. // 处理图片
  108. const handlerImgRef = ref(null)
  109. const ifShow = ref(false)
  110. const listStyles = ref({
  111. // 是否显示边框
  112. border: true,
  113. // 是否显示分隔线
  114. dividline: true,
  115. // 线条样式
  116. borderStyle: {
  117. width:1,
  118. color:'blue',
  119. radius:2
  120. }
  121. })
  122. const candidateData = ref([
  123. {name:'马桶肃杀'},
  124. {name:'马桶肃杀'},
  125. {name:'马桶肃杀'},
  126. {name:'马桶肃杀'},
  127. {name:'马桶肃杀'},
  128. {name:'马桶肃杀'},
  129. {name:'马桶肃杀'},
  130. {name:'马桶肃杀'},
  131. {name:'马桶肃杀'},
  132. ])
  133. const cmdbRepair = ref(null)
  134. const recwave = ref(null);
  135. // 是否播放完毕
  136. const isPlayOut = ref(null);
  137. // 录音状态
  138. const isrecordType = ref(false);
  139. const longPressTimer = ref(null); // 长按定时器
  140. const touchStartTime = ref(0); // 触摸开始时间
  141. // 上一步或者返回列表
  142. function goBackOrToList(){
  143. let repairsType = uni.getStorageSync('repairsType')
  144. uni.setStorageSync('repairData','')
  145. rapidNextStore.setRapidRepNext({})
  146. if(repairsType=='subpage'){
  147. uni.navigateTo({
  148. url: `/pages/myRepair/myRepair?type=1`
  149. })
  150. }else{
  151. uni.switchTab({
  152. url: `/pages/repair/home`
  153. })
  154. }
  155. }
  156. function itemCandidate(item){
  157. dataInfo.description = item.name
  158. }
  159. // 开始录音
  160. function recOpen() {
  161. let param = {
  162. requestUrl: location.href.split('#')[0]
  163. };
  164. post("/wechat/getJsConfig", param).then(res => {
  165. if (res) {
  166. wx.config({
  167. debug: false, // 开启调试模式,调用的所有api的返回值会在客户端alert出来,若要查看传入的参数,可以在pc端打开,参数信息会通过log打出,仅在pc端时才会打印。
  168. appId: res.appId, // 必填,企业号的唯一标识,此处填写企业号corpid
  169. timestamp: res.timestamp, // 必填,生成签名的时间戳
  170. nonceStr: res.nonceStr, // 必填,生成签名的随机串
  171. signature: res.signature, // 必填,签名,见附录1
  172. jsApiList: res.jsApiList // 必填,需要使用的JS接口列表,所有JS接口列表见附录2
  173. });
  174. wx.ready(function() {
  175. // 开始录音
  176. wx.startRecord({
  177. success: function(res) {
  178. isrecordType.value = true
  179. },
  180. cancel: function() {
  181. alert('用户拒绝授权录音');
  182. }
  183. });
  184. // 录音录音自动停止接口
  185. wx.onVoiceRecordEnd({
  186. complete: function (res) {
  187. dataInfo.localId = res.localId;
  188. }
  189. })
  190. // 监听语音播放完毕接口
  191. wx.onVoicePlayEnd({
  192. success: function (res) {
  193. dataInfo.localId = res.localId; // 返回音频的本地ID
  194. isPlayOut.value = 2
  195. },
  196. fail:function(res){
  197. },
  198. complete: function(res) {
  199. dataInfo.localId = res.localId; // 返回音频的本地ID
  200. isPlayOut.value = 2
  201. }
  202. });
  203. });
  204. }
  205. })
  206. }
  207. // 开始录音
  208. function examineRecord(e) {
  209. // touchStartTime.value = e.timeStamp;
  210. // 设置长按定时器
  211. // longPressTimer.value = setTimeout(() => {
  212. // 长按事件处理
  213. recOpen()
  214. // }, 300);
  215. }
  216. // 结束录音
  217. function recStop(e) {
  218. // clearTimeout(longPressTimer.value);
  219. // 如果手指松开时间太短,则不是长按
  220. // const touchEndTime = e.timeStamp;
  221. // if (touchEndTime - touchStartTime.value < 1000) {
  222. // // 处理快速点击
  223. // uni.showToast({
  224. // icon: 'none',
  225. // title: '长按时间太短'
  226. // });
  227. // return
  228. // }
  229. if(isrecordType.value){
  230. wx.stopRecord({
  231. success: function (res) {
  232. dataInfo.localId = res.localId;
  233. isrecordType.value = false
  234. }
  235. });
  236. }
  237. }
  238. // 播放录音
  239. function playAudio(){
  240. wx.playVoice({
  241. localId: dataInfo.localId, // 需要播放的音频的本地ID,由stopRecord接口获得
  242. success: function (res) {
  243. isPlayOut.value = 1
  244. }
  245. })
  246. }
  247. // 删除录音
  248. function clearRec(){
  249. dataInfo.localId = null
  250. isPlayOut.value = 2
  251. }
  252. // 上传录音
  253. function uploadAudio(){
  254. wx.uploadVoice({
  255. localId: dataInfo.localId, // 需要上传的音频的本地ID,由stopRecord接口获得
  256. isShowProgressTips: 1, // 默认为1,显示进度提示
  257. success: function (res) {
  258. dataInfo.serverId = res.serverId; // 返回音频的服务器端ID
  259. setTimeout(_=>{
  260. uni.setStorageSync('repairData',JSON.stringify(dataInfo))
  261. uni.navigateTo({
  262. url: `/pages/repair/rapidRepNext`,
  263. });
  264. },100)
  265. }
  266. });
  267. }
  268. // 扫码资产码
  269. function scanCodes(){
  270. SM().then((res) => {
  271. api_repairScanCode({
  272. code:res
  273. }).then((res2) => {
  274. if (res2.state == 200) {
  275. dataInfo.property = res2.data.name
  276. dataInfo.assetId = res2.data.id
  277. } else {
  278. uni.showToast({
  279. icon: 'none',
  280. title: res2.msg || '请求数据失败!'
  281. });
  282. }
  283. });
  284. })
  285. }
  286. // 上传处理图片成功
  287. function handlerImgSuccess(e){
  288. dataInfo.handlerImgList.forEach(v => {
  289. v.url = v.path;
  290. })
  291. console.log('上传成功',dataInfo.handlerImgList);
  292. let handlerOrder$ = handlerOrder();
  293. let requestList = [handlerOrder$];
  294. dataInfo.handlerImgList.forEach(v => {
  295. let handlerOrderImg$ = handlerOrderImg(v);
  296. requestList.push(handlerOrderImg$);
  297. })
  298. Promise.all(requestList).then(resList => {
  299. uni.hideLoading();
  300. console.log(resList);
  301. if(resList[0].state == 200){
  302. uni.showToast({
  303. icon: 'none',
  304. title: '处理成功',
  305. mask: true,
  306. });
  307. }else{
  308. uni.showToast({
  309. icon: 'none',
  310. title: resList[0].msg || '请求数据失败!'
  311. });
  312. }
  313. })
  314. }
  315. // 上传处理图片失败
  316. function handlerImgFail(e){
  317. dataInfo.handlerImgList.forEach(v => {
  318. v.url = v.path;
  319. })
  320. console.log(dataInfo.handlerImgList);
  321. }
  322. // 选择上传图片
  323. function handlerImgSelect(e){
  324. console.log(6666,e.tempFiles[0].extname)
  325. // 10*1024*1024 //10M
  326. if(e.tempFiles[0].extname=='mp4' ||
  327. e.tempFiles[0].extname=='avi' ||
  328. e.tempFiles[0].extname=='mpeg' ||
  329. e.tempFiles[0].extname=='wmv' ||
  330. e.tempFiles[0].extname=='mov' ||
  331. e.tempFiles[0].extname=='3gp' ||
  332. e.tempFiles[0].extname=='flv' ||
  333. e.tempFiles[0].extname=='mkv'
  334. ){
  335. let item = dataInfo.handlerImgList.findIndex(i=>i.extname==e.tempFiles[0].extname)
  336. if(item!=-1){
  337. uni.showToast({
  338. icon: 'none',
  339. title: '只能上传一个视频文件'
  340. });
  341. dataInfo.handlerImgList = dataInfo.handlerImgList.splice(item,1);
  342. }else{
  343. dataInfo.handlerImgList = dataInfo.handlerImgList.concat(e.tempFiles);
  344. }
  345. }else{
  346. dataInfo.handlerImgList = dataInfo.handlerImgList.concat(e.tempFiles);
  347. if(e.tempFiles[0].extname=='png' ||
  348. e.tempFiles[0].extname=='jpg' ||
  349. // e.tempFiles[0].extname=='mp4' ||
  350. // e.tempFiles[0].extname=='avi' ||
  351. // e.tempFiles[0].extname=='mpeg' ||
  352. // e.tempFiles[0].extname=='wmv' ||
  353. // e.tempFiles[0].extname=='mov' ||
  354. // e.tempFiles[0].extname=='3gp' ||
  355. // e.tempFiles[0].extname=='flv' ||
  356. // e.tempFiles[0].extname=='mkv' ||
  357. e.tempFiles[0].extname=='heic' ||
  358. e.tempFiles[0].extname=='‌‌heif' ||
  359. e.tempFiles[0].extname=='‌‌‌‌proraw' ||
  360. e.tempFiles[0].extname=='gif'
  361. ){
  362. }else if('jpeg' == e.tempFiles[0].extname){
  363. }else{
  364. uni.showToast({
  365. icon: 'none',
  366. title: `不支持${e.tempFiles[0].extname}文件类型`
  367. });
  368. let item = dataInfo.handlerImgList.findIndex(i=>i.uuid==e.tempFiles[0].uuid)
  369. dataInfo.handlerImgList.splice(item,1);
  370. }
  371. }
  372. }
  373. // 删除上传图片
  374. function handlerImgDelete(e){
  375. dataInfo.handlerImgList = dataInfo.handlerImgList.filter(v => e.tempFile.uuid != v.uuid);
  376. console.log(dataInfo.handlerImgList);
  377. }
  378. // 获取事件详情
  379. function getIncidentDetail(){
  380. if(uni.getStorageSync('repairData')){
  381. let data = JSON.parse(uni.getStorageSync('repairData'))
  382. if(data){
  383. dataInfo.description = data.description
  384. dataInfo.property = data.property
  385. dataInfo.assetId = data.assetId
  386. dataInfo.handlerImgList = data.handlerImgList
  387. dataInfo.recBlob = data.recBlob
  388. }
  389. }
  390. }
  391. // 下一步
  392. function submit(){
  393. isSubmit.value = true;
  394. if(dataInfo.description==''){
  395. uni.showToast({
  396. icon: 'none',
  397. title: '请选择输入故障描述'
  398. });
  399. return;
  400. }
  401. if(dataInfo.localId){
  402. uploadAudio()
  403. }else{
  404. uni.setStorageSync('repairData',JSON.stringify(dataInfo))
  405. uni.navigateTo({
  406. url: `/pages/repair/rapidRepNext`,
  407. });
  408. }
  409. }
  410. // 处理提交事件
  411. function handlerOrder(){
  412. dataInfo.incidentData.returnBackupMachine = dataInfo.returnBackupMachine
  413. let postData = {
  414. incident: dataInfo.incidentData
  415. }
  416. postData.incident.description = dataInfo.description;
  417. if(dataInfo.assetId){
  418. postData.incident.assetId = dataInfo.assetId;
  419. }else{
  420. delete postData.incident.assetId
  421. }
  422. return api_incidentTask(dataInfo.tabActiveValue, postData);
  423. }
  424. // 处理图片
  425. function handlerOrderImg(imgObj){
  426. return uploadFile(imgObj, 'wechatRequesterIncident', dataInfo.incidentId)
  427. }
  428. onLoad((option) => {
  429. if(uni.getStorageSync('sysData')){
  430. let data = JSON.parse(uni.getStorageSync('sysData'))
  431. cmdbRepair.value = data.find(i=>i.keyconfig=='cmdbRepair')
  432. console.log(6666666, cmdbRepair.value)
  433. }
  434. if(option){
  435. if(option.property && option.assetId){
  436. dataInfo.property = option.property
  437. dataInfo.assetId = option.assetId
  438. }
  439. }
  440. getIncidentDetail();
  441. })
  442. </script>
  443. <style lang="scss" scoped>
  444. .mask-class{
  445. position: fixed;
  446. width: 100%;
  447. height: 100%;
  448. top: 0;
  449. left: 0;
  450. background: rgba(0,0,0,0.3);
  451. display: flex;
  452. justify-content: center;
  453. align-items: center;
  454. .mask-box{
  455. height: 160rpx;
  456. padding: 0 25%;
  457. background: #95EC6A;
  458. border-radius: 25rpx;
  459. display: flex;
  460. align-items: center;
  461. .mask-img{
  462. width: 100rpx;
  463. height: 100rpx;
  464. position: relative;
  465. background-color: transparent;
  466. mix-blend-mode: multiply;
  467. }
  468. }
  469. .mask-bottom{
  470. position: absolute;
  471. bottom: 0;
  472. width: 100%;
  473. height: 300rpx;
  474. color: #A5A5A5;
  475. background: #eee;
  476. text-align: center;
  477. border-top-left-radius: 30rpx;
  478. border-top-right-radius: 30rpx;
  479. .mask-bottom-txt{
  480. margin-top: 50rpx;
  481. font-weight: 500;
  482. }
  483. }
  484. }
  485. .handler{
  486. height: 100%;
  487. display: flex;
  488. flex-direction: column;
  489. justify-content: space-between;
  490. padding: 0 30rpx;
  491. .head{
  492. height: 88rpx;
  493. display: flex;
  494. position: fixed;
  495. z-index: 99;
  496. width: 100%;
  497. background-color: #fff;
  498. font-size: 30rpx;
  499. .tab{
  500. flex: 1;
  501. display: flex;
  502. justify-content: center;
  503. align-items: center;
  504. border-bottom: 4rpx solid transparent;
  505. &.active{
  506. color: $uni-primary;
  507. border-color: $uni-primary;
  508. }
  509. }
  510. }
  511. .body{
  512. box-sizing: border-box;
  513. flex: 1;
  514. min-height: 0;
  515. &.bg{
  516. background-color: #F7F7F7;
  517. }
  518. .summaryItem{
  519. &:first-of-type{
  520. .summaryItem_head{
  521. border-bottom: 1rpx solid #DDDDDD;
  522. }
  523. }
  524. .summary_total{
  525. padding: 20rpx 0;
  526. display: flex;
  527. justify-content: center;
  528. align-items: center;
  529. }
  530. .summaryItem_head{
  531. padding: 24rpx;
  532. font-size: 26rpx;
  533. color: #3A3A3A;
  534. }
  535. .summaryItem_body{
  536. font-size: 30rpx;
  537. background-color: #fff;
  538. .summaryItem_bodyItem{
  539. padding: 24rpx;
  540. border-bottom: 1rpx solid #DDDDDD;
  541. .summaryItem_bodyItem_top{
  542. display: flex;
  543. justify-content: space-between;
  544. align-items: center;
  545. .value{
  546. padding-left: 48rpx;
  547. flex-shrink: 0;
  548. }
  549. }
  550. .summaryItem_bodyItem_bottom{
  551. margin-top: 24rpx;
  552. display: flex;
  553. justify-content: space-between;
  554. align-items: center;
  555. .name{
  556. text-align: right;
  557. flex: 1;
  558. }
  559. .value{
  560. width: 240rpx;
  561. text-align: right;
  562. padding-left: 48rpx;
  563. flex-shrink: 0;
  564. }
  565. }
  566. }
  567. }
  568. .summaryItem_foot{
  569. font-size: 30rpx;
  570. background-color: #fff;
  571. &.total{
  572. margin-top: 24rpx;
  573. }
  574. .summaryItem_foot_total{
  575. padding: 24rpx 0;
  576. display: flex;
  577. justify-content: center;
  578. align-items: center;
  579. }
  580. .summaryItem_foot_add{
  581. border-top: 1rpx solid #DDDDDD;
  582. padding: 24rpx 0;
  583. display: flex;
  584. justify-content: center;
  585. align-items: center;
  586. .newicon-icon-test{
  587. font-size: 30rpx;
  588. font-weight: bold;
  589. }
  590. }
  591. }
  592. }
  593. .form_item_column{
  594. padding-top: 24rpx;
  595. min-height: 86rpx;
  596. .form_item{
  597. padding-top: 0;
  598. min-height: auto;
  599. }
  600. }
  601. .candidate{
  602. display: flex;
  603. flex-wrap: wrap;
  604. .candidate-item{
  605. padding: 6rpx 15rpx;
  606. font-size: 26rpx;
  607. color: #949494;
  608. background: #E9E9E9;
  609. border-radius: 50rpx;
  610. margin-right: 20rpx;
  611. margin-top: 15rpx;
  612. }
  613. }
  614. .form_item{
  615. display: flex;
  616. align-items: center;
  617. padding-top: 24rpx;
  618. min-height: 86rpx;
  619. position: relative;
  620. .chunk{
  621. width: 100%;
  622. height: 70rpx;
  623. line-height: 70rpx;
  624. text-align: center;
  625. background: #F7F8FA;
  626. box-shadow: 0px 3px 6px 1px rgba(0,0,0,0.16);
  627. border-radius: 10rpx;
  628. }
  629. .chunk-2{
  630. width: 100%;
  631. height: 70rpx;
  632. display: flex;
  633. align-items: center;
  634. .chunk-2-2{
  635. flex: 1;
  636. height: 70rpx;
  637. display: flex;
  638. align-items: center;
  639. justify-content: center;
  640. background: #F3FAF7;
  641. .chunk-img{
  642. width: 80rpx;
  643. height: 80rpx;
  644. position: relative;
  645. background-color: transparent;
  646. mix-blend-mode: multiply; /* 根据需要选择合适的混合模式 */
  647. }
  648. }
  649. .chunk-icon{
  650. margin-left: 20rpx;
  651. }
  652. }
  653. &.column{
  654. height: auto;
  655. flex-direction: column;
  656. align-items: flex-start;
  657. .import-rep{
  658. padding: 5rpx 10rpx;
  659. border-radius: 50rpx;
  660. background: #d1fcd5;
  661. color: #49b856;
  662. font-size: 24rpx;
  663. }
  664. .title{
  665. margin-right: 0;
  666. }
  667. .title-width{
  668. width: 100%;
  669. }
  670. .title-fl-sb{
  671. display: flex;
  672. justify-content: space-between;
  673. width: 100%;
  674. }
  675. .value{
  676. margin-top: 10rpx;
  677. // padding-left: 20rpx;
  678. box-sizing: border-box;
  679. }
  680. .tips{
  681. padding: 24rpx;
  682. text-align: center;
  683. font-size: 22rpx;
  684. color: #909399;
  685. width: 100%;
  686. box-sizing: border-box;
  687. }
  688. }
  689. .title{
  690. font-size: 26rpx;
  691. display: flex;
  692. align-items: center;
  693. margin-right: 12rpx;
  694. flex-shrink: 0;
  695. &.select{
  696. width: calc(5em + 20rpx);
  697. }
  698. }
  699. .value{
  700. width: 100%;
  701. &.category{
  702. width: 100%;
  703. display: flex;
  704. justify-content: space-between;
  705. align-items: center;
  706. .categoryName{
  707. font-size: 26rpx;
  708. color: #555;
  709. flex: 1;
  710. }
  711. .newicon-weibiaoti2010104{
  712. color: $uni-primary;
  713. margin-left: 24rpx;
  714. }
  715. }
  716. .imgTips{
  717. color: #909399;
  718. font-size: 22rpx;
  719. margin-top: 10rpx;
  720. }
  721. }
  722. .item-input{
  723. border: 1px solid #DBDBDB;
  724. height: 70rpx;
  725. line-height: 70rpx;
  726. padding: 0 10rpx;
  727. border-radius: 4rpx;
  728. width: 100%;
  729. font-size: 14px;
  730. }
  731. .icon{
  732. position: absolute;
  733. right: 20rpx;
  734. color: #49b856;
  735. }
  736. .synergeticNames{
  737. font-size: 26rpx;
  738. margin-right: 24rpx;
  739. }
  740. .synergeticAdd{
  741. flex-shrink: 0;
  742. }
  743. }
  744. }
  745. }
  746. </style>