自主项目,食堂系统,前端uniapp
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

257 lines
5.8 KiB

  1. <template>
  2. <view>
  3. <view class="box">
  4. <view class="title">报价清单</view>
  5. <view class="lf-font-24 lf-color-gray lf-m-t-5">请在以下物资信息表内填写报价</view>
  6. </view>
  7. <!-- 修饰条 -->
  8. <self-line></self-line>
  9. <view class="box lf-row-between relation">
  10. <view>
  11. <text class="title">关联食堂</text>
  12. <text class="lf-font-24 lf-color-555 lf-m-l-10">(多选)</text>
  13. </view>
  14. <view class="lf-font-24 lf-color-gray lf-text-right lf-row-center" style="width: 370rpx; justify-content: flex-end;" @click="switchRelation">
  15. <view class="lf-line-1">{{ selectName }}</view>
  16. <u-icon name="arrow-right" class="lf-text-vertical"></u-icon>
  17. </view>
  18. <view class="mask" :style="{top: node_top +'px'}" v-if="is_show" @click="is_show = false">
  19. <view class="list">
  20. <view class="lf-row-between item" v-for="(item, index) in relation_list" :key="index" @click.stop="selectItem(index)">
  21. <view>{{ item.name }}</view>
  22. <u-icon name="checkmark-circle" color="#1833F2" size="40" v-if="item.checked"></u-icon>
  23. </view>
  24. </view>
  25. </view>
  26. </view>
  27. <self-line></self-line>
  28. <!-- 物料table -->
  29. <view class="box">
  30. <wyb-table :first-line-fixed="true" contentBgColor="#eef6fe" :headers="headers" :contents="contents" @onInputChange="onInputChange" width="100%" height="800rpx"></wyb-table>
  31. </view>
  32. <!-- 操作按钮 -->
  33. <view class="fixed-bottom">
  34. <button class="btn btn1">临时保存</button>
  35. <button class="btn btn2">直接报价</button>
  36. </view>
  37. </view>
  38. </template>
  39. <script>
  40. import wybTable from '@/components/wyb-table/wyb-table';
  41. let app = getApp();
  42. export default {
  43. components: {
  44. wybTable
  45. },
  46. data(){
  47. return {
  48. headers: [{
  49. label: '菜品名称',
  50. key: 'name'
  51. },{
  52. label: '规格',
  53. key: 'spec'
  54. },{
  55. label: '税前价',
  56. key: 'preTax'
  57. },{
  58. label: '税后价',
  59. key: 'afterTax'
  60. }],
  61. contents: [{
  62. name: '黄瓜',
  63. spec: '一打/500g',
  64. preTax: {edit: true, value: ''},
  65. afterTax: {edit: true, value: ''}
  66. },{
  67. name: '黄豆',
  68. spec: '5kg',
  69. preTax: {edit: true, value: ''},
  70. afterTax: {edit: true, value: ''}
  71. },{
  72. name: '黄豆',
  73. spec: '5kg',
  74. preTax: {edit: true, value: ''},
  75. afterTax: {edit: true, value: ''}
  76. },{
  77. name: '黄豆',
  78. spec: '5kg',
  79. preTax: {edit: true, value: ''},
  80. afterTax: {edit: true, value: ''}
  81. },{
  82. name: '黄豆',
  83. spec: '5kg',
  84. preTax: {edit: true, value: ''},
  85. afterTax: {edit: true, value: ''}
  86. },{
  87. name: '黄豆',
  88. spec: '5kg',
  89. preTax: {edit: true, value: ''},
  90. afterTax: {edit: true, value: ''}
  91. },{
  92. name: '黄豆',
  93. spec: '5kg',
  94. preTax: {edit: true, value: ''},
  95. afterTax: {edit: true, value: ''}
  96. },{
  97. name: '黄豆',
  98. spec: '5kg',
  99. preTax: {edit: true, value: ''},
  100. afterTax: {edit: true, value: ''}
  101. },{
  102. name: '黄豆',
  103. spec: '5kg',
  104. preTax: {edit: true, value: ''},
  105. afterTax: {edit: true, value: ''}
  106. },{
  107. name: '黄豆',
  108. spec: '5kg',
  109. preTax: {edit: true, value: ''},
  110. afterTax: {edit: true, value: ''}
  111. },{
  112. name: '黄豆',
  113. spec: '5kg',
  114. preTax: {edit: true, value: ''},
  115. afterTax: {edit: true, value: ''}
  116. },{
  117. name: '黄豆',
  118. spec: '5kg',
  119. preTax: {edit: true, value: ''},
  120. afterTax: {edit: true, value: ''}
  121. }],
  122. is_show: false,
  123. relation_list: [{
  124. name: '美妙食堂',
  125. checked: false
  126. },{
  127. name: '合适烧烤',
  128. checked: false
  129. }],
  130. node_top: 0
  131. }
  132. },
  133. computed: {
  134. selectName(){
  135. let arr = [];
  136. this.relation_list.map(item => {
  137. if(item.checked){
  138. arr.push(item.name);
  139. }
  140. });
  141. let str = '请选择...';
  142. if(arr.length > 0){
  143. str = arr.join(',');
  144. }
  145. return str;
  146. }
  147. },
  148. onLoad(){
  149. },
  150. onReady(){
  151. let that = this;
  152. let info = uni.createSelectorQuery().select(".relation");
  153.       info.boundingClientRect(function(data) {
  154. let num = app.globalData.customBarH;
  155. num += data.height;
  156. num += data.top;
  157. that.node_top = num;
  158.    }).exec()
  159. },
  160. methods: {
  161. onInputChange(event){
  162. console.log("检测到table input被更改", event);
  163. this.contents[event.contentIndex][event.key].value = event.detailValue;
  164. },
  165. switchRelation(){
  166. this.is_show = !this.is_show;
  167. },
  168. selectItem(index){
  169. this.relation_list[index].checked = !this.relation_list[index].checked;
  170. }
  171. }
  172. }
  173. </script>
  174. <style>
  175. page{
  176. overflow: hidden;
  177. }
  178. </style>
  179. <style lang="scss" scoped="scoped">
  180. .lf-m-t-5{
  181. margin-top: 5rpx;
  182. }
  183. .box{
  184. padding: 30rpx 32rpx;
  185. width: 100%;
  186. height: max-content;
  187. box-sizing: border-box;
  188. }
  189. .title{
  190. color: #222222;
  191. font-size: 28rpx;
  192. font-weight: bold;
  193. }
  194. .fixed-bottom{
  195. position: fixed;
  196. bottom: 0rpx;
  197. left: 0rpx;
  198. z-index: 99;
  199. width: 750rpx;
  200. height: 98rpx;
  201. display: flex;
  202. justify-content: center;
  203. align-items: center;
  204. border-top: 1rpx solid #E5E5E5;
  205. .btn{
  206. width: 320rpx;
  207. height: 82rpx;
  208. border-radius: 41rpx;
  209. margin: 0;
  210. padding: 0;
  211. font-size: 32rpx;
  212. display: flex;
  213. justify-content: center;
  214. align-items: center;
  215. }
  216. .btn1{
  217. border: 2rpx solid #555555;
  218. opacity: .5;
  219. }
  220. .btn2{
  221. background: #1833F2;
  222. color: #FFFFFF;
  223. margin-left: 50rpx;
  224. }
  225. }
  226. .relation{
  227. position: relative;
  228. border-bottom: 1rpx solid #E5E5E5;
  229. }
  230. .mask{
  231. position: fixed;
  232. background-color: rgba(0,0,0,0.4);
  233. width: 100%;
  234. // top: 149px;
  235. bottom: 0;
  236. left: 0;
  237. z-index: 100;
  238. .list{
  239. min-height: max-content;
  240. max-height: 500rpx;
  241. overflow: scroll;
  242. background-color: #FFFFFF;
  243. width: 100%;
  244. .item{
  245. height: 92rpx;
  246. padding: 0 32rpx;
  247. border-bottom: 1rpx solid #E5E5E5;
  248. color: #222222;
  249. font-size: 24rpx;
  250. }
  251. }
  252. }
  253. </style>