out.vue 10 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268
  1. <template>
  2. <div id="out">
  3. <el-row>
  4. <animates>
  5. <el-col :span="24" class="container">
  6. <el-col :span="24" class="info">
  7. <data-table :fields="fields" :data="list" :opera="opera" :total="total" :size="50" :step="10" @query="search" v-if="!dialog" @see="see">
  8. <template #options="{item}">
  9. <template v-if="item.model == 'name'">
  10. <el-option v-for="(item, index) in nameList" :key="index" :value="item.name" :label="item.name"></el-option>
  11. </template>
  12. <template v-if="item.model == 'contract'">
  13. <el-option v-for="(item, index) in contractList" :key="index" :value="item.name" :label="item.name"></el-option>
  14. </template>
  15. <template v-if="item.model == 'project'">
  16. <el-option v-for="(item, index) in projectList" :key="index" :value="item.name" :label="item.name"></el-option>
  17. </template>
  18. <template v-if="item.model == 'route'">
  19. <el-option v-for="(item, index) in routeList" :key="index" :value="item.name" :label="item.name"></el-option>
  20. </template>
  21. <template v-if="item.model == 'way'">
  22. <el-option v-for="(item, index) in wayList" :key="index" :value="item.name" :label="item.name"></el-option>
  23. </template>
  24. </template>
  25. </data-table>
  26. <el-col :span="24" class="detail" v-else>
  27. <el-col :span="24" class="top">
  28. <el-button size="mini" type="primary" @click="$router.go(-1)">返回</el-button>
  29. <span>支出详情</span>
  30. </el-col>
  31. <el-col :span="24" class="head">
  32. <el-col :span="12" style="text-align:center">流水账号:xxxx</el-col>
  33. <el-col :span="12" style="text-align:left">订单号:xxxx</el-col>
  34. </el-col>
  35. <el-card class="box-card">
  36. <div slot="header" class="clearfix">
  37. <span>货物列表</span>
  38. </div>
  39. <div class="text item">
  40. <data-table :fields="detailFields" :data="detailList" :usePage="false"> </data-table>
  41. </div>
  42. <el-divider></el-divider>
  43. </el-card>
  44. <el-col :span="24" class="rate">
  45. <el-col :span="6" class="rateMoney">税前应收:{{ detailList1.cost1 }}</el-col>
  46. <el-col :span="6" class="rateMoney">税后应收:{{ detailList1.cost2 }}</el-col>
  47. <el-col :span="6" class="rateMoney">税前实收:{{ detailList1.cost3 }}</el-col>
  48. <el-col :span="6" class="rateMoney">税后应收:{{ detailList1.cost4 }}</el-col>
  49. <el-col :span="24" class="tip"
  50. ><span>关于长途运费:若是改成 他运且想根据设置的不同方式进行计算 需要重新生成订单,目前还无法处理这种情况</span></el-col
  51. >
  52. </el-col>
  53. <!-- <div style="margin-bottom: 20px; text-align:right">
  54. <el-button size="small" @click="addTab(editableTabsValue)">
  55. + 添加支出
  56. </el-button>
  57. </div> -->
  58. <el-tabs v-model="editableTabsValue" type="card" closable @tab-remove="removeTab">
  59. <el-col :span="24" class="btn">
  60. <el-button size="small" @click="addTab(index)">
  61. + 添加支出
  62. </el-button>
  63. </el-col>
  64. <el-tab-pane v-for="(item, index) in editableTabs" :key="index" :label="`支出${index + 1}`" :name="`${index}`">
  65. <el-col :span="24">
  66. <el-form ref="form" label-width="90px" :inline="true">
  67. <el-col :span="6">
  68. <el-form-item label="支出项">
  69. <el-select v-model="item.cost" placeholder="请选择支出项">
  70. <el-option v-for="(item, index) in costList" :key="index" :label="item.name" :value="item.name"></el-option>
  71. </el-select>
  72. </el-form-item>
  73. </el-col>
  74. <el-form-item label="供应商方式">
  75. <el-radio-group v-model="item.supplierway">
  76. <el-radio label="自运"></el-radio>
  77. <el-radio label="他运"></el-radio>
  78. </el-radio-group>
  79. </el-form-item>
  80. <el-form-item label="供应商">
  81. <el-select v-model="item.supplier" placeholder="请选择供应商">
  82. <el-option v-for="(item, index) in supplierList" :key="index" :label="item.name" :value="item.name"></el-option>
  83. </el-select>
  84. </el-form-item>
  85. <el-form-item label="合同">
  86. <el-select v-model="item.supplier" placeholder="请选择合同">
  87. <el-option v-for="(item, index) in contractList" :key="index" :label="item.name" :value="item.name"></el-option>
  88. </el-select>
  89. </el-form-item>
  90. <el-form-item label="税率">
  91. <el-select v-model="item.rate" placeholder="请选择合同">
  92. <el-option v-for="(item, index) in rateList" :key="index" :label="item.name" :value="item.name"></el-option>
  93. </el-select>
  94. </el-form-item>
  95. <el-form-item label="税前应付">
  96. <el-input v-model="detailList1.cost1"></el-input>
  97. </el-form-item>
  98. <el-form-item label="税后应付">
  99. <el-input v-model="detailList1.cost2"></el-input>
  100. </el-form-item>
  101. <el-form-item label="税前实付">
  102. <el-input v-model="detailList1.cost3"></el-input>
  103. </el-form-item>
  104. <el-form-item label="税前实付">
  105. <el-input v-model="detailList1.cost4"></el-input>
  106. </el-form-item>
  107. <el-form-item label="备注">
  108. <el-input type="textarea" v-model="item.desc"></el-input>
  109. </el-form-item>
  110. </el-form>
  111. </el-col>
  112. </el-tab-pane>
  113. </el-tabs>
  114. </el-col>
  115. </el-col>
  116. </el-col>
  117. </animates>
  118. </el-row>
  119. </div>
  120. </template>
  121. <script>
  122. import { mapState, createNamespacedHelpers } from 'vuex';
  123. export default {
  124. metaInfo() {
  125. return { title: this.$route.meta.title };
  126. },
  127. name: 'out',
  128. props: {},
  129. components: {},
  130. data: function() {
  131. return {
  132. dialog: true,
  133. fields: [
  134. { label: '订单号', model: 'num', filter: 'input' },
  135. { label: '客户', model: 'name', filter: 'select' },
  136. { label: '长途运费金额', model: 'money' },
  137. { label: '合同', model: 'contract', notable: 'true', filter: 'select' },
  138. { label: '项目', model: 'project', notable: 'true', filter: 'select' },
  139. { label: '线路', model: 'route', notable: 'true', filter: 'select' },
  140. { label: '付费方式', model: 'way', notable: 'true', filter: 'select' },
  141. ],
  142. list: [
  143. {
  144. id: '1',
  145. name: 'xxx有限公司',
  146. num: 'AW-YS-ZF-2018-005',
  147. money: 100,
  148. way: '银行转账',
  149. },
  150. ],
  151. total: 0,
  152. opera: [{ label: '查看', method: 'see' }],
  153. //客户列表
  154. nameList: [{ name: '客户一' }, { name: '客户二' }],
  155. //合同列表
  156. contractList: [{ name: '合同一' }, { name: '合同二' }],
  157. //项目列表
  158. projectList: [{ name: '项目一' }, { name: '项目二' }],
  159. //线路列表
  160. routeList: [{ name: '线路一' }, { name: '线路二' }],
  161. //付费方式列表
  162. wayList: [{ name: '方式一' }, { name: '方式二' }],
  163. detailFields: [
  164. { label: '货物', model: 'goods' },
  165. { label: '数量', model: 'number' },
  166. { label: '重量(t)', model: 'weight' },
  167. { label: '体积(m²)', model: 'volume' },
  168. ],
  169. detailList: [
  170. {
  171. goods: '真皮',
  172. number: '3',
  173. weight: '40',
  174. volume: '50',
  175. },
  176. ],
  177. detailList1: {
  178. cost1: '200',
  179. cost2: '300',
  180. cost3: '400',
  181. cost4: '500',
  182. },
  183. editableTabsValue: '1',
  184. editableTabs: [],
  185. tabIndex: 0,
  186. //支出项列表
  187. costList: [{ name: '罚款' }, { name: '过桥费' }, { name: '油费' }, { name: '长途运费' }],
  188. //供应商列表
  189. supplierList: [{ name: '供应商一' }, { name: '供应商二' }],
  190. //合同列表
  191. // contractList: [{ name: '合同一' }, { name: '合同二' }],
  192. //税率列表
  193. rateList: [{ name: '1' }, { name: '2' }],
  194. };
  195. },
  196. created() {},
  197. methods: {
  198. async search() {
  199. console.log('查询');
  200. },
  201. see() {
  202. console.log('查看');
  203. this.dialog = true;
  204. },
  205. addTab(index) {
  206. this.editableTabs.push({});
  207. console.log(index);
  208. // this.editableTabsValue = targetName;
  209. },
  210. removeTab(targetName) {
  211. const name1 = Number(targetName);
  212. if (name1 > -1) {
  213. this.editableTabs.splice(name1, 1);
  214. }
  215. },
  216. },
  217. computed: {
  218. ...mapState(['user']),
  219. },
  220. };
  221. </script>
  222. <style lang="less" scoped>
  223. .detail {
  224. .top {
  225. position: relative;
  226. text-align: right;
  227. span {
  228. position: absolute;
  229. top: 0px;
  230. left: 0px;
  231. }
  232. }
  233. .head {
  234. margin: 20px 0px;
  235. font-size: 16px;
  236. }
  237. }
  238. /deep/.rate {
  239. margin-top: 10px;
  240. margin-bottom: 10px;
  241. .rateMoney {
  242. border: 1px solid #ebeef5;
  243. padding: 6px 0px;
  244. height: 34px;
  245. text-align: center;
  246. font-size: 14px;
  247. color: #606266;
  248. }
  249. .tip {
  250. font-size: 13px;
  251. background-color: #fdf6ec;
  252. padding: 8px 0px;
  253. text-align: center;
  254. color: #e6a23c;
  255. }
  256. }
  257. /deep/.el-button--small,
  258. .el-button--small.is-round {
  259. color: #409eff;
  260. background: #ecf5ff;
  261. border-color: #b3d8ff;
  262. }
  263. /deep/.el-form--inline .el-form-item__content {
  264. width: 185px;
  265. }
  266. </style>