dislogSet.vue 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392
  1. <template>
  2. <div>
  3. <BaseDialog
  4. width="1400px"
  5. :isShow.sync="isShow"
  6. :title="title"
  7. @close="close"
  8. @submit="submitForm"
  9. >
  10. <div class="bop-tip">
  11. <div><i class="el-icon-warning-outline"></i>说明</div>
  12. <div>
  13. 如果提成方式是按阶梯价计算,则需设置阶梯价格区间(最高价无穷大,则填写
  14. “ * ” )。如果无需按阶梯价计算提成,留空即可。
  15. </div>
  16. </div>
  17. <el-form
  18. inline
  19. hide-required-asterisk
  20. :model="form"
  21. :rules="rules"
  22. ref="form"
  23. >
  24. <div>
  25. <el-form-item prop="tpName" label="模板名称:" label-width="100px">
  26. <el-input
  27. placeholder="请输入模板名称"
  28. v-model="form.tpName"
  29. ></el-input>
  30. </el-form-item>
  31. <el-form-item prop="tenantId" label="">
  32. <el-select v-model="form.tenantId" placeholder="请选择关联机构">
  33. <el-option
  34. v-for="item in companyList"
  35. :key="item.tenantId"
  36. :label="item.tenantName"
  37. :value="item.tenantId"
  38. ></el-option>
  39. </el-select>
  40. </el-form-item>
  41. <el-form-item label="">
  42. <el-checkbox
  43. :true-label="1"
  44. :false-label="0"
  45. v-model="form.defaultStatus"
  46. >默认</el-checkbox
  47. >
  48. </el-form-item>
  49. </div>
  50. <div v-for="(item, index) in form.itemList" :key="index">
  51. <el-form-item
  52. :prop="'itemList.' + index + '.itemName'"
  53. :label="index == 0 ? '成本设置:' : ' '"
  54. :rules="rules['itemName']"
  55. label-width="100px"
  56. >
  57. <el-input
  58. placeholder="请输入成本项名称"
  59. v-model="item.itemName"
  60. ></el-input>
  61. </el-form-item>
  62. <el-form-item
  63. label=""
  64. :prop="'itemList.' + index + '.itemCategory'"
  65. :rules="rules['itemCategory']"
  66. >
  67. <el-select v-model="item.itemCategory" placeholder="请选择成本类型">
  68. <el-option label="业务类型" :value="1"></el-option>
  69. <el-option label="非分成" :value="2"></el-option>
  70. </el-select>
  71. </el-form-item>
  72. <template v-if="item.itemCategory == 1">
  73. <el-form-item
  74. label=""
  75. :prop="'itemList.' + index + '.educationTypeId'"
  76. :rules="rules['educationTypeId']"
  77. >
  78. <el-select
  79. @change="changeEdu(item)"
  80. v-model="item.educationTypeId"
  81. placeholder="请选择教育类型"
  82. >
  83. <el-option
  84. v-for="item in eduList"
  85. :key="item.id"
  86. :label="
  87. item.schemeName +
  88. (item.schemeName ? '-' : '') +
  89. item.educationName
  90. "
  91. :value="item.id"
  92. >
  93. </el-option>
  94. </el-select>
  95. </el-form-item>
  96. <el-form-item
  97. label=""
  98. :prop="'itemList.' + index + '.businessId'"
  99. :rules="rules['businessId']"
  100. >
  101. <el-select v-model="item.businessId" placeholder="请选择业务层次">
  102. <el-option
  103. v-for="level in backbusinessList(item.educationTypeId)"
  104. :key="level.businessId"
  105. :label="level.aliasName"
  106. :value="level.businessId"
  107. @click.native="changeBus(item, level.projectId)"
  108. >
  109. </el-option>
  110. </el-select>
  111. </el-form-item>
  112. </template>
  113. <el-form-item
  114. label=""
  115. :prop="'itemList.' + index + '.itemType'"
  116. :rules="rules['itemType']"
  117. >
  118. <el-select v-model="item.itemType" placeholder="请选择成本类型">
  119. <el-option label="百分比成本" :value="1"></el-option>
  120. <el-option label="固定成本" :value="2"></el-option>
  121. </el-select>
  122. </el-form-item>
  123. <el-form-item
  124. label=""
  125. :prop="'itemList.' + index + '.email2'"
  126. :rules="rules['email2']"
  127. class="range"
  128. >
  129. <el-col :span="11">
  130. <el-input placeholder="最低价" v-model="item.minValue"></el-input>
  131. </el-col>
  132. <el-col class="line" :span="2" style="magrin: 10px">-</el-col>
  133. <el-col :span="11">
  134. <el-input placeholder="最高价" v-model="item.maxValue"></el-input>
  135. </el-col>
  136. </el-form-item>
  137. <el-form-item
  138. class="ddd"
  139. v-if="item.itemType == 1"
  140. label-width="0"
  141. :prop="'itemList.' + index + '.typeValue'"
  142. label=" "
  143. :rules="rules['typeValue']"
  144. >
  145. <el-input placeholder="百分比成本" v-model="item.typeValue">
  146. <template slot="append">%</template>
  147. </el-input>
  148. </el-form-item>
  149. <el-form-item
  150. v-if="item.itemType == 2"
  151. class="ddd"
  152. label-width="0"
  153. :prop="'itemList.' + index + '.typeValue'"
  154. label=" "
  155. :rules="rules['typeValue']"
  156. >
  157. <el-input placeholder="固定成本" v-model="item.typeValue">
  158. <template slot="append">元</template>
  159. </el-input>
  160. </el-form-item>
  161. <el-form-item label-width="0" label=" ">
  162. <div class="btns">
  163. <!-- <el-button type="text">复制</el-button> -->
  164. <i @click="add(index, item)" class="el-icon-connection"></i>
  165. <i @click="add(index)" class="el-icon-circle-plus-outline"></i>
  166. <i
  167. v-if="index != 0"
  168. @click="del(index)"
  169. class="el-icon-remove-outline"
  170. ></i>
  171. </div>
  172. </el-form-item>
  173. </div>
  174. </el-form>
  175. </BaseDialog>
  176. </div>
  177. </template>
  178. <script>
  179. import { eduList, addCost, costDetail, editCost } from "@/api/financed/index";
  180. export default {
  181. name: "DislogSet",
  182. props: {
  183. dialogVisible: {
  184. type: Boolean,
  185. default: false,
  186. },
  187. // 0 新增 1修改 2复制
  188. type: {
  189. type: [String, Number],
  190. default: 0,
  191. },
  192. tpId: {
  193. type: [String, Number],
  194. default: "",
  195. },
  196. },
  197. data() {
  198. return {
  199. form: {},
  200. rules: {
  201. tpName: [
  202. { required: true, message: "请输入模板名称", trigger: "blur" },
  203. ],
  204. tenantId: [
  205. { required: true, message: "请选择关联机构", trigger: "change" },
  206. ],
  207. itemName: [
  208. { required: true, message: "请输入成本项名称", trigger: "blur" },
  209. ],
  210. businessId: [
  211. { required: true, message: "请选择业务层次", trigger: "blur" },
  212. ],
  213. educationTypeId: [
  214. { required: true, message: "请选择教育类型", trigger: "change" },
  215. ],
  216. itemCategory: [
  217. { required: true, message: "请选择业务类型", trigger: "change" },
  218. ],
  219. itemType: [
  220. { required: true, message: "请选择成本类型", trigger: "change" },
  221. ],
  222. email3: [
  223. { required: true, message: "请输入固定成本", trigger: "blur" },
  224. ],
  225. typeValue: [
  226. { required: true, message: "请输入百分比成本", trigger: "blur" },
  227. ],
  228. },
  229. companyList: [],
  230. eduList: [],
  231. };
  232. },
  233. methods: {
  234. init() {
  235. this.resetForm();
  236. this.tpId && this.getCostDetail();
  237. this.getCompanyList();
  238. this.getEduList();
  239. },
  240. getCostDetail() {
  241. costDetail(this.tpId).then((res) => {
  242. if (this.type == 2) delete res.data["tpId"];
  243. Object.keys(this.form).map((key) => {
  244. this.form[key] = res.data[key];
  245. });
  246. });
  247. },
  248. getEduList() {
  249. if (this.eduList.length) return;
  250. eduList({}).then((res) => {
  251. this.eduList = res.rows;
  252. });
  253. },
  254. backbusinessList(eduId) {
  255. if (!eduId || !this.eduList.length) return [];
  256. let data = this.eduList.find((e) => e.id == eduId);
  257. return data.businessList || [];
  258. },
  259. getCompanyList() {
  260. if (this.companyList.length) return;
  261. this.$api.systemtenantlist(this.formData).then((res) => {
  262. this.companyList = res.rows;
  263. });
  264. },
  265. changeEdu(data) {
  266. data.businessId = undefined;
  267. data.projectId = undefined;
  268. },
  269. changeBus(data, projectId) {
  270. data.projectId = projectId;
  271. },
  272. add(index, data) {
  273. data = data || {
  274. email: undefined,
  275. businessId: undefined,
  276. email2: undefined,
  277. email3: undefined,
  278. email4: undefined,
  279. };
  280. this.form.itemList.splice(index + 1, 0, data);
  281. },
  282. del(index) {
  283. this.form.itemList.splice(index, 1);
  284. },
  285. close() {
  286. this.$refs["form"].resetFields();
  287. },
  288. changeEduType() {},
  289. submit() {},
  290. resetForm() {
  291. this.form = {
  292. itemList: [
  293. {
  294. projectId: undefined,
  295. itemName: 456,
  296. itemCategory: "1",
  297. businessId: undefined,
  298. educationTypeId: 21,
  299. itemType: "1",
  300. typeValue: undefined,
  301. minValue: undefined,
  302. maxValue: undefined,
  303. },
  304. ],
  305. tpId: undefined,
  306. tpName: 123,
  307. defaultStatus: 0,
  308. tenantId: "1",
  309. };
  310. },
  311. cb() {
  312. this.$message.success(this.title + "成功");
  313. this.isShow = false;
  314. this.$emit("search");
  315. },
  316. submitForm() {
  317. this.$refs["form"].validate((valid) => {
  318. if (valid) {
  319. if (this.type !== 1) {
  320. addCost(this.form).then(this.cb);
  321. } else {
  322. editCost(this.form).then(this.cb);
  323. }
  324. } else {
  325. return false;
  326. }
  327. });
  328. },
  329. },
  330. computed: {
  331. isShow: {
  332. get() {
  333. if (this.dialogVisible) {
  334. this.init();
  335. }
  336. return this.dialogVisible;
  337. },
  338. set(val) {
  339. this.$emit("update:dialogVisible", false);
  340. },
  341. },
  342. title() {
  343. return ["新增", "修改", "复制"][this.type];
  344. },
  345. },
  346. };
  347. </script>
  348. <style lang="scss" scoped>
  349. /deep/.el-input--medium .el-input__inner {
  350. width: 144px;
  351. }
  352. /deep/ .range {
  353. .el-form-item__content {
  354. width: 170px;
  355. }
  356. .el-input--medium .el-input__inner {
  357. width: 76px;
  358. }
  359. }
  360. /deep/ .ddd {
  361. margin-left: -10px;
  362. .el-input--medium .el-input__inner {
  363. width: 105px;
  364. }
  365. }
  366. .line {
  367. text-align: center;
  368. }
  369. .btns {
  370. height: 36px;
  371. display: flex;
  372. align-items: center;
  373. i {
  374. font-size: 24px;
  375. cursor: pointer;
  376. margin-left: 5px;
  377. }
  378. }
  379. .bop-tip {
  380. background: #fff6f7;
  381. margin: 0 0 20px 10px;
  382. padding: 8px 10px;
  383. i {
  384. font-size: 16px;
  385. color: #e6a23c;
  386. }
  387. }
  388. </style>